-1

化学名のデータベースを構築しています。私のメイン テーブルには、次のような 2 つの属性が含まれています。

         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 名)には文字「,」が含まれているため、名前の配列の区切り記号として使用できません。配列に別の区切り文字を指定する方法がオンライン ドキュメントで見つかりません。手伝っていただけませんか?

元の化学物質ファイルには名前ごとに 1 つのエントリがあるため、ここで使用する別のオプションは次のとおりです。

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

コピーの前にトリガーを作成することです(これを行うことはできますか?)。そのため、chemical_idがテーブルに存在する場合、名前は、まったく新しい行を作成するのではなく、既存の名前の配列に追加されますが、方法がわかりませんこれらを指定できます。

BEFORE INSERT OR UPDATE のトリガーを既に作成しましたが、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 に答える