如何查询外键onupdate/ondelete?

How to query for foreign key onupdate/ondelete?

我对 return 外键详细信息有以下查询:

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 中解析出来)。我一直在尝试寻找一种方法来接收这些详细信息而不对其进行解析,但到目前为止我还没有运气。

有没有人有任何详细信息table我可以找到关于更新和删除的详细信息?

这是专门针对 Postgres 的。

像这样?..

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'