从Groovy脚本调用psql命令

时间:2012-03-05 17:51:05

标签: groovy postgresql

我正在编写一个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?如果没有,还有其他方法可以将数据从文件批量复制到表中吗?它是一个巨大的文件,并且逐行复制将是非常低效的。

非常感谢您提供所有帮助。

1 个答案:

答案 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()
}