Som beskrivs här
, postgres tillåter för närvarande inte att du använder CREATE FUNCTION
samtidigt:
En lösning på detta är att se till att inga två transaktioner försöker göra CREATE FUNCTION
samtidigt.
Du kan använda posgres rådgivningslås för det.
En bra introduktion till rådgivande lås hittar du här:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Du kan till exempel använda:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Detta kräver ett exklusivt rådgivande lås på transaktionsnivå, så att inga två samtidiga transaktioner kan köras skapa funktionen samtidigt. I slutet av transaktionen frigörs låset automatiskt.