PostgeSQL 9.2.2 を使用しています。私のデータベーススキーマは
pg_rocks_post
title | character varying(1024) | not null
body | text | not null
body_title_tsv | tsvector |
body_title_titleupweight_tsv | tsvector |
body_title_titleupweight_tsv を tsvector 型として作成しました。次に、ドキュメントの例を使用してトリガーを定義し、次のようにタイトルを強調しました。
pgdj=# CREATE FUNCTION title_upweight_trigger() RETURNS trigger AS $$
begin
new.body_title_titleupweight_tsv :=
setweight(to_tsvector('pg_catalog.english', coalesce(new.title,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(new.body,'')), 'D');
return new;
end
$$ LANGUAGE plpgsql;
pg_rocks_post のエントリを更新してクエリを実行すると、トリガーが機能することがわかります。body_title_titleupweight_tsv ts_vector に更新された行が正しく入力されていることがわかります。
私の質問は、テーブル内の既存の行にトリガーを適用する方法です。私はpostgresだけを学んでいるので、テストデータベースに数百のエントリがあり、body_title_titleupweight_tsv列にデータを入力する方法を知りたい.
これを行う1つの方法は、更新を実行し、関数を次のようなもので書き直すことだと思います
pgdj=# UPDATE pg_rocks_post SET body_title_titleupweight_tsv =
setweight(to_tsvector( coalesce(title,'')),'A') ||
setweight(to_tsvector(coalesce(body,'')),'D');
上記の更新ステートメントでトリガーのロジックを再度書き直す代わりに。ダミーの更新またはデータベース内のすべての行でトリガーを反転させる「タッチ」スタイルの操作を実行して、上記のトリガーをトリガーする方法はありますか。
そのようなダミーまたは「タッチ」タイプの操作の構文または例を探してみましたが、これを行う方法を説明しているものが見つかりませんでした。