psql:引数リストが長すぎるエラーを解決するには?

psql:引数リストが長すぎるエラーを解決するには?

次の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

関連情報