Ответ 1
Неважно, какие столбцы я выбираю?
Нет, это не имеет значения. Даже если используется SELECT 1 FROM table WHERE ... FOR UPDATE
, запрос блокирует все строки, соответствующие условиям.
Если запрос извлекает строки из соединения, и мы не хотим блокировать строки из всех таблиц, участвующих в объединении, но только строки из определенных таблиц, может быть полезно синтаксис SELECT ... FOR UPDATE OF list-of-tablenames
:
http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE
Я не могу сделать выбор в функции, не сохраняя данные где-то, поэтому я сохраняю фиктивную переменную. Это кажется взломанным; это правильный способ сделать что-то?
В Pl/PgSql используйте команду PERFORM
для отказа от результата запроса:
http://www.postgresql.org/docs/9.2/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT
Вместо:
SELECT 1 INTO dummy FROM my_table WHERE userid=v_1 LIMIT 1 FOR UPDATE;
использование:
PERFORM 1 FROM my_table WHERE userid=v_1 LIMIT 1 FOR UPDATE;