Подтвердить что ты не робот

Есть ли способ показать пользовательское определение типа перечисления postgresql?

Скажем, мы определили тип postgresql:

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

Есть ли способ показать определение типа после создания?

Я бы ожидал, что "\ d my_type" покажет мне "ENUM (" foo "," bar ")", но он говорит:

Did not find any relation named "my_type"

Таблица pg_type, похоже, не дает достаточной информации.

4b9b3361

Ответ 1

Это вам нужно, но это не означает, что это выражение "CREATE". Вы используете \dD для доменов.

\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)

Ответ 2

Проверьте это:

select enum_range(null::my_type)

Я думаю, что это гораздо более простое решение:).

Ответ 3

Если вам просто нужно полное имя (имя типа и схема) и отсортированный список всех меток enum, этот запрос будет делать:

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;

Возврат:

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

string_agg() требуется Postgres 9.0 или новее, заменить на array_agg() для более старых версий.


Чтобы получить инструкцию SQL CREATE, вы можете использовать pg_dump и посмотреть файл дампа.

Или, гораздо более практично, используйте pgAdmin, в котором отображаются созданные SQL-скрипты с обратным проектированием для любого объекта в базе данных, Выберите его в object browser, и его создание script отображается в SQL pane. Существует даже возможность скопировать script в новое открытое окно SQL editor автоматически, где вы можете редактировать и выполнять его.

Ответ 4

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

Трудная часть заключалась в том, что просто выбирая * из этих представлений, в результатах не получаются идентификаторы OID.