sql >> Base de Datos >  >> RDS >> PostgreSQL

por qué postgres da un error de actualización de fila al mismo tiempo cuando estoy bloqueando toda la tabla explícitamente

Gracias al comentario anterior de @sudo, si moví las declaraciones así:

BEGIN;    
    SELECT pg_advisory_xact_lock(2142616474639426746);
    CREATE OR REPLACE FUNCTION my_function() ....
    --the whole function definition is wrapped by an advisory lock
    SELECT * FROM my_function();
COMMIT;

entonces parece evitar el problema, he usado grandes datos (en realidad lo falsifiqué con bucles repetidos a través de los mismos datos). Tenga en cuenta que puede que no sea la forma más eficiente de hacer este tipo de cosas, pero funciona. El problema con el intento dado en la pregunta fue que el bloqueo probablemente solo se limitó a la transacción en la que se definió y, por lo tanto, la creación de la función aún estaba fuera de su alcance, es decir, no estaba bloqueada, por lo que aparecía el conflicto. Pero, todo parece estar bien y elegante ahora.