1. 13 4月, 2004 1 次提交
    • B
      Here's an attempt at new socket and signal code for win32. · a4c40f14
      Bruce Momjian 提交于
      It works on the principle of turning sockets into non-blocking, and then
      emulate blocking behaviour on top of that, while allowing signals to
      run. Signals are now implemented using an event instead of APCs, thus
      getting rid of the issue of APCs not being compatible with "old style"
      sockets functions.
      
      It also moves the win32 specific code away from pqsignal.h/c into
      port/win32, and also removes the "thread style workaround" of the APC
      issue previously in place.
      
      In order to make things work, a few things are also changed in pgstat.c:
      
      1) There is now a separate pipe to the collector and the bufferer. This
      is required because the pipe will otherwise only be signalled in one of
      the processes when the postmaster goes down. The MS winsock code for
      select() must have some kind of workaround for this behaviour, but I
      have found no stable way of doing that. You really are not supposed to
      use the same socket from more than one process (unless you use
      WSADuplicateSocket(), in which case the docs specifically say that only
      one will be flagged).
      
      2) The check for "postmaster death" is moved into a separate select()
      call after the main loop. The previous behaviour select():ed on the
      postmaster pipe, while later explicitly saying "we do NOT check for
      postmaster exit inside the loop".
      The issue was that the code relies on the same select() call seeing both
      the postmaster pipe *and* the pgstat pipe go away. This does not always
      happen, and it appears that useing WSAEventSelect() makes it even more
      common that it does not.
      Since it's only called when the process exits, I don't think using a
      separate select() call will have any significant impact on how the stats
      collector works.
      
      Magnus Hagander
      a4c40f14
  2. 12 4月, 2004 2 次提交
  3. 11 4月, 2004 2 次提交
    • B
      Exit backend from SIGTERM or FATAL by simulating client EOF, rather than · 3c4ab3f5
      Bruce Momjian 提交于
      calling proc_exit() directly.  This should make SIGTERM more reliable.
      3c4ab3f5
    • B
      Please find a small patch to fix the brain damage "century" and · 1934055c
      Bruce Momjian 提交于
      "millennium" date part implementation in postgresql, both in the code
      and the documentation, so that it conforms to the official definition.
      If you do not agree with the official definition, please send your
      complaint to "pope@vatican.org". I'm not responsible for them;-)
      
      With the previous version, the centuries and millenniums had a wrong
      number and started the wrong year. Moreover century number 0, which does
      not exist in reality, lasted 200 years. Also, millennium number 0 lasted
      2000 years.
      
      If you want postgresql to have it's own definition of "century" and
      "millennium" that does not conform to the one of the society, just give
      them another name. I would suggest "pgCENTURY" and "pgMILLENNIUM";-)
      
      IMO, if someone may use the options, it means that postgresql is used for
      historical data, so it make sense to have an historical definition. Also,
      I just want to divide the year by 100 or 1000, I can do that quite easily.
      
      BACKWARD INCOMPATIBLE CHANGE
      
      Fabien Coelho - coelho@cri.ensmp.fr
      1934055c
  4. 10 4月, 2004 1 次提交
  5. 09 4月, 2004 3 次提交
  6. 08 4月, 2004 11 次提交
  7. 07 4月, 2004 5 次提交
    • B
      Update FAQ_DEV. · 58a1cb10
      Bruce Momjian 提交于
      58a1cb10
    • B
      Update Darwin as thread-safe. · b4832531
      Bruce Momjian 提交于
      b4832531
    • B
      > >>1. change the type of "log_statement" option from boolean to string, · 6a25c6e1
      Bruce Momjian 提交于
      > >>with allowed values of "all, mod, ddl, none" with default "none".
      
      OK, here is a patch that implements #1.  Here is sample output:
      
              test=> set client_min_messages = 'log';
              SET
              test=> set log_statement = 'mod';
              SET
              test=> select 1;
               ?column?
              ----------
                      1
              (1 row)
      
              test=> update test set x=1;
              LOG:  statement: update test set x=1;
              ERROR:  relation "test" does not exist
              test=> update test set x=1;
              LOG:  statement: update test set x=1;
              ERROR:  relation "test" does not exist
              test=> copy test from '/tmp/x';
              LOG:  statement: copy test from '/tmp/x';
              ERROR:  relation "test" does not exist
              test=> copy test to  '/tmp/x';
              ERROR:  relation "test" does not exist
              test=> prepare xx as select 1;
              PREPARE
              test=> prepare xx as update x set y=1;
              LOG:  statement: prepare xx as update x set y=1;
              ERROR:  relation "x" does not exist
              test=> explain analyze select 1;;
                                                   QUERY PLAN
              ------------------------------------------------------------------------------------
               Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.006..0.007 rows=1 loops=1)
               Total runtime: 0.046 ms
              (2 rows)
      
              test=> explain analyze update test set x=1;
              LOG:  statement: explain analyze update test set x=1;
              ERROR:  relation "test" does not exist
              test=> explain update test set x=1;
              ERROR:  relation "test" does not exist
      
      It checks PREPARE and EXECUTE ANALYZE too.  The log_statement values are
      'none', 'mod', 'ddl', and 'all'.  For 'all', it prints before the query
      is parsed, and for ddl/mod, it does it right after parsing using the
      node tag (or command tag for CREATE/ALTER/DROP), so any non-parse errors
      will print after the log line.
      6a25c6e1
    • T
      Support FULL JOIN with no join clauses, such as X FULL JOIN Y ON TRUE. · e5170860
      Tom Lane 提交于
      That particular corner case is not exactly compelling, but given 7.4's
      ability to discard redundant join clauses, it is possible for the situation
      to arise from queries that are not so obviously silly.  Per bug report
      of 6-Apr-04.
      e5170860
    • T
      ALTER SEQUENCE RESTART did the wrong thing if sequence last_value was · 2098ec6e
      Tom Lane 提交于
      equal to the desired restart value (must clear is_called, did not).
      Per bug report #1127 from Piotr Konieczny.
      2098ec6e
  8. 06 4月, 2004 3 次提交
  9. 05 4月, 2004 12 次提交