Команда Postgresql LOCK TABLE ожидает даже с NOWAIT - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть процесс (cron job) в моем приложении (JEE).И у меня есть два его экземпляра на двух разных машинах.
Я хочу, чтобы это задание cron выполнялось только один раз.Я знаю, что есть много способов сделать это.Но я хочу сделать это, используя блокировку таблицы базы данных.

Итак, первое, что делается в этом процессе, - это получить LOCK для некоторой таблицы в базе данных.Если один процесс получает блокировку, то другой процесс должен немедленно прервать.

Я использую Postgresql (10.4). Это то, что я имею в своем коде

Statement statement = connection.createStatement();
statement.execute("LOCK TABLE crontable NOWAIT");

При этом я ожидаю, что когда один процесс получит блокировку, тогда другой процесс будет прерван (согласнок документации https://www.postgresql.org/docs/10/sql-lock.html)

Но в настоящее время происходит то, что другой процесс ожидает, пока блокировка не будет снята первым процессом.

Я что-то здесь упускаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...