Както е описано тук
, postgres в момента не ви позволява да използвате CREATE FUNCTION
едновременно:
Решение за това е да се гарантира, че нито една транзакция не се опитва да изпълни CREATE FUNCTION
по едно и също време.
Можете да използвате консултативни ключалки на posgres за това.
Добро въведение в съветващите заключвания можете да намерите тук:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Например можете да използвате:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Това изисква изключително съветно заключване на ниво транзакция, така че две едновременни транзакции да не могат да се изпълняват, създавайки функцията едновременно. В края на транзакцията заключването се освобождава автоматично.