2010-09-07 18 views
27

Estoy tratando de encontrar el equivalente de SQL \ dT usando el INFORMATION_SCHEMA y parece que no puede encontrar nada. ¿Existe tal cosa?cómo enumerar los tipos personalizados usando Postgres INFORMATION_SCHEMA

Ejemplo: Si añado el siguiente tipo de enumeración personalizada, ¿cómo puedo verlo en la INFORMATION_SCHEMA?

CREATE TYPE communication.channels AS ENUM 
    ('text_message', 
    'email', 
    'phone_call', 
    'broadcast'); 

NOTA: Tengo el SQL exacto utilizado por \ dT (recuperado por subir el registro) pero estoy en busca específicamente para una aplicación más limpia mediante el INFORMATION_SCHEMA

+0

Si no desea utilizar la línea de comandos, pgAdmin puede hacer que – DrColossos

+0

una manera muy "limpia" es envolver la consulta en una vista. También guarda la consulta por lo que no tiene que seguir buscando en Google cada vez, je http://albertech.blogspot.com/2016/12/show-all-custom-defined-types-in.html – jar

Respuesta

8

enumeraciones no están en el estándar SQL y por lo tanto no representados en el esquema de información. Otros tipos definidos por el usuario normalmente estarían en la vista user_defined_types, pero eso no está implementado. Por lo tanto, en este momento, no puede usar el esquema de información para enumerar los tipos definidos por el usuario en PostgreSQL.

35

Para referencia, aquí es el de SQL \ dT (pgAdmin utiliza el mismo o similar)

SELECT  n.nspname as schema, t.typname as type 
FROM  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 NOT IN ('pg_catalog', 'information_schema') 
+0

Este código muestra la lista de todos los tipos, incluyendo las enumeraciones definidas por el usuario, pero no da los detalles de cómo se definen. –

9

Esta es una forma sencilla de una lista de todos los tipos definidos de enumeración en la base de datos actual. El resultado de la consulta devuelve dos columnas, la primera muestra el nombre de cada tipo de enumeración, la segunda muestra el nombre de cada valor para cada tipo de enumeración:

SELECT pg_type.typname AS enumtype, 
    pg_enum.enumlabel AS enumlabel 
FROM pg_type 
JOIN pg_enum 
    ON pg_enum.enumtypid = pg_type.oid; 
+1

La parte 'AS enumlabel' es redundante, ¿no crees? – Pere

2

que utilizo el fin de mostrar mis nombres ENUM. Los datos de esa vista se pueden utilizar en consecuencia en una aplicación para proporcionar una lista de opciones disponibles para un campo enum.

CREATE OR REPLACE VIEW vw_enums AS 
SELECT t.typname, e.enumlabel, e.enumsortorder 
FROM pg_enum e 
JOIN pg_type t ON e.enumtypid = t.oid;
6

Lista de todos los tipos definidos por sus auto:

\dT 

testDB=> \dT 
       List of data types 
Schema |   Name   | Description 
--------+-------------------------+------------- 
public | myType     | 
(1 row) 
Cuestiones relacionadas