私は PostgreSQL にかなり慣れていません (django ORM によって台無しにされました!)、別のテーブルのエントリに基づいてテーブルを更新するトリガーを作成したいと考えています。
したがって、スキーマに次のテーブルがあります。
collection_myblogs(id, col1,col2,title,col4,col5)
..フィールドid
は自動生成されます。今、私は次のように作成された新しいテーブルを持っています:
CREATE TABLE FullText(id SERIAL NOT NULL, content text NOT NULL);
ALTER TABLE ONLY FullText ADD CONSTRAINT fulltext_pkey PRIMARY KEY (id);
そして、次のように collection_myblogs から値を挿入します。
INSERT INTO FullText(content) SELECT title FROM collection_myblogs;
これまでのところすべて問題ありません... collection_myblogs に新しいエントリがあるたびに、新しいエントリで自分自身を更新するFullText
ようなトリガーが必要です。FullText
そこで、次のようにトリガーを作成しようとしました。
CREATE TRIGGER collection_ft_update BEFORE INSERT OR UPDATE ON collection_myblogs FOR EACH ROW EXECUTE PROCEDURE ft_update();
さて、何がft_update()
機能するのか完全にはわかりませんが、現時点では次のとおりです。
CREATE FUNCTION ft_update() RETURNS trigger AS '
BEGIN
INSERT INTO FullText(content) SELECT new.title;
return new;
END
' LANGUAGE plpgsql;
..これは正常に機能しますINSERTS
が、そうではありませんUPDATES
。つまり、元のコラムのタイトルを更新collections_myblog(title)
すると、新しいエントリとして表示されます。ここでFullText
の対処方法がわかりませんids
。
ids
つまり、主キーを各テーブルで同じにしたいと思います。ですから、私にとってのアイデアはFullText(id, content) == collection_myblogs(id, title)
、これが理にかなっている場合です。したがって、id
と はテーブルcontent
から複製する必要がありcollection_myblogs
ます。これを達成するにはどうすればよいでしょうか?
私の理解では、挿入または更新の前にトリガーを使用してcollection_myblogs
維持somehow
できるということですFullText(id, content) == collection_myblogs(id, title)
これに関するガイダンスをいただければ幸いです。