【问题标题】:Postgresql - pass parameters to COPY in an sql scriptPostgresql - 在 sql 脚本中将参数传递给 COPY
【发布时间】:2021-06-30 00:09:53
【问题描述】:

我可以在我的 sql 脚本中使用 -v v1=foo 语法进行查询,但我不知道如何在复制语句中使用该参数。我想执行如下脚本:

psql -d my_db -f ./exports.sql -v v1="'/Users/username/test.json'"

在脚本中做一些版本:

copy (
 select * from bar     
) to :v1;

DO $$ 
BEGIN
  EXECUTE
   'copy (select * from bar) to ' || :v1;
END $$

DO $$ 
BEGIN
  EXECUTE
   format('copy (select * from bar) to %L',:v1);
END $$

但以上都不起作用:(

【问题讨论】:

    标签: postgresql psql


    【解决方案1】:

    变量替换在字符串文字中不起作用。

    使用psql\gexec

    SELECT format(
              $$copy (select * from bar) to %L$$,
              :v1
           ) \gexec
    

    【讨论】:

    • 谢谢!这绝对有效。最后,我有一种方法可以不对复制的导出路径进行硬编码
    • 当我尝试使用与字符串连接的 %L 值时,我再次陷入困境,正确的方法是什么?如 COPY ... FROM %L||'myfile.csv' ?
    • 听起来是个新问题。
    • 它仍在传递参数以复制从 psql 执行的脚本中,还是我错过了比这更大的东西?
    • 评论不用于后续问题。请换一个新的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2020-09-08
    • 2015-10-20
    • 1970-01-01
    • 2013-07-10
    • 2012-03-15
    • 2019-11-01
    相关资源
    最近更新 更多