Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Groovy脚本调用psql命令_Groovy_Postgresql - Fatal编程技术网

从Groovy脚本调用psql命令

从Groovy脚本调用psql命令,groovy,postgresql,Groovy,Postgresql,我正在编写一个groovy脚本,它需要将数据从文件复制到表(Postgres数据库)中。 我可以使用SQL命令COPY,但这需要脚本以超级用户的身份运行(这不是我可以使用的选项)。另一种选择是使用\COPY,这是一个psql命令。但是psql是PostgresSQL的命令行工具。有没有办法从Groovy脚本中调用\COPY 我尝试了以下方法: // groovy method to populate table populateTable( tableName, filePath ) {

我正在编写一个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()  
}
只是想知道是否可以从脚本调用\COPY?如果没有,是否有其他方法可以将数据从文件大容量复制到表中?这是一个巨大的文件,逐行复制将非常低效


非常感谢您的帮助。

您的代码当前正在执行两个独立的操作
psql
\COPY
(如果您输入了错误消息,则找不到这两个操作)。我对Postgres不像MySQL那么熟悉,但是看看
psql
它看起来可以使用
-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()
}
def populateTable(表名、文件路径){
def sql=“”\\从“$filePath”复制$tableName,分隔符为“,”
def命令=“psql-U-c”$sql”
def proc=command.execute()
waitFor()程序
}

感谢您的回复。我试过上面的代码。当我展开def命令时,我得到的结果是:您得到的是空字符串还是剪切粘贴中有问题?谢谢您的回答。我试过上面的代码。当我打印def命令时,我得到的结果是:'code'psql-Usomedatabase-c'\\COPY tablename FROM'filename',DELIMITER为','code'我复制并粘贴到命令行上,命令执行得很好。但是,当我从脚本运行它时,会出现错误,表明命令周围的双引号(在-c参数之后)无法识别。如果在从命令行运行此命令时删除双引号,则会出现相同的错误。有什么建议吗?很抱歉弄糊涂了,Phuong-我正在尝试找出这里的编辑工具:-)。忽略上面帖子中的“代码”。我试图将该行作为代码插入。如果剪切并粘贴上面的代码,可能会出现问题。如果是这种情况,则在
$sql
周围使用双引号,并手动键入双引号。或者,另一个错误可能是\\COPY命令仅输出一个反斜杠。如果是这种情况,那么再添加两个反斜杠,如下面的
\\\\COPY
。最后,如果双引号仍然存在问题,可以尝试用单引号替换它们,但是您必须在
sql
变量中转义单引号:
\\'$filePath\\'。。。作为\\',\\'
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()
}