Show query result column types (PostgreSQL)

后端 未结 3 1229
生来不讨喜
生来不讨喜 2020-12-14 06:30

Is there a way to easily get the column types of a query result? I read the psql documentation, but I don\'t think it supports that. Ideally, I\'d be able to get something

相关标签:
3条回答
  • 2020-12-14 06:36

    It is possible to get any SELECT query result column type.

    Example

    Given the following query and result, let's answer the question *"What is the column type of all_ids?"*

    SELECT array_agg(distinct "id") "all_ids" FROM "auth_user";
    
                     all_ids
    --------------------------------------------
     {30,461577687337538580,471090357619135524}
    (1 row)
    

    We need a mechanism to unveil the type of "all_ids".

    On the postgres mailing list archives I found reference to a native pg function called pg_typeof.

    Example usage:

    SELECT pg_typeof(array_agg(distinct "id")) "all_ids" FROM "auth_user";
    

    Output:

     all_ids
    ----------
     bigint[]
    (1 row)
    

    Cheers!

    0 讨论(0)
  • 2020-12-14 06:41

    I don't think you can print exactly what you have in the sample, unless you write a stored procedure for it.

    One way to do it (two "selects"):

    1. create table my_table as select ...
    2. \d my_table
    3. select * from my_table
    0 讨论(0)
  • 2020-12-14 07:00

    It is definitely possible with \gdesc command(psql 11):

    \gdesc

    Shows the description (that is, the column names and data types) of the result of the current query buffer. The query is not actually executed; however, if it contains some type of syntax error, that error will be reported in the normal way.

    If the current query buffer is empty, the most recently sent query is described instead.

    For example:

    $ SELECT * FROM pg_database \gdesc
    
        COLUMN     |   TYPE    
    ---------------+-----------
     datname       | name
     datdba        | oid
     encoding      | INTEGER
     datcollate    | name
     datctype      | name
     datistemplate | BOOLEAN
     datallowconn  | BOOLEAN
     datconnlimit  | INTEGER
     datlastsysoid | oid
     datfrozenxid  | xid
     datminmxid    | xid
     dattablespace | oid
     datacl        | aclitem[]
    
    0 讨论(0)
提交回复
热议问题