【发布时间】:2019-11-28 10:10:37
【问题描述】:
我正在针对 PostgreSQL 9.6 数据库运行 liquibase,并将 dropDefaultValue 更改为 NON-NULLABLE 列。
- dropDefaultValue:
columnDataType: VARCHAR(255)
columnName: bar
tableName: foo
我预计这会产生 DROP DEFAULT 指令(如文档中所建议 - https://www.liquibase.org/documentation/changes/drop_default_value.html),但我看到了:
ALTER TABLE public.foo ALTER COLUMN bar SET DEFAULT NULL
净效果是该列仍然具有默认值(NULL),而不是根本没有默认值。这是意料之中的吗?
【问题讨论】:
-
对于可为空的列,除非另有说明,否则默认为空。所以将默认值设置为 null unsets 它。这是正确的行为
-
谢谢@HaleemurAli - 我应该提到该列被定义为不可为空。
-
没有“根本没有默认值”之类的东西(在任何数据库中,包括 Postgres 中) - 如果您不指定默认值,则默认值为
null -
OK - 所以如果 pgadmin 向我显示两个不可为空的 varchar 列定义,其中一个报告 Default 根本没有值,另一个(在此 liquibase 更改之后)报告 Default 为
NULL::character varying,那没关系,实际上是“同一件事”?
标签: postgresql liquibase