Jak je popsáno zde
, postgres vám aktuálně neumožňuje používat CREATE FUNCTION
současně:
Řešením je zajistit, aby se žádné dvě transakce nepokusily provést CREATE FUNCTION
ve stejnou dobu.
Můžete použít poradní zámky posgres za to.
Dobrý úvod do poradenských zámků naleznete zde:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Můžete například použít:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
To vyžaduje výhradní poradní zámek na úrovni transakce, takže nelze spustit žádnou dvě souběžné transakce a vytvořit funkci současně. Na konci transakce se zámek automaticky uvolní.