Consistently use "superuser" instead of "super user"
[pgsql.git] / src / test / regress / expected / lock.out
blobd43bee0c56309fd80fe183376c6411197323f2fa
1 --
2 -- Test the LOCK statement
3 --
4 -- Setup
5 CREATE SCHEMA lock_schema1;
6 SET search_path = lock_schema1;
7 CREATE TABLE lock_tbl1 (a BIGINT);
8 CREATE TABLE lock_tbl1a (a BIGINT);
9 CREATE VIEW lock_view1 AS SELECT * FROM lock_tbl1;
10 CREATE VIEW lock_view2(a,b) AS SELECT * FROM lock_tbl1, lock_tbl1a;
11 CREATE VIEW lock_view3 AS SELECT * from lock_view2;
12 CREATE VIEW lock_view4 AS SELECT (select a from lock_tbl1a limit 1) from lock_tbl1;
13 CREATE VIEW lock_view5 AS SELECT * from lock_tbl1 where a in (select * from lock_tbl1a);
14 CREATE VIEW lock_view6 AS SELECT * from (select * from lock_tbl1) sub;
15 CREATE ROLE regress_rol_lock1;
16 ALTER ROLE regress_rol_lock1 SET search_path = lock_schema1;
17 GRANT USAGE ON SCHEMA lock_schema1 TO regress_rol_lock1;
18 -- Try all valid lock options; also try omitting the optional TABLE keyword.
19 BEGIN TRANSACTION;
20 LOCK TABLE lock_tbl1 IN ACCESS SHARE MODE;
21 LOCK lock_tbl1 IN ROW SHARE MODE;
22 LOCK TABLE lock_tbl1 IN ROW EXCLUSIVE MODE;
23 LOCK TABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE;
24 LOCK TABLE lock_tbl1 IN SHARE MODE;
25 LOCK lock_tbl1 IN SHARE ROW EXCLUSIVE MODE;
26 LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE;
27 LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE;
28 ROLLBACK;
29 -- Try using NOWAIT along with valid options.
30 BEGIN TRANSACTION;
31 LOCK TABLE lock_tbl1 IN ACCESS SHARE MODE NOWAIT;
32 LOCK TABLE lock_tbl1 IN ROW SHARE MODE NOWAIT;
33 LOCK TABLE lock_tbl1 IN ROW EXCLUSIVE MODE NOWAIT;
34 LOCK TABLE lock_tbl1 IN SHARE UPDATE EXCLUSIVE MODE NOWAIT;
35 LOCK TABLE lock_tbl1 IN SHARE MODE NOWAIT;
36 LOCK TABLE lock_tbl1 IN SHARE ROW EXCLUSIVE MODE NOWAIT;
37 LOCK TABLE lock_tbl1 IN EXCLUSIVE MODE NOWAIT;
38 LOCK TABLE lock_tbl1 IN ACCESS EXCLUSIVE MODE NOWAIT;
39 ROLLBACK;
40 -- Verify that we can lock views.
41 BEGIN TRANSACTION;
42 LOCK TABLE lock_view1 IN EXCLUSIVE MODE;
43 -- lock_view1 and lock_tbl1 are locked.
44 select relname from pg_locks l, pg_class c
45  where l.relation = c.oid and relname like '%lock_%' and mode = 'ExclusiveLock'
46  order by relname;
47   relname   
48 ------------
49  lock_tbl1
50  lock_view1
51 (2 rows)
53 ROLLBACK;
54 BEGIN TRANSACTION;
55 LOCK TABLE lock_view2 IN EXCLUSIVE MODE;
56 -- lock_view1, lock_tbl1, and lock_tbl1a are locked.
57 select relname from pg_locks l, pg_class c
58  where l.relation = c.oid and relname like '%lock_%' and mode = 'ExclusiveLock'
59  order by relname;
60   relname   
61 ------------
62  lock_tbl1
63  lock_tbl1a
64  lock_view2
65 (3 rows)
67 ROLLBACK;
68 BEGIN TRANSACTION;
69 LOCK TABLE lock_view3 IN EXCLUSIVE MODE;
70 -- lock_view3, lock_view2, lock_tbl1, and lock_tbl1a are locked recursively.
71 select relname from pg_locks l, pg_class c
72  where l.relation = c.oid and relname like '%lock_%' and mode = 'ExclusiveLock'
73  order by relname;
74   relname   
75 ------------
76  lock_tbl1
77  lock_tbl1a
78  lock_view2
79  lock_view3
80 (4 rows)
82 ROLLBACK;
83 BEGIN TRANSACTION;
84 LOCK TABLE lock_view4 IN EXCLUSIVE MODE;
85 -- lock_view4, lock_tbl1, and lock_tbl1a are locked.
86 select relname from pg_locks l, pg_class c
87  where l.relation = c.oid and relname like '%lock_%' and mode = 'ExclusiveLock'
88  order by relname;
89   relname   
90 ------------
91  lock_tbl1
92  lock_tbl1a
93  lock_view4
94 (3 rows)
96 ROLLBACK;
97 BEGIN TRANSACTION;
98 LOCK TABLE lock_view5 IN EXCLUSIVE MODE;
99 -- lock_view5, lock_tbl1, and lock_tbl1a are locked.
100 select relname from pg_locks l, pg_class c
101  where l.relation = c.oid and relname like '%lock_%' and mode = 'ExclusiveLock'
102  order by relname;
103   relname   
104 ------------
105  lock_tbl1
106  lock_tbl1a
107  lock_view5
108 (3 rows)
110 ROLLBACK;
111 BEGIN TRANSACTION;
112 LOCK TABLE lock_view6 IN EXCLUSIVE MODE;
113 -- lock_view6 an lock_tbl1 are locked.
114 select relname from pg_locks l, pg_class c
115  where l.relation = c.oid and relname like '%lock_%' and mode = 'ExclusiveLock'
116  order by relname;
117   relname   
118 ------------
119  lock_tbl1
120  lock_view6
121 (2 rows)
123 ROLLBACK;
124 -- Verify that we cope with infinite recursion in view definitions.
125 CREATE OR REPLACE VIEW lock_view2 AS SELECT * from lock_view3;
126 BEGIN TRANSACTION;
127 LOCK TABLE lock_view2 IN EXCLUSIVE MODE;
128 ROLLBACK;
129 CREATE VIEW lock_view7 AS SELECT * from lock_view2;
130 BEGIN TRANSACTION;
131 LOCK TABLE lock_view7 IN EXCLUSIVE MODE;
132 ROLLBACK;
133 -- Verify that we can lock a table with inheritance children.
134 CREATE TABLE lock_tbl2 (b BIGINT) INHERITS (lock_tbl1);
135 CREATE TABLE lock_tbl3 () INHERITS (lock_tbl2);
136 BEGIN TRANSACTION;
137 LOCK TABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
138 ROLLBACK;
139 -- Child tables are locked without granting explicit permission to do so as
140 -- long as we have permission to lock the parent.
141 GRANT UPDATE ON TABLE lock_tbl1 TO regress_rol_lock1;
142 SET ROLE regress_rol_lock1;
143 -- fail when child locked directly
144 BEGIN;
145 LOCK TABLE lock_tbl2;
146 ERROR:  permission denied for table lock_tbl2
147 ROLLBACK;
148 BEGIN;
149 LOCK TABLE lock_tbl1 * IN ACCESS EXCLUSIVE MODE;
150 ROLLBACK;
151 BEGIN;
152 LOCK TABLE ONLY lock_tbl1;
153 ROLLBACK;
154 RESET ROLE;
156 -- Clean up
158 DROP VIEW lock_view7;
159 DROP VIEW lock_view6;
160 DROP VIEW lock_view5;
161 DROP VIEW lock_view4;
162 DROP VIEW lock_view3 CASCADE;
163 NOTICE:  drop cascades to view lock_view2
164 DROP VIEW lock_view1;
165 DROP TABLE lock_tbl3;
166 DROP TABLE lock_tbl2;
167 DROP TABLE lock_tbl1;
168 DROP TABLE lock_tbl1a;
169 DROP SCHEMA lock_schema1 CASCADE;
170 DROP ROLE regress_rol_lock1;
171 -- atomic ops tests
172 RESET search_path;
173 SELECT test_atomic_ops();
174  test_atomic_ops 
175 -----------------
177 (1 row)