22-- SUBSCRIPTION
33--
44CREATE ROLE regress_subscription_user LOGIN SUPERUSER;
5+ CREATE ROLE regress_subscription_user2;
56CREATE ROLE regress_subscription_user_dummy LOGIN NOSUPERUSER;
67SET SESSION AUTHORIZATION 'regress_subscription_user';
78-- fail - no publications
@@ -19,11 +20,24 @@ BEGIN;
1920CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub WITH (CREATE SLOT);
2021ERROR: CREATE SUBSCRIPTION ... CREATE SLOT cannot run inside a transaction block
2122COMMIT;
23+ -- fail - invalid connection string
2224CREATE SUBSCRIPTION testsub CONNECTION 'testconn' PUBLICATION testpub;
2325ERROR: invalid connection string syntax: missing "=" after "testconn" in connection info string
2426
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
2531CREATE SUBSCRIPTION testsub CONNECTION 'dbname=doesnotexist' PUBLICATION testpub WITH (NOCONNECT);
2632WARNING: 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';
2741\dRs+
2842 List of subscriptions
2943 Name | Owner | Enabled | Publication | Conninfo
@@ -33,6 +47,10 @@ WARNING: tables were not subscribed, you will have to run ALTER SUBSCRIPTION ..
3347
3448ALTER SUBSCRIPTION testsub SET PUBLICATION testpub2, testpub3 NOREFRESH;
3549ALTER 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
3654\dRs+
3755 List of subscriptions
3856 Name | Owner | Enabled | Publication | Conninfo
@@ -73,6 +91,13 @@ ALTER SUBSCRIPTION testsub RENAME TO testsub_foo;
7391
7492-- rename back to keep the rest simple
7593ALTER 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;
76101-- fail - cannot do DROP SUBSCRIPTION DROP SLOT inside transaction block
77102BEGIN;
78103DROP SUBSCRIPTION testsub DROP SLOT;
@@ -81,6 +106,10 @@ COMMIT;
81106BEGIN;
82107DROP SUBSCRIPTION testsub NODROP SLOT;
83108COMMIT;
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
84113RESET SESSION AUTHORIZATION;
85114DROP ROLE regress_subscription_user;
86115DROP ROLE regress_subscription_user_dummy;
0 commit comments