Re: Acclerating INSERT/UPDATE using UPS

Поиск
Список
Период
Сортировка
От Hideyuki Kawashima
Тема Re: Acclerating INSERT/UPDATE using UPS
Дата
Msg-id 45D52DCB.3000404@cs.tsukuba.ac.jp
обсуждение исходный текст
Ответ на Re: Acclerating INSERT/UPDATE using UPS  ("Joshua D. Drake" <jd@commandprompt.com>)
Список pgsql-hackers
Joshua,

I revised. Now Sigres can be activated by setting "sigres = on" in
postgresql.conf.
You can download the version (0.1.2) from
http://sourceforge.jp/projects/sigres .

And, I attach the diff between PostgreSQL-8.2.1 and Sigres-0.1.2 to this
mail.

Thanks for your comments.

-- Hideyuki


Joshua D. Drake wrote:
> Hideyuki Kawashima wrote:
>
>> Joshua,
>>
>> I appreciate your great suggestion!
>> It is great honor for me if Sigres will be merged to PostgreSQL.
>> Since the changes of Sigres from PostgreSQL-8.2.1 are not many,
>> and moreover, all of changes are surrounded with #ifdef SIGRES --- #endif,
>> incorporating Sigres into PostgreSQL would be easy.
>>
>
> The best way is to create a patch against -head and submit that patch
> with a complete description of why, and what. If you have test cases
> that show the improvement all the better.
>
> I would suggest though if you are going to submit the patch that you
> take a look at how you could disable/enable the feature within the
> postgresql.conf via a guc.
>
> Sincerely,
>
> Joshua D. Drake
>
>
>> However, Sigres modifies WAL which is the most important point of DBMS
>> on stability.
>> Although I myself could not find any bugs in Sigres, I am really afraid
>> of it. It a bug exists on Sigres, it puts everyone to huge
>> inconvenience... Therefore, before incorporating Sigres into PostgreSQL,
>> the code must be checked, and the behaviors of Sigres must be checked
>> carefully. Since PostgreSQL is a famous and wide spread software, I
>> strongly want to avoid losing its great reputation. Unfortunately in
>> Japan, I do not know any WAL hackers except for a friend of mine, and he
>> is too busy to check Sigres. So, if pgsql-hackers checks Sigres, I am
>> really happy.
>>
>> Best Regards,
>>
>> -- Hideyuki
>>
>> Joshua D. Drake wrote:
>>
>>> Hideyuki Kawashima wrote:
>>>
>>>
>>>> Joshua,
>>>>
>>>>
>>> :)
>>>
>>>
>>>
>>>> The reason why I made the Sigres is, the advances of recent non volatile
>>>> memories. Just now we do not usually use non volatile memories. But in
>>>> the near future, situation would change. I think if a non volatile
>>>> memories can be considered as a persistence device, PostgreSQL WAL
>>>> mechanism should be modified.
>>>> However, I do not use such devices usually. Thus I made Sigres which
>>>> requires UPS.
>>>>
>>>>
>>> This is actually very interesting. We (www.commandprompt.com) have had
>>> several customers ask us how we can make PostgreSQL more reasonable
>>> within a flash environment.
>>>
>>> I agree with you that in the future you will see many such databases
>>> including PostgreSQL living on these devices.
>>>
>>> Tom? What do you think? Is there some room for movement here within the
>>> postgresql.conf to make something like sigres usable within PostgreSQL
>>> proper?
>>>
>>>
>>>
>>>> Currently I have just ignored XLogWrite and WALWriteLock, but a friend
>>>> of mine (a Japanese great hacker of PostgreSQL) has more idea to improve
>>>> WAL if a battery supplied memory can be considered as a persistent device.
>>>>
>>>>
>>>>
>>> We are coming up very quickly on a feature freeze for the next version
>>> of PostgreSQL. If... we can has something out quickly enough and in a
>>> thought out fashion, the hackers may be willing to accept a patch for
>>> 8.3.. If not there is always 8.4..
>>>
>>> Sincerely,
>>>
>>> Joshua D. Drake
>>>
>>>
>>>
>>>
>>>
>>>
>
>
>

