Hola, yo utilizo postgresql en su versión 9.5 y tengo un problema con una 
aplicación que está generando un interbloqueo, las sentencias invlocradas están 
identificadas en el código de mi aplicación y es imprescindible su ejecución de 
esa forma. En los logs adjuntos de postgresql se puede ver que la línea con PID 
[21596-8] ejecuta un SELECT sobre la tabla dat-accion y luego en la línea con 
PID [21595-10] se intenta eliminar un trigger asociado a esta misma tabla, en 
este punto la conexión con PID 21595 se queda en estado 'DROP TRIGGER waiting' 
y la conexión con PID 21596 se queda 'idle in transaction' (esto lo puedo 
observar en los procesos del sistema operativo Ubuntu 16.04). Esta situación se 
queda infinitamente si no mato el proceso y sucede siempre que llevo a cabo en 
mi aplicación las acciones que desencadenan la ejecución de las sentencias 
antes mencionadas. 

Haciéndole la consulta que se muestra debajo a pg_stat_activity y a pg_locks 
para ver los bloqueos aplicados por postgresql sobre la tabla dat_accion se 
puede ver que existe un bloqueo de tipo "AccessExclusiveLock", que según tengo 
entendido, entra en conflicto con el bloqueo "AccessShareLock". 
Alguna idea de por qué ocurre y cómo puedo resolver este problema? 

Saludos 

SELECT pg_class.relname, 
pg_locks.mode, 
pg_stat_activity.query, 
age(now(),pg_stat_activity.query_start) as "age", 
pg_stat_activity.pid 
FROM pg_stat_activity, pg_locks 
LEFT OUTER JOIN pg_class ON (pg_locks.relation = pg_class.oid) 
WHERE pg_locks.pid=pg_stat_activity.pid 
AND pg_stat_activity.datname = 'proyecto' 
AND pg_class.relname = 'dat_accion' 
ORDER BY age DESC; 

relname         mode    query   age     pid 
"dat_accion"    "AccessShareLock"       "DEALLOCATE pdo_stmt_00000003"  
"00:18:00.830715"       21596 
"dat_accion"    "AccessShareLock"       
        "00:18:00.825623"       21595 
"dat_accion"    "AccessExclusiveLock"   
        "00:18:00.825623"       21595 
2018-06-01 14:58:42 CDT [21594-1] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000001: SELECT pg_backend_pid();
2018-06-01 14:58:42 CDT [21594-2] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000001
2018-06-01 14:58:42 CDT [21594-3] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000002: SELECT mod_seguridad.f_hubo_violacion() as st
2018-06-01 14:58:42 CDT [21594-4] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000002
2018-06-01 14:58:42 CDT [21594-5] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000003: SELECT table_schema, table_name
                    FROM information_schema.tables
                    WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
                    AND table_name NOT IN ('dat_pid', 'his_violacionesbd', 'dat_accion', 'dat_funcionalidad')
                    AND (table_name NOT IN (SELECT event_object_table
                                            FROM information_schema.triggers
                                            WHERE trigger_schema NOT IN ('pg_catalog', 'information_schema')
                                            AND trigger_name = 'tg_2eliminar_pid' AND trigger_schema = table_schema)
                    OR table_name NOT IN (SELECT event_object_table
                                          FROM information_schema.triggers
                                          WHERE trigger_schema NOT IN ('pg_catalog', 'information_schema')
                                          AND trigger_name = 'tg_1insertar_violacion' AND trigger_schema = table_schema))
2018-06-01 14:58:42 CDT [21594-6] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000003
2018-06-01 14:58:42 CDT [21594-7] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000004: SELECT count(1)
                    FROM information_schema.tables 
                    WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
                    AND table_name NOT IN ('dat_pid', 'his_violacionesbd', 'dat_accion', 'dat_funcionalidad')
