【发布时间】:2017-03-21 10:39:12
【问题描述】:
我之前使用以下命令更改了列的数据类型,但现在我想为同一列添加默认值,例如 0000-00-00,有人可以帮我吗?
alter table table name alter column name type date using(column name::date)
【问题讨论】:
-
这是一个无效的日期,Postgres 不会让你存储无效的 DATE 值。您不能将其用作默认值。如果您想表明没有价值,请使用
null- 这就是它的用途。如果您需要一个位于所有可能的 DATE 值之前的非空值,或者使用-infinity。 -
如果您只想在列中存储“未知日期”,请将其标记为 NULLable。我怀疑您试图模仿 MySQL 使用
0000-00-00作为占位符的行为,但我想不出任何好的理由这样做。 -
没有
0000-00-00这样的日期。没有年份0也没有月份0也没有日期0。最小的可能是0001-01-01。 -
啊,我想我们有一个X/Y Problem:您的实际问题是您如何插入数据,而不是表定义。尝试将空字符串作为值传递 不 与跳过列相同,因此该错误表明您编写了错误的 SQL。
-
@SampathSam 是的,这就是你的错误:当你没有值时,你不应该传递一个空字符串。在列上设置默认值将无济于事,因为就数据库而言,您 正在 传递一个值,即空字符串。当您没有值时,您需要更改生成 SQL 的代码以指定
NULL。
标签: postgresql