如何查询外键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'
我对 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'