2016-07-26 18 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

は、次の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' 
関連する問題