Postgres alter table 默认为 'NULL::character varying' 而不是 NULL
Postgres alter table defaults to 'NULL::character varying' instead of NULL
我正在使用 psql 更改数据库 table。当前 运行 以下 alter-statement:
ALTER TABLE "devices" ADD "device_id" VARCHAR(255) NULL DEFAULT NULL;
但我最终在 create-table-语句中得到以下内容:
"device_id" VARCHAR(255) NULL DEFAULT 'NULL::character varying'
为什么默认设置为 'NULL::character varying'
?
我有点困惑,因为 table 已经有多个 varchar 字段,默认值是正确的.. ex 来自 CREATE-statement:
"external_id" VARCHAR(50) NULL DEFAULT NULL,
仅供参考:此专栏 external_id
是多年前在我开始接触 table 之前创建的。
由于您将默认值明确设置为 NULL,PostgreSQL 添加了一个列默认值。默认值不以字符串形式存储,但它们被解析并存储为解析树(以二进制形式)。当您显示 table 定义时,PostgreSQL 会“解析”此信息,这会导致(等效)NULL::character varying
(::
是类型转换)。
这很好,但如果您觉得它在视觉上令人不快,您可以简单地删除默认值:
ALTER TABLE devices ALTER device_id DROP DEFAULT;
这将摆脱默认值,这不会改变行为(“默认默认值”为 NULL)。
我正在使用 psql 更改数据库 table。当前 运行 以下 alter-statement:
ALTER TABLE "devices" ADD "device_id" VARCHAR(255) NULL DEFAULT NULL;
但我最终在 create-table-语句中得到以下内容:
"device_id" VARCHAR(255) NULL DEFAULT 'NULL::character varying'
为什么默认设置为 'NULL::character varying'
?
我有点困惑,因为 table 已经有多个 varchar 字段,默认值是正确的.. ex 来自 CREATE-statement:
"external_id" VARCHAR(50) NULL DEFAULT NULL,
仅供参考:此专栏 external_id
是多年前在我开始接触 table 之前创建的。
由于您将默认值明确设置为 NULL,PostgreSQL 添加了一个列默认值。默认值不以字符串形式存储,但它们被解析并存储为解析树(以二进制形式)。当您显示 table 定义时,PostgreSQL 会“解析”此信息,这会导致(等效)NULL::character varying
(::
是类型转换)。
这很好,但如果您觉得它在视觉上令人不快,您可以简单地删除默认值:
ALTER TABLE devices ALTER device_id DROP DEFAULT;
这将摆脱默认值,这不会改变行为(“默认默认值”为 NULL)。