mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
147 lines
3.2 KiB
Plaintext
147 lines
3.2 KiB
Plaintext
CREATE EXTENSION adminpack;
|
|
-- create new file
|
|
SELECT pg_file_write('test_file1', 'test1', false);
|
|
pg_file_write
|
|
---------------
|
|
5
|
|
(1 row)
|
|
|
|
SELECT pg_read_file('test_file1');
|
|
pg_read_file
|
|
--------------
|
|
test1
|
|
(1 row)
|
|
|
|
-- append
|
|
SELECT pg_file_write('test_file1', 'test1', true);
|
|
pg_file_write
|
|
---------------
|
|
5
|
|
(1 row)
|
|
|
|
SELECT pg_read_file('test_file1');
|
|
pg_read_file
|
|
--------------
|
|
test1test1
|
|
(1 row)
|
|
|
|
-- error, already exists
|
|
SELECT pg_file_write('test_file1', 'test1', false);
|
|
ERROR: file "test_file1" exists
|
|
SELECT pg_read_file('test_file1');
|
|
pg_read_file
|
|
--------------
|
|
test1test1
|
|
(1 row)
|
|
|
|
-- disallowed file paths
|
|
SELECT pg_file_write('../test_file0', 'test0', false);
|
|
ERROR: path must be in or below the current directory
|
|
SELECT pg_file_write('/tmp/test_file0', 'test0', false);
|
|
ERROR: absolute path not allowed
|
|
SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4', false);
|
|
pg_file_write
|
|
---------------
|
|
5
|
|
(1 row)
|
|
|
|
SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false);
|
|
ERROR: reference to parent directory ("..") not allowed
|
|
-- rename file
|
|
SELECT pg_file_rename('test_file1', 'test_file2');
|
|
pg_file_rename
|
|
----------------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT pg_read_file('test_file1'); -- not there
|
|
ERROR: could not stat file "test_file1": No such file or directory
|
|
SELECT pg_read_file('test_file2');
|
|
pg_read_file
|
|
--------------
|
|
test1test1
|
|
(1 row)
|
|
|
|
-- error
|
|
SELECT pg_file_rename('test_file1', 'test_file2');
|
|
WARNING: file "test_file1" is not accessible: No such file or directory
|
|
pg_file_rename
|
|
----------------
|
|
f
|
|
(1 row)
|
|
|
|
-- rename file and archive
|
|
SELECT pg_file_write('test_file3', 'test3', false);
|
|
pg_file_write
|
|
---------------
|
|
5
|
|
(1 row)
|
|
|
|
SELECT pg_file_rename('test_file2', 'test_file3', 'test_file3_archive');
|
|
pg_file_rename
|
|
----------------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT pg_read_file('test_file2'); -- not there
|
|
ERROR: could not stat file "test_file2": No such file or directory
|
|
SELECT pg_read_file('test_file3');
|
|
pg_read_file
|
|
--------------
|
|
test1test1
|
|
(1 row)
|
|
|
|
SELECT pg_read_file('test_file3_archive');
|
|
pg_read_file
|
|
--------------
|
|
test3
|
|
(1 row)
|
|
|
|
-- unlink
|
|
SELECT pg_file_unlink('test_file1'); -- does not exist
|
|
pg_file_unlink
|
|
----------------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT pg_file_unlink('test_file2'); -- does not exist
|
|
pg_file_unlink
|
|
----------------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT pg_file_unlink('test_file3');
|
|
pg_file_unlink
|
|
----------------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT pg_file_unlink('test_file3_archive');
|
|
pg_file_unlink
|
|
----------------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT pg_file_unlink('test_file4');
|
|
pg_file_unlink
|
|
----------------
|
|
t
|
|
(1 row)
|
|
|
|
-- superuser checks
|
|
CREATE USER regress_user1;
|
|
SET ROLE regress_user1;
|
|
SELECT pg_file_write('test_file0', 'test0', false);
|
|
ERROR: only superuser may access generic file functions
|
|
SELECT pg_file_rename('test_file0', 'test_file0');
|
|
ERROR: only superuser may access generic file functions
|
|
CONTEXT: SQL function "pg_file_rename" statement 1
|
|
SELECT pg_file_unlink('test_file0');
|
|
ERROR: only superuser may access generic file functions
|
|
SELECT pg_logdir_ls();
|
|
ERROR: only superuser can list the log directory
|
|
RESET ROLE;
|
|
DROP USER regress_user1;
|
|
-- no further tests for pg_logdir_ls() because it depends on the
|
|
-- server's logging setup
|