PostgreSQLでは、ファイルとテーブルの間でデータをコピーするために「copyコマンド」と「copyメタコマンド」が用意されています。
違いについては、こちらのQiitaの記事がわかりやすく参考になります。
最近はRDSなどクラウド環境を使うことが多く、「copyメタコマンド」を使うケースが多いかと思います。
今回はVBSで実行端末のファイルに「copyメタコマンド」を使ってデータをコピーするための対策案を考えてみました。
結論:psql.exeを使ってcopyメタコマンドを実行する
VBSではADOを使って操作する事が多いと思います。
しかし、ADOではメタコマンドを利用することができません。
そこで、VBSでpsql.exeでメタコマンドを実行するように対応します。
VBSでpsql.exeを使ってcopyメタコマンドを実行するコードサンプル
VBSでpsql.exeを実行す方法の詳細はこちらの記事を参考にしてください。
- ソース例
' === バッチファイルの作成 ===
' バッチのソースコードを作成
set bat_code = "psql -h xx.xx.xx -h foo -c ""¥copy (select * from table1) to C:\work\xx.dat """
' バッチファイルを作成
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("C:\work\test.bat", 2 , True)
file.WriteLine bat_scode
file.close
' === バッチを実行 ===
Set oWshShell = CreateObject("WScript.Shell")
oWshShell.Run "C:\work\test.bat", 1, True
まとめ
ADOは簡単にSQL操作ができる反面、制約も含んでいます。
メタコマンドを使いたい場合、ADOでは実現ができないため今回はpsql.exeを使って実行するようにしました。
結構簡単にできるので、利用する機会のある方はぜひ試してみてください。