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