mirror of https://github.com/citusdata/citus.git
Merge pull request #4322 from citusdata/cstore_tests
Test more of SQL features with column storepull/4324/head
commit
021ed07f12
|
@ -18,3 +18,4 @@ test: am_trigger
|
|||
test: am_tableoptions
|
||||
test: am_recursive
|
||||
test: am_transactions
|
||||
test: am_matview
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
--
|
||||
-- Testing we materialized views properly
|
||||
--
|
||||
CREATE TABLE t(a int, b int) USING cstore_tableam;
|
||||
INSERT INTO t SELECT floor(i / 4), 2 * i FROM generate_series(1, 10) i;
|
||||
CREATE MATERIALIZED VIEW t_view(a, bsum, cnt) USING cstore_tableam AS
|
||||
SELECT a, sum(b), count(*) FROM t GROUP BY a;
|
||||
SELECT * FROM t_view a ORDER BY a;
|
||||
a | bsum | cnt
|
||||
---------------------------------------------------------------------
|
||||
0 | 12 | 3
|
||||
1 | 44 | 4
|
||||
2 | 54 | 3
|
||||
(3 rows)
|
||||
|
||||
INSERT INTO t SELECT floor(i / 4), 2 * i FROM generate_series(11, 20) i;
|
||||
SELECT * FROM t_view a ORDER BY a;
|
||||
a | bsum | cnt
|
||||
---------------------------------------------------------------------
|
||||
0 | 12 | 3
|
||||
1 | 44 | 4
|
||||
2 | 54 | 3
|
||||
(3 rows)
|
||||
|
||||
REFRESH MATERIALIZED VIEW t_view;
|
||||
SELECT * FROM t_view a ORDER BY a;
|
||||
a | bsum | cnt
|
||||
---------------------------------------------------------------------
|
||||
0 | 12 | 3
|
||||
1 | 44 | 4
|
||||
2 | 76 | 4
|
||||
3 | 108 | 4
|
||||
4 | 140 | 4
|
||||
5 | 40 | 1
|
||||
(6 rows)
|
||||
|
||||
-- verify that we have created metadata entries for the materialized view
|
||||
SELECT relfilenode FROM pg_class WHERE relname='t_view' \gset
|
||||
SELECT count(*) FROM cstore.cstore_data_files WHERE relfilenode=:relfilenode;
|
||||
count
|
||||
---------------------------------------------------------------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM cstore.cstore_stripes WHERE relfilenode=:relfilenode;
|
||||
count
|
||||
---------------------------------------------------------------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM cstore.cstore_skipnodes WHERE relfilenode=:relfilenode;
|
||||
count
|
||||
---------------------------------------------------------------------
|
||||
3
|
||||
(1 row)
|
||||
|
||||
DROP TABLE t CASCADE;
|
||||
NOTICE: drop cascades to materialized view t_view
|
||||
-- dropping must remove metadata
|
||||
SELECT count(*) FROM cstore.cstore_data_files WHERE relfilenode=:relfilenode;
|
||||
count
|
||||
---------------------------------------------------------------------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM cstore.cstore_stripes WHERE relfilenode=:relfilenode;
|
||||
count
|
||||
---------------------------------------------------------------------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM cstore.cstore_skipnodes WHERE relfilenode=:relfilenode;
|
||||
count
|
||||
---------------------------------------------------------------------
|
||||
0
|
||||
(1 row)
|
||||
|
|
@ -139,4 +139,106 @@ SELECT * FROM t ORDER BY a;
|
|||
5 | 10
|
||||
(5 rows)
|
||||
|
||||
--
|
||||
-- Prepared transactions
|
||||
--
|
||||
BEGIN;
|
||||
INSERT INTO t VALUES (6, 12);
|
||||
INSERT INTO t VALUES (7, 14);
|
||||
SELECT * FROM t ORDER BY a;
|
||||
a | b
|
||||
---------------------------------------------------------------------
|
||||
1 | 2
|
||||
2 | 4
|
||||
3 | 6
|
||||
4 | 8
|
||||
5 | 10
|
||||
6 | 12
|
||||
7 | 14
|
||||
(7 rows)
|
||||
|
||||
PREPARE TRANSACTION 'tx01';
|
||||
SELECT * FROM t ORDER BY a;
|
||||
a | b
|
||||
---------------------------------------------------------------------
|
||||
1 | 2
|
||||
2 | 4
|
||||
3 | 6
|
||||
4 | 8
|
||||
5 | 10
|
||||
(5 rows)
|
||||
|
||||
ROLLBACK PREPARED 'tx01';
|
||||
SELECT * FROM t ORDER BY a;
|
||||
a | b
|
||||
---------------------------------------------------------------------
|
||||
1 | 2
|
||||
2 | 4
|
||||
3 | 6
|
||||
4 | 8
|
||||
5 | 10
|
||||
(5 rows)
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO t VALUES (6, 13);
|
||||
INSERT INTO t VALUES (7, 15);
|
||||
PREPARE TRANSACTION 'tx02';
|
||||
SELECT * FROM t ORDER BY a;
|
||||
a | b
|
||||
---------------------------------------------------------------------
|
||||
1 | 2
|
||||
2 | 4
|
||||
3 | 6
|
||||
4 | 8
|
||||
5 | 10
|
||||
(5 rows)
|
||||
|
||||
COMMIT PREPARED 'tx02';
|
||||
SELECT * FROM t ORDER BY a;
|
||||
a | b
|
||||
---------------------------------------------------------------------
|
||||
1 | 2
|
||||
2 | 4
|
||||
3 | 6
|
||||
4 | 8
|
||||
5 | 10
|
||||
6 | 13
|
||||
7 | 15
|
||||
(7 rows)
|
||||
|
||||
--
|
||||
-- Prepared statements
|
||||
--
|
||||
PREPARE p1(int) AS INSERT INTO t VALUES (8, $1), (9, $1+2);
|
||||
EXPLAIN (COSTS OFF) EXECUTE p1(16);
|
||||
QUERY PLAN
|
||||
---------------------------------------------------------------------
|
||||
Insert on t
|
||||
-> Values Scan on "*VALUES*"
|
||||
(2 rows)
|
||||
|
||||
EXECUTE p1(16);
|
||||
EXPLAIN (ANALYZE true, COSTS off, TIMING off, SUMMARY off) EXECUTE p1(20);
|
||||
QUERY PLAN
|
||||
---------------------------------------------------------------------
|
||||
Insert on t (actual rows=0 loops=1)
|
||||
-> Values Scan on "*VALUES*" (actual rows=2 loops=1)
|
||||
(2 rows)
|
||||
|
||||
SELECT * FROM t ORDER BY a;
|
||||
a | b
|
||||
---------------------------------------------------------------------
|
||||
1 | 2
|
||||
2 | 4
|
||||
3 | 6
|
||||
4 | 8
|
||||
5 | 10
|
||||
6 | 13
|
||||
7 | 15
|
||||
8 | 16
|
||||
8 | 20
|
||||
9 | 18
|
||||
9 | 22
|
||||
(11 rows)
|
||||
|
||||
DROP TABLE t;
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
--
|
||||
-- Testing we materialized views properly
|
||||
--
|
||||
|
||||
CREATE TABLE t(a int, b int) USING cstore_tableam;
|
||||
|
||||
INSERT INTO t SELECT floor(i / 4), 2 * i FROM generate_series(1, 10) i;
|
||||
|
||||
CREATE MATERIALIZED VIEW t_view(a, bsum, cnt) USING cstore_tableam AS
|
||||
SELECT a, sum(b), count(*) FROM t GROUP BY a;
|
||||
|
||||
SELECT * FROM t_view a ORDER BY a;
|
||||
|
||||
INSERT INTO t SELECT floor(i / 4), 2 * i FROM generate_series(11, 20) i;
|
||||
|
||||
SELECT * FROM t_view a ORDER BY a;
|
||||
|
||||
REFRESH MATERIALIZED VIEW t_view;
|
||||
|
||||
SELECT * FROM t_view a ORDER BY a;
|
||||
|
||||
-- verify that we have created metadata entries for the materialized view
|
||||
SELECT relfilenode FROM pg_class WHERE relname='t_view' \gset
|
||||
|
||||
SELECT count(*) FROM cstore.cstore_data_files WHERE relfilenode=:relfilenode;
|
||||
SELECT count(*) FROM cstore.cstore_stripes WHERE relfilenode=:relfilenode;
|
||||
SELECT count(*) FROM cstore.cstore_skipnodes WHERE relfilenode=:relfilenode;
|
||||
|
||||
DROP TABLE t CASCADE;
|
||||
|
||||
-- dropping must remove metadata
|
||||
SELECT count(*) FROM cstore.cstore_data_files WHERE relfilenode=:relfilenode;
|
||||
SELECT count(*) FROM cstore.cstore_stripes WHERE relfilenode=:relfilenode;
|
||||
SELECT count(*) FROM cstore.cstore_skipnodes WHERE relfilenode=:relfilenode;
|
|
@ -67,4 +67,41 @@ SELECT * FROM t;
|
|||
ROLLBACK;
|
||||
SELECT * FROM t ORDER BY a;
|
||||
|
||||
--
|
||||
-- Prepared transactions
|
||||
--
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO t VALUES (6, 12);
|
||||
INSERT INTO t VALUES (7, 14);
|
||||
SELECT * FROM t ORDER BY a;
|
||||
PREPARE TRANSACTION 'tx01';
|
||||
|
||||
SELECT * FROM t ORDER BY a;
|
||||
|
||||
ROLLBACK PREPARED 'tx01';
|
||||
|
||||
SELECT * FROM t ORDER BY a;
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO t VALUES (6, 13);
|
||||
INSERT INTO t VALUES (7, 15);
|
||||
PREPARE TRANSACTION 'tx02';
|
||||
|
||||
SELECT * FROM t ORDER BY a;
|
||||
|
||||
COMMIT PREPARED 'tx02';
|
||||
|
||||
SELECT * FROM t ORDER BY a;
|
||||
|
||||
--
|
||||
-- Prepared statements
|
||||
--
|
||||
|
||||
PREPARE p1(int) AS INSERT INTO t VALUES (8, $1), (9, $1+2);
|
||||
EXPLAIN (COSTS OFF) EXECUTE p1(16);
|
||||
EXECUTE p1(16);
|
||||
EXPLAIN (ANALYZE true, COSTS off, TIMING off, SUMMARY off) EXECUTE p1(20);
|
||||
SELECT * FROM t ORDER BY a;
|
||||
|
||||
DROP TABLE t;
|
||||
|
|
Loading…
Reference in New Issue