Fangen Sie damit an?
SELECT n.nspname AS schema,
pg_catalog.format_type ( t.oid, NULL ) AS name,
t.typname AS internal_name,
CASE
WHEN t.typrelid != 0
THEN CAST ( 'tuple' AS pg_catalog.text )
WHEN t.typlen < 0
THEN CAST ( 'var' AS pg_catalog.text )
ELSE CAST ( t.typlen AS pg_catalog.text )
END AS size,
pg_catalog.array_to_string (
ARRAY( SELECT e.enumlabel
FROM pg_catalog.pg_enum e
WHERE e.enumtypid = t.oid
ORDER BY e.oid ), E'\n'
) AS elements,
pg_catalog.obj_description ( t.oid, 'pg_type' ) AS description
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n
ON n.oid = t.typnamespace
WHERE ( t.typrelid = 0
OR ( SELECT c.relkind = 'c'
FROM pg_catalog.pg_class c
WHERE c.oid = t.typrelid
)
)
AND NOT EXISTS
( SELECT 1
FROM pg_catalog.pg_type el
WHERE el.oid = t.typelem
AND el.typarray = t.oid
)
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND pg_catalog.pg_type_is_visible ( t.oid )
ORDER BY 1, 2;
In psql können Sie \set ECHO_HIDDEN on
psql die Abfragen anzeigen lassen, mit denen die Ausgabe der \d...
Befehle generiert wird . Ich habe festgestellt, dass diese Abfragen als Ausgangspunkt für das Ausgraben von Metadaten aus Datenbanken sehr nützlich sind.
Update: 2019-12-16
Für zusammengesetzte Typen können die Spaltenmetadaten wie folgt bestimmt werden:
WITH types AS (
SELECT n.nspname,
pg_catalog.format_type ( t.oid, NULL ) AS obj_name,
CASE
WHEN t.typrelid != 0 THEN CAST ( 'tuple' AS pg_catalog.text )
WHEN t.typlen < 0 THEN CAST ( 'var' AS pg_catalog.text )
ELSE CAST ( t.typlen AS pg_catalog.text )
END AS obj_type,
coalesce ( pg_catalog.obj_description ( t.oid, 'pg_type' ), '' ) AS description
FROM pg_catalog.pg_type t
JOIN pg_catalog.pg_namespace n
ON n.oid = t.typnamespace
WHERE ( t.typrelid = 0
OR ( SELECT c.relkind = 'c'
FROM pg_catalog.pg_class c
WHERE c.oid = t.typrelid ) )
AND NOT EXISTS (
SELECT 1
FROM pg_catalog.pg_type el
WHERE el.oid = t.typelem
AND el.typarray = t.oid )
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
),
cols AS (
SELECT n.nspname::text AS schema_name,
pg_catalog.format_type ( t.oid, NULL ) AS obj_name,
a.attname::text AS column_name,
pg_catalog.format_type ( a.atttypid, a.atttypmod ) AS data_type,
a.attnotnull AS is_required,
a.attnum AS ordinal_position,
pg_catalog.col_description ( a.attrelid, a.attnum ) AS description
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_type t
ON a.attrelid = t.typrelid
JOIN pg_catalog.pg_namespace n
ON ( n.oid = t.typnamespace )
JOIN types
ON ( types.nspname = n.nspname
AND types.obj_name = pg_catalog.format_type ( t.oid, NULL ) )
WHERE a.attnum > 0
AND NOT a.attisdropped
)
SELECT cols.schema_name,
cols.obj_name,
cols.column_name,
cols.data_type,
cols.ordinal_position,
cols.is_required,
coalesce ( cols.description, '' ) AS description
FROM cols
ORDER BY cols.schema_name,
cols.obj_name,
cols.ordinal_position ;
psql -E
.\?
in psql oder lesen Sie hier das Handbuch eine Liste der Meta-Befehle und Erklärungen zu erhalten.\d
(& Freunde) beschreiben Objekte der Datenbank. Intern werden die meisten Meta-Befehle als SQL für den Systemkatalog ausgeführt, der auch mit den genannten Optionen angezeigt werden kann.Sie können die Standard-GUI pgAdmin verwenden :
Stellen Sie sicher, dass die Typen im Objektbrowser aktiviert sind ( Optionen - Browser - Anzeige ).
Links sehen Sie benutzerdefinierte Typen im ausgewählten Schema (Frage 1 ).
Auf
SQL pane
der rechten Seite befindet sich das rückentwickelte SQL-Skript für den ausgewählten Typ (Frage 2 ).Weitere Details im Bereich darüber, wie
Dependents
etc.Alternativ können Sie die standardmäßige interaktive Konsole psql verwenden :
\dT
um eine Liste der benutzerdefinierten Typen zu erhalten.\d type_name
um die Spaltendefinitionsliste für den angegebenen Typ abzurufen.Das Handbuch:
Meine kühne Betonung. Der Befehl funktioniert auch für zusammengesetzte Typen, da mindestens Postgres 9.1.
Und:
quelle
Versuchen Sie, diesen Code auszuführen:
quelle
Dies ist eine sehr einfache Alternative , aber genug für einfache Anwendungsfälle. Wenn der Spaltentyp UDT ist, verwenden wir die
udt_name
Spalte aus derinformation_schema.columns
Tabelle.Ergebnis (
geometry
ist ein UDT):quelle