0

私はこのようなテーブルを持っています

 id | col1 | col2

トリガーを書き込む必要があるので、列を挿入または更新した後col1、列に同じ値を挿入(更新)する必要がありますcol2

これは私のトリガー関数です:

CREATE FUNCTION  upd () RETURNS TRIGGER AS '
   BEGIN 
       UPDATE mytable SET
       col2 =  col1;
       RETURN NULL;
   END;
'
LANGUAGE plpgsql;

これは自己トリガーです:

CREATE TRIGGER upd_trigger
AFTER INSERT OR UPDATE ON mytable
FOR EACH ROW
EXECUTE PROCEDURE upd()

イベントでサイクロが発生するので、これは機能しませんUPDATEよね?

これを行うための正しい構文は何ですか?

4

3 に答える 3

1

更新は必要ありません。値を割り当てるだけです。

CREATE FUNCTION  upd () RETURNS TRIGGER AS 
$body$
   BEGIN 
      new.col2 := to_tsvector(new.col1);
      RETURN new;
   END;
$body$
LANGUAGE plpgsql;

そして、これをbeforeトリガーで行う必要があります:

CREATE TRIGGER upd_trigger
BEFORE INSERT OR UPDATE ON mytable
FOR EACH ROW
EXECUTE PROCEDURE upd()

編集

@DavidAldridge がコメントで指摘しているように、おそらく ts_vector() に直接インデックスを付ける方が簡単です。

create index col1_vector 
    on mytable (to_tsvector(col1)) 
    using gin;

を使用したクエリ

where to_tsvector(col1) = '...'

その後、そのインデックスを使用できるようになります。

于 2013-05-12T13:13:44.200 に答える
0

col2 の値が決定論的に col1 の値にのみ依存している場合、col2 はまったく保存されません。

于 2013-05-12T12:02:50.403 に答える