将单个文本字段转储到 psql 中的单独文件中
Dump individual text fields into separate files in psql
我有一个简单的 table “id, name, content” 我想导出名为“[ 的文件中的所有记录=22=]",内容来自 "content" 列(文本类型)。这将根据需要创建尽可能多的文件。如何在 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;
$$;
使用 psql 控制台并输入
\COPY table_name(column_name) TO 'path_of_text_file';
可能是你来晚了,但我找到了你问题的解决方案,所以想在这里分享我的解决方案。您的循环解决方案不起作用,因为 COPY 命令等待文件名作为字符串常量。我的解决方案是使用带有 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;
$$;
我有一个简单的 table “id, name, content” 我想导出名为“[ 的文件中的所有记录=22=]",内容来自 "content" 列(文本类型)。这将根据需要创建尽可能多的文件。如何在 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;
$$;
使用 psql 控制台并输入
\COPY table_name(column_name) TO 'path_of_text_file';
可能是你来晚了,但我找到了你问题的解决方案,所以想在这里分享我的解决方案。您的循环解决方案不起作用,因为 COPY 命令等待文件名作为字符串常量。我的解决方案是使用带有 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;
$$;