-- +goose Up -- +goose StatementBegin -- add the precomputed column ALTER TABLE documents ADD COLUMN content_tsv tsvector; -- populate the new column with the initial data UPDATE documents SET content_tsv = to_tsvector('german', content); -- Step 3: Create a trigger function to update the tsvector column upon insert or update CREATE OR REPLACE FUNCTION update_tsvector() RETURNS TRIGGER AS $$ BEGIN NEW.content_tsv := to_tsvector('german', NEW.content); RETURN NEW; END; $$ LANGUAGE plpgsql; -- create the trigger on the documents table CREATE TRIGGER documents_tsvector_update BEFORE INSERT OR UPDATE ON documents FOR EACH ROW EXECUTE FUNCTION update_tsvector(); -- create an index on the precomputed column for faster searches CREATE INDEX idx_fts_documents ON documents USING GIN(content_tsv); -- +goose StatementEnd -- +goose Down -- +goose StatementBegin -- drop the trigger that updates the tsvector column DROP TRIGGER IF EXISTS documents_tsvector_update ON documents; -- Step 2: Drop the trigger function DROP FUNCTION IF EXISTS update_tsvector(); -- Step 3: Drop the tsvector column ALTER TABLE documents DROP COLUMN IF EXISTS content_tsv; -- Step 4: Drop the index on the tsvector column DROP INDEX IF EXISTS idx_fts_documents; -- +goose StatementEnd