PostgreSQL使用INSERT...SELECT插入空日期报错求助
PostgreSQL插入NULL日期报错的原因
核心原因
问题出在CTE(WITH子句)里的VALUES (null)没有明确指定数据类型。PostgreSQL遇到无类型约束的NULL时,会默认将其推断为text类型,而目标表的some_date列是date类型,类型不匹配就触发了报错。
为什么直接INSERT能成功
直接用INSERT INTO null_date (some_date) VALUES (null)时,PostgreSQL能通过目标列的date类型上下文,自动把无类型NULL转换成date类型的NULL,所以不会报错。
修复方法
有两种简单的修复方式:
- 在CTE的VALUES里给NULL指定类型:
CREATE TABLE null_date ( id bigserial PRIMARY KEY , some_date date ); WITH date_data (some_date) AS ( VALUES (null::date) ) INSERT INTO null_date (some_date) SELECT some_date FROM date_data;
- 在SELECT语句里显式转换类型:
CREATE TABLE null_date ( id bigserial PRIMARY KEY , some_date date ); WITH date_data (some_date) AS ( VALUES (null) ) INSERT INTO null_date (some_date) SELECT some_date::date FROM date_data;
内容的提问来源于stack exchange,提问作者caverac
相关产品推荐
相关产品推荐

