![如何解决 psql: Argument list too long 的错误?](https://linux22.com/image/173020/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%20psql%3A%20Argument%20list%20too%20long%20%E7%9A%84%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我有一个包含以下 psql 命令的脚本:
psql -h $PHOST -p $PPORT -U $PUSER -d $PDATABASE -c "SELECT COUNT(*) FROM (${SQL%?}) AS query;"
当我传递一个查询一两个关系的简单查询时,没有问题。但是,当我传递一个长查询时,出现以下错误:
/usr/bin/psql: Argument list too long
我使用 mv 命令找到了“参数列表太长”的解决方案,我尝试了它,但没有任何改变。
我 ulimit -S -s unlimited
之前使用 psql 命令来增加 MAX_ARG 大小,但仍然出现错误。
如何解决 psql: Argument list too long 的错误?
答案1
这一xargs
技巧在这里不起作用,因为 psql 需要-c
是一个大字符串。
尝试另一种方法,将所有 sql 放入名为statements.sql
并启动的文件中psql
,如下所示:
psql -h "$PHOST" -p "$PPORT" -U "$PUSER" -d "$PDATABASE" -f statements.sql
创造statemements.sql
:
printf 'SELECT COUNT(*) FROM (%s) AS query;\n' "${SQL%?}" >statements.sql
printf
该命令不会像 shell中的内置实用程序那样遇到“参数列表太长”问题bash
。