PostgreSQL 9.2 で全文検索を設定しようとしています。検索するコンテンツを保持する新しいテーブルを作成しました (さまざまな種類のアイテムを検索できるようにするため)。これは次のようになります。
CREATE TABLE search (
target_id bigint PRIMARY KEY,
target_type text,
fts tsvector
);
CREATE INDEX search_fts ON search USING gin(fts);
検索したいさまざまなテーブルの 1 つに新しい項目が挿入 (または更新) されるたびに、自動的にsearch
テーブルに追加されます。私のテーブルが次のようになっていると仮定します。
CREATE TABLE item (id bigint PRIMARY KEY, name text NOT NULL, description text);
検索できるようにする列名を渡すトリガーを作成しました。
CREATE TRIGGER insert_item_search BEFORE INSERT
ON item FOR EACH ROW EXECUTE PROCEDURE
insert_search('{name, description}'::text[]);
次に、新しい関数insert_search
を次のように作成しました。
CREATE OR REPLACE FUNCTION insert_search(cols text[]) RETURNS TRIGGER AS $$
BEGIN
INSERT INTO search (target_id, target_type, fts) VALUES (
NEW.id, TG_TABLE_NAME, to_tsvector('english', 'foo')
);
RETURN NEW;
END;
$$ LANGUAGE PLPGSQL;
cols
私の質問は、 to に基づいてテーブルの値を渡すにはどうすればよいto_tsvector
ですか? 現在、関数が呼び出されてid
正しく挿入されていますが、引数type
に基づいて他の値を動的に取得する正しい方法がわかりません。cols