1. 27 Sep, 2009 1 commit
    • Tom Lane's avatar
      Simplify the bootstrap (BKI) code by getting rid of a useless table of all · 12d8fae4
      Tom Lane authored
      the strings seen during the bootstrap run.  There might have been some
      actual point to doing that, many years ago, but as far as I can see the only
      value now is to conserve a bit of memory.  Even if we cared about wasting
      a megabyte or so during the initdb run, it'd be far more effective to
      arrange to release memory at the end of each BKI command, instead of
      intentionally hanging onto strings that might never be used again.
      Not maintaining the table probably makes it faster too; but the main point
      of this patch is to get rid of a couple hundred lines of unnecessary and
      rather crufty code.
      12d8fae4
  2. 26 Sep, 2009 4 commits
    • Tom Lane's avatar
      Hmm, seems a lot of the buildfarm is running versions of awk that · 23cf415a
      Tom Lane authored
      don't have gensub().  Use sub() instead, tedious though it be.
      23cf415a
    • Tom Lane's avatar
      Revert my ill-considered change that made formrdesc not insert the correct · ca70c3cf
      Tom Lane authored
      relation rowtype OID into the relcache entries it builds.  This ensures
      that catcache copies of the relation tupdescs will be fully correct.
      While the deficiency doesn't seem to have any effect in the current
      sources, we have been bitten by not-quite-right catcache tupdescs before,
      so it seems like a good idea to maintain the rule that they should be right.
      ca70c3cf
    • Tom Lane's avatar
      Extend the BKI infrastructure to allow system catalogs to be given · 49856352
      Tom Lane authored
      hand-assigned rowtype OIDs, even when they are not "bootstrapped" catalogs
      that have handmade type rows in pg_type.h.  Give pg_database such an OID.
      Restore the availability of C macros for the rowtype OIDs of the bootstrapped
      catalogs.  (These macros are now in the individual catalogs' .h files,
      though, not in pg_type.h.)
      
      This commit doesn't do anything especially useful by itself, but it's
      necessary infrastructure for reverting some ill-considered changes in
      relcache.c.
      49856352
    • Tom Lane's avatar
      Fix RelationCacheInitializePhase2 (Phase3, in HEAD) to cope with the · c2e228d4
      Tom Lane authored
      possibility of shared-inval messages causing a relcache flush while it tries
      to fill in missing data in preloaded relcache entries.  There are actually
      two distinct failure modes here:
      
      1. The flush could delete the next-to-be-processed cache entry, causing
      the subsequent hash_seq_search calls to go off into the weeds.  This is
      the problem reported by Michael Brown, and I believe it also accounts
      for bug #5074.  The simplest fix is to restart the hashtable scan after
      we've read any new data from the catalogs.  It appears that pre-8.4
      branches have not suffered from this failure, because by chance there were
      no other catalogs sharing the same hash chains with the catalogs that
      RelationCacheInitializePhase2 had work to do for.  However that's obviously
      pretty fragile, and it seems possible that derivative versions with
      additional system catalogs might be vulnerable, so I'm back-patching this
      part of the fix anyway.
      
      2. The flush could delete the *current* cache entry, in which case the
      pointer to the newly-loaded data would end up being stored into an
      already-deleted Relation struct.  As long as it was still deleted, the only
      consequence would be some leaked space in CacheMemoryContext.  But it seems
      possible that the Relation struct could already have been recycled, in
      which case this represents a hard-to-reproduce clobber of cached data
      structures, with unforeseeable consequences.  The fix here is to pin the
      entry while we work on it.
      
      In passing, also change RelationCacheInitializePhase2 to Assert that
      formrdesc() set up the relation's cached TupleDesc (rd_att) with the
      correct type OID and hasoids values.  This is more appropriate than
      silently updating the values, because the original tupdesc might already
      have been copied into the catcache.  However this part of the patch is
      not in HEAD because it fails due to some questionable recent changes in
      formrdesc :-(.  That will be cleaned up in a subsequent patch.
      c2e228d4
  3. 25 Sep, 2009 2 commits
  4. 23 Sep, 2009 1 commit
  5. 22 Sep, 2009 3 commits
  6. 21 Sep, 2009 3 commits
  7. 20 Sep, 2009 1 commit
    • Tom Lane's avatar
      Allow plpgsql IN parameters to be assigned to. Since the parameters are just · 0f427dfe
      Tom Lane authored
      preinitialized local variables, this does not affect the function's semantics
      as seen by callers; allowing assignment simply avoids the need to create more
      local variables in some cases.  In any case we were being rather inconsistent
      since only scalar parameters were getting marked constant.
      
      No documentation change, since parameters were never documented as being
      marked constant anyway.
      
      Steve Prentice
      0f427dfe
  8. 19 Sep, 2009 5 commits
  9. 18 Sep, 2009 5 commits
  10. 17 Sep, 2009 5 commits
  11. 16 Sep, 2009 1 commit
  12. 15 Sep, 2009 3 commits
    • Tom Lane's avatar
      Fix two distinct errors in creation of GIN_INSERT_LISTPAGE xlog records. · 384cad5c
      Tom Lane authored
      In practice these mistakes were always masked when full_page_writes was on,
      because XLogInsert would always choose to log the full page, and then
      ginRedoInsertListPage wouldn't try to do anything.  But with full_page_writes
      off a WAL replay failure was certain.
      
      The GIN_INSERT_LISTPAGE record type could probably be eliminated entirely
      in favor of using XLOG_HEAP_NEWPAGE, but I refrained from doing that now
      since it would have required a significantly more invasive patch.
      
      In passing do a little bit of code cleanup, including making the accounting
      for free space on GIN list pages more precise.  (This wasn't a bug as the
      errors were always in the conservative direction.)
      
      Per report from Simon.  Back-patch to 8.4 which contains the identical code.
      384cad5c
    • Michael Meskes's avatar
    • Tom Lane's avatar
      Fix possible buffer overrun and/or unportable behavior in pg_md5_encrypt() · 9a3f5301
      Tom Lane authored
      if salt_len == 0.  This seems to be mostly academic, since nearly all calling
      code paths guarantee nonempty salt; the only case that doesn't is
      PQencryptPassword where the caller could mistakenly pass an empty username.
      So, fix it but don't bother backpatching.  Per ljb.
      9a3f5301
  13. 14 Sep, 2009 1 commit
  14. 13 Sep, 2009 4 commits
    • Tom Lane's avatar
      Write psql's ~/.psql_history file using history_truncate_file() and · e97281c4
      Tom Lane authored
      append_history(), if libreadline is new enough to have those functions
      (they seem to be present at least since 4.2; but libedit may not have them).
      This gives significantly saner behavior when two or more sessions overlap in
      their use of the history file; although having two sessions exit at just the
      same time is still perilous to your history.  The behavior of \s remains
      unchanged, ie, overwrite whatever was there.
      Per bug #5052 from Marek Wójtowicz.
      e97281c4
    • Peter Eisentraut's avatar
      Fix Unicode support in PL/Python · eb62398f
      Peter Eisentraut authored
      Check calls of PyUnicode_AsEncodedString() for NULL return, probably
      because the encoding name is not known.  Add special treatment for
      SQL_ASCII, which Python definitely does not know.
      
      Since using SQL_ASCII produces errors in the regression tests when
      non-ASCII characters are involved, we have to put back various regression
      test result variants.
      eb62398f
    • Peter Eisentraut's avatar
      6689ce3e
    • Heikki Linnakangas's avatar
      Don't error out if recycling or removing an old WAL segment fails at the end · 7f2a10fe
      Heikki Linnakangas authored
      of checkpoint. Although the checkpoint has been written to WAL at that point
      already, so that all data is safe, and we'll retry removing the WAL segment at
      the next checkpoint, if such a failure persists we won't be able to remove any
      other old WAL segments either and will eventually run out of disk space. It's
      better to treat the failure as non-fatal, and move on to clean any other WAL
      segment and continue with any other end-of-checkpoint cleanup.
      
      We don't normally expect any such failures, but on Windows it can happen with
      some anti-virus or backup software that lock files without FILE_SHARE_DELETE
      flag.
      
      Also, the loop in pgrename() to retry when the file is locked was broken. If a
      file is locked on Windows, you get ERROR_SHARE_VIOLATION, not
      ERROR_ACCESS_DENIED, at least on modern versions. Fix that, although I left
      the check for ERROR_ACCESS_DENIED in there as well (presumably it was correct
      in some environment), and added ERROR_LOCK_VIOLATION to be consistent with
      similar checks in pgwin32_open(). Reduce the timeout on the loop from 30s to
      10s, on the grounds that since it's been broken, we've effectively had a
      timeout of 0s and no-one has complained, so a smaller timeout is actually
      closer to the old behavior. A longer timeout would mean that if recycling a
      WAL file fails because it's locked for some reason, InstallXLogFileSegment()
      will hold ControlFileLock for longer, potentially blocking other backends, so
      a long timeout isn't totally harmless.
      
      While we're at it, set errno correctly in pgrename().
      
      Backpatch to 8.2, which is the oldest version supported on Windows. The xlog.c
      changes would make sense on other platforms and thus on older versions as
      well, but since there's no such locking issues on other platforms, it's not
      worth it.
      7f2a10fe
  15. 12 Sep, 2009 1 commit
    • Joe Conway's avatar
      plug dblink resource leak · d6119d80
      Joe Conway authored
      dblink generates orphaned connections when called with a connection string,
      fail_on_error = true, and an ERROR occurs. Discovery and patch by
      Tatsuhito Kasahara. Introduced in 8.4.
      d6119d80