Come descritto qui
, al momento postgres non ti consente di utilizzare CREATE FUNCTION
contemporaneamente:
Una soluzione a questo è assicurarsi che nessuna transazione tenti di eseguire CREATE FUNCTION
allo stesso tempo.
Puoi utilizzare i blocchi di avviso posgres per quello.
Una buona introduzione ai blocchi di avviso può essere trovata qui:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Ad esempio, puoi utilizzare:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Ciò richiede un blocco consultivo esclusivo a livello di transazione, in modo che non possano essere eseguite due transazioni simultanee per creare la funzione contemporaneamente. Al termine della transazione, il blocco viene automaticamente sbloccato.