Postgres:如何将数组分隔符更改为','和'之外的其他内容在复制数组之前触发?

时间:2013-01-22 15:00:02

标签: postgresql postgresql-9.1

我正在为化学名称建立一个数据库。我的主表包含两个属性,如下所示:

         CREATE TABLE chemicals 
         (
             chemical id            int PRIMARY KEY,
             names                  varchar(200)[]
         );

然后用COPY填充表格

         COPY chemicals FROM chemicals_file delimiters E'\t'; 

我已经形成了像这样的chemicals_file:

         chemical_id     { name1  name2 name3 }
         ......................................

如您所知,化学名称(IUPAC名称)中包含字符',',因此我不能将其用作名称数组的分隔符。我无法在在线文档中找到为数组指定另一个分隔符的任何方法。你能帮我吗?

我在这里有另一种选择,因为原始化学品文件每个名称都有一个条目,例如:

         chemical_id_1    name1
         chemical_id_1    name2
         .......................
         chemical_id_6    name3
         .......................

将在复制之前创建一个触发器(可以这样做吗?),这样如果表中的chemical_id退出,名称将被添加到现有的名称数组中,而不是创建一个全新的行,但我不知道知道如何指定这些。

我已经在INSERT或UPDATE之前创建了一个触发器,但它似乎不适用于COPY

非常感谢您的帮助;)

2 个答案:

答案 0 :(得分:2)

尝试这样的文字格式:

chemical_id_1   { "one,two,three", "four", "five,six" }
...

答案 1 :(得分:0)

主要是你想要一个多值列,但那是邪恶的。我会用这个:

chemical(id, name)
chemical_name(id, chemical_id, name)

在化学品中,您可以在JOIN中使用一个方便的首选名称