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.