PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres SELECT ... FOR UPDATE in Funktionen

Nein, es spielt keine Rolle. Auch wenn SELECT 1 FROM table WHERE ... FOR UPDATE verwendet wird, sperrt die Abfrage alle Zeilen, die Where-Bedingungen erfüllen.

Wenn die Abfrage Zeilen aus einem Join abruft und wir nicht Zeilen aus allen am Join beteiligten Tabellen sperren möchten, sondern nur Zeilen aus bestimmten Tabellen, ein SELECT ... FOR UPDATE OF list-of-tablenames Syntax kann nützlich sein:
http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE


Verwenden Sie in Pl/PgSql einen PERFORM Befehl zum Verwerfen des Abfrageergebnisses:
http://www.postgresql.org/docs/9.2/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT

Statt:

SELECT 1 INTO dummy FROM my_table WHERE userid=v_1 LIMIT 1 FOR UPDATE;

verwenden:

PERFORM 1 FROM my_table WHERE userid=v_1 LIMIT 1 FOR UPDATE;