gpt4 book ai didi

postgresql - 结果列的 Postgres 类型

转载 作者:行者123 更新时间:2023-11-29 11:40:32 25 4
gpt4 key购买 nike

在 postgres 中,有一个函数 pg_typeof 可以给出字段的类型。示例:

-- Original query
select name, age, descriptions from things LIMIT 1;
-- Meta query
select pg_typeof(name), pg_typeof(age), pg_typeof(descriptions) from things LIMIT 1;

pg_typeof | pg_typeof | pg_typeof
-------------------+-----------+-----------
character varying | integer | text[]

这是一个非常酷的功能。我感兴趣的是如何在空表上执行类似的技术。如果 things 表中没有任何内容,则前面的命令不会返回任何行。仅从查询中,我希望能够看到查询结果列的类型。请注意,我要问的不是获取表的列类型。我已经知道 information_schema.columns。设想一个查询不能整齐地映射到表行或有很多 FK 约束的情况。我不想创建虚拟数据来使上述技术起作用。如果有人知道执行此操作的方法(并且我知道 F# 有一个具有执行此操作的魔法的库),我将不胜感激。如果问题不清楚,请告诉我如何改进它。谢谢。

最佳答案

由于一个值​​有一个类型(由规划器推断),即使它的值为 NULL,您可以创建一个仅包含 NULL 的虚拟行,并测试 NULL 的类型。您可以使用 UNION 来做到这一点,其中列类型是根据第一个(空)结果集确定的,而第二个结果集只包含正确数量的 NULL。

这是一个例子,我只是 tested on SQLFiddle ;更复杂的示例可能需要额外的子查询以允许对空结果进行 UNION(例如,您不能在此处使用 LIMIT 0),但请注意它与函数的返回类型一起使用以及基本列:

Create Table Test ( id int, name text );

Select pg_typeof(id) as id_type, pg_typeof(name) as name_type, pg_typeof(len) as len_type
From
(
Select id, name, length(name) as len From test
Union
Select null, null, null
) as x;

(注意:SQLFiddle 上结果的 JSON 表示法似乎是遇到它不知道如何显示的列类型时发生的情况。)

关于postgresql - 结果列的 Postgres 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com