有没有人设法使用带有多租户和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,我正忙于移植。
答案 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