\ copyを使用する場合のpsqlの変数置換


8

私はpsqlコマンド\ copyを使用していますが、クエリのスクリプトを作成するときに行ったように、シェルから(テーブル名の)変数を変数に渡したいと思います。私はpsqlのドキュメントを読みました

コマンドの構文は、SQL COPYコマンドの構文に似ています。このため、\ copyコマンドには特別な解析ルールが適用されます。特に、変数置換ルールとバックスラッシュエスケープは適用されません。

これは非常に決定的なようですが、誰かが回避策を知っているのでしょうか?

回答:



2

備考:私はこの問題をMS Windowsで自分で偶然見つけましたが、そのstdinを使用してpsqlにフィードするものをすでに持っていました。入力を組み合わせる必要がありました。そして、それはそれが本当にトリッキーになる場所です。私の意見の例では、アーウィンの回答の他に、いくらか価値のあるものを共有することを考えたので\copy、Windowsプラットフォームのstdinにデータを入力するときに他の誰かも「変数を使用」する必要がある場合に備えて、ここに回答として投稿します。

stdinから一部のデータをコピー\copyし、同時に"variable"を使用する場合は、括弧がエスケープされて事態が複雑になる可能性があります。以下はその方法の例です。列名をスコープとする括弧のトリプル(シック!)キャレットエスケープに注意してください

@echo off
set TBL=wd
(
 echo truncate %TBL%;
 echo \copy %TBL% (depth,path,name,created,accessed,modified,size^^^) from stdin csv
 C:\msys64\usr\bin\find ^
  "e:/somepath" ^
  -type f -printf "%%d,\"%%h\",\"%%f\",\"%%t\",\"%%a\",\"%%c\",%%s\n"
) | "C:\Program Files\PostgreSQL\9.4\bin\psql.exe" -h some.server -U user dbname
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.