显示查询结果列类型(PostgreSQL)

Jus*_*n K 32 postgresql psql

有没有办法轻松获取查询结果的列类型?我阅读了psql文档,但我认为它不支持.理想情况下,我可以得到类似的东西:

 columna : text | columnb : integer
----------------+-------------------
 oh hai         |                42
Run Code Online (Sandbox Code Playgroud)

有没有办法在不编码的情况下获取这些信息?

Jay*_*lor 46

可以获取任何SELECT查询结果列类型.

鉴于以下查询和结果,让我们回答问题*"all_ids的列类型是什么?"*

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

                 all_ids
--------------------------------------------
 {30,461577687337538580,471090357619135524}
(1 row)
Run Code Online (Sandbox Code Playgroud)

我们需要一种机制来揭示"all_ids"的类型.

postgres邮件列表档案中,我发现了对名为的本机pg函数的引用pg_typeof.

用法示例:

SELECT pg_typeof(array_agg(distinct "id")) "all_ids" FROM "auth_user";
Run Code Online (Sandbox Code Playgroud)

输出:

 all_ids
----------
 bigint[]
(1 row)
Run Code Online (Sandbox Code Playgroud)

干杯!


Luk*_*zda 13

\gdesc命令(psql 11)绝对可以:

\gdesc

显示当前查询缓冲区结果的描述(即列名和数据类型)。查询并未实际执行;但是,如果它包含某种类型的语法错误,则会以正常方式报告该错误。

如果当前查询缓冲区为空,则改为描述最近发送的查询。

例如:

$ 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[]
Run Code Online (Sandbox Code Playgroud)


Kon*_*rus 6

我认为您无法完全打印出样本中的内容,除非您为此编写了存储过程。

一种方法(两个“选择”):

  1. create table my_table as select ...
  2. \d my_table
  3. select * from my_table

  • 与使用pg_typeof()相比,这似乎很笨拙且不方便。 (4认同)
  • @JayTaylor我同意。人生是一场旅程。:-) (4认同)