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

Syntax to manually insert a UUID value in Postgres

我有一个 table 是这样创建的:

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 documentation 中提到的不同格式,但似乎没有任何格式除外。这是一个愚蠢的语法问题还是我在这里遗漏了什么?正确的语法是什么?

您可以将其作为字符串文字传递,并让数据库将其隐式转换为 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
);

您应该使用 UUID 生成器并安装 UUID extension. PostgreSQL requires valid UUIDs conforming to RFC 4122。随机字符串不是有效的 UUID。

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