mirror of https://github.com/citusdata/citus.git
143 lines
2.7 KiB
Plaintext
143 lines
2.7 KiB
Plaintext
--
|
|
-- Testing we handle transactions properly
|
|
--
|
|
CREATE TABLE t(a int, b int) USING cstore_tableam;
|
|
INSERT INTO t SELECT i, 2 * i FROM generate_series(1, 3) i;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2
|
|
2 | 4
|
|
3 | 6
|
|
(3 rows)
|
|
|
|
-- verify that table rewrites work properly
|
|
BEGIN;
|
|
ALTER TABLE t ALTER COLUMN b TYPE float4 USING (b + 0.5)::float4;
|
|
INSERT INTO t VALUES (4, 8.5);
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2.5
|
|
2 | 4.5
|
|
3 | 6.5
|
|
4 | 8.5
|
|
(4 rows)
|
|
|
|
ROLLBACK;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2
|
|
2 | 4
|
|
3 | 6
|
|
(3 rows)
|
|
|
|
-- verify truncate rollback
|
|
BEGIN;
|
|
TRUNCATE t;
|
|
INSERT INTO t VALUES (4, 8);
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
4 | 8
|
|
(1 row)
|
|
|
|
SAVEPOINT s1;
|
|
TRUNCATE t;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
(0 rows)
|
|
|
|
ROLLBACK TO SAVEPOINT s1;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
4 | 8
|
|
(1 row)
|
|
|
|
ROLLBACK;
|
|
-- verify truncate with unflushed data in upper xacts
|
|
BEGIN;
|
|
INSERT INTO t VALUES (4, 8);
|
|
SAVEPOINT s1;
|
|
TRUNCATE t;
|
|
ROLLBACK TO SAVEPOINT s1;
|
|
COMMIT;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2
|
|
2 | 4
|
|
3 | 6
|
|
4 | 8
|
|
(4 rows)
|
|
|
|
-- verify DROP TABLE rollback
|
|
BEGIN;
|
|
INSERT INTO t VALUES (5, 10);
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2
|
|
2 | 4
|
|
3 | 6
|
|
4 | 8
|
|
5 | 10
|
|
(5 rows)
|
|
|
|
SAVEPOINT s1;
|
|
DROP TABLE t;
|
|
SELECT * FROM t ORDER BY a;
|
|
ERROR: relation "t" does not exist
|
|
ROLLBACK TO SAVEPOINT s1;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2
|
|
2 | 4
|
|
3 | 6
|
|
4 | 8
|
|
5 | 10
|
|
(5 rows)
|
|
|
|
ROLLBACK;
|
|
-- verify DROP TABLE with unflushed data in upper xacts
|
|
BEGIN;
|
|
INSERT INTO t VALUES (5, 10);
|
|
SAVEPOINT s1;
|
|
DROP TABLE t;
|
|
SELECT * FROM t ORDER BY a;
|
|
ERROR: relation "t" does not exist
|
|
ROLLBACK TO SAVEPOINT s1;
|
|
COMMIT;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2
|
|
2 | 4
|
|
3 | 6
|
|
4 | 8
|
|
5 | 10
|
|
(5 rows)
|
|
|
|
-- verify SELECT when unflushed data in upper transactions errors.
|
|
BEGIN;
|
|
INSERT INTO t VALUES (6, 12);
|
|
SAVEPOINT s1;
|
|
SELECT * FROM t;
|
|
ERROR: cannot read from table when there is unflushed data in upper transactions
|
|
ROLLBACK;
|
|
SELECT * FROM t ORDER BY a;
|
|
a | b
|
|
---------------------------------------------------------------------
|
|
1 | 2
|
|
2 | 4
|
|
3 | 6
|
|
4 | 8
|
|
5 | 10
|
|
(5 rows)
|
|
|
|
DROP TABLE t;
|