带有 UUID 的 PostgreSQL 中的变量

Sog*_*ogl 8 sql postgresql variables

我所有的表都使用 UUID 主键。我想在一个sql文件中用测试数据填充表,但不能在其他表中使用UUID PK作为FK,因为默认函数uuid_generate_v4()在执行过程中会生成一个随机值。

例如我想要的:

SET Uservar = uuid_generate_v4();
SET Postvar = uuid_generate_v4();

INSERT INTO public."User" (id, name) VALUES (Uservar, 'Foo Bar');
INSERT INTO public."Post" (id, content, userId) VALUES (Postvar, 'Test message', Uservar)
Run Code Online (Sandbox Code Playgroud)

这该怎么做?或者如何选择已经创建的 UUID 并存储以供下次插入?

Pat*_*ick 0

当您将两个组合成一个语句时,您可以很容易地INSERT重复使用这些值:uuid

WITH newUser(id uuid) AS (
  INSERT INTO public."User" (id, name)
  VALUES (uuid_generate_v4(), 'Foo Bar')
  RETURNING id
)
INSERT INTO public."Post" (id, content, userId)
  SELECT uuid_generate_v4(), 'Test message', id
  FROM newUser;
Run Code Online (Sandbox Code Playgroud)

当您想为现有用户添加帖子时,可以使用非常相似的方法:

INSERT INTO public."Post" (id, content, userId)
  SELECT uuid_generate_v4(), 'Test message', id
  FROM public."User"
  WHERE name = 'Foo Bar';
Run Code Online (Sandbox Code Playgroud)

当 PK 自动生成(即id uuid PRIMARY KEY DEFAULT uuid_generate_v4())但您不会在INSERT语句中显式包含 PK 列时,这也适用。