我正在使用Postgresql 9.5,并希望创建一个只在满足某些条件时才插入行的查询。应该(?)看起来像这样:
BEGIN;
>> WHAT SHOULD I DO ON THE FOLLOWING LINES?
>> I WANT TO ACCOMPLISH SOMETHING LIKE THIS:
IF (SELECT COUNT(*) FROM roles WHERE company_id = $(companyId)) + 1 >=
(SELECT max_count FROM companies WHERE id = $(companyId))
THEN ROLLBACK/THROW OR WHATEVER
<<
INSERT INTO users (user_id, ...) VALUES (...)
INSERT INTO roles (user_id, company_id) VALUES (...)
COMMIT;
因此,应该创建用户并将其连接到公司,除非已经有足够的人连接到该公司。我需要在交易中拥有它,以便有人不能潜入&#34;检查/更新之间。
我不确定如何编写此查询。需要帮助!
答案 0 :(得分:0)
为什么ROLLBACK
?您尚未完成任何交易(DML操作)。可能,您可以检查条件,如果TRUE
那么只执行INSERT
否则引发错误消息
您可以执行以下操作(您需要测试并查看)
DECLARE count1, maxCount INT;
begin
SELECT COUNT(*) INTO count1 FROM roles WHERE company_id = $(companyId)) + 1;
SELECT max_count INTO maxCount FROM companies WHERE id = $(companyId);
IF(count1 >= maxCount) THEN
BEGIN;
INSERT INTO users (user_id, ...) VALUES (...)
INSERT INTO roles (user_id, company_id) VALUES (...)
COMMIT;
END IF;
END;