postgresql 防止Spring删除表,而只删除模式

sd2nnvve  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(123)

我正在使用Postgres和Sping Boot JPA,并希望将特定的应用程序示例干净地
spring.jpa.hibernate.ddl-auto: create-drop
它们各自的模式(每个示例都有自己的schemaName)。
即启动时(在其他db语句之前)和关闭时

"drop schema [schemaName] if exists cascade"

然后(仅在启动时)

"create schema [schemaName] if not exists"

应发布。
这似乎是工作后一些fiddeling,然而,Spring/Hibernate也问题

"drop table[schemaName.tableName] if exists cascade"

由于这个Postgres issue似乎仍然没有修复,我得到了误导性的警告

"o.h.e.j.s.SqlExceptionHelper: schema "schemaName" does not exist, skipping"

我不想让整个记录器静音。
我如何告诉Spring/Hibernate不要发出那些delete table语句(或者有什么其他方法可以防止这个问题发生)?我不喜欢使用SQL-Init脚本。
谢谢!

kiz8lqtg

kiz8lqtg1#

来源:Skipping creation of a specific table [Spring] [Hibernate]
我想出了这个解决方案:

class PreventDropTablesSchemaFilter : DefaultSchemaFilterProvider() {

    override fun getDropFilter() = INSTANCE

    val INSTANCE = object : DefaultSchemaFilter() {
        override fun includeTable(table: Table) = false
    }
}

然后

spring.jpa.properties.hibernate.hbm2ddl.schema_filter_provider: PreventDropTablesSchemaFilter

相关问题