1. 09 Jun, 2011 3 commits
  2. 08 Jun, 2011 6 commits
    • Tom Lane's avatar
      Make citext's equality and hashing functions collation-insensitive. · 3ebc061c
      Tom Lane authored
      This is an ugly hack to get around the fact that significant parts of the
      core backend assume they don't need to worry about passing collation to
      equality and hashing functions.  That's true for the core string datatypes,
      but citext should ideally have equality behavior that depends on the
      specified collation's LC_CTYPE.  However, there's no chance of fixing the
      core before 9.2, so we'll have to live with this compromise arrangement for
      now.  Per bug #6053 from Regina Obe.
      
      The code changes in this commit should be reverted in full once the core
      code is up to speed, but be careful about reverting the docs changes:
      I fixed a number of obsolete statements while at it.
      3ebc061c
    • Peter Eisentraut's avatar
      Reorder pg_ctl promote after pg_ctl status · 1bcdd663
      Peter Eisentraut authored
      Since start/stop/restart/reload/status is a kind of standard command
      set, it seems odd to insert the special-purpose "promote" in between
      the closely related "restart" and "reload".  So put it after "status"
      in code and documentation.
      
      Put the documentation of the -U option in some sensible place.
      
      Rewrite the synopsis sentence in help and documentation to make it
      less of a growing mouthful.
      1bcdd663
    • Tom Lane's avatar
      Allow domains over arrays to match ANYARRAY parameters again. · b7e8feb3
      Tom Lane authored
      This use-case was broken in commit 529cb267
      of 2010-10-21, in which I commented "For the moment, we just forbid such
      matching.  We might later wish to insert an automatic downcast to the
      underlying array type, but such a change should also change matching of
      domains to ANYELEMENT for consistency".  We still lack consensus about what
      to do with ANYELEMENT; but not matching ANYARRAY is a clear loss of
      functionality compared to prior releases, so let's go ahead and make that
      happen.  Per complaint from Regina Obe and extensive subsequent discussion.
      b7e8feb3
    • Heikki Linnakangas's avatar
      Make DDL operations play nicely with Serializable Snapshot Isolation. · 8f9622bb
      Heikki Linnakangas authored
      Truncating or dropping a table is treated like deletion of all tuples, and
      check for conflicts accordingly. If a table is clustered or rewritten by
      ALTER TABLE, all predicate locks on the heap are promoted to relation-level
      locks, because the tuple or page ids of any existing tuples will change and
      won't be valid after rewriting the table. Arguably ALTER TABLE should be
      treated like a mass-UPDATE of every row, but if you e.g change the datatype
      of a column, you could also argue that it's just a change to the physical
      layout, not a logical change. Reindexing promotes all locks on the index to
      relation-level lock on the heap.
      
      Kevin Grittner, with a lot of cosmetic changes by me.
      8f9622bb
    • Robert Haas's avatar
      Complain politely about access temp/unlogged tables during recovery. · 16925c1e
      Robert Haas authored
      This has never been supported, but we previously let md.c issue the
      complaint for us at whatever point we tried to examine the backing file.
      Now we print a nicer error message.
      
      Per bug #6041, reported by Emanuel, and extensive discussion with Tom
      Lane over where to put the check.
      16925c1e
    • Alvaro Herrera's avatar
      Revert psql bits to display NOT VALID for FKs · 135a5079
      Alvaro Herrera authored
      These are superseded by pg_get_constraintdef's ability to display the
      same when appropriate, which is a better place to do it anyway.
      135a5079
  3. 07 Jun, 2011 2 commits
    • Heikki Linnakangas's avatar
    • Tom Lane's avatar
      Fix rewriter to cope (more or less) with CTEs in the query being rewritten. · fc1286d3
      Tom Lane authored
      Since the original implementation of CTEs only allowed them in SELECT
      queries, the rule rewriter did not expect to find any CTEs in statements
      being rewritten by ON INSERT/UPDATE/DELETE rules.  We had dealt with this
      to some extent but the code was still several bricks shy of a load, as
      illustrated in bug #6051 from Jehan-Guillaume de Rorthais.
      
      In particular, we have to be able to copy CTEs from the original query's
      cteList into that of a rule action, in case the rule action references the
      CTE (which it pretty much always will).  This also implies we were doing
      things in the wrong order in RewriteQuery: we have to recursively rewrite
      the CTE queries before expanding the main query, so that we have the
      rewritten queries available to copy.
      
      There are unpleasant limitations yet to resolve here, but at least we now
      throw understandable FEATURE_NOT_SUPPORTED errors for them instead of just
      failing with bizarre implementation-dependent errors.  In particular, we
      can't handle propagating the same CTE into multiple post-rewrite queries
      (because then the CTE would be evaluated multiple times), and we can't cope
      with conflicts between CTE names in the original query and in the rule
      actions.
      fc1286d3
  4. 06 Jun, 2011 1 commit
  5. 04 Jun, 2011 5 commits
  6. 03 Jun, 2011 5 commits
    • Alvaro Herrera's avatar
      Fix pg_get_constraintdef to cope with NOT VALID constraints · 04841751
      Alvaro Herrera authored
      This case was missed when NOT VALID constraints were first introduced in
      commit 722bf701 by Simon Riggs on
      2011-02-08.  Among other things, it causes pg_dump to omit the NOT VALID
      flag when dumping such constraints, which may cause them to fail to
      load afterwards, if they contained values failing the constraint.
      
      Per report from Thom Brown.
      04841751
    • Tom Lane's avatar
      Fix failure to check whether a rowtype's component types are sortable. · ea8e42f3
      Tom Lane authored
      The existence of a btree opclass accepting composite types caused us to
      assume that every composite type is sortable.  This isn't true of course;
      we need to check if the column types are all sortable.  There was logic
      for this for the case of array comparison (ie, check that the element
      type is sortable), but we missed the point for rowtypes.  Per Teodor's
      report of an ANALYZE failure for an unsortable composite type.
      
      Rather than just add some more ad-hoc logic for this, I moved knowledge of
      the issue into typcache.c.  The typcache will now only report out array_eq,
      record_cmp, and friends as usable operators if the array or composite type
      will work with those functions.
      
      Unfortunately we don't have enough info to do this for anonymous RECORD
      types; in that case, just assume it will work, and take the runtime failure
      as before if it doesn't.
      
      This patch might be a candidate for back-patching at some point, but
      given the lack of complaints from the field, I'd rather just test it in
      HEAD for now.
      
      Note: most of the places touched in this patch will need further work
      when we get around to supporting hashing of record types.
      ea8e42f3
    • Peter Eisentraut's avatar
      Truncate id to <=44 characters · 3ece3913
      Peter Eisentraut authored
      This is the original DocBook SGML limit, but apparently most
      installations have changed it or ignore it, which is why few people
      have run into this problem.
      
      pointed out by Brendan Jurd
      3ece3913
    • Heikki Linnakangas's avatar
      SSI comment fixes and enhancements. Notably, document that the conflict-out · c8630919
      Heikki Linnakangas authored
      flag actually means that the transaction has a conflict out to a transaction
      that committed before the flagged transaction.
      
      Kevin Grittner
      c8630919
    • Tom Lane's avatar
      52caa355
  7. 02 Jun, 2011 11 commits
    • Bruce Momjian's avatar
      Use proper SGML doc entities rather than angle-brackets. · a20bc9c8
      Bruce Momjian authored
      Marco Nenciarini
      a20bc9c8
    • Tom Lane's avatar
      Handle domains when checking for recursive inclusion of composite types. · aff97b1f
      Tom Lane authored
      We need this now because we allow domains over arrays, and we'll probably
      allow domains over composites pretty soon, which makes the problem even
      more obvious.
      
      Although domains over arrays also exist in previous versions, this does not
      need to be back-patched, because the coding used in older versions
      successfully "looked through" domains over arrays.  The problem is exposed
      by not treating a domain as having a typelem.
      
      Problem identified by Noah Misch, though I did not use his patch, since
      it would require additional work to handle domains over composites that
      way.  This approach is more future-proof.
      aff97b1f
    • Tom Lane's avatar
      Looks like we can't declare getpeereid on Windows anyway. · 680ea6a6
      Tom Lane authored
      ... for lack of the uid_t and gid_t typedefs.  Per buildfarm.
      680ea6a6
    • Tom Lane's avatar
      libpq needs its own copy of src/port/getpeereid. · 2021c5a5
      Tom Lane authored
      ... on some platforms, anyway.  Per buildfarm.
      2021c5a5
    • Peter Eisentraut's avatar
      Sort COMMENT synopsis and add more examples · c82d415a
      Peter Eisentraut authored
      Josh Kupershmidt
      c82d415a
    • Tom Lane's avatar
      Clean up after erroneous SELECT FOR UPDATE/SHARE on a sequence. · ea6eda64
      Tom Lane authored
      My previous commit disallowed this operation, but did nothing about
      cleaning up the damage if one had already been done.  With the operation
      disallowed, it's okay to just forcibly clear xmax in a sequence's tuple,
      since any value seen there could not represent a live transaction's lock.
      So, any sequence-specific operation will repair the problem automatically,
      whether or not the user has already seen "could not access status of
      transaction" failures.
      ea6eda64
    • Robert Haas's avatar
      Fix vim-induced typo. · 5295fa8c
      Robert Haas authored
      5295fa8c
    • Tom Lane's avatar
      Disallow SELECT FOR UPDATE/SHARE on sequences. · 21538377
      Tom Lane authored
      We can't allow this because such an operation stores its transaction XID
      into the sequence tuple's xmax.  Because VACUUM doesn't process sequences
      (and we don't want it to start doing so), such an xmax value won't get
      frozen, meaning it will eventually refer to nonexistent pg_clog storage,
      and even wrap around completely.  Since the row lock is ignored by nextval
      and setval, the usefulness of the operation is highly debatable anyway.
      Per reports of trouble with pgpool 3.0, which had ill-advisedly started
      using such commands as a form of locking.
      
      In HEAD, also disallow SELECT FOR UPDATE/SHARE on toast tables.  Although
      this does work safely given the current implementation, there seems no
      good reason to allow it.  I refrained from changing that behavior in
      back branches, however.
      21538377
    • Tom Lane's avatar
      Typo fix. · dd2ddfb1
      Tom Lane authored
      dd2ddfb1
    • Robert Haas's avatar
      Avoid creating init fork for unlogged indexes when it already exists. · b8be5431
      Robert Haas authored
      Report by Greg Sabino Mullane, diagnosis and preliminary patch by
      Andres Freund, corrections by me.
      b8be5431
    • Tom Lane's avatar
      Implement getpeereid() as a src/port compatibility function. · 3980f7fc
      Tom Lane authored
      This unifies a bunch of ugly #ifdef's in one place.  Per discussion,
      we only need this where HAVE_UNIX_SOCKETS, so no need to cover Windows.
      
      Marko Kreen, some adjustment by Tom Lane
      3980f7fc
  8. 01 Jun, 2011 3 commits
    • Tom Lane's avatar
      Allow hash joins to be interrupted while searching hash table for match. · 0c99d41e
      Tom Lane authored
      Per experimentation with a recent example, in which unreasonable amounts
      of time could elapse before the backend would respond to a query-cancel.
      
      This might be something to back-patch, but the patch doesn't apply cleanly
      because this code was rewritten for 9.1.  Given the lack of field
      complaints I won't bother for now.
      
      Cédric Villemain
      0c99d41e
    • Peter Eisentraut's avatar
      Some copy editing of the release notes · 596b0c21
      Peter Eisentraut authored
      596b0c21
    • Tom Lane's avatar
      Further improvements in pg_ctl's new wait-for-postmaster-start logic. · 3c485ca8
      Tom Lane authored
      Add a postmaster_is_alive() test to the wait loop, so that we stop waiting
      if the postmaster dies without removing its pidfile.  Unfortunately this
      only helps after the postmaster has created its pidfile, since until then
      we don't know which PID to check.  But if it never does create the pidfile,
      we can give up in a relatively short time, so this is a useful addition
      in practice.  Per suggestion from Fujii Masao, though this doesn't look
      very much like his patch.
      
      In addition, improve pg_ctl's ability to cope with pre-existing pidfiles.
      Such a file might or might not represent a live postmaster that is going to
      block our postmaster from starting, but the previous code pre-judged the
      situation and gave up waiting immediately.  Now, we will wait for up to 5
      seconds to see if our postmaster overwrites such a file.  This issue
      interacts with Fujii's patch because we would make the wrong conclusion
      if we did the postmaster_is_alive() test with a pre-existing PID.
      
      All of this could be improved if we rewrote start_postmaster() so that it
      could report the child postmaster's PID, so that we'd know a-priori the
      correct PID to test with postmaster_is_alive().  That looks like a bit too
      much change for so late in the 9.1 development cycle, unfortunately.
      3c485ca8
  9. 31 May, 2011 4 commits
    • Tom Lane's avatar
      Protect GIST logic that assumes penalty values can't be negative. · 6923d699
      Tom Lane authored
      Apparently sane-looking penalty code might return small negative values,
      for example because of roundoff error.  This will confuse places like
      gistchoose().  Prevent problems by clamping negative penalty values to
      zero.  (Just to be really sure, I also made it force NaNs to zero.)
      Back-patch to all supported branches.
      
      Alexander Korotkov
      6923d699
    • Peter Eisentraut's avatar
      Recode non-ASCII characters in source to UTF-8 · ba4cacf0
      Peter Eisentraut authored
      For consistency, have all non-ASCII characters from contributors'
      names in the source be in UTF-8.  But remove some other more
      gratuitous uses of non-ASCII characters.
      ba4cacf0
    • Peter Eisentraut's avatar
      Use entities to encode non-ASCII characters in SGML documentation · 85ffed43
      Peter Eisentraut authored
      This has already been the case for the most part; just some cases had
      slipped through.
      85ffed43
    • Tom Lane's avatar
      Replace use of credential control messages with getsockopt(LOCAL_PEERCRED). · be4585b1
      Tom Lane authored
      It turns out the reason we hadn't found out about the portability issues
      with our credential-control-message code is that almost no modern platforms
      use that code at all; the ones that used to need it now offer getpeereid(),
      which we choose first.  The last holdout was NetBSD, and they added
      getpeereid() as of 5.0.  So far as I can tell, the only live platform on
      which that code was being exercised was Debian/kFreeBSD, ie, FreeBSD kernel
      with Linux userland --- since glibc doesn't provide getpeereid(), we fell
      back to the control message code.  However, the FreeBSD kernel provides a
      LOCAL_PEERCRED socket parameter that's functionally equivalent to Linux's
      SO_PEERCRED.  That is both much simpler to use than control messages, and
      superior because it doesn't require receiving a message from the other end
      at just the right time.
      
      Therefore, add code to use LOCAL_PEERCRED when necessary, and rip out all
      the credential-control-message code in the backend.  (libpq still has such
      code so that it can still talk to pre-9.1 servers ... but eventually we can
      get rid of it there too.)  Clean up related autoconf probes, too.
      
      This means that libpq's requirepeer parameter now works on exactly the same
      platforms where the backend supports peer authentication, so adjust the
      documentation accordingly.
      be4585b1