Postgresqlのcopyコマンドを使用し、指定フォルダ配下にあるcsvファイルを一括インポートしたいです。
管理者権限のコマンドプロンプト上でバッチを起動し実行できるのではと思いましたが、エラーが発生し困っています。
set TABLENAME=tbl_test set HOST=localhost set PORT=5432 set DBNAME=test_db set USER=test_user set PGPASSFILE=D:\batch\bin\pgpass.conf for /r D:\batch\csv\1 %%f IN (*.recv) do ( psql -h %HOST% -p %PORT% -U %USER% -d %DBNAME% -c "copy %TABLENAME% from '%%f' with csv header delimiter ','" ) D:\batch\bin(psql -h localhost -p 5432 -U test_user -d test_db -c"copy tbl_test from 'D:\batch\csv\1\Data_20211214.recv' with csv header delimiter ','" ) ERROR: could not open file "DatchcsvData_20211214.recv" for reading: Invalid argument
質問
1:恐らく「for」文で取得しているファイル名の取得が上手くないのではと思いますが、なぜエラー文のみファイル名が異なっているのかが解決できず、困っています。
エラーの原因と解決策をご教示ください。
2:「-c」コマンドで実行していますが、本来は「-f」コマンドでsqlファイルを実行し、引数に「テーブル名」と「フォルダ配下のcsvファイル名」を渡す方法で実現したいと考えています。
しかし1ですらエラーのため、実現に至っていません。
調べた限り下記のような形で実行できるのではと考えていますが、間違っている等のご指摘を頂けたら幸いです。
test.bat
set TABLENAME=tbl_test set HOST=localhost set PORT=5432 set DBNAME=test_db set USER=test_user set PGPASSFILE=D:\batch\bin\pgpass.conf set %SQLFILE%='inport.sql' for /r D:\batch\csv\1 %%f IN (*.recv) do ( psql -h %HOST% -p %PORT% -U %USER% -d %DBNAME% -f %SQLFILE% -v %TABLENAME%=%TABLENAME% -v %inputpath%=%f )
inport.sql
psql copy :TABLENAME from ':inputpath' with csv header delimiter ','";
回答1件
あなたの回答
tips
プレビュー