Random stuff, testing things, and so on.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
897 B

CREATE TABLE targets (
level_1 TEXT,
level_2 TEXT,
channel_name TEXT,
UNIQUE (level_1, level_2)
);
CREATE TABLE commands (
id SERIAL PRIMARY KEY,
level_1 TEXT,
level_2 TEXT,
payload TEXT,
channel_name TEXT,
channel_failure BOOLEAN
);
CREATE OR REPLACE FUNCTION notify_channel()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
DECLARE
target_channel TEXT;
BEGIN
SELECT channel_name
INTO target_channel
FROM targets
WHERE level_1 = NEW.level_1
AND level_2 = NEW.level_2;
if found then
SELECT pg_notify(target_channel, NEW.playload);
UPDATE commands
SET channel_name = channel_name, channel_failure = false
WHERE id = NEW.id;
else
UPDATE commands
SET channel_failure = true
WHERE id = NEW.id;
end if;
RETURN NEW;
END;
$$;
CREATE TRIGGER notify_channel
AFTER INSERT
ON commands
FOR EACH ROW
EXECUTE PROCEDURE notify_channel();