2012-03-02 16 views

Respuesta

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 difícil fue que simplemente seleccionando * de estas vistas, uno no obtiene los OID en los resultados.

61

Es \ dT lo que buscas, pero no lo da como una declaración "CREAR". Utiliza \ dD para dominios.

\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

No entiendo la relevancia de "Utiliza \ dD para dominios". –

+1

Los dominios y los tipos son cosas diferentes. Utiliza \ dD para dominios y \ dT para tipos. –

+4

Ok, ya veo. "Un dominio es esencialmente un tipo de datos con restricciones opcionales (restricciones en el conjunto de valores permitido)". –

12

Si lo que desea es el nombre completo (nombre del tipo y el esquema) y una lista ordenada de todos los enum etiquetas, esta consulta va a hacer:

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; 

devoluciones:

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

string_agg() requiere Postgres 9.0 o posterior, reemplace con array_agg() para versiones anteriores.


Para obtener el CREATE instrucción SQL, puede utilizar pg_dump y mirar el archivo de volcado.

O, de forma más práctica, use pgAdmin que muestra scripts SQL creados por ingeniería inversa para cualquier objeto en la base de datos. Selecciónelo en el object browser y su script de creación se muestra en el SQL pane. Incluso hay una opción para copiar el script a una ventana recién abierta del SQL editor automáticamente, donde puede editarlo y ejecutarlo.

+2

Tenga en cuenta que debe habilitar los tipos de visualización en 'pgAdmin' de manera predeterminada: Archivo → Opciones → Navegador y verificando' Tipos'. –

+0

en realidad a partir de la versión 1.18.1 puede encontrar esa opción en Archivo -> Opciones -> Pantalla. –

48

Comprobar esto:

select enum_range(null::my_type) 

creo que esto es una solución mucho más simple :).

+1

Me gusta este por su simplicidad. La mejor calificación funciona por todos los medios ... pero esta también lo hace. :) – PRS

+0

Me gusta este. La sintaxis \ d no funcionó en dbeaver o pgadmin, pero el SQL puro en portable – Darren

+0

Funciona en PostgreSQL 8.3.11 –

Cuestiones relacionadas