Jak opisano tutaj
, postgres nie pozwala obecnie na użycie funkcji CREATE FUNCTION
jednocześnie:
Rozwiązaniem tego problemu jest upewnienie się, że żadne dwie transakcje nie próbują wykonać CREATE FUNCTION
w tym samym czasie.
Możesz użyć posgres blokad doradczych za to.
Dobre wprowadzenie do blokad doradczych można znaleźć tutaj:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Na przykład możesz użyć:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Wymaga to wyłącznej blokady doradczej na poziomie transakcji, tak aby żadne dwie współbieżne transakcje nie mogły jednocześnie utworzyć funkcji. Po zakończeniu transakcji blokada jest automatycznie zwalniana.