确保只有 table 中的现有用户可以在 PostgreSQL 中添加记录

making sure only an existing user in the table can add a record in PostgreSQL

我有类似 fb 群组的东西,人们可以在其中担任版主。 如果一个用户想在某个群里加版主,我想首先确认他本人是这个群的版主

目前 table 看起来像这样:

CREATE TABLE fb_groups_moderators (
    fb_group_id int,
    user_id  bigint,
    
    PRIMARY KEY (fb_group_id, user_id),
    FOREIGN KEY (fb_group_id) references fb_groups (id) ON DELETE CASCADE,
    FOREIGN KEY (user_id) references users (id) ON DELETE CASCADE
);

所以我不能这样做:

INSERT INTO fb_group_moderators (fb_group_id, user_id) VALUES (11, 123);

我需要检查调用此查询的用户实际上也是 fb_group_id = 11 的版主,然后他才能将用户 123 添加为该组的版主。

您需要将请求插入的用户 ID 作为参数传递给查询。然后,您可以使用 INSERT ... SELECT 语法。

考虑:

INSERT INTO fb_group_moderators (fb_group_id, user_id) 
SELECT v.fb_group_id, v.user_id
FROM (VALUES (11, 123, ?)) v(fb_group_id, user_id, adding_user_id)
INNER JOIN fb_group_moderators m
    ON  m.user_id = v.adding_user_id
    AND m.fb_group_id = v.fb_group_id

问号表示查询参数(请求插入的用户),然后在查询中使用别名 adding_user_id