Merge pull request #4322 from citusdata/cstore_tests

Test more of SQL features with column store
pull/4324/head
Hadi Moshayedi 2020-11-17 20:28:03 -08:00 committed by GitHub
commit 021ed07f12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 251 additions and 0 deletions

View File

@ -18,3 +18,4 @@ test: am_trigger
test: am_tableoptions
test: am_recursive
test: am_transactions
test: am_matview

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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;