【问题标题】:How to query for foreign key onupdate/ondelete?如何查询外键 onupdate/ondelete?
【发布时间】:2016-07-26 16:26:27
【问题描述】:

我有以下查询来返回外键详细信息:

SELECT
    tc.constraint_name,
    tc.table_name,
    kcu.column_name,
    ccu.table_schema AS foreign_table_schema,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name,
    pg_catalog.pg_get_constraintdef(pg_constraint.oid, true) AS foreign_definition
FROM
    information_schema.table_constraints AS tc
    JOIN information_schema.key_column_usage AS kcu
      ON tc.constraint_name = kcu.constraint_name
    JOIN information_schema.constraint_column_usage AS ccu
      ON ccu.constraint_name = tc.constraint_name
    JOIN pg_constraint
      ON pg_constraint.conname = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY'

由此,我可以获得重建外键所需的大部分信息。唯一缺少的是关于更新和删除信息(尽管这可以从foreign_definition 中解析出来)。我一直在想办法在不解析的情况下接收这些详细信息,但到目前为止我还没有运气。

有没有人知道我可以找到哪个表的更新和删除详细信息?

这是专门为 Postgres 设计的。

【问题讨论】:

  • 你试过information_schema.referential_constraints吗?..有两列update_ruledelete_rule

标签: sql database postgresql database-schema


【解决方案1】:

像这样?..

SELECT
    tc.constraint_name,
    tc.table_name,
    kcu.column_name,
    ccu.table_schema AS foreign_table_schema,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name,
    pg_catalog.pg_get_constraintdef(pg_constraint.oid, true) AS foreign_definition,
    update_rule,
    delete_rule
FROM
    information_schema.table_constraints AS tc
    JOIN information_schema.key_column_usage AS kcu
      ON tc.constraint_name = kcu.constraint_name
    JOIN information_schema.constraint_column_usage AS ccu
      ON ccu.constraint_name = tc.constraint_name
    JOIN pg_constraint
      ON pg_constraint.conname = tc.constraint_name
    LEFT OUTER JOIN information_schema.referential_constraints rc on tc.constraint_name = rc.constraint_name and ccu.table_schema = rc.constraint_schema

WHERE constraint_type = 'FOREIGN KEY'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2015-11-17
    • 2017-01-23
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多