2
2
-- SUBSCRIPTION
3
3
--
4
4
CREATE ROLE regress_subscription_user LOGIN SUPERUSER;
5
+ CREATE ROLE regress_subscription_user2;
5
6
CREATE ROLE regress_subscription_user_dummy LOGIN NOSUPERUSER;
6
7
SET SESSION AUTHORIZATION 'regress_subscription_user';
7
8
-- fail - no publications
@@ -19,11 +20,24 @@ BEGIN;
19
20
CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub WITH (CREATE SLOT);
20
21
ERROR: CREATE SUBSCRIPTION ... CREATE SLOT cannot run inside a transaction block
21
22
COMMIT;
23
+ -- fail - invalid connection string
22
24
CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub;
23
25
ERROR: invalid connection string syntax: missing "=" after "testconn" in connection info string
24
26
27
+ -- fail - duplicate publications
28
+ CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION foo, testpub, foo WITH (NOCONNECT);
29
+ ERROR: publication name "foo" used more than once
30
+ -- ok
25
31
CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION testpub WITH (NOCONNECT);
26
32
WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ... REFRESH PUBLICATION to subscribe the tables
33
+ -- fail - name already exists
34
+ CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION testpub WITH (NOCONNECT);
35
+ ERROR: subscription "testsub" already exists
36
+ -- fail - must be superuser
37
+ SET SESSION AUTHORIZATION 'regress_subscription_user2';
38
+ CREATE SUBSCRIPTION testsub2 CONNECTION 'dbname=doesnotexist' PUBLICATION foo WITH (NOCONNECT);
39
+ ERROR: must be superuser to create subscriptions
40
+ SET SESSION AUTHORIZATION 'regress_subscription_user';
27
41
\dRs+
28
42
List of subscriptions
29
43
Name | Owner | Enabled | Publication | Conninfo
@@ -33,6 +47,10 @@ WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ..
33
47
34
48
ALTER SUBSCRIPTION testsub SET PUBLICATION testpub2, testpub3 NOREFRESH;
35
49
ALTER SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist2';
50
+ ALTER SUBSCRIPTION testsub WITH (SLOT NAME = 'newname');
51
+ -- fail
52
+ ALTER SUBSCRIPTION doesnotexist CONNECTION 'dbname=doesnotexist2';
53
+ ERROR: subscription "doesnotexist" does not exist
36
54
\dRs+
37
55
List of subscriptions
38
56
Name | Owner | Enabled | Publication | Conninfo
@@ -73,6 +91,13 @@ ALTER SUBSCRIPTION testsub RENAME TO testsub_foo;
73
91
74
92
-- rename back to keep the rest simple
75
93
ALTER SUBSCRIPTION testsub_foo RENAME TO testsub;
94
+ -- fail - new owner must be superuser
95
+ ALTER SUBSCRIPTION testsub OWNER TO regress_subscription_user2;
96
+ ERROR: permission denied to change owner of subscription "testsub"
97
+ HINT: The owner of an subscription must be a superuser.
98
+ ALTER ROLE regress_subscription_user2 SUPERUSER;
99
+ -- now it works
100
+ ALTER SUBSCRIPTION testsub OWNER TO regress_subscription_user2;
76
101
-- fail - cannot do DROP SUBSCRIPTION DROP SLOT inside transaction block
77
102
BEGIN;
78
103
DROP SUBSCRIPTION testsub DROP SLOT;
@@ -81,6 +106,10 @@ COMMIT;
81
106
BEGIN;
82
107
DROP SUBSCRIPTION testsub NODROP SLOT;
83
108
COMMIT;
109
+ DROP SUBSCRIPTION IF EXISTS testsub NODROP SLOT;
110
+ NOTICE: subscription "testsub" does not exist, skipping
111
+ DROP SUBSCRIPTION testsub NODROP SLOT; -- fail
112
+ ERROR: subscription "testsub" does not exist
84
113
RESET SESSION AUTHORIZATION;
85
114
DROP ROLE regress_subscription_user;
86
115
DROP ROLE regress_subscription_user_dummy;
0 commit comments