--
Hideyuki Kawashima (Ph.D), University of Tsukuba,
Graduate School of Systems and Information Engineering
Assistant Professor, TEL: +81-29-853-5322

Only in sigres-0.1.2: CHANGELOG
Only in postgresql-8.2.1: README
Only in sigres-0.1.2: README.pgsql
Only in sigres-0.1.2: README.sigres
diff -c -r postgresql-8.2.1/src/backend/access/transam/xlog.c sigres-0.1.2/src/backend/access/transam/xlog.c
*** postgresql-8.2.1/src/backend/access/transam/xlog.c    Fri Dec  1 03:29:11 2006
--- sigres-0.1.2/src/backend/access/transam/xlog.c    Fri Feb 16 09:45:05 2007
***************
*** 10,15 ****
--- 10,18 ----
   * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.258 2006/11/30 18:29:11 tgl Exp $
   *
   *-------------------------------------------------------------------------
+  * 
+  * Extended to Sigres by Hideyuki Kawashima (kawasima@cs.tsukuba.ac.jp)
+  *
   */
  
  #include "postgres.h"
***************
*** 142,147 ****
--- 145,154 ----
  bool        XLOG_DEBUG = false;
  #endif
  
+ /* Entities are in "globals.c", for SIGRES */
+ extern int BgWriterPid; 
+ extern bool enableSigres; 
+ 
  /*
   * XLOGfileslop is used in the code as the allowed "fuzz" in the number of
   * preallocated XLOG segments --- we try to have at least XLOGfiles advance
***************
*** 474,480 ****
  static bool XLogCheckBuffer(XLogRecData *rdata, bool doPageWrites,
                  XLogRecPtr *lsn, BkpBlock *bkpb);
  static bool AdvanceXLInsertBuffer(bool new_segment);
! static void XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch);
  static int XLogFileInit(uint32 log, uint32 seg,
               bool *use_existent, bool use_lock);
  static bool InstallXLogFileSegment(uint32 *log, uint32 *seg, char *tmppath,
--- 481,487 ----
  static bool XLogCheckBuffer(XLogRecData *rdata, bool doPageWrites,
                  XLogRecPtr *lsn, BkpBlock *bkpb);
  static bool AdvanceXLInsertBuffer(bool new_segment);
! static void _XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch);
  static int XLogFileInit(uint32 log, uint32 seg,
               bool *use_existent, bool use_lock);
  static bool InstallXLogFileSegment(uint32 *log, uint32 *seg, char *tmppath,
***************
*** 510,515 ****
--- 517,529 ----
                    XLogRecPtr *minRecoveryLoc);
  static void rm_redo_error_callback(void *arg);
  
+ #define XLogWrite(WriteRqst, flexible, xlog_switch)                                            \
+     do {
                      \
 
+         if (enableSigres == false)
\
+             _XLogWrite(WriteRqst, flexible, xlog_switch);                                            \
+         else if ((IsUnderPostmaster && BgWriterPid == MyProcPid) || !IsUnderPostmaster) \
+             _XLogWrite(WriteRqst, flexible, xlog_switch);                                            \
+     } while (0)
  
  /*
   * Insert an XLOG record having the specified RMID and info bytes,
***************
*** 727,746 ****
          (LogwrtRqst.Write.xrecoff >= LogwrtResult.Write.xrecoff +
           XLogCtl->XLogCacheByte / 2))
      {
!         if (LWLockConditionalAcquire(WALWriteLock, LW_EXCLUSIVE))
!         {
!             /*
!              * Since the amount of data we write here is completely optional
!              * anyway, tell XLogWrite it can be "flexible" and stop at a
!              * convenient boundary.  This allows writes triggered by this
!              * mechanism to synchronize with the cache boundaries, so that in
!              * a long transaction we'll basically dump alternating halves of
!              * the buffer array.
!              */
!             LogwrtResult = XLogCtl->Write.LogwrtResult;
!             if (XLByteLT(LogwrtResult.Write, LogwrtRqst.Write))
!                 XLogWrite(LogwrtRqst, true, false);
!             LWLockRelease(WALWriteLock);
          }
      }
  
