-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
         .......................

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

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

非常感谢您的帮助 ;)

4

2 回答 2

2

试试这样的文本格式:

chemical_id_1   { "one,two,three", "four", "five,six" }
...
于 2013-01-22T19:26:26.633 回答
0

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

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

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

于 2013-01-22T15:44:44.483 回答