@haathie/pgmb 0.2.17 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/sql/pgmb-0.2.0-0.2.2.sql +54 -0
- package/sql/pgmb-0.2.0-0.2.8.sql +2 -0
package/package.json
CHANGED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
SET search_path TO pgmb;
|
|
2
|
+
-- Trigger that pushes changes to the events table
|
|
3
|
+
CREATE OR REPLACE FUNCTION push_table_event()
|
|
4
|
+
RETURNS TRIGGER AS $$
|
|
5
|
+
DECLARE
|
|
6
|
+
start_num BIGINT = create_random_bigint();
|
|
7
|
+
BEGIN
|
|
8
|
+
IF TG_OP = 'INSERT' THEN
|
|
9
|
+
INSERT INTO events(id, topic, payload)
|
|
10
|
+
SELECT
|
|
11
|
+
create_event_id(clock_timestamp(), rand := start_num + row_number() OVER ()),
|
|
12
|
+
create_topic(TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_OP),
|
|
13
|
+
jsonb_strip_nulls(s.data)
|
|
14
|
+
FROM NEW n
|
|
15
|
+
CROSS JOIN LATERAL
|
|
16
|
+
serialise_record_for_event(TG_RELID, TG_OP, n) AS s(data, emit)
|
|
17
|
+
WHERE s.emit;
|
|
18
|
+
ELSIF TG_OP = 'DELETE' THEN
|
|
19
|
+
INSERT INTO events(id, topic, payload)
|
|
20
|
+
SELECT
|
|
21
|
+
create_event_id(clock_timestamp(), rand := start_num + row_number() OVER ()),
|
|
22
|
+
create_topic(TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_OP),
|
|
23
|
+
jsonb_strip_nulls(to_jsonb(s.data))
|
|
24
|
+
FROM OLD o
|
|
25
|
+
CROSS JOIN LATERAL
|
|
26
|
+
serialise_record_for_event(TG_RELID, TG_OP, o) AS s(data, emit)
|
|
27
|
+
WHERE s.emit;
|
|
28
|
+
ELSIF TG_OP = 'UPDATE' THEN
|
|
29
|
+
-- For updates, we can send both old and new data
|
|
30
|
+
INSERT INTO events(id, topic, payload, metadata)
|
|
31
|
+
SELECT
|
|
32
|
+
create_event_id(clock_timestamp(), rand := start_num + n.rn),
|
|
33
|
+
create_topic(TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_OP),
|
|
34
|
+
jsonb_diff(n.data, o.data),
|
|
35
|
+
jsonb_build_object('old', jsonb_strip_nulls(o.data))
|
|
36
|
+
FROM (
|
|
37
|
+
SELECT s.data, s.emit, row_number() OVER () AS rn
|
|
38
|
+
FROM NEW n
|
|
39
|
+
CROSS JOIN LATERAL
|
|
40
|
+
serialise_record_for_event(TG_RELID, TG_OP, n) AS s(data, emit)
|
|
41
|
+
) AS n
|
|
42
|
+
INNER JOIN (
|
|
43
|
+
SELECT s.data, row_number() OVER () AS rn FROM OLD o
|
|
44
|
+
CROSS JOIN LATERAL
|
|
45
|
+
serialise_record_for_event(TG_RELID, TG_OP, o) AS s(data, emit)
|
|
46
|
+
) AS o ON n.rn = o.rn
|
|
47
|
+
-- ignore rows where data didn't change
|
|
48
|
+
WHERE jsonb_diff(n.data, o.data) is not null AND n.emit;
|
|
49
|
+
END IF;
|
|
50
|
+
|
|
51
|
+
RETURN NULL;
|
|
52
|
+
END
|
|
53
|
+
$$ LANGUAGE plpgsql SECURITY DEFINER VOLATILE PARALLEL UNSAFE
|
|
54
|
+
SET search_path TO pgmb;
|
package/sql/pgmb-0.2.0-0.2.8.sql
CHANGED
|
@@ -4,6 +4,8 @@ ALTER TYPE config_type ADD VALUE 'use_pg_cron';
|
|
|
4
4
|
ALTER TYPE config_type ADD VALUE 'pg_cron_poll_for_events_cron';
|
|
5
5
|
ALTER TYPE config_type ADD VALUE 'pg_cron_partition_maintenance_cron';
|
|
6
6
|
|
|
7
|
+
COMMIT; -- prevents unsafe enum use
|
|
8
|
+
|
|
7
9
|
INSERT INTO config(id, value) VALUES
|
|
8
10
|
('pg_cron_poll_for_events_cron', '1 second'),
|
|
9
11
|
-- every 30 minutes
|