Comme décrit ici
, postgres ne vous permet pas actuellement d'utiliser CREATE FUNCTION
simultanément :
Une solution à cela est de s'assurer qu'aucune transaction n'essaye de faire la CREATE FUNCTION
en même temps.
Vous pouvez utiliser posgres verrous consultatifs pour ça.
Une bonne introduction aux verrous consultatifs peut être trouvée ici :https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Par exemple, vous pouvez utiliser :
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Cela prend un verrou consultatif exclusif au niveau de la transaction, de sorte qu'aucune transaction simultanée ne peut exécuter créer la fonction en même temps. A la fin de la transaction, le verrou est automatiquement levé.