2012-03-02 9 views

Odpowiedz

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

Najtrudniejsze było to, że po prostu wybierając * z tych widoków, nie uzyskuje się OID w wynikach.

61

Jest to \ dT, którego szukasz, ale nie nadaje go jako instrukcji "CREATE". Używasz \ dD dla domen.

\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

Nie rozumiem znaczenia "Używasz \ dD dla domen." –

+1

Domeny i typy to różne rzeczy. Używasz \ dD dla domen i \ dT dla typów. –

+4

Ok, widzę. "Domena jest zasadniczo typem danych z opcjonalnymi ograniczeniami (ograniczenia dotyczące dozwolonego zestawu wartości)." –

12

Jeśli chcesz tylko pełną nazwę (rodzaj i schematu) i uporządkowany wykaz wszystkich etykiet enum, zapytanie to zrobi:

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; 

Powroty:

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

string_agg() wymaga systemu Postgres 9.0 lub nowszego, należy zastąpić go array_agg() dla starszych wersji.


Aby uzyskać SQL CREATE oświadczenie, można użyć pg_dump i zajrzeć do pliku zrzutu.

Albo, o wiele bardziej praktycznym, użyj pgAdmin, który wyświetla odwrócone inżynierskie SQL, twórz skrypty dla dowolnego obiektu w bazie danych. Wybierz go w numerze object browser, a jego skrypt tworzenia zostanie wyświetlony w SQL pane. Istnieje nawet opcja automatycznego skopiowania skryptu do nowo otwartego okna SQL editor, gdzie można go edytować i uruchamiać.

+2

Należy pamiętać, że domyślnie należy włączyć typy wyświetlania w 'pgAdmin': Plik → Opcje → Przeglądarka i sprawdzanie" Typy ". –

+0

faktycznie od wersji 1.18.1 można znaleźć tę opcję w Plik -> Opcje -> Wyświetlanie. –

48

Sprawdź to:

select enum_range(null::my_type) 

myślę, że to jest o wiele prostsze rozwiązanie :).

+1

Podoba mi się ten ze względu na jego prostotę. Najlepiej oceniane prace na wszelkie sposoby ... ale ten też robi. :) – PRS

+0

Podoba mi się ten. Składnia \ d nie działała w dbeaver lub pgadmin, ale czysty SQL w przenośnym – Darren

+0

działa w PostgreSQL 8.3.11 –

Powiązane problemy