我有一个删除插入CTE,它以一种奇怪的方式失败了

我有一个删除插入CTE,它以一种奇怪的方式失败了,第1张

我有一个删除插入CTE,它以一种奇怪的方式失败了

在第一个示例中,您为语句提供了一个 尚未输入类型的 NULL

INSERT

在第二个示例中,您较早一步(在CTE中)提供NULL,则必须键入表达式并为其指定type

unknown
。对于其他
常量

(例如数字常量
123
:),Postgres可以派生更合适的默认数据类型,但NULL(或字符串文字
'foo'
)可以是 任何东西
。并且在
unknown
和之间没有定义类型转换
json


在CTE中将NULL强制转换为正确的数据类型可以避免该问题(如您现在所知)。
或者

text
为时已晚,在铸造链中用作垫脚石。一切都可以投射到/投射出来
text

您可以将演示简化为以下内容:

作品:

SELECt NULL::json;

失败:

SELECT new_data::jsonFROM  (SELECt NULL AS new_data) t;

再次工作:

SELECT new_dataFROM  (SELECt NULL::json AS new_data) t;

或者:

SELECT new_data::text::jsonFROM  (SELECT NULL AS new_data) t;


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5620599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存