How to list custom types using Postgres information_schema

后端 未结 7 1339
遥遥无期
遥遥无期 2020-12-28 12:40

I am trying to find the equivalent SQL of \\dT using the information_schema and can\'t seem to find anything. Does such a thing exist?

Example: If I add the followi

相关标签:
7条回答
  • 2020-12-28 12:47

    Enums are not in the SQL standard and therefore not represented in the information schema. Other user-defined types would normally be in the view user_defined_types, but that's not implemented. So at the moment, you can't use the information schema to list user-defined types in PostgreSQL.

    0 讨论(0)
  • 2020-12-28 12:47

    I use a view to show my enum names. The data from that view can consequently be used in an application to provide a list of available options for an enum field.

    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;
    0 讨论(0)
  • 2020-12-28 12:58

    For reference, here is the SQL from \dT (pgAdmin uses the same or similar)

    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 讨论(0)
  • 2020-12-28 13:03

    List of all defined by Your self types:

    \dT
    
    testDB=> \dT
                   List of data types
     Schema |          Name           | Description 
    --------+-------------------------+-------------
     public | myType                  | 
    (1 row)
    
    0 讨论(0)
  • 2020-12-28 13:06

    List all db types:

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

    List all db types with additional information like values:

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

    Get certain type with additional information:

    leps=# \dT+ gender
                                                List of data types
     Schema |  Name  | Internal name | Size | Elements | Owner | Access privileges | Description
    --------+------------+---------------+------+-------------------+-------+-------------------+-------------
     public | gender | gender        | 4    | male    +| Vadim |                   |
            |        |               |      | female  +|       |                   |
    
    0 讨论(0)
  • 2020-12-28 13:09

    This is a simple way to list all the enum defined types in the current database. The query result returns two columns, the first show the name of every enum types, the second show the name of every value for each enum type:

     SELECT pg_type.typname AS enumtype, 
         pg_enum.enumlabel AS enumlabel
     FROM pg_type 
     JOIN pg_enum 
         ON pg_enum.enumtypid = pg_type.oid;
    
    0 讨论(0)
提交回复
热议问题