Я пытаюсь выполнить следующий запрос в 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;
$$;
К сожалению, он продолжает erroring с -
ERROR: syntax error at or near "TRANSACTION"
LINE 2: BEGIN TRANSACTION
^
, и я не могу показаться, выяснить, почему он не любит BEGIN TRANSACTION
. Я попытался сыграть с добавлением ;
и удалением ключевого слова TRANSACTION
.
Спасибо. Фон для этого заключается в том, что одновременно выполняются десятки параллельных процессов. «LOCK TABLES» является важной частью этого, так что каждый процесс кратковременно блокирует таблицу, пока выполняет ее операции «INSERT», что в конечном итоге предотвращает двойное письмо. Исходя из этого, могу ли я по-прежнему вставлять 'LOCK TABLE спички в EXCLUSIVE MODE,'? Я не думаю, что он блокирует таблицу по умолчанию – user2490003