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:在特定表中查找约束的主要内容,如果未能解决你的问题,请参考以下文章

查找列是不是具有唯一约束

如何在 Oracle 的表中查找特定值?

在 Big Query 的表中查找特定条件的属性计数

如何使用 postgres/nodejs 在表中查找特定内容

如何查看 jOOQ 执行的 SQL 语句?

在表中查找特定关系