我正在编写一个groovy脚本,需要将文件中的数据复制到表中(Postgres数据库)。 我可以使用SQL命令COPY,但这需要脚本以超级用户身份运行(这不是我可以使用的选项)。另一种方法是使用\ COPY,这是一个psql命令。但是psql是PostgresSQL的命令行工具。有没有办法从Groovy脚本中调用\ COPY?
我尝试了以下内容:
// 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?如果没有,还有其他方法可以将数据从文件批量复制到表中吗?它是一个巨大的文件,并且逐行复制将是非常低效的。
非常感谢您提供所有帮助。
答案 0 :(得分:1)
您的代码目前正在执行两个单独的事件psql
和\COPY
(根据您输入的错误消息找不到)。我不像MySQL那样熟悉Postgres,但是查看psql
documentation看起来你可以使用-c
参数传递命令:
def populateTable( tableName, filePath ) {
def sql = """ \\COPY $tableName FROM '$filePath' WITH DELIMITER AS ',' """
def command = """psql -U<database name> -c "$sql" """
def proc = command.execute()
proc.waitFor()
}