在Postgres中手动插入UUID值的语法

7

我有一个表格,是这样创建的:

CREATE TABLE IF NOT EXISTS DIM_Jour (
    jour_id uuid NOT NULL,
    AAAA int,
    MM int,
    JJ int,
    Jour_Semaine int,
    Num_Semaine int,

    PRIMARY KEY (jour_id)
);

我正在尝试手动插入一些值以进行测试。我知道最终我需要使用UUID生成器。

INSERT INTO DIM_Jour (jour_id, AAAA, MM, JJ, Jour_Semaine, Num_Semaine) VALUES (
    292a485f-a56a-4938-8f1a-bbbbbbbbbbb1,
    2020,
    11,
    19,
    4,
    47
);

我得到了这个错误(或类似的错误)。
ERROR:  syntax error at or near "a485f"
 LINE 3:  292a485f-a56a-4938-8f1a-bbbbbbbbbbb1,
             ^

我尝试了Postgres文档中提到的不同格式,但似乎它不接受任何格式。这是一个愚蠢的语法问题还是我漏掉了什么?正确的语法是什么?
2个回答

9
您可以将其传递为字符串字面值,并使数据库隐式将其转换为UUID:
INSERT INTO DIM_Jour (jour_id, AAAA, MM, JJ, Jour_Semaine, Num_Semaine) VALUES (
    '292a485f-a56a-4938-8f1a-bbbbbbbbbbb1',
    2020,
    11,
    19,
    4,
    47
);

但是最好明确表达并自行执行转换操作。

INSERT INTO DIM_Jour (jour_id, AAAA, MM, JJ, Jour_Semaine, Num_Semaine) VALUES (
    '292a485f-a56a-4938-8f1a-bbbbbbbbbbb1'::UUID,
    2020,
    11,
    19,
    4,
    47
);

1
我以为我已经用单引号尝试过了,但我想可能还有其他错误。感谢确认。它有效。 - Jonath P

2

您应该使用UUID生成器并安装UUID扩展。PostgreSQL需要符合RFC 4122的有效UUID。随机字符串不是有效的UUID。

此外,如下所述,您应该将UUID作为带引号的字符串传递。


1
请注意,从Postgres 13开始,不再需要扩展程序来生成UUID。现在Postgres内置了gen_random_uuid()函数。 - user330315
真的。这是其中一个选项。 - adamkonrad

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