mirror of
https://github.com/postgres/postgres.git
synced 2025-11-03 09:13:20 +03:00
config
contrib
adminpack
auth_delay
auto_explain
bloom
btree_gin
btree_gist
chkpass
citext
cube
dblink
dict_int
dict_xsyn
earthdistance
file_fdw
fuzzystrmatch
hstore
hstore_plperl
hstore_plpython
intagg
intarray
isn
lo
ltree
ltree_plpython
oid2name
pageinspect
passwordcheck
pg_buffercache
pg_freespacemap
pg_prewarm
pg_standby
pg_stat_statements
pg_trgm
pg_visibility
pgcrypto
pgrowlocks
pgstattuple
postgres_fdw
seg
sepgsql
spi
sslinfo
start-scripts
tablefunc
tcn
test_decoding
expected
specs
sql
binary.sql
ddl.sql
decoding_in_xact.sql
decoding_into_rel.sql
messages.sql
permissions.sql
prepared.sql
replorigin.sql
rewrite.sql
time.sql
toast.sql
xact.sql
.gitignore
Makefile
logical.conf
test_decoding.c
tsearch2
tsm_system_rows
tsm_system_time
unaccent
uuid-ossp
vacuumlo
xml2
Makefile
README
contrib-global.mk
doc
src
.dir-locals.el
.gitattributes
.gitignore
COPYRIGHT
GNUmakefile.in
HISTORY
Makefile
README
README.git
aclocal.m4
configure
configure.in
To ensure that "make installcheck" can be used safely against an existing installation, we need to be careful about what global object names (database, role, and tablespace names) we use; otherwise we might accidentally clobber important objects. There's been a weak consensus that test databases should have names including "regression", and that test role names should start with "regress_", but we didn't have any particular rule about tablespace names; and neither of the other rules was followed with any consistency either. This commit moves us a long way towards having a hard-and-fast rule that regression test databases must have names including "regression", and that test role and tablespace names must start with "regress_". It's not completely there because I did not touch some test cases in rolenames.sql that test creation of special role names like "session_user". That will require some rethinking of exactly what we want to test, whereas the intent of this patch is just to hit all the cases in which the needed renamings are cosmetic. There is no enforcement mechanism in this patch either, but if we don't add one we can expect that the tests will soon be violating the convention again. Again, that's not such a cosmetic change and it will require discussion. (But I did use a quick-hack enforcement patch to find these cases.) Discussion: <16638.1468620817@sss.pgh.pa.us>
70 lines
2.4 KiB
SQL
70 lines
2.4 KiB
SQL
-- predictability
|
|
SET synchronous_commit = on;
|
|
|
|
-- setup
|
|
CREATE ROLE regress_lr_normal;
|
|
CREATE ROLE regress_lr_superuser SUPERUSER;
|
|
CREATE ROLE regress_lr_replication REPLICATION;
|
|
CREATE TABLE lr_test(data text);
|
|
|
|
-- superuser can control replication
|
|
SET ROLE regress_lr_superuser;
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
INSERT INTO lr_test VALUES('lr_superuser_init');
|
|
SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
|
|
SELECT pg_drop_replication_slot('regression_slot');
|
|
RESET ROLE;
|
|
|
|
-- replication user can control replication
|
|
SET ROLE regress_lr_replication;
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
INSERT INTO lr_test VALUES('lr_superuser_init');
|
|
SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
|
|
SELECT pg_drop_replication_slot('regression_slot');
|
|
RESET ROLE;
|
|
|
|
-- plain user *can't* can control replication
|
|
SET ROLE regress_lr_normal;
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
INSERT INTO lr_test VALUES('lr_superuser_init');
|
|
SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
|
|
SELECT pg_drop_replication_slot('regression_slot');
|
|
RESET ROLE;
|
|
|
|
-- replication users can drop superuser created slots
|
|
SET ROLE regress_lr_superuser;
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
RESET ROLE;
|
|
SET ROLE regress_lr_replication;
|
|
SELECT pg_drop_replication_slot('regression_slot');
|
|
RESET ROLE;
|
|
|
|
-- normal users can't drop existing slots
|
|
SET ROLE regress_lr_superuser;
|
|
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
|
RESET ROLE;
|
|
SET ROLE regress_lr_normal;
|
|
SELECT pg_drop_replication_slot('regression_slot');
|
|
RESET ROLE;
|
|
|
|
-- all users can see existing slots
|
|
SET ROLE regress_lr_superuser;
|
|
SELECT slot_name, plugin FROM pg_replication_slots;
|
|
RESET ROLE;
|
|
|
|
SET ROLE regress_lr_replication;
|
|
SELECT slot_name, plugin FROM pg_replication_slots;
|
|
RESET ROLE;
|
|
|
|
SET ROLE regress_lr_normal;
|
|
SELECT slot_name, plugin FROM pg_replication_slots;
|
|
RESET ROLE;
|
|
|
|
-- cleanup
|
|
SELECT pg_drop_replication_slot('regression_slot');
|
|
|
|
DROP ROLE regress_lr_normal;
|
|
DROP ROLE regress_lr_superuser;
|
|
DROP ROLE regress_lr_replication;
|
|
DROP TABLE lr_test;
|