Log Message:
-----------
pg_postmaster_starttime for win32

Modified Files:
--------------
    pgadmin-tools/support:
        admin.sql.in (r1.2 -> r1.3)
        misc.c (r1.4 -> r1.5)

Index: admin.sql.in
===================================================================
RCS file: /projects/pgadmin-tools/support/admin.sql.in,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lsupport/admin.sql.in -Lsupport/admin.sql.in -u -w -r1.2 -r1.3
--- support/admin.sql.in
+++ support/admin.sql.in
@@ -68,6 +68,10 @@
        LANGUAGE C STABLE STRICT;
 */
 
+CREATE FUNCTION pg_postmaster_starttime() RETURNS timestamp
+   AS 'MODULE_PATHNAME', 'pg_postmaster_starttime'
+       LANGUAGE C VOLATILE STRICT;
+
 CREATE FUNCTION pg_logdir_ls() RETURNS setof record
    AS 'MODULE_PATHNAME', 'pg_logdir_ls'
        LANGUAGE C VOLATILE STRICT;
Index: misc.c
===================================================================
RCS file: /projects/pgadmin-tools/support/misc.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lsupport/misc.c -Lsupport/misc.c -u -w -r1.4 -r1.5
--- support/misc.c
+++ support/misc.c
@@ -34,11 +34,12 @@
 Datum pg_reload_conf(PG_FUNCTION_ARGS);
 Datum pg_logfile_rotate(PG_FUNCTION_ARGS);
 Datum pg_logdir_ls(PG_FUNCTION_ARGS);
+Datum pg_postmaster_starttime(PG_FUNCTION_ARGS);
 
 PG_FUNCTION_INFO_V1(pg_reload_conf);
 PG_FUNCTION_INFO_V1(pg_logfile_rotate);
 PG_FUNCTION_INFO_V1(pg_logdir_ls);
-
+PG_FUNCTION_INFO_V1(pg_postmaster_starttime);
 Datum
 pg_reload_conf(PG_FUNCTION_ARGS)
 {
@@ -198,3 +199,48 @@
        SRF_RETURN_DONE(funcctx);
 }
 
+
+Datum pg_postmaster_starttime(PG_FUNCTION_ARGS)
+{
+    Timestamp result;
+    struct pg_tm tm;
+    
+    if (!superuser()) 
+            ereport(ERROR,
+                            (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+                             (errmsg("only superuser can query the postmaster 
starttime"))));
+
+#ifdef WIN32
+    {
+        extern DLLIMPORT HANDLE PostmasterHandle;
+        FILETIME creationTime;
+        FILETIME exitTime, kernelTime, userTime;
+        SYSTEMTIME st;
+    
+        bool rc=GetProcessTimes(PostmasterHandle, &creationTime,
+            &exitTime, &kernelTime, &userTime);
+        if (!rc)
+            PG_RETURN_NULL();
+    
+        FileTimeToSystemTime(&creationTime, &st);
+    
+        tm.tm_year = st.wYear;
+        tm.tm_mon = st.wMonth;
+        tm.tm_mday = st.wDay;
+        tm.tm_hour = st.wHour;
+        tm.tm_min = st.wMinute;
+        tm.tm_sec = st.wSecond;
+    }
+#else
+    PG_RETURN_NULL();
+#endif
+
+    if (tm2timestamp(&tm, 0, NULL, &result) != 0)
+    {
+        ereport(ERROR,
+            (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
+            errmsg("postmaster timestamp out of range")));
+    }
+
+    PG_RETURN_TIMESTAMP(result);
+}
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
      subscribe-nomail command to [EMAIL PROTECTED] so that your
      message can get through to the mailing list cleanly

Reply via email to