File: 02_setup.sql

package info (click to toggle)
pgl-ddl-deploy 2.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 3,780 kB
  • sloc: sql: 47,586; ansic: 364; python: 282; sh: 72; makefile: 63
file content (101 lines) | stat: -rw-r--r-- 2,603 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
CREATE TEMP TABLE foonode AS SELECT pglogical.create_node('test','host=localhost');
DROP TABLE foonode;

CREATE TEMP TABLE repsets AS
WITH sets AS (
SELECT 'test'||generate_series AS set_name
FROM generate_series(1,8)
)

SELECT pglogical.create_replication_set
(set_name:=s.set_name
,replicate_insert:=TRUE
,replicate_update:=TRUE
,replicate_delete:=TRUE
,replicate_truncate:=TRUE) AS result
FROM sets s;

DROP TABLE repsets;
CREATE ROLE test_pgl_ddl_deploy LOGIN;
GRANT CREATE ON DATABASE contrib_regression TO test_pgl_ddl_deploy;
GRANT CREATE ON SCHEMA public TO PUBLIC;

SELECT pgl_ddl_deploy.add_role(oid) FROM pg_roles WHERE rolname = 'test_pgl_ddl_deploy';

SET ROLE test_pgl_ddl_deploy;

CREATE FUNCTION check_rep_tables() RETURNS TABLE (set_name TEXT, table_name TEXT)
AS 
$BODY$
BEGIN

-- Handle change from view to function rep_set_table_wrapper
IF (SELECT extversion FROM pg_extension WHERE extname = 'pgl_ddl_deploy') = ANY('{1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7}'::text[]) THEN
    RETURN QUERY EXECUTE $$
    SELECT set_name::TEXT, set_reloid::TEXT AS table_name
    FROM pgl_ddl_deploy.rep_set_table_wrapper rsr
    INNER JOIN pglogical.replication_set rs USING (set_id)
    ORDER BY set_name::TEXT, set_reloid::TEXT;$$;
ELSE
    RETURN QUERY EXECUTE $$
    SELECT name::TEXT AS set_name, relid::regclass::TEXT AS table_name
    FROM pgl_ddl_deploy.rep_set_table_wrapper() rsr
    WHERE relid::regclass::TEXT <> 'pgl_ddl_deploy.queue'
    ORDER BY name::TEXT, relid::TEXT;$$;
END IF;

END;
$BODY$
LANGUAGE plpgsql;

CREATE FUNCTION all_queues() RETURNS TABLE (queued_at timestamp with time zone,
role name,
pubnames text[],
message_type "char",
-- we use json here to provide test output consistency whether native or pglogical
message json)
AS
$BODY$
BEGIN
IF EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'pglogical') THEN
    RETURN QUERY EXECUTE $$
    SELECT queued_at,
    role,
    replication_sets AS pubnames,
    message_type,
    message
    FROM pglogical.queue
    UNION ALL
    SELECT queued_at,
    role,
    pubnames,
    message_type,
    to_json(message) AS message
    FROM pgl_ddl_deploy.queue;$$;
ELSE
    RETURN QUERY EXECUTE $$
    SELECT queued_at,
    role,
    pubnames,
    message_type,
    to_json(message) AS message
    FROM pgl_ddl_deploy.queue;
    $$;
END IF;
END;
$BODY$
LANGUAGE plpgsql;

CREATE FUNCTION verify_count(ct int, expected int) RETURNS BOOLEAN AS $BODY$
BEGIN

RAISE LOG 'ct: %', ct;
IF ct != expected THEN
    RAISE EXCEPTION 'Count % does not match expected count of %', ct, expected;
END IF;

RETURN TRUE;

END$BODY$
LANGUAGE plpgsql;