--- 741,762 ----
          (LogwrtRqst.Write.xrecoff >= LogwrtResult.Write.xrecoff +
           XLogCtl->XLogCacheByte / 2))
      {
!         if (enableSigres == false) {
!             if (LWLockConditionalAcquire(WALWriteLock, LW_EXCLUSIVE)) 
!             {
!                 /*
!                  * Since the amount of data we write here is completely optional
!                  * anyway, tell XLogWrite it can be "flexible" and stop at a
!                  * convenient boundary.  This allows writes triggered by this
!                  * mechanism to synchronize with the cache boundaries, so that in
!                  * a long transaction we'll basically dump alternating halves of
!                  * the buffer array.
!                  */
!                 LogwrtResult = XLogCtl->Write.LogwrtResult;
!                 if (XLByteLT(LogwrtResult.Write, LogwrtRqst.Write))
!                     XLogWrite(LogwrtRqst, true, false);
!                 LWLockRelease(WALWriteLock);
!           }
          }
      }
  
***************
*** 890,897 ****
              RecPtr.xlogid -= 1;
              RecPtr.xrecoff = XLogFileSize;
          }
! 
!         LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
          LogwrtResult = XLogCtl->Write.LogwrtResult;
          if (!XLByteLE(RecPtr, LogwrtResult.Flush))
          {
--- 906,913 ----
              RecPtr.xlogid -= 1;
              RecPtr.xrecoff = XLogFileSize;
          }
!         if (enableSigres == false)
!             LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
          LogwrtResult = XLogCtl->Write.LogwrtResult;
          if (!XLByteLE(RecPtr, LogwrtResult.Flush))
          {
***************
*** 901,908 ****
              FlushRqst.Flush = RecPtr;
              XLogWrite(FlushRqst, false, false);
          }
!         LWLockRelease(WALWriteLock);
! 
          END_CRIT_SECTION();
  
          return RecPtr;
--- 917,924 ----
              FlushRqst.Flush = RecPtr;
              XLogWrite(FlushRqst, false, false);
          }
!         if (enableSigres == false)
!             LWLockRelease(WALWriteLock);
          END_CRIT_SECTION();
  
          return RecPtr;
***************
*** 1016,1024 ****
          XLogCtlWrite *Write = &XLogCtl->Write;
          XLogwrtRqst FlushRqst;
          XLogRecPtr    OldSegEnd;
! 
!         LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
! 
          /*
           * Flush through the end of the page containing XLOG_SWITCH, and
           * perform end-of-segment actions (eg, notifying archiver).
--- 1032,1039 ----
          XLogCtlWrite *Write = &XLogCtl->Write;
          XLogwrtRqst FlushRqst;
          XLogRecPtr    OldSegEnd;
!         if (enableSigres == false)
!             LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
          /*
           * Flush through the end of the page containing XLOG_SWITCH, and
           * perform end-of-segment actions (eg, notifying archiver).
***************
*** 1067,1075 ****
          }
  
          Write->LogwrtResult = LogwrtResult;
! 
!         LWLockRelease(WALWriteLock);
! 
          updrqst = false;        /* done already */
      }
      else
--- 1082,1089 ----
          }
  
          Write->LogwrtResult = LogwrtResult;
!         if (enableSigres == false)
!             LWLockRelease(WALWriteLock);
          updrqst = false;        /* done already */
      }
      else
***************
*** 1376,1382 ****
                  WriteRqst.Write = OldPageRqstPtr;
                  WriteRqst.Flush.xlogid = 0;
                  WriteRqst.Flush.xrecoff = 0;
!                 XLogWrite(WriteRqst, false, false);
                  LWLockRelease(WALWriteLock);
                  Insert->LogwrtResult = LogwrtResult;
              }
--- 1390,1396 ----
                  WriteRqst.Write = OldPageRqstPtr;
                  WriteRqst.Flush.xlogid = 0;
                  WriteRqst.Flush.xrecoff = 0;
!                 _XLogWrite(WriteRqst, false, false); /* SIGRES */
                  LWLockRelease(WALWriteLock);
                  Insert->LogwrtResult = LogwrtResult;
              }
***************
*** 1463,1469 ****
   * Must be called with WALWriteLock held.
   */
  static void
! XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
  {
      XLogCtlWrite *Write = &XLogCtl->Write;
      bool        ispartialpage;
--- 1477,1483 ----
   * Must be called with WALWriteLock held.
   */
  static void
! _XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
  {
      XLogCtlWrite *Write = &XLogCtl->Write;
      bool        ispartialpage;
***************
*** 1581,1587 ****
                          if (XLOG_DEBUG)
                              elog(LOG, "time for a checkpoint, signaling bgwriter");
  #endif
!                         RequestCheckpoint(false, true);
                      }
                  }
              }
--- 1595,1602 ----
                          if (XLOG_DEBUG)
                              elog(LOG, "time for a checkpoint, signaling bgwriter");
  #endif
!                         if (enableSigres == false)
!                             RequestCheckpoint(false, true);
                      }
                  }
              }
***************
*** 1861,1871 ****
       * section.  However, calls from bufmgr.c are not within critical sections
       * and so we will not force a restart for a bad LSN on a data page.
       */
!     if (XLByteLT(LogwrtResult.Flush, record))
!         elog(InRecovery ? WARNING : ERROR,
!         "xlog flush request %X/%X is not satisfied --- flushed only to %X/%X",
!              record.xlogid, record.xrecoff,
!              LogwrtResult.Flush.xlogid, LogwrtResult.Flush.xrecoff);
  }
  
  /*
--- 1876,1887 ----
       * section.  However, calls from bufmgr.c are not within critical sections
       * and so we will not force a restart for a bad LSN on a data page.
       */
!     if (enableSigres == false) 
!         if (XLByteLT(LogwrtResult.Flush, record))
!             elog(InRecovery ? WARNING : ERROR,
!                      "xlog flush request %X/%X is not satisfied --- flushed only to %X/%X",
!                      record.xlogid, record.xrecoff,
!                      LogwrtResult.Flush.xlogid, LogwrtResult.Flush.xrecoff);
  }
  
  /*
***************
*** 2342,2347 ****
--- 2358,2366 ----
  #endif
  #endif   /* NOT_USED */
  
