jOOQ:在特定表中查找约束
Posted
技术标签:
【中文标题】jOOQ:在特定表中查找约束【英文标题】:jOOQ: Find constraints in a specific table 【发布时间】:2020-03-11 19:53:57 【问题描述】:在进行与 jOOQ 无关的(无代码生成)迁移时,我遇到了一种情况,即我需要检查数据库中是否已经存在约束(唯一、外键)以完成进一步的操作。
到目前为止,我尝试的是运行 drop 并尝试捕获异常,但它使事务失败并停止跟随迁移的发生
dsl.alterTable(table).dropConstraint(constraintName).execute();
...
>> ERROR: constraint "t_client_name_unique" of relation "t_client" does not exist
设置:
春天 没有代码生成的 jOOQ FlywayDB 作为迁移库 Postgres【问题讨论】:
【参考方案1】:未来的解决方案(在 jOOQ 3.12 中不可用)
对于 jOOQ 3.13+,我们正在大力投资以支持更多此类迁移方案。将来,我们将支持一些与供应商无关的 information_schema
样式视图,它们会为所有数据库生成此类元信息:#8301
另一个可以立即为您提供帮助的功能是原生 DROP CONSTRAINT IF EXISTS
支持:#9557。当然,您可以使用 plain SQL 在 PostgreSQL 上运行此特定语句,直到 #9557 可用为止
现在的解决方案
或者,在您的情况下,由于您只使用 PostgreSQL,您可以通过查询 PostgreSQL 的information_schema
直接执行此操作。您可以生成information_schema
表,然后运行此查询:
select *
from information_schema.table_constraints
where constraint_schema = :constraint_schema
and constraint_name = :constraint_name
【讨论】:
以上是关于jOOQ:在特定表中查找约束的主要内容,如果未能解决你的问题,请参考以下文章