mirror of
https://github.com/postgres/postgres.git
synced 2026-02-23 09:52:14 -05:00
Since LISTEN is (still) disallowed, UNLISTEN must be a no-op in a hot-standby session, and so there's no harm in allowing it. This change allows client code to not worry about whether it's connected to a primary or standby server when performing session-state-reset type activities. (Note that DISCARD ALL, which includes UNLISTEN, was already allowed, making it inconsistent to reject UNLISTEN.) Per discussion, back-patch to all supported versions. Shay Rojansky, reviewed by Mi Tar Discussion: https://postgr.es/m/CADT4RqCf2gA_TJtPAjnGzkC3ZiexfBZiLmA-mV66e4UyuVv8bA@mail.gmail.com
103 lines
1.4 KiB
PL/PgSQL
103 lines
1.4 KiB
PL/PgSQL
--
|
|
-- Hot Standby tests
|
|
--
|
|
-- hs_standby_disallowed.sql
|
|
--
|
|
|
|
SET transaction_read_only = off;
|
|
|
|
begin transaction read write;
|
|
commit;
|
|
|
|
-- SELECT
|
|
|
|
select * from hs1 FOR SHARE;
|
|
select * from hs1 FOR UPDATE;
|
|
|
|
-- DML
|
|
BEGIN;
|
|
insert into hs1 values (37);
|
|
ROLLBACK;
|
|
BEGIN;
|
|
delete from hs1 where col1 = 1;
|
|
ROLLBACK;
|
|
BEGIN;
|
|
update hs1 set col1 = NULL where col1 > 0;
|
|
ROLLBACK;
|
|
BEGIN;
|
|
truncate hs3;
|
|
ROLLBACK;
|
|
|
|
-- DDL
|
|
|
|
create temporary table hstemp1 (col1 integer);
|
|
BEGIN;
|
|
drop table hs2;
|
|
ROLLBACK;
|
|
BEGIN;
|
|
create table hs4 (col1 integer);
|
|
ROLLBACK;
|
|
|
|
-- Sequences
|
|
|
|
SELECT nextval('hsseq');
|
|
|
|
-- Two-phase commit transaction stuff
|
|
|
|
BEGIN;
|
|
SELECT count(*) FROM hs1;
|
|
PREPARE TRANSACTION 'foobar';
|
|
ROLLBACK;
|
|
BEGIN;
|
|
SELECT count(*) FROM hs1;
|
|
COMMIT PREPARED 'foobar';
|
|
ROLLBACK;
|
|
|
|
BEGIN;
|
|
SELECT count(*) FROM hs1;
|
|
PREPARE TRANSACTION 'foobar';
|
|
ROLLBACK PREPARED 'foobar';
|
|
ROLLBACK;
|
|
|
|
BEGIN;
|
|
SELECT count(*) FROM hs1;
|
|
ROLLBACK PREPARED 'foobar';
|
|
ROLLBACK;
|
|
|
|
|
|
-- Locks
|
|
BEGIN;
|
|
LOCK hs1;
|
|
COMMIT;
|
|
BEGIN;
|
|
LOCK hs1 IN SHARE UPDATE EXCLUSIVE MODE;
|
|
COMMIT;
|
|
BEGIN;
|
|
LOCK hs1 IN SHARE MODE;
|
|
COMMIT;
|
|
BEGIN;
|
|
LOCK hs1 IN SHARE ROW EXCLUSIVE MODE;
|
|
COMMIT;
|
|
BEGIN;
|
|
LOCK hs1 IN EXCLUSIVE MODE;
|
|
COMMIT;
|
|
BEGIN;
|
|
LOCK hs1 IN ACCESS EXCLUSIVE MODE;
|
|
COMMIT;
|
|
|
|
-- Listen
|
|
listen a;
|
|
notify a;
|
|
|
|
-- disallowed commands
|
|
|
|
ANALYZE hs1;
|
|
|
|
VACUUM hs2;
|
|
|
|
CLUSTER hs2 using hs1_pkey;
|
|
|
|
REINDEX TABLE hs2;
|
|
|
|
REVOKE SELECT ON hs1 FROM PUBLIC;
|
|
GRANT SELECT ON hs1 TO PUBLIC;
|