122 lines
2.6 KiB
PL/PgSQL
122 lines
2.6 KiB
PL/PgSQL
CREATE DATABASE test_db DBCOMPATIBILITY 'B';
|
|
\c test_db
|
|
SET autocommit = 1;
|
|
CREATE TABLE test_table (a text);
|
|
CREATE DATABASE test_drop;
|
|
INSERT INTO test_table values('aaaaa');
|
|
SELECT * FROM test_table;
|
|
ROLLBACK;
|
|
SELECT * FROM test_table;
|
|
|
|
SET autocommit = 0;
|
|
-- DML
|
|
-- rollback the insert statement
|
|
INSERT INTO test_table values('bbbbb');
|
|
SELECT * FROM test_table;
|
|
ROLLBACK;
|
|
SELECT * FROM test_table;
|
|
|
|
-- commit the insert statement
|
|
INSERT INTO test_table values('ccccc');
|
|
SELECT * FROM test_table;
|
|
COMMIT;
|
|
SELECT * FROM test_table;
|
|
|
|
-- commit the insert statement auto
|
|
INSERT INTO test_table values('ddddd');
|
|
SELECT * FROM test_table;
|
|
SET autocommit = 1;
|
|
SELECT * FROM test_table;
|
|
|
|
SET autocommit = 0;
|
|
-- DDL
|
|
-- rollback the create table statement
|
|
CREATE TABLE test_a (a text);
|
|
INSERT INTO test_a values('aaaaa');
|
|
SELECT * FROM test_a;
|
|
ROLLBACK;
|
|
SELECT * FROM test_a;
|
|
COMMIT;
|
|
|
|
-- commit the create table statement
|
|
CREATE TABLE test_b (a text);
|
|
INSERT INTO test_b values('aaaaa');
|
|
SELECT * FROM test_b;
|
|
COMMIT;
|
|
SELECT * FROM test_b;
|
|
|
|
-- commit the create table statement auto
|
|
CREATE TABLE test_c (a text);
|
|
INSERT INTO test_c values('aaaaa');
|
|
SELECT * FROM test_c;
|
|
SET autocommit = 1;
|
|
SELECT * FROM test_c;
|
|
|
|
-- prepare test
|
|
SET autocommit = 0;
|
|
INSERT INTO test_table values('eeeee');
|
|
PREPARE TRANSACTION 'test_id';
|
|
SET autocommit = 1;
|
|
SELECT * FROM test_table;
|
|
COMMIT PREPARED 'test_id';
|
|
SELECT * FROM test_table;
|
|
|
|
-- truncate the table test_table
|
|
TRUNCATE test_table;
|
|
SELECT * FROM test_table;
|
|
ROLLBACK;
|
|
TRUNCATE test_table;
|
|
SELECT * FROM test_table;
|
|
COMMIT;
|
|
SELECT * FROM test_table;
|
|
|
|
-- something statement could not execute in the transaction block
|
|
SET autocommit = 0;
|
|
START TRANSACTION;
|
|
BEGIN;
|
|
CREATE DATABASE test_error;
|
|
ROLLBACK;
|
|
VACUUM;
|
|
ROLLBACK;
|
|
DROP DATABASE test_drop;
|
|
ROLLBACK;
|
|
CLUSTER test_table;
|
|
ROLLBACK;
|
|
CREATE TABLESPACE gs_basebackup_tablespace relative LOCATION 'gs_basebackup_tablespace';
|
|
ROLLBACK;
|
|
CREATE INDEX CONCURRENTLY ON test_table(a);
|
|
ROLLBACK;
|
|
REINDEX DATABASE test_db;
|
|
ROLLBACK;
|
|
DROP DATABASE test_error;
|
|
ROLLBACK;
|
|
DROP TABLESPACE test_space;
|
|
ROLLBACK;
|
|
DROP INDEX test_index;
|
|
ROLLBACK;
|
|
REINDEX TABLE CONCURRENTLY test_table;
|
|
-- test about set autocommit = 1 when the transaction is aborted
|
|
SET autocommit = 1;
|
|
ROLLBACK;
|
|
|
|
-- set autocommit = 0 in a transaction block
|
|
SET autocommit = 1;
|
|
TRUNCATE test_table;
|
|
BEGIN;
|
|
INSERT INTO test_table values('aaaaa');
|
|
SET autocommit = 0;
|
|
SET autocommit = 1;
|
|
SHOW autocommit;
|
|
SELECT * FROM test_table;
|
|
|
|
-- only set autocommit = 1 cannot commit transaction
|
|
BEGIN;
|
|
INSERT INTO test_table values('bbbbb');
|
|
SET autocommit = 1;
|
|
ROLLBACK;
|
|
SELECT * FROM test_table;
|
|
|
|
\c regression
|
|
DROP DATABASE test_db;
|
|
DROP DATABASE test_drop;
|