2014-02-07 2 views
1

Grails 응용 프로그램을 h2에서 PostgreSQL로 전환하려고합니다. 단계 내 목표에 도달하기 위해 수행했습니다 http://jdbc.postgresql.org/download.html (JDBC4 PostgreSQL의 드라이버 버전 9.3-1100) PostgreSQL에 연결된 Grails 응용 프로그램의 이상한 동작

  • 는 JDBC를 연결에서

    1. 다운로드 JDBC를/lib 폴더
    2. 변경 데이터 소스에. 지금

      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. 왜 그런지 알고 있습니까?

  • +2

    이것은 어떤 대답 도움이 될

    static mapping = { id generator: 'sequence', params: [sequence: 'my_own_sequence'] } 

    참조 :

    당신은 같은 도메인에 대해 서로 다른 시퀀스를 사용하는 도메인을 구성 할 수 있습니다 귀하의 질문 : http://stackoverflow.com/questions/7580807/hibernate-postgres ql-with-grails – zoran119

    +0

    PostgreSQL과 관련된 것이나 문제는 아닙니다. 각 객체에는 ID 열이 있지만 값은 중요하지 않아야하며 코드가 이와 같은 것에 의존해서는 안됩니다. – mikemil

    +0

    그래, 나에게는 그다지 변함이 없다는 것을 알고 있지만, 변경 사항을 테스트 할 객체가 몇 개 있었고, 그것들을 만드는 것은 꽤 정적이었다. 코드에서 새로운 텍스트 (서브 페이지 : Subpage.get (1));과 같은 것을 가졌습니다. 위에서 쓴 것처럼 H2에서 1부터 n까지의 ID를 가졌지 만 지금은 전체 데이터베이스에서 고유 한 것처럼 보입니다. 이 어디 BootStream에서 내 오류가 온 :) – kmb

    답변

    관련 문제