【问题标题】:Configuring Postgres in Grails在 Grails 中配置 Postgres
【发布时间】:2012-10-12 01:21:01
【问题描述】:

我有一个迁移到 MySQL 和 PostgreSQL 的应用程序,我在数据分配方面都有不同的行为。

通过分析在 Postgres 中创建的数据库,我意识到在每个表中创建的 ID 编号并没有被重置为另一个表的更改。例如,它被设置在寄存器 3 'Table1' 中并计数 ID 1 到 3。当插入另一个表中另一个类的对象时,应该为该表启动 ID,但它遵循前一个和当对象保留在“table2”中时,他的第一个 ID 开头继续从 4 开始计数。我还注意到 Mysql 中的一些变化,因为“false”字段“boolean”是 preenchdio,在 Postgres 中填充了“0”假'。

我更新了 JDBC,但问题仍然存在。我认为也许应该在现场进行一些“映射”配置,但不确定。

我的数据源是这样的:

environments {
development {
    dataSource {

        dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''

    url = "jdbc:postgresql://localhost:5432/app"
        driverClassName = "org.postgresql.Driver"
        dialect = org.hibernate.dialect.PostgreSQLDialect
        //url = "jdbc:mysql://localhost:3306/app"
        username = "app"
        password = "app123"

    }
}
test {
    dataSource {
        dbCreate = "update"
        url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
        username = "sa"
        password = ""
    }
}
production {
    dataSource {
        dbCreate = "update"
        url = "jdbc:postgresql://localhost:5432/app"
        driverClassName = "org.postgresql.Driver"
        username = "postgres"


        pooled = true
        properties {
           maxActive = -1
           minEvictableIdleTimeMillis=1800000
           timeBetweenEvictionRunsMillis=1800000
           numTestsPerEvictionRun=3
           testOnBorrow=true
           testWhileIdle=true
           testOnReturn=true
           validationQuery="SELECT 1"
        }
    }
}

}

您可以遵循与 Mysql Postgres 中相同的模式吗?

【问题讨论】:

    标签: hibernate postgresql grails grails-orm


    【解决方案1】:

    Hibernate 为 Postgres 和 Oracle 中的所有表创建一个序列,但很容易为每个表创建一个序列。请参阅此解决方案:http://grails.1312388.n4.nabble.com/One-hibernate-sequence-is-used-for-all-Postgres-tables-td1351722.html#a1351725

    要使用自定义方言,请在 src/groovy 或 src/java 中创建类。使用您想要的任何包和类名。要在 Grails 中注册它,请在 DataSource.groovy 中的 dataSource 块中设置 dialect 属性,例如

    dataSource {
       pooled = true
       dialect = com.foo.bar.MyDialect
       driverClassName = ...
       username = ...
       password = ...
    }
    

    【讨论】:

    • 伯特你好!感谢您的回复!我看到了所有的文字,你已经创建了一个自定义方言来解决这个问题。我看到了您创建的代码,但想知道如何在自定义 Grail 中实现这种方言?我看到了您的代码但不知道如何处理它,请指导我应该如何实现此自定义方言并解决此问题。
    • 伯特你好!谢谢你帮助我!您的代码运行良好,他关于如何引用它的提示非常酷。现在我会想办法让 ampo 存储布尔值“0”而不是“false”(如果您有任何提示,请告诉我)。我最多只能感谢他。非常感谢!
    • 您应该在一个单独的问题中询问 0/false 的问题 - 最好每个问题只回答一个问题 :)
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 2011-10-31
    • 2013-01-23
    • 2015-07-14
    • 2015-05-21
    • 1970-01-01
    • 2017-09-24
    • 2010-12-18
    相关资源
    最近更新 更多