jOOQ:在特定表中查找约束

问题描述 投票:1回答:1

在进行与jOOQ无关的迁移(不生成代码)时,我遇到一种情况,我需要检查数据库中是否已经存在约束(唯一,外键)以完成进一步的操作。

到目前为止,我一直在尝试运行drop并尝试捕获异常,但是它使事务失败并停止了后续迁移的发生

dsl.alterTable(table).dropConstraint(constraintName).execute();
...
>>  ERROR: constraint "t_client_name_unique" of relation "t_client" does not exist

设置:

  • 春天
  • 没有代码生成的jOOQ
  • FlywayDB作为迁移库
  • Postgres
java jooq flyway
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.