有没有办法轻松获取查询结果的列类型?我阅读了 psql 文档,但我认为它不支持。理想情况下,我能够得到类似的东西:
columna : text | columnb : integer
----------------+-------------------
oh hai | 42
有没有一种方法可以在不编码的情况下获取这些信息?
有没有办法轻松获取查询结果的列类型?我阅读了 psql 文档,但我认为它不支持。理想情况下,我能够得到类似的东西:
columna : text | columnb : integer
----------------+-------------------
oh hai | 42
有没有一种方法可以在不编码的情况下获取这些信息?
可以获得任何 SELECT 查询结果列类型。
例子
给定以下查询和结果,让我们回答问题*“all_ids 的列类型是什么?”*
SELECT array_agg(distinct "id") "all_ids" FROM "auth_user";
all_ids
--------------------------------------------
{30,461577687337538580,471090357619135524}
(1 row)
我们需要一种机制来揭示“all_ids”的类型。
在postgres 邮件列表档案中,我发现了对名为pg_typeof
.
示例用法:
SELECT pg_typeof(array_agg(distinct "id")) "all_ids" FROM "auth_user";
输出:
all_ids
----------
bigint[]
(1 row)
干杯!
\gdesc
使用命令(psql 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[]
我认为您不能准确地打印示例中的内容,除非您为其编写存储过程。
一种方法(两个“选择”):
create table my_table as select ...
\d my_table
select * from my_table