Postgres 将表默认值更改为 'NULL::character varying' 而不是 NULL



我正在使用psql来更改数据库表。当前正在运行以下alter语句:

ALTER TABLE "devices" ADD "device_id" VARCHAR(255) NULL DEFAULT NULL;

但是我在createtable语句中得到了以下内容:

"device_id" VARCHAR(255) NULL DEFAULT 'NULL::character varying'

为什么默认设置为'NULL::character varying'

我有点困惑,因为表已经有多个varchar字段,其中默认值是正确的。。来自CREATE语句的ex:

"external_id" VARCHAR(50) NULL DEFAULT NULL,

仅供参考:这个名为external_id的专栏是在我开始接触这张桌子之前多年前创建的。

由于您明确地将默认值设置为NULL,PostgreSQL添加了一个列默认值。默认值不是以字符串形式存储的,而是以解析树(二进制形式(进行解析和存储的。当您显示表定义时,PostgreSQL会"departes"此信息,从而产生(等效的(NULL::character varying(::是类型转换(。

这很好,但如果你发现它在光学上不舒服,你可以简单地去掉默认值:

ALTER TABLE devices ALTER device_id DROP DEFAULT;

这将去掉默认值,而默认值不会改变行为("默认默认值"为NULL(。

相关内容

  • 没有找到相关文章

最新更新