我有两个表之间的一对多关系,其中 ID 是在插入时自动生成的。我想在“父”表中插入一行,然后在将多行插入“子”表时使用该行生成的 ID 作为外键。
例如,假设我有这个模式:
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4 (),
username TEXT NOT NULL,
);
CREATE TABLE posts (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4 (),
author_user_id UUID NOT NULL REFERENCES users (id),
body TEXT,
);
在 postgres 中,我可以使用以下方法插入多行VALUES
:
INSERT INTO
posts (author_user_id, body)
VALUES
(<some uuid here>, "Hello, World!"),
(<some uuid here>, "I'm hungry.");
我还可以使用公用表表达式插入用户和引用该作者的单个帖子:
WITH john AS (
INSERT INTO
users (username)
VALUES
(john_smith)
RETURNING
id
)
INSERT INTO
posts (author_user_id, body)
SELECT
john.id, "Hello, World!"
FROM
john;
有什么办法可以将两者结合起来吗?即插入单个用户,获取该新行的 ID,并在插入多个帖子时使用该 ID?
如果有更简单的方法,则不必通过 CTE。谢谢!
或者