2010-09-07 11 views
27

Próbuję znaleźć równoważny kod SQL \ dT przy użyciu parametru informacja_schemat i nie mogę znaleźć niczego. Czy coś takiego istnieje?Jak wyświetlić listę typów niestandardowych za pomocą Postgres information_schema

Przykład: jeśli dodaję następujące wyliczenie typu niestandardowego, jak mogę je wyświetlić w pliku informacyjnym?

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

UWAGA: Mam dokładnie SQL używanego przez \ dT (pobierane przez podkręcenie rejestrowanie), ale szukam specjalnie dla czystszego realizacji pomocą information_schema

+0

Jeśli nie chcesz korzystać z wiersza poleceń, pgAdmin można zrobić – DrColossos

+0

super „czysty” sposób to owinąć zapytanie w widok. zapisuje również zapytanie, więc nie musisz go używać go za każdym razem, heh http://albertech.blogspot.com/2016/12/show-all-custom-defined-types-in.html – jar

Odpowiedz

8

Wyliczeń nie ma w standardzie SQL i dlatego nie jest reprezentowana w schemacie informacji. Inne typy zdefiniowane przez użytkownika zwykle są w widoku user_defined_types, ale to nie jest zaimplementowane. W tej chwili nie można używać schematu informacji do wyświetlania typów zdefiniowanych przez użytkownika w PostgreSQL.

35

Dla porównania, tutaj jest SQL z \ dT (pgAdmin wykorzystuje ten sam lub podobny)

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

Ten kod wyświetla listę wszystkich typów, w tym wyliczenia zdefiniowane przez użytkownika, ale nie podaje szczegółów, jak są one zdefiniowane. –

9

Jest to prosty sposób na wyświetlenie wszystkich typów zdefiniowanych w enum w bieżącej bazie danych. Wynikiem zapytanie zwraca dwie kolumny, pierwszy pokaz nazwę każdego typu enum, drugi pokaz nazwa każdej wartości dla każdego typu ENUM:

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

Część "AS enumlabel" jest zbędna, nie sądzisz? – Pere

2

używam widoku, aby pokazać swoje nazwy enum. Dane z tego widoku można konsekwentnie stosować w aplikacji, aby zapewnić listę dostępnych opcji dla pola wyliczeniowego.

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 wszystkich typów zdefiniowane przez siebie:

\dT 

testDB=> \dT 
       List of data types 
Schema |   Name   | Description 
--------+-------------------------+------------- 
public | myType     | 
(1 row) 
Powiązane problemy