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 并存储以供下次插入?
当您将两个组合成一个语句时,您可以很容易地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 列时,这也适用。
归档时间: |
|
查看次数: |
4792 次 |
最近记录: |