PostgreSQL:psql调用SQL脚本时向COPY传递动态文件路径的问题
问题原因
你的代码报错核心是字符串拼接逻辑位置错误:format格式串内的%L会自动为传入的变量值添加单引号,你把路径拼接写在格式串内部,会生成类似COPY ... FROM 'v1_value' || 'my/file/path.csv'的非法语法,COPY语句不支持这种字符串拼接写法。
解决方法
方案1:调整format拼接逻辑
把路径拼接放到format的参数侧,生成完整路径后再格式化:
SELECT format( $$COPY mytable(mycolumns) FROM %L$$, :v1 || 'my/file/path.csv' ) \gexec
方案2:先声明psql变量再调用
如果路径需要复用,可以先拼接完整路径存入psql变量,直接调用即可:
-- 拼接完整路径 \set full_file_path :v1 'my/file/path.csv' -- 直接执行COPY COPY mytable(mycolumns) FROM :'full_file_path';
内容的提问来源于stack exchange,提问作者chrismarx
相关产品推荐
相关产品推荐

