我试图运行PSQL下面的查询 -PSQL“BEGIN TRANSACTION”语句错误
DO $$
BEGIN TRANSACTION
LOCK TABLE tags IN EXCLUSIVE MODE;
IF (SELECT COUNT(*)
FROM tags
WHERE user_id = 1) > 3
THEN
INSERT INTO "tags" ("user_id", "friend_id", "status", "explanation", "score", "created_at", "updated_at")
VALUES (1, 4, 'pending', '', 0.0, '2016-02-29 00:43:58.969313', '2016-02-29 00:43:58.969313')
RETURNING "id";
INSERT INTO "tags" ("user_id", "friend_id", "status", "explanation", "score", "created_at", "updated_at")
VALUES (4, 1, 'pending', '', 0.0, '2016-02-29 00:43:58.969313', '2016-02-29 00:43:58.969313')
RETURNING "id";
ELSE
ROLLBACK;
END IF;
COMMIT;
$$;
不幸的是它不断示数出有 -
ERROR: syntax error at or near "TRANSACTION"
LINE 2: BEGIN TRANSACTION
^
,我似乎无法到弄清楚为什么它不喜欢BEGIN TRANSACTION
。我尝试添加;
并删除关键字TRANSACTION
。
谢谢。这背景是有几十个并行进程同时运行。 'LOCK TABLES'是这个的关键部分,所以每个进程在执行它的INSERT操作时简要地锁定表,这最终防止了双重写入。基于此,我仍然可以插入'LOCK TABLE匹配IN EXCLUSIVE MODE;'?我不认为它默认锁定表 – user2490003