Consistently use "superuser" instead of "super user"
[pgsql.git] / src / test / regress / expected / tidrangescan.out
blob721f3b94e0423628f70db578532bae38aa39310e
1 -- tests for tidrangescans
2 SET enable_seqscan TO off;
3 CREATE TABLE tidrangescan(id integer, data text);
4 -- empty table
5 EXPLAIN (COSTS OFF)
6 SELECT ctid FROM tidrangescan WHERE ctid < '(1, 0)';
7             QUERY PLAN             
8 -----------------------------------
9  Tid Range Scan on tidrangescan
10    TID Cond: (ctid < '(1,0)'::tid)
11 (2 rows)
13 SELECT ctid FROM tidrangescan WHERE ctid < '(1, 0)';
14  ctid 
15 ------
16 (0 rows)
18 EXPLAIN (COSTS OFF)
19 SELECT ctid FROM tidrangescan WHERE ctid > '(9, 0)';
20             QUERY PLAN             
21 -----------------------------------
22  Tid Range Scan on tidrangescan
23    TID Cond: (ctid > '(9,0)'::tid)
24 (2 rows)
26 SELECT ctid FROM tidrangescan WHERE ctid > '(9, 0)';
27  ctid 
28 ------
29 (0 rows)
31 -- insert enough tuples to fill at least two pages
32 INSERT INTO tidrangescan SELECT i,repeat('x', 100) FROM generate_series(1,200) AS s(i);
33 -- remove all tuples after the 10th tuple on each page.  Trying to ensure
34 -- we get the same layout with all CPU architectures and smaller than standard
35 -- page sizes.
36 DELETE FROM tidrangescan
37 WHERE substring(ctid::text FROM ',(\d+)\)')::integer > 10 OR substring(ctid::text FROM '\((\d+),')::integer > 2;
38 VACUUM tidrangescan;
39 -- range scans with upper bound
40 EXPLAIN (COSTS OFF)
41 SELECT ctid FROM tidrangescan WHERE ctid < '(1,0)';
42             QUERY PLAN             
43 -----------------------------------
44  Tid Range Scan on tidrangescan
45    TID Cond: (ctid < '(1,0)'::tid)
46 (2 rows)
48 SELECT ctid FROM tidrangescan WHERE ctid < '(1,0)';
49   ctid  
50 --------
51  (0,1)
52  (0,2)
53  (0,3)
54  (0,4)
55  (0,5)
56  (0,6)
57  (0,7)
58  (0,8)
59  (0,9)
60  (0,10)
61 (10 rows)
63 EXPLAIN (COSTS OFF)
64 SELECT ctid FROM tidrangescan WHERE ctid <= '(1,5)';
65              QUERY PLAN             
66 ------------------------------------
67  Tid Range Scan on tidrangescan
68    TID Cond: (ctid <= '(1,5)'::tid)
69 (2 rows)
71 SELECT ctid FROM tidrangescan WHERE ctid <= '(1,5)';
72   ctid  
73 --------
74  (0,1)
75  (0,2)
76  (0,3)
77  (0,4)
78  (0,5)
79  (0,6)
80  (0,7)
81  (0,8)
82  (0,9)
83  (0,10)
84  (1,1)
85  (1,2)
86  (1,3)
87  (1,4)
88  (1,5)
89 (15 rows)
91 EXPLAIN (COSTS OFF)
92 SELECT ctid FROM tidrangescan WHERE ctid < '(0,0)';
93             QUERY PLAN             
94 -----------------------------------
95  Tid Range Scan on tidrangescan
96    TID Cond: (ctid < '(0,0)'::tid)
97 (2 rows)
99 SELECT ctid FROM tidrangescan WHERE ctid < '(0,0)';
100  ctid 
101 ------
102 (0 rows)
104 -- range scans with lower bound
105 EXPLAIN (COSTS OFF)
106 SELECT ctid FROM tidrangescan WHERE ctid > '(2,8)';
107             QUERY PLAN             
108 -----------------------------------
109  Tid Range Scan on tidrangescan
110    TID Cond: (ctid > '(2,8)'::tid)
111 (2 rows)
113 SELECT ctid FROM tidrangescan WHERE ctid > '(2,8)';
114   ctid  
115 --------
116  (2,9)
117  (2,10)
118 (2 rows)
120 EXPLAIN (COSTS OFF)
121 SELECT ctid FROM tidrangescan WHERE '(2,8)' < ctid;
122             QUERY PLAN             
123 -----------------------------------
124  Tid Range Scan on tidrangescan
125    TID Cond: ('(2,8)'::tid < ctid)
126 (2 rows)
128 SELECT ctid FROM tidrangescan WHERE '(2,8)' < ctid;
129   ctid  
130 --------
131  (2,9)
132  (2,10)
133 (2 rows)
135 EXPLAIN (COSTS OFF)
136 SELECT ctid FROM tidrangescan WHERE ctid >= '(2,8)';
137              QUERY PLAN             
138 ------------------------------------
139  Tid Range Scan on tidrangescan
140    TID Cond: (ctid >= '(2,8)'::tid)
141 (2 rows)
143 SELECT ctid FROM tidrangescan WHERE ctid >= '(2,8)';
144   ctid  
145 --------
146  (2,8)
147  (2,9)
148  (2,10)
149 (3 rows)
151 EXPLAIN (COSTS OFF)
152 SELECT ctid FROM tidrangescan WHERE ctid >= '(100,0)';
153               QUERY PLAN              
154 --------------------------------------
155  Tid Range Scan on tidrangescan
156    TID Cond: (ctid >= '(100,0)'::tid)
157 (2 rows)
159 SELECT ctid FROM tidrangescan WHERE ctid >= '(100,0)';
160  ctid 
161 ------
162 (0 rows)
164 -- range scans with both bounds
165 EXPLAIN (COSTS OFF)
166 SELECT ctid FROM tidrangescan WHERE ctid > '(1,4)' AND '(1,7)' >= ctid;
167                            QUERY PLAN                           
168 ----------------------------------------------------------------
169  Tid Range Scan on tidrangescan
170    TID Cond: ((ctid > '(1,4)'::tid) AND ('(1,7)'::tid >= ctid))
171 (2 rows)
173 SELECT ctid FROM tidrangescan WHERE ctid > '(1,4)' AND '(1,7)' >= ctid;
174  ctid  
175 -------
176  (1,5)
177  (1,6)
178  (1,7)
179 (3 rows)
181 EXPLAIN (COSTS OFF)
182 SELECT ctid FROM tidrangescan WHERE '(1,7)' >= ctid AND ctid > '(1,4)';
183                            QUERY PLAN                           
184 ----------------------------------------------------------------
185  Tid Range Scan on tidrangescan
186    TID Cond: (('(1,7)'::tid >= ctid) AND (ctid > '(1,4)'::tid))
187 (2 rows)
189 SELECT ctid FROM tidrangescan WHERE '(1,7)' >= ctid AND ctid > '(1,4)';
190  ctid  
191 -------
192  (1,5)
193  (1,6)
194  (1,7)
195 (3 rows)
197 -- extreme offsets
198 SELECT ctid FROM tidrangescan WHERE ctid > '(0,65535)' AND ctid < '(1,0)' LIMIT 1;
199  ctid 
200 ------
201 (0 rows)
203 SELECT ctid FROM tidrangescan WHERE ctid < '(0,0)' LIMIT 1;
204  ctid 
205 ------
206 (0 rows)
208 SELECT ctid FROM tidrangescan WHERE ctid > '(4294967295,65535)';
209  ctid 
210 ------
211 (0 rows)
213 SELECT ctid FROM tidrangescan WHERE ctid < '(0,0)';
214  ctid 
215 ------
216 (0 rows)
218 -- NULLs in the range cannot return tuples
219 SELECT ctid FROM tidrangescan WHERE ctid >= (SELECT NULL::tid);
220  ctid 
221 ------
222 (0 rows)
224 -- rescans
225 EXPLAIN (COSTS OFF)
226 SELECT t.ctid,t2.c FROM tidrangescan t,
227 LATERAL (SELECT count(*) c FROM tidrangescan t2 WHERE t2.ctid <= t.ctid) t2
228 WHERE t.ctid < '(1,0)';
229                   QUERY PLAN                   
230 -----------------------------------------------
231  Nested Loop
232    ->  Tid Range Scan on tidrangescan t
233          TID Cond: (ctid < '(1,0)'::tid)
234    ->  Aggregate
235          ->  Tid Range Scan on tidrangescan t2
236                TID Cond: (ctid <= t.ctid)
237 (6 rows)
239 SELECT t.ctid,t2.c FROM tidrangescan t,
240 LATERAL (SELECT count(*) c FROM tidrangescan t2 WHERE t2.ctid <= t.ctid) t2
241 WHERE t.ctid < '(1,0)';
242   ctid  | c  
243 --------+----
244  (0,1)  |  1
245  (0,2)  |  2
246  (0,3)  |  3
247  (0,4)  |  4
248  (0,5)  |  5
249  (0,6)  |  6
250  (0,7)  |  7
251  (0,8)  |  8
252  (0,9)  |  9
253  (0,10) | 10
254 (10 rows)
256 -- cursors
257 -- Ensure we get a TID Range scan without a Materialize node.
258 EXPLAIN (COSTS OFF)
259 DECLARE c SCROLL CURSOR FOR SELECT ctid FROM tidrangescan WHERE ctid < '(1,0)';
260             QUERY PLAN             
261 -----------------------------------
262  Tid Range Scan on tidrangescan
263    TID Cond: (ctid < '(1,0)'::tid)
264 (2 rows)
266 BEGIN;
267 DECLARE c SCROLL CURSOR FOR SELECT ctid FROM tidrangescan WHERE ctid < '(1,0)';
268 FETCH NEXT c;
269  ctid  
270 -------
271  (0,1)
272 (1 row)
274 FETCH NEXT c;
275  ctid  
276 -------
277  (0,2)
278 (1 row)
280 FETCH PRIOR c;
281  ctid  
282 -------
283  (0,1)
284 (1 row)
286 FETCH FIRST c;
287  ctid  
288 -------
289  (0,1)
290 (1 row)
292 FETCH LAST c;
293   ctid  
294 --------
295  (0,10)
296 (1 row)
298 COMMIT;
299 DROP TABLE tidrangescan;
300 RESET enable_seqscan;