2016-07-26 5 views
0

У меня есть следующий запрос, чтобы вернуть иностранные ключевые детали:Как запросить внешний ключ onupdate/ondelete?

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' 

Из этого я могу получить большую часть информации мне нужно повторно consturct внешнего ключа. Единственное, чего не хватает, это обновить & на удаление информации (хотя это можно разобрать с foreign_definition). Я пытался понять, как получить эти данные, не разбирая его, но до сих пор мне не повезло.

У кого-нибудь есть какие-либо детали, по какой таблице я могу найти информацию об обновлении и удалении данных?

Это специально для Postgres.

+2

пытались ли вы 'information_schema.referential_constraints'? .. Есть две колонки' 'update_rule' и delete_rule' –

ответ

2

как это? ..

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' 
Смежные вопросы