初めてテラテイルを利用させていただきます、質問方法に不備がありましたら申し訳ございません。
前提・実現したいこと
PowerShell(.ps1ファイル)から PostgreSQL(.sqlファイル)に変数を渡してCOPYコマンドを実行したい。
■ファイル構成
. D:\SQLTEST
. ├ POWERSHELL
. │ └ TEST.ps1
. ├ SQL
. │ └ TEST.sql
. └ CSV
. └ TEST.csv
発生している問題・エラーメッセージ
psql : unrecognized win32 error code: 123psql:D:/SQLTEST/SQL/TEST.sql:20: error: :: Invalid argument
該当のソースコード
■TEST.ps1
PowerShell
1 2$SQLF = "D:\SQLTEST\SQL\TEST.sql" 3$CSVDIR = "D:\SQLTEST\CSV" 4 5(以下はサンプルのため適当です。) 6$HOSTNAME = "HOST" 7$DBUSER = "DBUSER" 8$PORT = "99999" 9$DBNAME = "DBNAME" 10 11psql -w -a -h $HOSTNAME -U $DBUSER -p %PORT -d $DBNAME -f $SQLF -v CSVDIR="${CSVDIR}"
■TEST.sql
PostgreSQL
1\copy TEST_TABLE from ':CSVDIR\TEST.CSV' with encoding 'sjis' csv;
PowerShellからpsqlコマンドでPostgreSQLに接続し、
-v オプションで CSVDIRという変数に "D:\SQLTEST\CSV" を入れてsqlファイルに渡しています。
実際のファイルパスは"D:\SQLTEST\CSV\TEST.csv"のため、
sqlファイルのほうで ':CSVDIR\TEST.CSV' と記載しましたが、上手くいきません。
何か対処法等ございましたら、ご教示いただけますと幸いです。
よろしくおねがいいたします。
補足情報(FW/ツールのバージョンなど)
PostgreSQL 12.4
2021/11/03 追記
あれから色々とご指摘をいただきながら自分で試してみまして、
posgresql \copyのfromに変数(csvのパス)を使いたい
上記を参考に、COPYコマンド自体を変数にセットしてみました。
■TEST.sql
SQL
1\set filepass :CSVDIR'\TEST.CSV'; 2 3-- 変数の中身確認 4\echo :filepass 5 6\set copycmd '\copy TEST_TABLE from ':filepass' with encoding ''sjis'' csv;' 7 8-- \copyコマンド実行 9:copycmd
実行結果
SQL
1-- 変数の中身確認 2\echo :filepass 3 4D:\SQLTEST\CSV\TEST.CSV -- ちゃんとファイルパスがセットされている 5 6-- \copyコマンド実行 7:copycmd 8 9psql : psql:D:/SQLTEST/SQL/TEST.sql:42: ERROR: syntax error at or near "'sjis'" 10
なぜ 'sjis' がsyntax errorになったのかは不明ですが、
filepassのエラーは解消されたのかな?と思っています…。引き続き調べています
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/03 02:24
2021/11/03 03:30
2021/11/03 03:50 編集
2021/11/03 03:55 編集
2021/11/03 05:05
2021/11/03 06:14 編集
2021/11/03 08:34
2021/11/03 08:42 編集
2021/11/03 11:52
2021/11/04 14:59 編集
2021/11/17 11:01
2021/11/17 13:53