Mercurial > libervia-pubsub
diff db/libervia_pubsub_update_6_7.sql @ 465:9af0ef2c145c
db: renamed update files following global renaming
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 15 Oct 2021 13:40:59 +0200 |
parents | db/sat_pubsub_update_6_7.sql@920440200570 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/libervia_pubsub_update_6_7.sql Fri Oct 15 13:40:59 2021 +0200 @@ -0,0 +1,58 @@ +-- NOTE: this update is to be used only by people which have been installing the +-- 6th version of the schema. It is has been replaced because regconfig prevent +-- proper update (the GENERATED column with regconfig has been replaced by a +-- trigger). People which haven't installed 6th version can directly use the +-- sat_pubsub_update_5_7.sql file. The sat_pubsub_update_5_6.sql has been +-- deleted has it's not needed anymore and can lead to troubles. + +-- we check version of the database before doing anything +-- and stop execution if not good +\set ON_ERROR_STOP +DO $$ +DECLARE ver text; +BEGIN + SELECT value INTO ver FROM metadata WHERE key='version'; + IF NOT FOUND OR ver!='6' THEN + RAISE EXCEPTION 'This update file needs to be applied on database schema version 6, you use version %',ver; + END IF; +END$$; +\unset ON_ERROR_STOP +-- end of version check + +/* regconfig type is not usable when doing database upgrade (for new PostgreSQL major version) */ +ALTER TABLE items DROP COLUMN data_fts; +ALTER TABLE items ALTER COLUMN data_fts_cfg TYPE text; +ALTER TABLE items ADD COLUMN data_fts tsvector; +CREATE INDEX items_data_fts ON items USING GIN (data_fts); + +ALTER FUNCTION update_data_fts() RENAME TO update_data_fts_cfg; +/* We don't use regconfig anymore in this method */ +CREATE OR REPLACE FUNCTION update_data_fts_cfg() RETURNS TRIGGER AS +$$ +BEGIN + UPDATE items SET data_fts_cfg=replace(new.fts_language, 'generic', 'simple') + WHERE items.node_id=new.node_id + AND NOT EXISTS(SELECT FROM item_languages AS lang WHERE lang.item_id=items.item_id); + RETURN new; +END; +$$ +language plpgsql; + +CREATE FUNCTION update_data_fts() RETURNS TRIGGER AS +$$ +BEGIN + new.data_fts=to_tsvector(new.data_fts_cfg::regconfig, new.data::text); + RETURN new; +END +$$ +language plpgsql; + +CREATE TRIGGER items_fts_tsvector_update + BEFORE INSERT OR UPDATE OF data_fts_cfg,data ON items + FOR EACH ROW + EXECUTE PROCEDURE update_data_fts(); + +/* We do the update to trigger the data_fts generation */ +UPDATE items SET data_fts_cfg='simple'; + +UPDATE metadata SET value='7' WHERE key='version';