mirror of
https://github.com/postgres/postgres.git
synced 2025-05-21 00:02:53 -04:00
Rename pg_stat_file columns to be more consistent. Split apart change
and creation columns to behave for Unix or Win32.
This commit is contained in:
parent
24bd9447ac
commit
070a3ad76b
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.280 2005/08/13 19:02:32 tgl Exp $
|
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.281 2005/08/15 23:00:13 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -9414,12 +9414,13 @@ SELECT set_config('log_statement_stats', 'off', false);
|
|||||||
</indexterm>
|
</indexterm>
|
||||||
<para>
|
<para>
|
||||||
<function>pg_stat_file()</> returns a record containing the file
|
<function>pg_stat_file()</> returns a record containing the file
|
||||||
length, last accessed timestamp, last modified timestamp,
|
size, last accessed timestamp, last modified timestamp,
|
||||||
creation timestamp, and a boolean indicating if it is a directory.
|
last file status change timestamp (Unix platforms only),
|
||||||
Typical usages include:
|
file creation timestamp (Win32 only), and a boolean indicating
|
||||||
|
if it is a directory. Typical usages include:
|
||||||
<programlisting>
|
<programlisting>
|
||||||
SELECT * FROM pg_stat_file('filename');
|
SELECT * FROM pg_stat_file('filename');
|
||||||
SELECT (pg_stat_file('filename')).mtime;
|
SELECT (pg_stat_file('filename')).modification;
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
* Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.20 2005/08/15 16:25:17 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.21 2005/08/15 23:00:13 momjian Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CREATE VIEW pg_roles AS
|
CREATE VIEW pg_roles AS
|
||||||
@ -346,8 +346,9 @@ UPDATE pg_proc SET
|
|||||||
'timestamptz',
|
'timestamptz',
|
||||||
'timestamptz',
|
'timestamptz',
|
||||||
'timestamptz',
|
'timestamptz',
|
||||||
|
'timestamptz',
|
||||||
'bool'],
|
'bool'],
|
||||||
proargmodes = ARRAY['i'::"char", 'o', 'o', 'o', 'o', 'o'],
|
proargmodes = ARRAY['i'::"char", 'o', 'o', 'o', 'o', 'o', 'o'],
|
||||||
proargnames = ARRAY['filename'::text,
|
proargnames = ARRAY['filename'::text, 'size', 'access', 'modification',
|
||||||
'length', 'atime', 'mtime', 'ctime','isdir']
|
'change', 'creation', 'isdir']
|
||||||
WHERE oid = 'pg_stat_file(text)'::regprocedure;
|
WHERE oid = 'pg_stat_file(text)'::regprocedure;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* Author: Andreas Pflug <pgadmin@pse-consulting.de>
|
* Author: Andreas Pflug <pgadmin@pse-consulting.de>
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/genfile.c,v 1.4 2005/08/13 19:02:34 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/genfile.c,v 1.5 2005/08/15 23:00:14 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -154,8 +154,8 @@ pg_stat_file(PG_FUNCTION_ARGS)
|
|||||||
text *filename_t = PG_GETARG_TEXT_P(0);
|
text *filename_t = PG_GETARG_TEXT_P(0);
|
||||||
char *filename;
|
char *filename;
|
||||||
struct stat fst;
|
struct stat fst;
|
||||||
Datum values[5];
|
Datum values[6];
|
||||||
bool isnull[5];
|
bool isnull[6];
|
||||||
HeapTuple tuple;
|
HeapTuple tuple;
|
||||||
TupleDesc tupdesc;
|
TupleDesc tupdesc;
|
||||||
|
|
||||||
@ -175,26 +175,35 @@ pg_stat_file(PG_FUNCTION_ARGS)
|
|||||||
* This record type had better match the output parameters declared
|
* This record type had better match the output parameters declared
|
||||||
* for me in pg_proc.h (actually, in system_views.sql at the moment).
|
* for me in pg_proc.h (actually, in system_views.sql at the moment).
|
||||||
*/
|
*/
|
||||||
tupdesc = CreateTemplateTupleDesc(5, false);
|
tupdesc = CreateTemplateTupleDesc(6, false);
|
||||||
TupleDescInitEntry(tupdesc, (AttrNumber) 1,
|
TupleDescInitEntry(tupdesc, (AttrNumber) 1,
|
||||||
"length", INT8OID, -1, 0);
|
"size", INT8OID, -1, 0);
|
||||||
TupleDescInitEntry(tupdesc, (AttrNumber) 2,
|
TupleDescInitEntry(tupdesc, (AttrNumber) 2,
|
||||||
"atime", TIMESTAMPTZOID, -1, 0);
|
"access", TIMESTAMPTZOID, -1, 0);
|
||||||
TupleDescInitEntry(tupdesc, (AttrNumber) 3,
|
TupleDescInitEntry(tupdesc, (AttrNumber) 3,
|
||||||
"mtime", TIMESTAMPTZOID, -1, 0);
|
"modification", TIMESTAMPTZOID, -1, 0);
|
||||||
TupleDescInitEntry(tupdesc, (AttrNumber) 4,
|
TupleDescInitEntry(tupdesc, (AttrNumber) 4,
|
||||||
"ctime", TIMESTAMPTZOID, -1, 0);
|
"change", TIMESTAMPTZOID, -1, 0);
|
||||||
TupleDescInitEntry(tupdesc, (AttrNumber) 5,
|
TupleDescInitEntry(tupdesc, (AttrNumber) 5,
|
||||||
|
"creation", TIMESTAMPTZOID, -1, 0);
|
||||||
|
TupleDescInitEntry(tupdesc, (AttrNumber) 6,
|
||||||
"isdir", BOOLOID, -1, 0);
|
"isdir", BOOLOID, -1, 0);
|
||||||
BlessTupleDesc(tupdesc);
|
BlessTupleDesc(tupdesc);
|
||||||
|
|
||||||
|
memset(isnull, false, sizeof(isnull));
|
||||||
|
|
||||||
values[0] = Int64GetDatum((int64) fst.st_size);
|
values[0] = Int64GetDatum((int64) fst.st_size);
|
||||||
values[1] = TimestampTzGetDatum(time_t_to_timestamptz(fst.st_atime));
|
values[1] = TimestampTzGetDatum(time_t_to_timestamptz(fst.st_atime));
|
||||||
values[2] = TimestampTzGetDatum(time_t_to_timestamptz(fst.st_mtime));
|
values[2] = TimestampTzGetDatum(time_t_to_timestamptz(fst.st_mtime));
|
||||||
|
/* Unix has file status change time, while Win32 has creation time */
|
||||||
|
#if !defined(WIN32) && !defined(__CYGWIN__)
|
||||||
values[3] = TimestampTzGetDatum(time_t_to_timestamptz(fst.st_ctime));
|
values[3] = TimestampTzGetDatum(time_t_to_timestamptz(fst.st_ctime));
|
||||||
values[4] = BoolGetDatum(fst.st_mode & S_IFDIR);
|
isnull[4] = true;
|
||||||
|
#else
|
||||||
memset(isnull, false, sizeof(isnull));
|
isnull[3] = true;
|
||||||
|
values[4] = TimestampTzGetDatum(time_t_to_timestamptz(fst.st_ctime));
|
||||||
|
#endif
|
||||||
|
values[5] = BoolGetDatum(fst.st_mode & S_IFDIR);
|
||||||
|
|
||||||
tuple = heap_form_tuple(tupdesc, values, isnull);
|
tuple = heap_form_tuple(tupdesc, values, isnull);
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.299 2005/08/15 16:25:18 tgl Exp $
|
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.300 2005/08/15 23:00:14 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 200508151
|
#define CATALOG_VERSION_NO 200508152
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user