2016-07-26 27 views
0

Ich habe die folgende Abfrage Fremdschlüssel Details zurück:Wie Abfrage für Fremdschlüssel 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' 

Daraus ich die meisten Informationen bekommen kann ich ein Fremdschlüssel wieder consturct müssen. Das einzige, was fehlt ist das On-Update & auf löschen Informationen (obwohl dies aus dem foreign_definition analysiert werden kann). Ich habe versucht, einen Weg zu finden, diese Details zu erhalten, ohne es zu analysieren, aber bisher hatte ich kein Glück.

Hat jemand irgendwelche Details auf welcher Tabelle kann ich die on-update und Details löschen finden?

Dies ist speziell für Postgres.

+2

haben Sie versuchen 'information_schema.referential_constraints'? .. gibt es zwei Spalten' 'update_rule' und delete_rule' –

Antwort

2

so? ..

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'