mirror of https://github.com/citusdata/citus.git
63 lines
1.6 KiB
PL/PgSQL
63 lines
1.6 KiB
PL/PgSQL
--
|
|
-- Testing cursors on columnar tables.
|
|
--
|
|
|
|
CREATE TABLE test_cursor (a int, b int) USING columnar;
|
|
INSERT INTO test_cursor SELECT i, j FROM generate_series(0, 100)i, generate_series(100, 200)j;
|
|
|
|
-- A case where the WHERE clause might filter out some chunks
|
|
EXPLAIN (analyze on, costs off, timing off, summary off) SELECT * FROM test_cursor WHERE a = 25;
|
|
BEGIN;
|
|
DECLARE a_25 SCROLL CURSOR
|
|
FOR SELECT * FROM test_cursor WHERE a = 25 ORDER BY 2;
|
|
FETCH 3 FROM a_25;
|
|
FETCH PRIOR FROM a_25;
|
|
FETCH NEXT FROM a_25;
|
|
FETCH NEXT FROM a_25;
|
|
FETCH RELATIVE -2 FROM a_25;
|
|
FETCH LAST FROM a_25;
|
|
FETCH RELATIVE -25 FROM a_25;
|
|
MOVE a_25;
|
|
FETCH a_25;
|
|
MOVE LAST FROM a_25;
|
|
FETCH a_25;
|
|
MOVE RELATIVE -3 FROM a_25;
|
|
FETCH a_25;
|
|
MOVE RELATIVE -3 FROM a_25;
|
|
FETCH a_25;
|
|
MOVE FORWARD 2 FROM a_25;
|
|
FETCH a_25;
|
|
MOVE RELATIVE -3 FROM a_25;
|
|
FETCH a_25;
|
|
UPDATE test_cursor SET a = 8000 WHERE CURRENT OF a_25;
|
|
COMMIT;
|
|
|
|
-- A case where the WHERE clause doesn't filter out any chunks
|
|
EXPLAIN (analyze on, costs off, timing off, summary off) SELECT * FROM test_cursor WHERE a > 25;
|
|
BEGIN;
|
|
DECLARE a_25 SCROLL CURSOR
|
|
FOR SELECT * FROM test_cursor WHERE a > 25 ORDER BY 1, 2;
|
|
FETCH 3 FROM a_25;
|
|
FETCH PRIOR FROM a_25;
|
|
FETCH NEXT FROM a_25;
|
|
FETCH NEXT FROM a_25;
|
|
FETCH RELATIVE -2 FROM a_25;
|
|
FETCH LAST FROM a_25;
|
|
FETCH RELATIVE -25 FROM a_25;
|
|
MOVE a_25;
|
|
FETCH a_25;
|
|
MOVE LAST FROM a_25;
|
|
FETCH a_25;
|
|
MOVE RELATIVE -3 FROM a_25;
|
|
FETCH a_25;
|
|
MOVE RELATIVE -3 FROM a_25;
|
|
FETCH a_25;
|
|
MOVE FORWARD 2 FROM a_25;
|
|
FETCH a_25;
|
|
MOVE RELATIVE -3 FROM a_25;
|
|
FETCH a_25;
|
|
UPDATE test_cursor SET a = 8000 WHERE CURRENT OF a_25;
|
|
COMMIT;
|
|
|
|
DROP TABLE test_cursor CASCADE;
|