次のpsqlコマンドを含むスクリプトがあります。
psql -h $PHOST -p $PPORT -U $PUSER -d $PDATABASE -c "SELECT COUNT(*) FROM (${SQL%?}) AS query;"
1つまたは2つの関係を照会する単純な照会を渡すことは問題ありません。ただし、長いクエリを渡すと、次のエラーが発生します。
/usr/bin/psql: Argument list too long
mvコマンドを使用して「パラメータリストが多すぎる」の解決策を見つけましたが、試しましたが、何も変更されませんでした。
ulimit -S -s unlimited
以前はMAX_ARGサイズを増やすためにpsqlコマンドを使用していましたが、まだエラーが発生しました。
psql:引数リストが長すぎるエラーを解決するには?
答え1
psqlは大きな文字列である必要があるため、ここではこのxargs
トリックは機能しません。-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
このコマンドは、シェルに組み込まれているユーティリティなどの「引数リストが多すぎる」という問題を経験しませんbash
。