43 votes

Comment répertorier les types personnalisés à l'aide de Postgres information_schema

J'essaie de trouver le SQL équivalent de \dT en utilisant information_schema et je n'arrive pas à trouver quoi que ce soit. Une telle chose existe-t-elle ?

Exemple : si j'ajoute l'énumération de type personnalisé suivante, comment puis-je la voir dans information_schema ?

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

REMARQUE: j'ai le SQL exact utilisé par \dT (récupéré en augmentant la journalisation) mais je recherche spécifiquement une implémentation plus propre utilisant le information_schema

61voto

Collin Peters Points 748

Pour référence, voici le SQL de \dT (pgAdmin utilise le même ou similaire)

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

40voto

Vadim Shvetsov Points 181

Lister tous les types de base de données :

 test=# \dT
             List of data types
 Schema |        Name         | Description
--------+---------------------+-------------
 public | gender              |
 public | status              |

Répertoriez tous les types de base de données avec des informations supplémentaires telles que des valeurs :

 test=# \dT+
                                                   List of data types
 Schema |        Name         |    Internal name    | Size |     Elements      | Owner | Access privileges | Description
--------+---------------------+---------------------+------+-------------------+-------+-------------------+-------------
 public | gender              | gender              | 4    | male             +| Vadim |                   |
        |                     |                     |      | female            |       |                   |
 public | status              | status              | 4    | processing       +| Vadim |                   |
        |                     |                     |      | passed           +|       |                   |
        |                     |                     |      | failed            |       |                   |

Obtenez un certain type avec des informations supplémentaires :

 leps=# \dT+ gender
                                            List of data types
 Schema |  Name  | Internal name | Size | Elements | Owner | Access privileges | Description
--------+------------+---------------+------+-------------------+-------+-------------------+-------------
 public | gender | gender        | 4    | male    +| Vadim |                   |
        |        |               |      | female  +|       |                   |

27voto

Guido Points 457

C'est un moyen simple de répertorier tous les types définis enum dans la base de données actuelle. Le résultat de la requête renvoie deux colonnes, la première affiche le nom de chaque type d'énumération, la seconde affiche le nom de chaque valeur pour chaque type d'énumération :

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

12voto

andrew Points 347

Liste de tous ceux définis par vos types de soi :

 \dT

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

6voto

Peter Eisentraut Points 12513

Les énumérations ne sont pas dans la norme SQL et ne sont donc pas représentées dans le schéma d'information. D'autres types définis par l'utilisateur seraient normalement dans la vue user_defined_types , mais ce n'est pas implémenté. Ainsi, pour le moment, vous ne pouvez pas utiliser le schéma d'informations pour répertorier les types définis par l'utilisateur dans PostgreSQL.

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