Grails 3.3.x似乎不支持PostgreSQL的每个租户架构

时间:2018-05-26 11:16:39

标签: postgresql grails gorm multi-tenant

有没有人设法使用带有多租户和PostgreSQL的Grails 3.3.x?问题似乎与DefaultSchemaHandler.groovy类中使用的SQL语法有关。对于PostgreSQL,正确的语法是:SET SCHEMA 'schemaName'但DefaultSchemaHandler省略了单个刻度:SET SCHEMA schemaName,导致启动失败:

Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at or near "information_schema"

进一步的例外情况列出PG DB中的其他模式,直到启动完全失败。似乎没有任何方式可以覆盖DefaultSchemaHandler,也没有任何其他人在与这个问题作斗争,这让我感到惊讶。

我应该补充一点,这一切都适用于Grails 3.2.11,我正忙于移植。

1 个答案:

答案 0 :(得分:2)

我通过实现自己的SchemaHandler解决了我自己的问题,如下所示:

@CompileStatic
@Slf4j
class PostgreSQLSchemaHandler extends DefaultSchemaHandler {

    PostgreSQLSchemaHandler() {
        super("SET SCHEMA '%s'", "CREATE SCHEMA '%s'", "public")
    }
}

然后在application.yml中我添加schemaHandler如下:

dataSource:
    pooled: true
    jmxExport: true
    driverClassName: org.postgresql.Driver
    dialect: org.hibernate.dialect.PostgreSQLDialect
    schemaHandler: com.mypackage.PostgreSQLSchemaHandler