0

私は 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)

これに関するガイダンスをいただければ幸いです。

4

2 に答える 2

-2

実際、それは非常に単純であることが判明しました。これに従うしかなかった

于 2013-08-13T12:50:00.367 に答える