mirror of
https://git.asonix.dog/asonix/relay.git
synced 2024-11-25 11:01:11 +00:00
49 lines
1.2 KiB
PL/PgSQL
49 lines
1.2 KiB
PL/PgSQL
-- Your SQL goes here
|
|
CREATE TABLE actors (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
actor_id TEXT UNIQUE NOT NULL,
|
|
public_key TEXT NOT NULL,
|
|
public_key_id TEXT UNIQUE NOT NULL,
|
|
listener_id UUID NOT NULL REFERENCES listeners(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMP NOT NULL,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
SELECT diesel_manage_updated_at('actors');
|
|
|
|
CREATE OR REPLACE FUNCTION invoke_actors_trigger ()
|
|
RETURNS TRIGGER
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
rec RECORD;
|
|
channel TEXT;
|
|
payload TEXT;
|
|
BEGIN
|
|
case TG_OP
|
|
WHEN 'INSERT' THEN
|
|
rec := NEW;
|
|
channel := 'new_actors';
|
|
payload := NEW.actor_id;
|
|
WHEN 'UPDATE' THEN
|
|
rec := NEW;
|
|
channel := 'new_actors';
|
|
payload := NEW.actor_id;
|
|
WHEN 'DELETE' THEN
|
|
rec := OLD;
|
|
channel := 'rm_actors';
|
|
payload := OLD.actor_id;
|
|
ELSE
|
|
RAISE EXCEPTION 'Unknown TG_OP: "%". Should not occur!', TG_OP;
|
|
END CASE;
|
|
|
|
PERFORM pg_notify(channel, payload::TEXT);
|
|
RETURN rec;
|
|
END;
|
|
$$;
|
|
|
|
CREATE TRIGGER actors_notify
|
|
AFTER INSERT OR UPDATE OR DELETE
|
|
ON actors
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE invoke_actors_trigger();
|