如何在复制函数中使用变量值

use*_*905 -3 postgresql dynamic-sql plpgsql copy

我想使用COPYPostgres 中的函数将数据发送到 .csv 文件。但我使用匿名块,所以我的表名应该是变量的值。

COPY (SELECT cname.portal from user) To '/tmp/out.csv' With CSV;
Run Code Online (Sandbox Code Playgroud)

cname我的匿名块内的变量在哪里。我尝试使用EXECUTE格式,但它也不起作用。我试过类似的东西:

EXECUTE format ('    COPY (select * from %s.portal,cname ) To '/tmp/out1.csv' With CSV');
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 6

在 plpgsql 代码中(不是纯 SQL!):

EXECUTE format($$COPY (select * from %I.portal) TO '/tmp/out1.csv' WITH CSV$$, cname);
Run Code Online (Sandbox Code Playgroud)

cname 是保存(尚未转义)模式名称的变量。

你需要明白:

如果您正在使用$具有特殊含义的客户端处理此问题,则需要正确转义它。作为快速修复,您可以切换到:

EXECUTE format('COPY (select * from %I.portal) TO ''/tmp/out1.csv'' WITH CSV', cname);
Run Code Online (Sandbox Code Playgroud)