Angenommen, wir haben einen Postgresql-Typ definiert:
CREATE TYPE my_type AS ENUM('foo', 'bar');
Gibt es eine Möglichkeit, die Typdefinition nach der Erstellung anzuzeigen?
Ich würde erwarten, dass "\ d my_type" mir "ENUM ('foo', 'bar')" zeigt, aber es heißt:
Did not find any relation named "my_type"
Die Tabelle pg_type scheint nicht genügend Informationen zu enthalten.
postgresql
enums
Stéphane
quelle
quelle
\dT+ my_enum;
.Überprüfen Sie dies:
select enum_range(null::my_type)
Ich denke das ist eine viel einfachere Lösung :).
quelle
null:my_type
wenn meine Tabelle aufgerufen wirdusers
und die Spaltestatus
und der Aufzählungstyp sindenum_user_status
? Ich habe alle denkbaren Kombinationen ausprobiert, aber nichts bekommen.null::enum_user_status
(offensichtlich habe ich meinen Aufzählungsnamen anstelle von verwendetenum_user_status
). Die Tabelle / Spalte, in der die Aufzählung verwendet wird, war nicht beteiligt.Wenn Sie nur den vollständigen Namen (Typname und Schema) und eine sortierte Liste aller
enum
Beschriftungen wünschen , führt diese Abfrage Folgendes aus:SELECT n.nspname AS "schema", t.typname , string_agg(e.enumlabel, '|' ORDER BY e.enumsortorder) AS enum_labels FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace JOIN pg_catalog.pg_enum e ON t.oid = e.enumtypid WHERE t.typname = 'my_enum_type' GROUP BY 1,2;
Kehrt zurück:
schema | typname | enum_labels --------+--------------+------------- public | my_enum_type | foo|bar
string_agg()
erfordert Postgres 9.0 oder höher, ersetzen durcharray_agg()
für ältere Versionen.Um die SQL-
CREATE
Anweisung abzurufen , können Sie die Speicherauszugsdatei verwendenpg_dump
und anzeigen.Oder, viel praktischer, verwenden Sie pgAdmin, das Reverse Engineered SQL-Erstellungsskripte für jedes Objekt in der Datenbank anzeigt. Wählen Sie es im aus
object browser
und sein Erstellungsskript wird im angezeigtSQL pane
. Es besteht sogar die Möglichkeit, das SkriptSQL editor
automatisch in ein neu geöffnetes Fenster des zu kopieren , wo Sie es bearbeiten und ausführen können.quelle
pgAdmin
standardmäßig aktivieren müssen: Datei → Optionen → Browser und ÜberprüfenTypes
.SELECT t.typname FROM pg_class c JOIN pg_attribute a ON c.oid = a.attrelid JOIN pg_type t ON a.atttypid = t.oid WHERE c.relname = 'your_type';
Der schwierige Teil war, dass man durch einfaches Auswählen von * aus diesen Ansichten keine OIDs in den Ergebnissen erhält.
quelle