mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
These cause problems when running installcheck-world USE_MODULE_DB=1 with -j.
Note: This patch has been originally applied to v16 and newer branches
as of 6a20b04f04. Sami Imseih has reported this issue as being
possible to reach for other branches still supported: REL_15_STABLE and
REL_14_STABLE.
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/20221003234111.4ob7yph6r4g4ywhu@awork3.anarazel.de
Discussion: https://postgr.es/m/CAA5RZ0soPHUvwXLZ+mf5Q=uJRL5ggnRg1uB0qKVG1bbdA9up6w@mail.gmail.com
Backpatch-through: 14
77 lines
2.4 KiB
SQL
77 lines
2.4 KiB
SQL
CREATE EXTENSION adminpack;
|
|
|
|
-- create new file
|
|
SELECT pg_file_write('test_file1', 'test1', false);
|
|
SELECT pg_read_file('test_file1');
|
|
|
|
-- append
|
|
SELECT pg_file_write('test_file1', 'test1', true);
|
|
SELECT pg_read_file('test_file1');
|
|
|
|
-- error, already exists
|
|
SELECT pg_file_write('test_file1', 'test1', false);
|
|
SELECT pg_read_file('test_file1');
|
|
|
|
-- disallowed file paths for non-superusers and users who are
|
|
-- not members of pg_write_server_files
|
|
CREATE ROLE regress_adminpack_user1;
|
|
|
|
GRANT pg_read_all_settings TO regress_adminpack_user1;
|
|
GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_adminpack_user1;
|
|
|
|
SET ROLE regress_adminpack_user1;
|
|
SELECT pg_file_write('../test_file0', 'test0', false);
|
|
SELECT pg_file_write('/tmp/test_file0', 'test0', false);
|
|
SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4', false);
|
|
SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false);
|
|
RESET ROLE;
|
|
REVOKE EXECUTE ON FUNCTION pg_file_write(text,text,bool) FROM regress_adminpack_user1;
|
|
REVOKE pg_read_all_settings FROM regress_adminpack_user1;
|
|
DROP ROLE regress_adminpack_user1;
|
|
|
|
-- sync
|
|
SELECT pg_file_sync('test_file1'); -- sync file
|
|
SELECT pg_file_sync('pg_stat'); -- sync directory
|
|
SELECT pg_file_sync('test_file2'); -- not there
|
|
|
|
-- rename file
|
|
SELECT pg_file_rename('test_file1', 'test_file2');
|
|
SELECT pg_read_file('test_file1'); -- not there
|
|
SELECT pg_read_file('test_file2');
|
|
|
|
-- error
|
|
SELECT pg_file_rename('test_file1', 'test_file2');
|
|
|
|
-- rename file and archive
|
|
SELECT pg_file_write('test_file3', 'test3', false);
|
|
SELECT pg_file_rename('test_file2', 'test_file3', 'test_file3_archive');
|
|
SELECT pg_read_file('test_file2'); -- not there
|
|
SELECT pg_read_file('test_file3');
|
|
SELECT pg_read_file('test_file3_archive');
|
|
|
|
|
|
-- unlink
|
|
SELECT pg_file_unlink('test_file1'); -- does not exist
|
|
SELECT pg_file_unlink('test_file2'); -- does not exist
|
|
SELECT pg_file_unlink('test_file3');
|
|
SELECT pg_file_unlink('test_file3_archive');
|
|
SELECT pg_file_unlink('test_file4');
|
|
|
|
|
|
-- superuser checks
|
|
CREATE USER regress_adminpack_user1;
|
|
SET ROLE regress_adminpack_user1;
|
|
|
|
SELECT pg_file_write('test_file0', 'test0', false);
|
|
SELECT pg_file_sync('test_file0');
|
|
SELECT pg_file_rename('test_file0', 'test_file0');
|
|
SELECT pg_file_unlink('test_file0');
|
|
SELECT pg_logdir_ls();
|
|
|
|
RESET ROLE;
|
|
DROP USER regress_adminpack_user1;
|
|
|
|
|
|
-- no further tests for pg_logdir_ls() because it depends on the
|
|
-- server's logging setup
|