mirror of https://github.com/synctv-org/synctv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.0 KiB
PL/PgSQL
34 lines
1.0 KiB
PL/PgSQL
CREATE TABLE IF NOT EXISTS settings (
|
|
key VARCHAR(200) PRIMARY KEY,
|
|
group_name VARCHAR(100) NOT NULL,
|
|
value TEXT NOT NULL DEFAULT '',
|
|
version INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_settings_group ON settings(group_name);
|
|
|
|
CREATE TRIGGER trigger_update_settings_updated_at
|
|
BEFORE UPDATE ON settings
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
CREATE OR REPLACE FUNCTION notify_settings_change()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
|
|
PERFORM pg_notify('settings_changed', NEW.key);
|
|
RETURN NEW;
|
|
ELSIF TG_OP = 'DELETE' THEN
|
|
PERFORM pg_notify('settings_changed', OLD.key);
|
|
RETURN OLD;
|
|
END IF;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER settings_change_trigger
|
|
AFTER INSERT OR UPDATE OR DELETE ON settings
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION notify_settings_change();
|