Eu tenho um sistema de muitos scripts de nós que lêem e/ou escrevem automaticamente em um banco de dados Postgres o tempo todo. Um desses scripts aleatoriamente obtém um deadlock. Eu gostaria de depurar isso, mas o problema é que não sei qual outra consulta causa o deadlock. (eu uso pg )
Então minha pergunta é:
Se eu pegar um erro como este
{ error: deadlock detected
at Connection.parseE (/data/jenkins/workspace/03-10-Lotti-watcher-lotti-mod/import/node_modules/pg/lib/connection.js:604:13)
at Connection.parseMessage (/data/jenkins/workspace/03-10-Lotti-watcher-lotti-mod/import/node_modules/pg/lib/connection.js:403:19)
at Socket.<anonymous> (/data/jenkins/workspace/03-10-Lotti-watcher-lotti-mod/import/node_modules/pg/lib/connection.js:123:22)
at Socket.emit (events.js:197:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:150:17)
name: 'error',
length: 336,
severity: 'ERROR',
code: '40P01',
detail:
'Process 2376 waits for ShareLock on transaction 55837412; blocked by process 22585.\nProcess 22585 waits for ShareLock on transaction 55837411; blocked by process 2376.',
hint: 'See server log for query details.',
position: undefined,
internalPosition: undefined,
internalQuery: undefined,
where: 'while locking tuple (226684,50) in relation "lotti"',
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'deadlock.c',
line: '1146',
routine: 'DeadLockReport' }
posso obter a consulta e/ou usuário do outro processo para isolar e identificar o problema? Ou qualquer coisa assim, se fizer sentido.
Claro. Basta olhar para o arquivo de log do PostgreSQL.
Essas informações não são enviadas ao cliente por motivos de segurança: caso contrário, você pode criar instruções SQL que travam com outras consultas para ver as instruções de outra pessoa, que podem conter dados confidenciais.