Ich suche eine genaue Information in einer Datenbank, über die ich keine Kenntnisse habe.
Es ist ein Produkt von Drittanbietern, sie beantworten einige Fragen nur langsam, und ich weiß, dass die Daten in dieser Datenbank liegen, daher möchte ich ein bisschen Retrotechnik betreiben.
Ist es bei einer gegebenen Tabelle möglich, eine Liste der Namen der Spalten für diese Tabelle zu haben?
Beispielsweise ist es in SqlServer möglich, eine Tabelle in wiederverwendbare CREATE
Anweisungen zu sichern, in denen alle Spalten, aus denen die Tabelle besteht, textuell aufgelistet sind.
postgresql
information-schema
catalogs
Stephane Rolland
quelle
quelle
\dt[+] table_name
inpsql
.Antworten:
Zusätzlich zu der
\d+ <table_name>
bereits gefundenen Befehlszeile können Sie auch das Informationsschema verwenden , um die Spaltendaten nachzuschlageninformation_schema.columns
:Hinweis: Stellen Sie gemäß dem obigen Beispiel sicher, dass die Werte in Anführungszeichen eingeschlossen sind.
quelle
\x on
oder\pset expanded on
, um die Abfrageergebnisse linear (anstatt tabellarisch) und damit übersichtlicher\d+ public.*
die Beschreibung (Schema + Indices / Fkeys / Trigger) aller Tabellen und Ansichten impublic
Schema abrufen . Wir verwenden es in unserem Pre-Commit-Hook-Skript, um Änderungen in der Datenbank zu verfolgen, die von jedem Commit vorgenommen wurden.Ergänzend zu den anderen Antworten werden die Spaltennamen auch bei einer SELECT-Anweisung, die keine Zeilen zurückgibt, für Sie und den Anwendungscode verfügbar gemacht.
Bei jedem dieser Ansätze können Berechtigungen zum Tragen kommen.
quelle
Das Informationsschema ist langsam und sicher: Es ist standardisiert und weitgehend portierbar für andere Datenbanken, die es unterstützen. Und es wird weiterhin in allen Hauptversionen funktionieren.
Allerdings Ansichten im Informationsschema kommen oft in vielen Tabellen aus den Systemkatalogen ein streng standardisiertes Format gerecht zu werden - von denen viele nur tote Fracht der meiste Zeit. Das macht sie langsam .
Die Postgres-Entwickler machen keine Versprechungen, aber die Grundlagen (wie das, was hier benötigt wird) werden sich in den Hauptversionen nicht ändern.
psql
(die native Befehlszeilenschnittstelle) geht natürlich auf die Überholspur und fragt die Quelle direkt ab. Wenn Siepsql
mit dem Parameter beginnen-E
, wird der SQL-Code hinter Backslash-Befehlen\d
angezeigt. Oder\set ECHO_HIDDEN on
über die psql-Befehlszeile. Von dort aus können Sie eine Antwort auf Ihre Frage erstellen.Schneller als Abfragen
information_schema.columns
. Versuchen Sie es selbstEXPLAIN ANALYZE
zu sehen. Für eine einmalige Suche ist das immer noch kaum von Bedeutung. Kann aber einen Unterschied machen, wenn sie in einer Abfrage / Funktion verwendet wird, die viele Male wiederholt wird.Es gibt auch subtile Unterschiede in der Sichtbarkeit. Detaillierter Vergleich:
quelle
-E
und zeigst den Leuten, wie man die SQL von PSQL bekommt.psql
auf PostgreSQL 11+Wenn Sie in einer Abfrage nach den Spaltentypen suchen, können Sie
psql
's verwenden\gdesc
quelle
Nur für PostgreSQL
Dies ist etwas hokey, könnte aber ein Konkurrent sein, wenn Sie nach dem kürzesten möglichen SQL suchen:
oder noch kürzer (vorausgesetzt, die Tabelle enthält mindestens eine Zeile)
Die Auflistung behält die Reihenfolge bei. Falls Sie sich nicht um die Reihenfolge kümmern und eine
hstore
Erweiterung installiert haben, können Sie diese noch kürzer ausführenquelle