私は 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)
これに関するガイダンスをいただければ幸いです。