2018-06-01 14:58:42 CDT [21594-8] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000004
2018-06-01 14:58:42 CDT [21594-9] proyecto@proyecto231cein101SERVERLOG:  statement: SET DATESTYLE TO European,SQL;
2018-06-01 14:58:42 CDT [21594-10] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000005: SELECT m.idsession AS m__idsession, m.sessionid AS m__sessionid, m.session AS m__session, m.usuario AS m__usuario, m.ip AS m__ip, m.fecha AS m__fecha, m.hora AS m__hora, m.idrol AS m__idrol, m.idusuario AS m__idusuario, m.identidad AS m__identidad FROM mod_seguridad.seg_session m WHERE (m.sessionid = $1) LIMIT 1
2018-06-01 14:58:42 CDT [21594-11] proyecto@proyecto231cein101SERVERDETAIL:  parameters: $1 = '6lgh6riukchr4kqfmr7h557vt0'
2018-06-01 14:58:42 CDT [21594-12] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000005
2018-06-01 14:58:42 CDT [21595-1] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000001: SELECT pg_backend_pid();
2018-06-01 14:58:42 CDT [21595-2] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000001
2018-06-01 14:58:42 CDT [21595-3] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000002: SELECT mod_seguridad.f_hubo_violacion() as st
2018-06-01 14:58:42 CDT [21595-4] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000002
2018-06-01 14:58:42 CDT [21595-5] proyecto@proyecto231cein101SERVERLOG:  statement: set search_path=pg_catalog,mod_seguridad;
2018-06-01 14:58:42 CDT [21595-6] proyecto@proyecto231cein101SERVERLOG:  statement: SET DATESTYLE TO European,SQL;
2018-06-01 14:58:42 CDT [21595-7] proyecto@proyecto231cein101SERVERLOG:  statement: BEGIN
2018-06-01 14:58:42 CDT [21596-1] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000001: SELECT pg_backend_pid();
2018-06-01 14:58:42 CDT [21596-2] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000001
2018-06-01 14:58:42 CDT [21596-3] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000002: SELECT mod_seguridad.f_hubo_violacion() as st
2018-06-01 14:58:42 CDT [21596-4] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000002
2018-06-01 14:58:42 CDT [21596-5] proyecto@proyecto231cein101SERVERLOG:  statement: set search_path=pg_catalog,mod_traza;
2018-06-01 14:58:42 CDT [21596-6] proyecto@proyecto231cein101SERVERLOG:  statement: SET DATESTYLE TO European,SQL;
2018-06-01 14:58:42 CDT [21596-7] proyecto@proyecto231cein101SERVERLOG:  statement: BEGIN
2018-06-01 14:58:42 CDT [21596-8] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000003: SELECT m.idaccion AS m__idaccion, m.descripcion AS m__descripcion FROM mod_seguridad.dat_accion m INNER JOIN mod_seguridad.dat_funcionalidad m2 ON m.idfuncionalidad = m2.idfuncionalidad WHERE (m2.referencia LIKE $1 AND m.denominacion = $2)
2018-06-01 14:58:42 CDT [21596-9] proyecto@proyecto231cein101SERVERDETAIL:  parameters: $1 = '%/index.php/configuracion/configuracion%', $2 = 'deshabilitarDeteccionCambiosBD'
2018-06-01 14:58:42 CDT [21596-10] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000003
2018-06-01 14:58:42 CDT [21595-8] proyecto@proyecto231cein101SERVERLOG:  execute pdo_stmt_00000003: 
                SELECT 'DROP TRIGGER IF EXISTS tg_1insertar_violacion ON ' || table_schema || '.' || table_name || ';' || 
                       'DROP TRIGGER IF EXISTS tg_2eliminar_pid ON ' || table_schema || '.' || table_name || ';' AS sentencia
                FROM  information_schema.tables
                WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
                AND table_name NOT IN ('dat_pid', 'his_violacionesbd') 
                ORDER BY table_schema;
            
2018-06-01 14:58:42 CDT [21595-9] proyecto@proyecto231cein101SERVERLOG:  statement: DEALLOCATE pdo_stmt_00000003
2018-06-01 14:58:42 CDT [21595-10] proyecto@proyecto231cein101SERVERLOG:  statement: 
    DROP TRIGGER IF EXISTS tg_1insertar_violacion ON mod_seguridad.dat_accion;
  • Interbloqueo Carlos Camilo Fernández Madrazo

Reply via email to