从Groovy脚本调用psql命令
我正在编写一个groovy脚本,它需要将数据从文件复制到表(Postgres数据库)中。 我可以使用SQL命令COPY,但这需要脚本以超级用户的身份运行(这不是我可以使用的选项)。另一种选择是使用\COPY,这是一个psql命令。但是psql是PostgresSQL的命令行工具。有没有办法从Groovy脚本中调用\COPY 我尝试了以下方法:从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 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()
}