Como se describe aquí
, postgres actualmente no le permite usar CREATE FUNCTION
al mismo tiempo:
Una solución a esto es asegurarse de que ninguna transacción intente hacer CREATE FUNCTION
al mismo tiempo.
Puede utilizar posgres bloqueos de aviso por eso.
Puede encontrar una buena introducción a los bloqueos de aviso aquí:https://vladmihalcea .com/how-do-postgresql-advisory-locks-work/
Por ejemplo, puede utilizar:
BEGIN; -- start of transaction
SELECT pg_advisory_xact_lock(2142616474639426746); -- random 64-bit signed ('bigint') lock number
CREATE OR REPLACE FUNCTION myfunction ...
COMMIT;
Esto requiere un bloqueo de aviso exclusivo a nivel de transacción, de modo que no se puedan ejecutar dos transacciones simultáneas para crear la función al mismo tiempo. Al final de la transacción, el bloqueo se libera automáticamente.