【问题标题】:jOOQ: Find constraints in a specific tablejOOQ:在特定表中查找约束
【发布时间】: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

【问题讨论】:

    标签: java jooq flyway


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多