您如何诊断为什么一个实例在psql
执行 SQL 脚本中途挂起?
我有一个带有一堆UPDATE
语句的卫生脚本,例如:
UPDATE table1 SET column1 = CONCAT('stuff', id);
UPDATE table2 SET column2 = CONCAT('stuff', id);
...
该脚本是准备开发数据库的自动化例程的一部分。但是,这阻止了我,因为脚本无限期挂起。
文件中有大约一百个这样的语句,但是,大约一半,脚本挂起。当我从父 bash 脚本重新运行该过程时,它会挂在不同的位置,因此它不是导致问题的特定语句。此外,当我psql
手动运行命令时,它运行完美而不会挂起。
我正在运行的电话是:
psql --user=myuser --no-password --host=localhost -d mydatabase -a -f sanitize.sql
因为它在从 Bash 内部运行时不确定地失败,但是当我直接在 shell 中运行它时成功,这可能是问题的一部分,但我不确定要调查什么,因为没有抛出错误。我从哪里开始调查这个?
问题最终成为 Bash 中的一些晦涩的错误。我是
psql
从一个 Bash 脚本调用的,该脚本是从另一个 Bash 脚本调用的,该脚本是从 Cron 作业运行的,该作业将所有输出重定向到日志文件。当我更改它以便 Cron 直接运行psql
调用并重定向输出时,“挂起”停止了。