2012-03-02 4 views

risposta

0
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'; 

La parte difficile era che semplicemente selezionando * da queste visualizzazioni non si ottengono OID nei risultati.

61

È \ dT che stai cercando, ma non lo dà come una frase "CREA". Tu usi \ dD per i domini.

\dT+ action.action_status 
          List of data types 
Schema |   Name   | Internal name | Size | Elements | Description 
--------+----------------------+---------------+------+----------+------------- 
action | action.action_status | action_status | 4 | pending +| 
     |      |    |  | live +| 
     |      |    |  | done +| 
     |      |    |  | notdone | 
(1 row) 
+1

Non capisco la rilevanza di "Si utilizza \ dD per i domini". –

+1

I domini e i tipi sono cose diverse. Utilizza \ dD per domini e \ dT per tipi. –

+4

Ok, capisco. "Un dominio è essenzialmente un tipo di dati con vincoli opzionali (restrizioni sul set di valori consentito)." –

12

Se si desidera solo il nome completo (nome del tipo e lo schema) e un elenco ordinato di tutti i enum etichette, questa query farà:

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; 

Ritorni:

schema | typname  | enum_labels 
--------+--------------+------------- 
public | my_enum_type | foo|bar 

string_agg() richiede Postgres 9.0 o successivo, sostituirlo con array_agg() per le versioni precedenti.


Per ottenere il CREATE istruzione SQL, è possibile utilizzare pg_dump e guardare il file dump.

Oppure, molto più praticamente, utilizzare pgAdmin che visualizza SQL con reverse engineering per creare script per qualsiasi oggetto nel database. Selezionalo nello object browser e il relativo script di creazione viene visualizzato nello SQL pane. Esiste anche un'opzione per copiare lo script in una nuova finestra dello SQL editor automaticamente, dove è possibile modificarlo ed eseguirlo.

+2

Si noti che è necessario abilitare i tipi di visualizzazione in 'pgAdmin' per impostazione predefinita: File → Opzioni → Browser e controllo' Tipi'. –

+0

in realtà dalla versione 1.18.1 è possibile trovare quell'opzione in File -> Opzioni -> Schermo. –

48

Controllare questo:

select enum_range(null::my_type) 

Penso che questa è una soluzione molto più semplice :).

+1

Mi piace questo per la sua semplicità. Le opere più votate con tutti i mezzi ... ma anche questo. :) – PRS

+0

Mi piace questo. La sintassi \ d non funzionava in dbeaver o pgadmin, ma il puro SQL in portatile – Darren

+0

funziona in PostgreSQL 8.3.11 –

Problemi correlati