tsvector 列に対して次の更新トリガーがあります
CREATE TRIGGER tsvector_user_update
BEFORE INSERT OR UPDATE ON users
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(user_tsv, 'pg_catalog.english', firstname, surname, email, card_id);
これは正常に動作しますが、私の card_id 列 (テキスト) には、ユーザーが認識していないプリアンブル (カードがスキャンされた後に追加される) が含まれているため、tsvector 値が生成されたので、トリガー機能を手始めに試してみました
CREATE FUNCTION user_change_trigger() RETURNS trigger AS $$
BEGIN
NEW.user_tsv = setweight(to_tsvector('pg_catalog.english', coalesce(NEW.firstname,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(NEW.surname,'')), 'A') ||
setweight(to_tsvector('pg_catalog.english', coalesce(REGEXP_REPLACE(NEW.card_id, '^\d+PRE', ''),'')), 'B') ||
setweight(to_tsvector('pg_catalog.english', coalesce(NEW.email,'')), 'C');
return new;
END
$$ LANGUAGE plpgsql;
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
ON users FOR EACH ROW EXECUTE PROCEDURE user_change_trigger();
これは実行されますが、次のようになります。
WARNING: nonstandard use of escape in a string literal
そして、更新された tsvector はありません
プリアンブルは整数の後に「PRE」が続きます。
(PostgreSQL 9.0)