2
我在寫一個groovy腳本,它需要將數據從文件複製到表(Postgres數據庫)中。 我可以使用SQL命令COPY,但這需要腳本以超級用戶身份運行(這不是我可以使用的選項)。另一種方法是使用\ COPY,它是一個psql命令。但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 2012-03-06 00:16:32
您是否得到空字符串或在剪切和粘貼時出現問題? – 2012-03-06 00:21:48
感謝您的回覆。我試過上面的代碼。當我打印出def命令時,這是我得到的:'code'psql -Usomedatabase -c「\\ COPY tablename FROM'filename'WITH DELIMITER AS','''code'我複製並粘貼到命令行上,並執行該命令很好。但是,當我從腳本運行它時,出現錯誤,表明命令周圍的雙引號(在-c參數之後)無法識別。如果我從命令行運行此命令時刪除雙引號,則會得到相同的錯誤。有什麼建議麼? – rjane 2012-03-06 00:26:44