PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

tupla aggiornata contemporaneamente durante la creazione di funzioni in postgresql / PL/pgSQL

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.