PostgreSQL:如何将空值插入到UUID中。

5

需要在没有NOT NULL规定(不是主键)的uuid类型字段中插入空值。

当我尝试插入''时,会返回:

ERROR:  invalid input syntax for uuid: ""

当我尝试插入null时,会返回以下结果:
ERROR:  null value in column "uuid" violates not-null constraint

如何操作?

psql 9.3.5

SQL:

INSERT INTO inv_location (address_id)
VALUES (null)

请提供您的表定义(在 psql 中使用 \d tbl 命令获取)。还有您正在使用的逐字逐句的 INSERT 命令。并且始终提供您的Postgres版本。 - Erwin Brandstetter
你应该在问题中保留表定义。这是答案的关键(也应该是任何此类问题的一部分)。 - Erwin Brandstetter
3个回答

8
在Postgres中使用uuid_nil()函数来模拟空UUID(与00000000-0000-0000-0000-000000000000相同)。
INSERT INTO inv_location (address_id)
VALUES (uuid_nil())

如果需要uuid扩展(不确定),请运行以下命令(仅需运行一次):

create extension if not exists "uuid-ossp";

在我的使用情况下,我无法轻松安装该扩展,并且我已经想了很长时间如何安装。我不是聪明的人。无论如何,非常感谢,我只会复制字符串 :-) - Ben

7
如果该列被定义为NOT NULL,则您不能输入NULL值。就是这样。
在此错误消息中:

ERROR: null value in column "uuid" violates not-null constraint

"uuid"是该列的名称,而不是address_id数据类型。并且该列被定义为NOT NULL
uuid         | character varying(36) | not null

你的INSERT语句中没有在目标列表中包括"uuid",因此在缺少不同列默认值的情况下,NULL会被默认为NULL。糟糕。

这表明将基本类型名称(被滥用)作为标识符会导致令人困惑的错误消息。


1
原来它确实被定义为 NOT NULL。 - Erwin Brandstetter

1

插入到inv_location表中(address_id) VALUES ('00000000-0000-0000-0000-000000000000'::UUID)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接