Como você diagnostica por que uma instância de psql
está travando no meio da execução de um script SQL?
Eu tenho um script de saneamento com várias UPDATE
declarações como:
UPDATE table1 SET column1 = CONCAT('stuff', id);
UPDATE table2 SET column2 = CONCAT('stuff', id);
...
O script faz parte de uma rotina automatizada para preparar um banco de dados de desenvolvimento. No entanto, isso está me bloqueando porque o script trava indefinidamente.
Há cerca de uma centena de declarações como esta no arquivo, mas, mais ou menos na metade, o script trava. Quando executo novamente o processo a partir de um script bash pai, ele trava em um ponto diferente, portanto, não é uma instrução específica que está causando o problema. Além disso, quando executo o psql
comando manualmente, ele funciona perfeitamente sem travar.
A chamada que estou executando é:
psql --user=myuser --no-password --host=localhost -d mydatabase -a -f sanitize.sql
Como ele falha de forma não determinística quando executado de dentro do Bash, mas é bem-sucedido quando o executo diretamente em um shell, isso provavelmente é parte do problema, mas não tenho certeza do que investigar, pois nenhum erro está sendo gerado. Por onde começo a investigar isso?
O problema acabou sendo algum bug obscuro no Bash. Eu estava chamando
psql
de um script Bash, que estava sendo chamado de outro script Bash, que estava sendo executado a partir de um trabalho Cron, que estava redirecionando toda a saída para um arquivo de log. Quando alterei para que o Cron executasse diretamente apsql
chamada e redirecionei a saída, o "suspensão" parou.