+     if (enableSigres == true)
+         issue_xlog_fsync();
+ 
      if (close(openLogFile))
          ereport(PANIC,
                  (errcode_for_file_access(),
***************
*** 5420,5425 ****
--- 5439,5447 ----
  void
  ShutdownXLOG(int code, Datum arg)
  {
+     if (enableSigres == true)
+         enableFsync = true;
+ 
      ereport(LOG,
              (errmsg("shutting down")));
  
***************
*** 5428,5433 ****
--- 5450,5458 ----
      ShutdownSUBTRANS();
      ShutdownMultiXact();
  
+     if (enableSigres == true)
+         XLogFileClose();
+ 
      ereport(LOG,
              (errmsg("database system is shut down")));
  }
***************
*** 6183,6190 ****
           * have different checkpoint positions and hence different history
           * file names, even if nothing happened in between.
           */
!         RequestCheckpoint(true, false);
! 
          /*
           * Now we need to fetch the checkpoint record location, and also its
           * REDO pointer.  The oldest point in WAL that would be needed to
--- 6208,6215 ----
           * have different checkpoint positions and hence different history
           * file names, even if nothing happened in between.
           */
!         if (enableSigres == false)
!             RequestCheckpoint(true, false);
          /*
           * Now we need to fetch the checkpoint record location, and also its
           * REDO pointer.  The oldest point in WAL that would be needed to
diff -c -r postgresql-8.2.1/src/backend/commands/dbcommands.c sigres-0.1.2/src/backend/commands/dbcommands.c
*** postgresql-8.2.1/src/backend/commands/dbcommands.c    Mon Nov  6 07:42:08 2006
--- sigres-0.1.2/src/backend/commands/dbcommands.c    Fri Feb 16 10:35:01 2007
***************
*** 59,64 ****
--- 59,66 ----
  static void remove_dbtablespaces(Oid db_id);
  static bool check_db_file_conflict(Oid db_id);
  
+ /* For Sigres */
+ extern bool enableSigres;
  
  /*
   * CREATE DATABASE
***************
*** 504,510 ****
           * Perhaps if we ever implement CREATE DATABASE in a less cheesy way,
           * we can avoid this.
           */
!         RequestCheckpoint(true, false);
  
          /*
           * Close pg_database, but keep lock till commit (this is important to
--- 506,513 ----
           * Perhaps if we ever implement CREATE DATABASE in a less cheesy way,
           * we can avoid this.
           */
!         if (enableSigres == false)
!             RequestCheckpoint(true, false);
  
          /*
           * Close pg_database, but keep lock till commit (this is important to
diff -c -r postgresql-8.2.1/src/backend/postmaster/bgwriter.c sigres-0.1.2/src/backend/postmaster/bgwriter.c
*** postgresql-8.2.1/src/backend/postmaster/bgwriter.c    Sat Dec  2 04:55:28 2006
--- sigres-0.1.2/src/backend/postmaster/bgwriter.c    Fri Feb 16 11:18:06 2007
***************
*** 42,48 ****
   *-------------------------------------------------------------------------
   */
  #include "postgres.h"
- 
  #include <signal.h>
  #include <time.h>
  #include <unistd.h>
--- 42,47 ----
***************
*** 63,68 ****
--- 62,75 ----
  #include "utils/memutils.h"
  #include "utils/resowner.h"
  
+ #include "debug.h"
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+ 
+ /* For Sigres */
+ extern int BgWriterPid;   /* Entity is in "globals.c" */
+ extern bool enableSigres; /* Entity is in "globals.c" */
  
  /*----------
   * Shared memory area for communication between bgwriter and backends
***************
*** 171,176 ****
--- 178,193 ----
      BgWriterShmem->bgwriter_pid = MyProcPid;
      am_bg_writer = true;
  
+     if (enableSigres == true)
+   {
+     int fd;
+ 
+     if ((fd = open(BGWRITER_PIDFILE, O_WRONLY|O_TRUNC|O_CREAT, 0644)) == -1) ERR;
+     if (write(fd, &MyProcPid, sizeof(int)) == -1) ERR;
+     if (close(fd) == -1) ERR;
+     BgWriterPid = MyProcPid;
+   }
+ 
      /*
       * If possible, make this process a group leader, so that the postmaster
       * can signal any child processes too.  (bgwriter probably never has
***************
*** 321,326 ****
--- 338,379 ----
       */
      PG_SETMASK(&UnBlockSig);
  
+     if (enableSigres == true) {
+         for (;;) {
+             if (!PostmasterIsAlive(true))
+                 exit(1);
+ 
+             /*
+              * Process any requests or signals received recently.
+              */
+             AbsorbFsyncRequests();
+ 
+             if (got_SIGHUP)
+             {
+                 got_SIGHUP = false;
+                 ProcessConfigFile(PGC_SIGHUP);
+             }
+             if (shutdown_requested)
+             {
+                 /*
+                  * From here on, elog(ERROR) should end with exit(1), not send
+                  * control back to the sigsetjmp block above
+                  */
+                 ExitOnAnyError = true;
+                 /* Close down the database */
+                 ShutdownXLOG(0, 0);
+                 DumpFreeSpaceMap(0, 0);
+ 
+                 remove(BGWRITER_PIDFILE);  /* SIGRES */
+ 
+                 /* Normal exit from the bgwriter is here */
+                 proc_exit(0);   /* done */
+             }
+ 
+             usleep(100000L);
+         }
+     }
+ 
      /*
       * Loop forever
       */
***************
*** 506,512 ****
      }
  }
  
- 
  /* --------------------------------
   *        signal handler routines
   * --------------------------------
--- 559,564 ----
diff -c -r postgresql-8.2.1/src/backend/postmaster/postmaster.c sigres-0.1.2/src/backend/postmaster/postmaster.c
*** postgresql-8.2.1/src/backend/postmaster/postmaster.c    Thu Jan  4 09:58:01 2007
--- sigres-0.1.2/src/backend/postmaster/postmaster.c    Fri Feb 16 09:48:10 2007
***************
*** 122,127 ****
--- 122,129 ----
  #include "storage/spin.h"
  #endif
  
+ /* For Sigres */
+ extern bool enableSigres; /* Entity is in "globals.c" */
  
  /*
   * List of active backends (or child processes anyway; we don't actually
***************
*** 960,965 ****
--- 962,970 ----
       */
      StartupPID = StartupDataBase();
  
