Grails 응용 프로그램을 h2에서 PostgreSQL로 전환하려고합니다. 단계 내 목표에 도달하기 위해 수행했습니다 http://jdbc.postgresql.org/download.html (JDBC4 PostgreSQL의 드라이버 버전 9.3-1100) PostgreSQL에 연결된 Grails 응용 프로그램의 이상한 동작
- 다운로드 JDBC를/lib 폴더
변경 데이터 소스에. 지금
dataSource { pooled = true driverClassName = "org.postgresql.Driver" dialect="org.hibernate.dialect.PostgreSQLDialect" username = "postgres" password = "admin" } hibernate { cache.use_second_level_cache = true cache.use_query_cache = false cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' } // environment specific settings environments { development { dataSource { dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', '' //url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000" url = "jdbc:postgresql://localhost:5432/admin_panel" } } test { dataSource { dbCreate = "update" url = "jdbc:postgresql://localhost:5432/admin_panel" } } production { dataSource { dbCreate = "update" url = "jdbc:postgresql://localhost:5432/admin_panel" pooled = true properties { maxActive = -1 minEvictableIdleTimeMillis=1800000 timeBetweenEvictionRunsMillis=1800000 numTestsPerEvictionRun=3 testOnBorrow=true testWhileIdle=true testOnReturn=true validationQuery="SELECT 1" } } } }
그리고 게임 시작 : 지금은 좋아 보인다. GGTS에 'run-app'를 입력하면 오류가 발생합니다. 부트 스트랩을 사용하여 생성하려고하는 객체는 유효성 검사 때문에 초기화 될 수 없습니다 : Error initializing the application: Validation Error(s) occurred during save()
. 메시지가 이전에 생성 된 개체에 대한 참조가 null이라고 말하기 때문에 실제로 이상합니다. Field error in object 'adminpanel.component.Text' on field 'subpage': rejected value [null];
. "subpage"가 null 일 가능성이 없어야합니다. 그래서 pgAdmin III로 이동하여이 레코드가 만들어지고 거기에 테이블이 전혀 생성되지 않았 음을 확인합니다.
에버리지는 응용 프로그램이 H2에 연결되어 있으면 작동하지만 포스트그레스로 전환 할 때 놀라지 않을 것입니다. 또한 BootStrap에서 모든 것을 제거하면 응용 프로그램이 시작되고 객체를 정상적으로 만들 수 있지만 여전히 pgAdmin으로 볼 수는 없습니다. 내가 무엇을 확인할 수 있는지 또는 왜 PostgreSQL을 사용할 때 GORM이 내 앱에서 테이블을 만들지 않는지에 대한 조언이 있습니까?
미리 감사드립니다.
편집 :
내가 몇 가지 테스트를 더 한 후 문제의 원인을 발견은 ... PostgreSQL은 모든 테이블에서 'ID'컬럼에 대한 이상한 값을 제공합니다. 그래서, 당신은 아마 눈치
table1
id:
1
2
3
-
7
8
9
table2
id:
4
5
6
-
10
11
, 값이 다른 테이블에있는 모든 행에 대해 상호 교환 주어진다 : 내가 H2를 사용하던 때, 나는 PostgreSQL을 내가 이런 식으로 뭔가를 가지고, 모든 테이블에 1..x의 값을했다 나는 예를 들어 가질 수 없다. ID가 1 인 오브젝트 table1과 ID가 1 인 오브젝트 table2. 왜 그런지 알고 있습니까?
이것은 어떤 대답 도움이 될
참조 :
당신은 같은 도메인에 대해 서로 다른 시퀀스를 사용하는 도메인을 구성 할 수 있습니다 귀하의 질문 : http://stackoverflow.com/questions/7580807/hibernate-postgres ql-with-grails – zoran119
PostgreSQL과 관련된 것이나 문제는 아닙니다. 각 객체에는 ID 열이 있지만 값은 중요하지 않아야하며 코드가 이와 같은 것에 의존해서는 안됩니다. – mikemil
그래, 나에게는 그다지 변함이 없다는 것을 알고 있지만, 변경 사항을 테스트 할 객체가 몇 개 있었고, 그것들을 만드는 것은 꽤 정적이었다. 코드에서 새로운 텍스트 (서브 페이지 : Subpage.get (1));과 같은 것을 가졌습니다. 위에서 쓴 것처럼 H2에서 1부터 n까지의 ID를 가졌지 만 지금은 전체 데이터베이스에서 고유 한 것처럼 보입니다. 이 어디 BootStream에서 내 오류가 온 :) – kmb