From 98d4a2c9768770f1325e37fab553198c1fa19da7 Mon Sep 17 00:00:00 2001 From: Justin Pryzby Date: Thu, 5 Mar 2020 15:17:28 -0600 Subject: [PATCH v8 6/6] Change logdir and archive_statusdir to include dirs.. and add a column indicating *whether* a path is a dir. Need catversion bump --- doc/src/sgml/func.sgml | 31 +++++++++++++---------- src/backend/utils/adt/genfile.c | 4 +-- src/include/catalog/pg_proc.dat | 8 +++--- src/test/regress/output/tablespace.source | 4 +-- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 234c9c1699..dd3faa4e7c 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -21348,8 +21348,9 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); setof record - List the name, size, and last modification time of files in the log - directory. Access is granted to members of the pg_monitor + For each file in the log directory, list the file's name, size, last + modification time, and boolean indicating if it is a directory. + Access is granted to members of the pg_monitor role and may be granted to other non-superuser roles. @@ -21370,10 +21371,10 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); setof record - List the name, size, and last modification time of files in the WAL - archive status directory. Access is granted to members of the - pg_monitor role and may be granted to other - non-superuser roles. + For each file in the WAL archive status directory, list the file's name, + size, last modification time, and boolean indicating if it is a directory. + Access is granted to members of the pg_monitor role + and may be granted to other non-superuser roles. @@ -21447,11 +21448,13 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); pg_ls_logdir - pg_ls_logdir returns the name, size, and last modified time - (mtime) of each file in the log directory. By default, only superusers + pg_ls_logdir lists each file in the log directory, + along with the file's name, size, last modified time (mtime) and boolean + indicating if the file is a directory. + By default, only superusers and members of the pg_monitor role can use this function. Access may be granted to others using GRANT. - Filenames beginning with a dot, directories, and other special files are not shown. + Filenames beginning with a dot and special file types are not shown. @@ -21470,13 +21473,15 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); pg_ls_archive_statusdir - pg_ls_archive_statusdir returns the name, size, and - last modified time (mtime) of each file in the WAL archive status - directory pg_wal/archive_status. By default only + pg_ls_archive_statusdir lists each file in the WAL + archive status directory pg_wal/archive_status along with + the file's name, size, last modified time (mtime) and boolean indicating if + the file is a directory. + By default only superusers and members of the pg_monitor role can use this function. Access may be granted to others using GRANT. - Filenames beginning with a dot, directories, and other special files are not shown. + Filenames beginning with a dot and special file types are not shown. diff --git a/src/backend/utils/adt/genfile.c b/src/backend/utils/adt/genfile.c index 03656a28f9..3da901f8d6 100644 --- a/src/backend/utils/adt/genfile.c +++ b/src/backend/utils/adt/genfile.c @@ -690,7 +690,7 @@ pg_ls_dir_files(FunctionCallInfo fcinfo, const char *dir, bool missing_ok, Datum pg_ls_logdir(PG_FUNCTION_ARGS) { - return pg_ls_dir_files(fcinfo, Log_directory, true, DIR_HIDE); + return pg_ls_dir_files(fcinfo, Log_directory, true, DIR_ONLY); } /* Function to return the list of files in the WAL directory */ @@ -744,5 +744,5 @@ pg_ls_tmpdir_1arg(PG_FUNCTION_ARGS) Datum pg_ls_archive_statusdir(PG_FUNCTION_ARGS) { - return pg_ls_dir_files(fcinfo, XLOGDIR "/archive_status", true, DIR_HIDE); + return pg_ls_dir_files(fcinfo, XLOGDIR "/archive_status", true, DIR_ONLY); } diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 0dbce4ba09..fdf86e1eaf 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -10723,8 +10723,8 @@ { oid => '3353', descr => 'list files in the log directory', proname => 'pg_ls_logdir', procost => '10', prorows => '20', proretset => 't', provolatile => 'v', prorettype => 'record', proargtypes => '', - proallargtypes => '{text,int8,timestamptz}', proargmodes => '{o,o,o}', - proargnames => '{name,size,modification}', prosrc => 'pg_ls_logdir' }, + proallargtypes => '{text,int8,timestamptz,bool}', proargmodes => '{o,o,o,o}', + proargnames => '{name,size,modification,isdir}', prosrc => 'pg_ls_logdir' }, { oid => '3354', descr => 'list of files in the WAL directory', proname => 'pg_ls_waldir', procost => '10', prorows => '20', proretset => 't', provolatile => 'v', prorettype => 'record', proargtypes => '', @@ -10733,8 +10733,8 @@ { oid => '5031', descr => 'list of files in the archive_status directory', proname => 'pg_ls_archive_statusdir', procost => '10', prorows => '20', proretset => 't', provolatile => 'v', prorettype => 'record', - proargtypes => '', proallargtypes => '{text,int8,timestamptz}', - proargmodes => '{o,o,o}', proargnames => '{name,size,modification}', + proargtypes => '', proallargtypes => '{text,int8,timestamptz,bool}', + proargmodes => '{o,o,o,o}', proargnames => '{name,size,modification,isdir}', prosrc => 'pg_ls_archive_statusdir' }, { oid => '5029', descr => 'list files in the pgsql_tmp directory', proname => 'pg_ls_tmpdir', procost => '10', prorows => '20', proretset => 't', diff --git a/src/test/regress/output/tablespace.source b/src/test/regress/output/tablespace.source index 25a0081927..a5017e5f9d 100644 --- a/src/test/regress/output/tablespace.source +++ b/src/test/regress/output/tablespace.source @@ -24,8 +24,8 @@ SELECT c.* FROM (SELECT oid FROM pg_tablespace b WHERE b.spcname='regress_tblspa -- This tests the missing_ok parameter. If that's not functioning, this would ERROR if the logdir doesn't exist yet. -- The name='' condition is never true, so the function runs to completion but returns zero rows. SELECT * FROM pg_ls_logdir() WHERE name='Does not exist'; - name | size | modification -------+------+-------------- + name | size | modification | isdir +------+------+--------------+------- (0 rows) -- try setting and resetting some properties for the new tablespace -- 2.17.0