+     if (enableSigres == true)
+         enableFsync = false;
+ 
      status = ServerLoop();
  
      /*
***************
*** 2841,2846 ****
--- 2846,2854 ----
      char        protobuf[32];
      int            i;
  
+     if (enableSigres == true)
+         enableFsync = false;
+ 
      /*
       * Don't want backend to be able to see the postmaster random number
       * generator state.  We have to clobber the static random_seed *and* start
diff -c -r postgresql-8.2.1/src/backend/utils/init/globals.c sigres-0.1.2/src/backend/utils/init/globals.c
*** postgresql-8.2.1/src/backend/utils/init/globals.c    Wed Oct  4 09:30:02 2006
--- sigres-0.1.2/src/backend/utils/init/globals.c    Fri Feb 16 10:35:00 2007
***************
*** 109,111 ****
--- 109,115 ----
  bool        VacuumCostActive = false;
  
  int            GinFuzzySearchLimit = 0;
+ 
+ /* Sigres Parameters */
+ int     BgWriterPid = 0; /* Must be extern */
+ bool    enableSigres = false;
diff -c -r postgresql-8.2.1/src/backend/utils/misc/guc.c sigres-0.1.2/src/backend/utils/misc/guc.c
*** postgresql-8.2.1/src/backend/utils/misc/guc.c    Wed Nov 29 23:50:07 2006
--- sigres-0.1.2/src/backend/utils/misc/guc.c    Fri Feb 16 09:30:42 2007
***************
*** 521,526 ****
--- 521,534 ----
          true, NULL, NULL
      },
      {
+         {"sigres", PGC_SIGHUP, WAL_SETTINGS,
+          gettext_noop("Ignoring XLogWrite to accelerate INSERT/UPDATE operations with UPS ."),
+          gettext_noop("Without using UPS, enabling sigres makes your system dangerous.")
+         },
+         &enableSigres,
+         false, NULL, NULL
+     },
+     {
          {"zero_damaged_pages", PGC_SUSET, DEVELOPER_OPTIONS,
              gettext_noop("Continues processing past damaged page headers."),
              gettext_noop("Detection of a damaged page header normally causes PostgreSQL to "
diff -c -r postgresql-8.2.1/src/backend/utils/misc/postgresql.conf.sample
sigres-0.1.2/src/backend/utils/misc/postgresql.conf.sample
*** postgresql-8.2.1/src/backend/utils/misc/postgresql.conf.sample    Tue Nov 21 10:23:37 2006
--- sigres-0.1.2/src/backend/utils/misc/postgresql.conf.sample    Fri Feb 16 09:22:08 2007
***************
*** 171,176 ****
--- 171,183 ----
  #archive_timeout = 0        # force a logfile segment switch after this
                  # many seconds; 0 is off
  
+ # - Accelerating WAL *IF* you have UPS -
+ #sigres = off                # turns sigres mode on or off
+                     # in default, sigres == off
+                     # without UPS, you never turn on sigres
+                     # if sigres == on, then, 
+                     # both of "fsync" and "full_page_writes" 
+                     # are turned off.
  
  #---------------------------------------------------------------------------
  # QUERY TUNING
diff -c -r postgresql-8.2.1/src/bin/psql/sql_help.h sigres-0.1.2/src/bin/psql/sql_help.h
*** postgresql-8.2.1/src/bin/psql/sql_help.h    Sat Jan  6 14:22:23 2007
--- sigres-0.1.2/src/bin/psql/sql_help.h    Sat Feb 10 23:57:54 2007
***************
*** 3,9 ****
   * *** generated from the DocBook documentation.
   *
   * generated by
!  *     /usr/local/bin/suidperl create_help.pl ../../../doc/src/sgml/ref sql_help.h
   *
   */
  
--- 3,9 ----
   * *** generated from the DocBook documentation.
   *
   * generated by
!  *     /usr/bin/perl create_help.pl ../../../doc/src/sgml/ref sql_help.h
   *
   */
  
Only in sigres-0.1.2/src/include: debug.h
diff -c -r postgresql-8.2.1/src/include/miscadmin.h sigres-0.1.2/src/include/miscadmin.h
*** postgresql-8.2.1/src/include/miscadmin.h    Fri Oct 20 03:32:47 2006
--- sigres-0.1.2/src/include/miscadmin.h    Fri Feb 16 09:53:40 2007
***************
*** 202,207 ****
--- 202,208 ----
  extern bool allowSystemTableMods;
  extern DLLIMPORT int work_mem;
  extern DLLIMPORT int maintenance_work_mem;
+ extern bool enableSigres; /* SIGRES */
  
  extern int    VacuumCostPageHit;
  extern int    VacuumCostPageMiss;
***************
*** 324,326 ****
--- 325,328 ----
  extern void process_local_preload_libraries(void);
  
  #endif   /* MISCADMIN_H */
+ 
diff -c -r postgresql-8.2.1/src/include/postgres.h sigres-0.1.2/src/include/postgres.h
*** postgresql-8.2.1/src/include/postgres.h    Fri Jul 14 01:49:18 2006
--- sigres-0.1.2/src/include/postgres.h    Fri Feb 16 10:38:45 2007
***************
*** 544,546 ****
--- 544,552 ----
  typedef int4 aclitem;            /* PHONY definition for catalog use only */
  
  #endif   /* POSTGRES_H */
+ 
+ /* ----------------------------------------------------------------
+  *                Section 5: Sigres extention
+  * ----------------------------------------------------------------
+  */
+ #define BGWRITER_PIDFILE "/tmp/bgwriter.pid"
diff -c -r postgresql-8.2.1/src/interfaces/ecpg/preproc/pgc.c sigres-0.1.2/src/interfaces/ecpg/preproc/pgc.c
*** postgresql-8.2.1/src/interfaces/ecpg/preproc/pgc.c    Sat Jan  6 14:22:23 2007
--- sigres-0.1.2/src/interfaces/ecpg/preproc/pgc.c    Sat Feb 10 23:57:54 2007
***************
*** 1,9 ****
  #line 2 "pgc.c"
! /* A lexical scanner generated by flex */
  
  /* Scanner skeleton version:
   * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
-  * $FreeBSD: src/usr.bin/lex/flex.skl,v 1.8 2004/01/06 19:03:44 nectar Exp $
   */
  
  #define FLEX_SCANNER
--- 1,8 ----
  #line 2 "pgc.c"
! /* A lexical scanner generated by flex*/
  
  /* Scanner skeleton version:
   * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
   */
  
  #define FLEX_SCANNER
***************
*** 11,16 ****
--- 10,16 ----
  #define YY_FLEX_MINOR_VERSION 5
  
  #include <stdio.h>
+ #include <unistd.h>
  
  
  /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
***************
*** 24,30 ****
  #ifdef __cplusplus
  
  #include <stdlib.h>
- #include <unistd.h>
  
  /* Use prototypes in function declarations. */
  #define YY_USE_PROTOS
--- 24,29 ----
***************
*** 136,141 ****
--- 135,149 ----
  
  #define unput(c) yyunput( c, yytext_ptr )
  
+ /* Some routines like yy_flex_realloc() are emitted as static but are
+    not called by all lexers. This generates warnings in some compilers,
+    notably GCC. Arrange to suppress these. */
+ #ifdef __GNUC__
+ #define YY_MAY_BE_UNUSED __attribute__((unused))
+ #else
+ #define YY_MAY_BE_UNUSED
+ #endif
+ 
  /* The following is because we cannot portably get our hands on size_t
   * (without autoconf's help, which isn't available because we want
   * flex-generated scanners to compile on their own).
***************
*** 242,248 ****
  YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
  
  static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
! static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
  static void yy_flex_free YY_PROTO(( void * ));
  
  #define yy_new_buffer yy_create_buffer
--- 250,256 ----
  YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
  
  static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
! static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED;
  static void yy_flex_free YY_PROTO(( void * ));
  
  #define yy_new_buffer yy_create_buffer
***************
*** 1340,1346 ****
   * Note that xcstart must appear before operator, as explained above!
   *    Also whitespace (comment) must appear before operator.
   */
! #line 1344 "pgc.c"
  
  /* Macros after this point can all be overridden by user definitions in
   * section 1.
--- 1348,1354 ----
   * Note that xcstart must appear before operator, as explained above!
   *    Also whitespace (comment) must appear before operator.
   */
! #line 1352 "pgc.c"
  
  /* Macros after this point can all be overridden by user definitions in
   * section 1.
***************
*** 1488,1494 ****
  YY_DECL
      {
      register yy_state_type yy_current_state;
!     register char *yy_cp, *yy_bp;
      register int yy_act;
  
  #line 324 "pgc.l"
--- 1496,1502 ----
  YY_DECL
      {
      register yy_state_type yy_current_state;
!     register char *yy_cp = NULL, *yy_bp = NULL;
      register int yy_act;
  
  #line 324 "pgc.l"
***************
*** 1499,1505 ****
          token_start = NULL;
  
  
! #line 1503 "pgc.c"
  
      if ( yy_init )
          {
--- 1507,1513 ----
          token_start = NULL;
  
  
! #line 1511 "pgc.c"
  
      if ( yy_init )
          {
***************
*** 1559,1565 ****
  yy_find_action:
          yy_current_state = *--yy_state_ptr;
          yy_lp = yy_accept[yy_current_state];
- goto find_rule; /* avoid `defined but not used' warning */
  find_rule: /* we branch to this label when backing up */
          for ( ; ; ) /* until we find what rule we matched */
              {
--- 1567,1572 ----
***************
*** 2961,2967 ****
  #line 1181 "pgc.l"
  YY_FATAL_ERROR( "flex scanner jammed" );
      YY_BREAK
! #line 2965 "pgc.c"
  
      case YY_END_OF_BUFFER:
          {
--- 2968,2974 ----
  #line 1181 "pgc.l"
  YY_FATAL_ERROR( "flex scanner jammed" );
      YY_BREAK
! #line 2972 "pgc.c"
  
      case YY_END_OF_BUFFER:
          {
***************
*** 3337,3342 ****
--- 3344,3350 ----
  #endif    /* ifndef YY_NO_UNPUT */
  
  
+ #ifndef YY_NO_INPUT
  #ifdef __cplusplus
  static int yyinput()
  #else
***************
*** 3410,3416 ****
  
      return c;
      }
! 
  
  #ifdef YY_USE_PROTOS
  void yyrestart( FILE *input_file )
--- 3418,3424 ----
  
      return c;
      }
! #endif /* YY_NO_INPUT */
  
  #ifdef YY_USE_PROTOS
  void yyrestart( FILE *input_file )
***************
*** 3521,3531 ****
      }
  
  
- #ifndef YY_ALWAYS_INTERACTIVE
- #ifndef YY_NEVER_INTERACTIVE
- extern int isatty YY_PROTO(( int ));
- #endif
- #endif
  
  #ifdef YY_USE_PROTOS
  void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
--- 3529,3534 ----
diff -c -r postgresql-8.2.1/src/interfaces/libpq/libpq.rc sigres-0.1.2/src/interfaces/libpq/libpq.rc
*** postgresql-8.2.1/src/interfaces/libpq/libpq.rc    Sat Jan  6 14:22:19 2007
--- sigres-0.1.2/src/interfaces/libpq/libpq.rc    Fri Feb 16 11:25:08 2007
***************
*** 1,8 ****
  #include <winver.h>
  
  VS_VERSION_INFO VERSIONINFO
!  FILEVERSION 8,2,1,7006
!  PRODUCTVERSION 8,2,1,7006
   FILEFLAGSMASK 0x3fL
   FILEFLAGS 0
   FILEOS VOS__WINDOWS32
--- 1,8 ----
  #include <winver.h>
  
  VS_VERSION_INFO VERSIONINFO
!  FILEVERSION 8,2,1,7047
!  PRODUCTVERSION 8,2,1,7047
   FILEFLAGSMASK 0x3fL
   FILEFLAGS 0
   FILEOS VOS__WINDOWS32

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Fixing insecure security definer functions
Следующее
От: Yoshiyuki Asaba
Дата:
Сообщение: Re: pg_restore fails with a custom backup file