83 votes

Existe-t-il un moyen d'afficher une définition de type énuméré postgresql définie par l'utilisateur ?

Disons que nous avons défini un type postgresql :

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

Existe-t-il un moyen d'afficher la définition du type après la création ?

Je m'attendrais à ce que "\d my_type" me montre "ENUM('foo', 'bar')", mais cela dit :

 Did not find any relation named "my_type"

La table pg_type ne semble pas donner assez d'informations.

115voto

Adam111p Points 1553

Vérifie ça:

 select enum_range(null::my_type)

Je pense que c'est une solution beaucoup plus simple :).

106voto

Richard Huxton Points 9331

C'est \dT que vous recherchez, mais il ne le donne pas comme une instruction "CREATE". Vous utilisez \dD pour les domaines.

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

1voto

dezso Points 2607
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 partie délicate était que le simple fait de sélectionner * dans ces vues ne permet pas d'obtenir les OID dans les résultats.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X