SQL, um alle Tabellen aufzulisten, die auf eine bestimmte Spalte in einer Tabelle verweisen
Bin ich mit PostgreSQL und ich versuche, um eine Liste aller Tabellen, in denen eine bestimmte Spalte aus einer Tabelle als foreign-key-Referenz. Kann das getan werden? Ich bin sicher, dass die Daten irgendwo gespeichert sind, in information_schema
aber ich habe keine Ahnung, wie man Abfragen.
InformationsquelleAutor der Frage Gaurav Dadhania | 2011-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser nutzt die volle catalog/schema/name Drilling zu identifizieren, die eine db-Tabelle für alle 3 information_schema-sichten. Sie können lassen Sie ein oder zwei wie nötig.
Die query zeigt alle Tabellen, die eine foreign key-Einschränkung gegen die Spalte 'a' in Tabelle 'd'
InformationsquelleAutor der Antwort RichardTheKiwi
Die anderen Lösungen sind nicht garantiert, um zu arbeiten in postgresql, als die constraint_name nicht garantiert einzigartig zu sein; somit erhalten Sie false-positives. PostgreSQL verwendet, um name-Einschränkungen dumme Dinge wie '$1', und wenn Sie habe eine alte Datenbank, die Sie habe die Pflege durch upgrades, die Sie wahrscheinlich noch einige von denen Rum.
Da diese Frage richtete sich AN PostgreSQL-und das ist, was Sie verwenden, dann können Sie die Abfrage der internen postgres-Tabellen pg_class und pg_attribute um ein genaueres Ergebnis.
HINWEIS: FKs kann auf mehrere Spalten, damit das referenzierende Spalte (attnum von pg_attribute) ist ein ARRAY, was ist der Grund für die Verwendung array_agg in der Antwort.
Das einzige, was Sie brauchen plug-in ist die TARGET_TABLE_NAME:
Wenn Sie möchten, zu gehen die andere Weise (Liste all der Dinge, die eine bestimmte Tabelle bezieht), dann ändern Sie einfach die Letzte Zeile zu:
Oh, und da die eigentliche Frage war gezielt für einen bestimmten Spalte können Sie den Namen der Spalte mit dieser Formel:
InformationsquelleAutor der Antwort Tony K.
Persönlich, ich bevorzuge die Abfrage basierend auf der unique-Einschränkung verwiesen wird, vielmehr als die Spalte. Das würde in etwa so Aussehen:
Hier ist eine version, die die Abfrage nach der Spalte name:
InformationsquelleAutor der Antwort Anomie
Diese Abfrage erfordert nur auf die verwiesen wird Tabelle name und Spalte name, und erzeugt eine Ergebnismenge, die sowohl die Seiten der Fremdschlüssel.
Beispiel ResultSet:
Alle Kredit Lane und Krogh an der PostgreSQL-forum.
InformationsquelleAutor der Antwort vallismortis
InformationsquelleAutor der Antwort Lucas
Einer einfachen Anfrage für erholt die Namen der Fremdschlüssel sowie die Namen der Tabellen:
InformationsquelleAutor der Antwort Fadid