我可以使用copy将数据添加到Postgres数组数据类型中

时间:2015-09-16 08:50:09

标签: postgresql

我已经使用COPY命令创建了一些CSV文件批量导入Postgres 9.2,但我遇到了问题,因为Postgres表中的一个字段是数组数据类型。

是否可以将带有COPY的数据导入数组数据类型,我有整数和文本数组?

CREATE TABLE artist (
    id                          integer NOT NULL,
    name                        text NOT NULL,
    realname            text,
    urls                        text[],
    namevariations      text[],
    aliases             text[],
    releases            integer[],
    profile             text,
    members             text[],
    groups                      text[],
        data_quality    text
);

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

id,data
1,{1,2,3}
2,{4,5,6}

这假设数值。

如果您的数据包含的字符值又可以包含分隔符(在我的示例中为,),则需要将每个值括在双引号中。

id,data
1,{foo,bar}
2,{"foo,bar", "bar,foo"}

第二行将字符串&f 39,foo,bar'和' bar,foo'作为数组中的两个元素

修改

使用逗号作为分隔符时,必须引用数组值,例如:

id,data
1,"{1,2,3}"
2,"{4,5,6}"

处理字符串时,需要在数组中使用单引号:

id,data
1,"{foo,bar}"
2,"{'foo,bar', 'bar,foo'}"

如果您使用不同的分隔符,则不需要引用,例如|

答案 1 :(得分:0)

进行测试,例如:

create table test (id int, intarr int[], textarr text[]);
insert into test values
(1, array[1,2], array['a','b']);
copy test to 'c:\data\test.txt';

truncate test;
copy test from 'c:\data\test.txt';
select * from test;

并检查文件的格式:

1   {1,2}   {a,b}