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

Tupel wird gleichzeitig aktualisiert, wenn Funktionen in postgresql / PL/pgSQL erstellt werden

Wie hier beschrieben , Postgres erlaubt derzeit nicht die Verwendung von CREATE FUNCTION gleichzeitig:

Eine Lösung dafür besteht darin, sicherzustellen, dass keine zwei Transaktionen versuchen, die CREATE FUNCTION auszuführen gleichzeitig.

Sie können posgres Beratungssperren verwenden dafür.

Eine gute Einführung in Beratungssperren finden Sie hier:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/

Sie können beispielsweise Folgendes verwenden:

BEGIN; -- start of transaction

SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number

CREATE OR REPLACE FUNCTION myfunction ...

COMMIT;

Dies erfordert eine exklusive Beratungssperre auf Transaktionsebene, sodass keine zwei gleichzeitigen Transaktionen gleichzeitig ausgeführt werden können, um die Funktion zu erstellen. Am Ende der Transaktion wird die Sperre automatisch aufgehoben.