我正在使用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(。