mirror of
https://github.com/postgres/postgres.git
synced 2025-12-15 02:22:24 +03:00
Read-only transactions, as defined in SQL.
This commit is contained in:
@@ -40,3 +40,31 @@ SELECT * FROM aggtest;
|
||||
42 | 324.78
|
||||
(4 rows)
|
||||
|
||||
-- Read-only tests
|
||||
CREATE TABLE writetest (a int);
|
||||
CREATE TEMPORARY TABLE temptest (a int);
|
||||
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;
|
||||
DROP TABLE writetest; -- fail
|
||||
ERROR: transaction is read-only
|
||||
INSERT INTO writetest VALUES (1); -- fail
|
||||
ERROR: transaction is read-only
|
||||
SELECT * FROM writetest; -- ok
|
||||
a
|
||||
---
|
||||
(0 rows)
|
||||
|
||||
DELETE FROM temptest; -- ok
|
||||
UPDATE temptest SET a = 0 WHERE a = 1 AND writetest.a = temptest.a; -- ok
|
||||
PREPARE test AS UPDATE writetest SET a = 0; -- ok
|
||||
EXECUTE test; -- fail
|
||||
ERROR: transaction is read-only
|
||||
SELECT * FROM writetest, temptest; -- ok
|
||||
a | a
|
||||
---+---
|
||||
(0 rows)
|
||||
|
||||
CREATE TABLE test AS SELECT * FROM writetest; -- fail
|
||||
ERROR: transaction is read-only
|
||||
START TRANSACTION READ WRITE;
|
||||
DROP TABLE writetest; -- ok
|
||||
COMMIT;
|
||||
|
||||
@@ -33,3 +33,24 @@ SELECT oid FROM pg_class WHERE relname = 'disappear';
|
||||
-- should have members again
|
||||
SELECT * FROM aggtest;
|
||||
|
||||
|
||||
-- Read-only tests
|
||||
|
||||
CREATE TABLE writetest (a int);
|
||||
CREATE TEMPORARY TABLE temptest (a int);
|
||||
|
||||
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;
|
||||
|
||||
DROP TABLE writetest; -- fail
|
||||
INSERT INTO writetest VALUES (1); -- fail
|
||||
SELECT * FROM writetest; -- ok
|
||||
DELETE FROM temptest; -- ok
|
||||
UPDATE temptest SET a = 0 WHERE a = 1 AND writetest.a = temptest.a; -- ok
|
||||
PREPARE test AS UPDATE writetest SET a = 0; -- ok
|
||||
EXECUTE test; -- fail
|
||||
SELECT * FROM writetest, temptest; -- ok
|
||||
CREATE TABLE test AS SELECT * FROM writetest; -- fail
|
||||
|
||||
START TRANSACTION READ WRITE;
|
||||
DROP TABLE writetest; -- ok
|
||||
COMMIT;
|
||||
|
||||
Reference in New Issue
Block a user