ファイルからテーブル(Postgresデータベース)にデータをコピーする必要があるGroovyスクリプトを作成しています。 私はSQLコマンドCOPYを使うことができましたが、スクリプトをスーパーユーザー(これは私が使用できるオプションではありません)として実行する必要があります。もう1つの選択肢は、psqlコマンドである\ COPYを使用することです。しかし、psqlはPostgresSQL用のコマンドラインツールです。 Groovyスクリプト内から\ COPYを呼び出す方法はありますか?Groovyスクリプトからpsqlコマンドを呼び出す
私は次のことを試してみました:
// groovy method to populate table
populateTable(tableName, filePath) {
def command = """psql -U<database name>"""
def proc = command.execute()
proc.waitFor()
command = """ \\COPY $tableName FROM '$filePath' WITH DELIMITER AS ','"""
proc = command.execute()
proc.waitFor()
}
私は上記のコードでやろうとしています何がpsqlのコマンドラインにログオンしてからの\ COPYコマンドを実行しているが、私は次のエラーを取得する:
java.io.IOException: Cannot run program "\COPY": java.io.IOException: error=20, Not a directory
スクリプトから\ COPYを呼び出すことができるのだろうか?そうでない場合、ファイルからテーブルにデータを一括コピーできる他の方法はありますか?その巨大なファイル、行ごとにコピーすることは非常に非効率的です。
ご協力いただきありがとうございます。
感謝を。上記のコードを試しました。 defコマンドを展開すると、これは私が得るものです: – rjane
空の文字列を取得するか、カットアンドペーストに問題がありますか? –
お返事ありがとうございます。上記のコードを試しました。私はdefコマンドを出力するとき、これは私が得るものです: 'code' psql -Usomedatabase -c "\\ COPY tablename FROM 'filename' DELIMITER AS '、'" 'code'これをコピーしてコマンドラインに貼り付けました。コマンドは正常に実行されました。しかし、スクリプトから実行すると、コマンドを囲む二重引用符(-c引き数の後ろ)が認識されないことを示すエラーが表示されます。コマンドラインからこのコマンドを実行するときに二重引用符を削除すると、同じエラーが発生します。助言がありますか? – rjane