我有一个简单的表“ id,name,content ”,我想将名为“ id_name.txt ”的文件中的所有记录导出来自“内容”列(文本类型)。这将根据需要创建尽可能多的文件。如何在psql中执行此操作?
我在想这样的事情,但是解析不喜欢“arow.id”和“TO filename”语法。
do $$
declare
arow record;
filename varchar;
begin
for arow in
select id, name, template from config_templates
loop
filename := '/tmp/' || arow.name || '.txt';
COPY (select template from config_templates where id = arow.id) TO filename (FORMAT CSV);
end loop;
end;
$$;
答案 0 :(得分:1)
使用psql控制台并输入
\COPY table_name(column_name) TO 'path_of_text_file';
答案 1 :(得分:1)
可能对您来说太迟了,但是我在您的问题中找到了解决方案,因此想在这里分享我的解决方案。您的循环式解决方案无效,因为COPY命令等待filename作为字符串常量。我的解决方案是在EXECUTE中使用动态查询。请注意EXECUTE参数中的双单引号。
do $$
declare
arow record;
filename varchar;
begin
for arow in
select id, name, template from config_templates
loop
filename := '/tmp/' || arow.name::character varying(100) || '.txt';
EXECUTE format('COPY (select template from config_templates where id = ''%s'' ) TO ''%s'' (FORMAT CSV)', arow.id::character varying(100), filename);
end loop;
end;
$$;