有没有办法轻松获取查询结果的列类型?我阅读了psql文档,但我认为它不支持。理想情况下,我可以得到类似的东西:
columna : text | columnb : integer
----------------+-------------------
oh hai | 42
有没有办法可以在不编码的情况下获取这些信息?
答案 0 :(得分:45)
可以获取任何SELECT查询结果列类型。
示例强>
鉴于以下查询和结果,让我们回答问题*“all_ids的列类型是什么?”*
SELECT array_agg(distinct "id") "all_ids" FROM "auth_user";
all_ids
--------------------------------------------
{30,461577687337538580,471090357619135524}
(1 row)
我们需要一种机制来揭示“all_ids”的类型。
在postgres mailing list archives我发现了对名为 pg_typeof
的原生pg函数的引用。
使用示例:
SELECT pg_typeof(array_agg(distinct "id")) "all_ids" FROM "auth_user";
输出:
all_ids
----------
bigint[]
(1 row)
干杯!
答案 1 :(得分:4)
我认为您不能准确打印样本中的内容,除非您为其编写存储过程。
一种方法(两个“选择”):
create table my_table as select ...
\d my_table
select * from my_table
答案 2 :(得分:0)
使用\gdesc
命令(PostgreSQL 11)绝对可能:
显示当前查询缓冲区结果的描述(即列名和数据类型)。该查询实际上不是 执行; ,但是,如果其中包含某种类型的语法错误,则表明 错误将以正常方式报告。
如果当前查询缓冲区为空,则描述最近发送的查询。
例如:
$ 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[]