]> granicus.if.org Git - postgresql/blob - src/test/regress/sql/dependency.sql
Fix all known problems with pg_dump's handling of serial sequences
[postgresql] / src / test / regress / sql / dependency.sql
1 --
2 -- DEPENDENCIES
3 --
4
5 CREATE USER regression_user;
6 CREATE USER regression_user2;
7 CREATE USER regression_user3;
8 CREATE GROUP regression_group;
9
10 CREATE TABLE deptest (f1 serial primary key, f2 text);
11
12 GRANT SELECT ON TABLE deptest TO GROUP regression_group;
13 GRANT ALL ON TABLE deptest TO regression_user, regression_user2;
14
15 -- can't drop neither because they have privileges somewhere
16 DROP USER regression_user;
17 DROP GROUP regression_group;
18
19 -- if we revoke the privileges we can drop the group
20 REVOKE SELECT ON deptest FROM GROUP regression_group;
21 DROP GROUP regression_group;
22
23 -- can't drop the user if we revoke the privileges partially
24 REVOKE SELECT, INSERT, UPDATE, DELETE, RULE, REFERENCES ON deptest FROM regression_user;
25 DROP USER regression_user;
26
27 -- now we are OK to drop him
28 REVOKE TRIGGER ON deptest FROM regression_user;
29 DROP USER regression_user;
30
31 -- we are OK too if we drop the privileges all at once
32 REVOKE ALL ON deptest FROM regression_user2;
33 DROP USER regression_user2;
34
35 -- can't drop the owner of an object
36 -- the error message detail here would include a pg_toast_nnn name that
37 -- is not constant, so suppress it
38 \set VERBOSITY terse
39 ALTER TABLE deptest OWNER TO regression_user3;
40 DROP USER regression_user3;
41
42 \set VERBOSITY default
43 -- if we drop the object, we can drop the user too
44 DROP TABLE deptest;
45 DROP USER regression_user3;
46
47 -- Test DROP OWNED
48 CREATE USER regression_user0;
49 CREATE USER regression_user1;
50 CREATE USER regression_user2;
51 SET SESSION AUTHORIZATION regression_user0;
52 -- permission denied
53 DROP OWNED BY regression_user1;
54 DROP OWNED BY regression_user0, regression_user2;
55 REASSIGN OWNED BY regression_user0 TO regression_user1;
56 REASSIGN OWNED BY regression_user1 TO regression_user0;
57 -- this one is allowed
58 DROP OWNED BY regression_user0;
59
60 CREATE TABLE deptest1 (f1 int unique);
61 GRANT ALL ON deptest1 TO regression_user1 WITH GRANT OPTION;
62
63 SET SESSION AUTHORIZATION regression_user1;
64 CREATE TABLE deptest (a serial primary key, b text);
65 GRANT ALL ON deptest1 TO regression_user2;
66 RESET SESSION AUTHORIZATION;
67 \z deptest1
68
69 DROP OWNED BY regression_user1;
70 -- all grants revoked
71 \z deptest1
72 -- table was dropped
73 \d deptest
74
75 -- Test REASSIGN OWNED
76 GRANT ALL ON deptest1 TO regression_user1;
77
78 SET SESSION AUTHORIZATION regression_user1;
79 CREATE TABLE deptest (a serial primary key, b text);
80
81 CREATE TABLE deptest2 (f1 int);
82 -- make a serial column the hard way
83 CREATE SEQUENCE ss1;
84 ALTER TABLE deptest2 ALTER f1 SET DEFAULT nextval('ss1');
85 ALTER SEQUENCE ss1 OWNED BY deptest2.f1;
86 RESET SESSION AUTHORIZATION;
87
88 REASSIGN OWNED BY regression_user1 TO regression_user2;
89 \dt deptest
90
91 -- doesn't work: grant still exists
92 DROP USER regression_user1;
93 DROP OWNED BY regression_user1;
94 DROP USER regression_user1;
95
96 \set VERBOSITY terse
97 DROP USER regression_user2;
98 DROP OWNED BY regression_user2, regression_user0;
99 DROP USER regression_user2;
100 DROP USER regression_user0;