我正在为化学名称建立一个数据库。我的主表包含两个属性,如下所示:
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
非常感谢您的帮助;)
答案 0 :(得分:2)
尝试这样的文字格式:
chemical_id_1 { "one,two,three", "four", "five,six" }
...
答案 1 :(得分:0)
主要是你想要一个多值列,但那是邪恶的。我会用这个:
chemical(id, name)
chemical_name(id, chemical_id, name)
在化学品中,您可以在JOIN中使用一个方便的首选名称