确保只有 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
。
我有类似 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
。