在第一个示例中,您为语句提供了一个 尚未输入类型的 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;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)