PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres SELECT ... FOR UPDATE dans les fonctions

Non, ce n'est pas grave. Même si SELECT 1 FROM table WHERE ... FOR UPDATE est utilisé, la requête verrouille toutes les lignes qui remplissent les conditions where.

Si la requête récupère les lignes d'une jointure et que nous ne voulons pas verrouiller les lignes de toutes les tables impliquées dans la jointure, mais uniquement les lignes à partir de tables spécifiques, un SELECT ... FOR UPDATE OF list-of-tablenames la syntaxe peut être utile :
http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE


En Pl/PgSql, utilisez un PERFORM commande pour supprimer le résultat de la requête :
http://www.postgresql.org/docs/9.2/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT

Au lieu de :

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

utiliser :

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