在进行非jOOQ迁移(不生成代码)时,我遇到一种情况,我需要检查数据库中是否已经存在约束(唯一,外键)以完成进一步的操作。
到目前为止,我一直在尝试运行drop并尝试捕获异常,但是它使事务失败并停止了后续迁移
dsl.alterTable(table).dropConstraint(constraintName).execute();
...
>> ERROR: constraint "t_client_name_unique" of relation "t_client" does not exist
设置:
答案 0 :(得分:1)
对于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