将单个文本字段转储到 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;
$$;