Digamos que hemos definido un tipo de postgresql:

CREATE TYPE my_type AS ENUM('foo', 'bar');

Es allí cualquier manera de mostrar el tipo de definición después de la creación ?

Yo esperaría «\d my_type» para mostrar «ENUM(‘foo’, ‘bar’)», pero dice :

Did not find any relation named "my_type"

La pg_type tabla no parecen dar suficiente información.

InformationsquelleAutor Stéphane | 2012-03-02

4 Comentarios

  1. 80

    Es \dT que buscas, pero no te da como una «CREAR» de la declaración. Usa \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)
    • No entiendo la relevancia de «utilizar \dD de dominios».
    • Dominios y tipos son cosas diferentes. Usa \dD para dominios y \dT de tipos.
    • Ok, ya veo. «Un dominio es esencialmente un tipo de datos con la opción de las limitaciones (restricciones sobre el conjunto permitido de valores).»
    • Me costó un poco darse cuenta de que lo que realmente quería era \dT+ my_enum;.
  2. 80

    Comprobarlo:

    select enum_range(null::my_type)

    Creo que esta es una solución mucho más sencilla :).

    • Me gusta este por su sencillez. La parte superior nominal obras por todos los medios… pero este no demasiado. 🙂
    • Me gusta este. El \d sintaxis no trabajo en dbeaver o pgadmin, pero la pura SQL en portátil
    • Trabaja en PostgreSQL 8.3.11
  3. 12

    Si sólo quieres el nombre completo (nombre del tipo y 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;

    Devuelve:

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

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


    Para obtener el SQL CREATE declaración, usted podría utilizar pg_dump y buscar en el archivo de volcado.

    O, mucho más práctica, el uso de pgAdmin que la muestra de la ingeniería inversa de SQL crear secuencias de comandos para cualquier objeto en la base de datos. Seleccione en el object browser y su secuencia se muestra en la SQL pane. Incluso hay una opción para copiar la secuencia de comandos en una ventana recién abierta de la SQL editor automáticamente, donde se puede editar y ejecutar.

    • Tenga en cuenta que usted necesita para habilitar la visualización de tipos en pgAdmin por defecto: Archivo → Opciones → Navegador y comprobar Types.
    • en realidad a partir de la versión 1.18.1 usted puede encontrar que la opción Archivo -> Opciones> Pantalla.
  4. 1
    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 era que simplemente seleccionar * desde estos puntos de vista uno no se Oid en los resultados.

Dejar respuesta

Please enter your comment!
Please enter your name here