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;
|