Bash

如何解決 psql: Argument list too long 的錯誤?

  • May 12, 2020

我有一個包含以下 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 的錯誤?

這個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

此命令不會像shellprintf中的內置實用程序那樣受到“參數列表太長”問題的影響。bash

引用自:https://unix.stackexchange.com/questions/586070