显示查询结果列类型 (PostgreSQL)
Posted
技术标签:
【中文标题】显示查询结果列类型 (PostgreSQL)【英文标题】:Show query result column types (PostgreSQL) 【发布时间】:2011-03-17 02:47:10 【问题描述】:有没有办法轻松获取查询结果的列类型?我阅读了 psql 文档,但我认为它不支持。理想情况下,我可以得到类似的东西:
columna : text | columnb : integer
----------------+-------------------
oh hai | 42
有没有一种方法可以在不编码的情况下获取这些信息?
【问题讨论】:
哈,我昨天刚刚在#postgresql 中问过这个问题(当时没有答案) 我不认为psql
可以直接向您展示。但是修改它应该很容易做到这一点。也许您可以编写一个存储过程来模拟这一点。
【参考方案1】:
可以获取任何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)
干杯!
【讨论】:
【参考方案2】:\gdesc
command(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[]
【讨论】:
postgres/psql 10 中是否存在任何方便的东西? @JustinBailey 不幸的是,我没有找到 psql 10 的等价物。 你可以使用更高版本的psql
来访问旧的PostgreSQL服务器,例如apt install postgresql-client-11
【参考方案3】:
我认为你不能准确地打印示例中的内容,除非你为它编写一个存储过程。
一种方法(两个“选择”):
create table my_table as select ...
\d my_table
select * from my_table
【讨论】:
是的,我只需要类型,不一定是那种格式。谢谢。 与使用pg_typeof()
相比,这似乎相当笨拙和不方便。
@JayTaylor 我同意。人生是一场旅程。 :-)以上是关于显示查询结果列类型 (PostgreSQL)的主要内容,如果未能解决你的问题,请参考以下文章