将单个文本字段转储到psql中的单独文件中

时间:2016-02-15 12:23:31

标签: postgresql postgresql-9.3 psql postgresql-8.4

我有一个简单的表“ 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;
$$;

2 个答案:

答案 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;
$$;