Zoals beschreven hier
, postgres staat u momenteel niet toe om CREATE FUNCTION
te gebruiken gelijktijdig:
Een oplossing hiervoor is ervoor te zorgen dat geen twee transacties de CREATE FUNCTION
. proberen uit te voeren tegelijkertijd.
U kunt posgres adviessloten . gebruiken daarvoor.
Een goede introductie tot adviserende sloten vindt u hier:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
U kunt bijvoorbeeld het volgende gebruiken:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Hiervoor is een exclusieve adviesvergrendeling op transactieniveau nodig, zodat er geen twee gelijktijdige transacties tegelijkertijd kunnen worden uitgevoerd. Aan het einde van de transactie wordt het slot automatisch vrijgegeven.