1. 16 Dec, 2015 1 commit
  2. 15 Dec, 2015 8 commits
    • Tom Lane's avatar
      Document use of Subject Alternative Names in SSL server certificates. · 0625dbb0
      Tom Lane authored
      Commit acd08d76 did not bother with updating the documentation.
      0625dbb0
    • Tom Lane's avatar
      Update 9.5 release notes through today. · bfc7f5dd
      Tom Lane authored
      Also do another round of copy-editing, and fix up remaining FIXME items.
      bfc7f5dd
    • Robert Haas's avatar
      Teach mdnblocks() not to create zero-length files. · 049469e7
      Robert Haas authored
      It's entirely surprising that mdnblocks() has the side effect of
      creating new files on disk, so let's make it not do that.  One
      consequence of the old behavior is that, if running on a damaged
      cluster that is missing a file, mdnblocks() can recreate the file
      and allow a subsequent _mdfd_getseg() for a higher segment to succeed.
      This happens because, while mdnblocks() stops when it finds a segment
      that is shorter than 1GB, _mdfd_getseg() has no such check, and thus
      the empty file created by mdnblocks() can allow it to continue its
      traversal and find higher-numbered segments which remain.
      
      It might be a good idea for _mdfd_getseg() to actually verify that
      each segment it finds is exactly 1GB before proceeding to the next
      one, but that would involve some additional system calls, so for
      now I'm just doing this much.
      
      Patch by me, per off-list analysis by Kevin Grittner and Rahila Syed.
      Review by Andres Freund.
      049469e7
    • Robert Haas's avatar
      Move buffer I/O and content LWLocks out of the main tranche. · 6150a1b0
      Robert Haas authored
      Move the content lock directly into the BufferDesc, so that locking and
      pinning a buffer touches only one cache line rather than two.  Adjust
      the definition of BufferDesc slightly so that this doesn't make the
      BufferDesc any larger than one cache line (at least on platforms where
      a spinlock is only 1 or 2 bytes).
      
      We can't fit the I/O locks into the BufferDesc and stay within one
      cache line, so move those to a completely separate tranche.  This
      leaves a relatively limited number of LWLocks in the main tranche, so
      increase the padding of those remaining locks to a full cache line,
      rather than allowing adjacent locks to share a cache line, hopefully
      reducing false sharing.
      
      Performance testing shows that these changes make little difference
      on laptop-class machines, but help significantly on larger servers,
      especially those with more than 2 sockets.
      
      Andres Freund, originally based on an earlier patch by Simon Riggs.
      Review and cosmetic adjustments (including heavy rewriting of the
      comments) by me.
      6150a1b0
    • Robert Haas's avatar
      Provide a way to predefine LWLock tranche IDs. · 3fed4174
      Robert Haas authored
      It's a bit cumbersome to use LWLockNewTrancheId(), because the returned
      value needs to be shared between backends so that each backend can call
      LWLockRegisterTranche() with the correct ID.  So, for built-in tranches,
      use a hard-coded value instead.
      
      This is motivated by an upcoming patch adding further built-in tranches.
      
      Andres Freund and Robert Haas
      3fed4174
    • Stephen Frost's avatar
      Improve CREATE POLICY documentation · 43cd468c
      Stephen Frost authored
      Clarify that SELECT policies are now applied when SELECT rights
      are required for a given query, even if the query is an UPDATE or
      DELETE query.  Pointed out by Noah.
      
      Additionally, note the risk regarding concurrently open transactions
      where a relation which controls access to the rows of another relation
      are updated and the rows of the primary relation are also being
      modified.  Pointed out by Peter Geoghegan.
      
      Back-patch to 9.5.
      43cd468c
    • Stephen Frost's avatar
      Collect the global OR of hasRowSecurity flags for plancache · e5e11c8c
      Stephen Frost authored
      We carry around information about if a given query has row security or
      not to allow the plancache to use that information to invalidate a
      planned query in the event that the environment changes.
      
      Previously, the flag of one of the subqueries was simply being copied
      into place to indicate if the query overall included RLS components.
      That's wrong as we need the global OR of all subqueries.  Fix by
      changing the code to match how fireRIRules works, which is results
      in OR'ing all of the flags.
      
      Noted by Tom.
      
      Back-patch to 9.5 where RLS was introduced.
      e5e11c8c
    • Tom Lane's avatar
      Add missing cleanup logic in pg_rewind/t/005_same_timeline.pl test. · db81329e
      Tom Lane authored
      Per Michael Paquier
      db81329e
  3. 14 Dec, 2015 6 commits
    • Alvaro Herrera's avatar
      Add missing CHECK_FOR_INTERRUPTS in lseg_inside_poly · 0d8f3d5d
      Alvaro Herrera authored
      Apparently, there are bugs in this code that cause it to loop endlessly.
      That bug still needs more research, but in the meantime it's clear that
      the loop is missing a check for interrupts so that it can be cancelled
      timely.
      
      Backpatch to 9.1 -- this has been missing since 49475aab.
      0d8f3d5d
    • Kevin Grittner's avatar
      Remove xmlparse(document '') test · e2f1765c
      Kevin Grittner authored
      This one test was behaving differently between the ubuntu fix for
      CVE-2015-7499 and the base "expected" file.  It's not worth having
      yet another version of the expected file for this test, so drop it.
      Perhaps at some point when all distros have settled down to the
      same behavior on this test, it can be restored.
      
      Problem found by me on libxml2 (2.9.1+dfsg1-3ubuntu4.6).
      Solution suggested by Tom Lane.
      Backpatch to 9.5, where the test was added.
      e2f1765c
    • Heikki Linnakangas's avatar
      Fix out-of-memory error handling in ParameterDescription message processing. · 7b96bf44
      Heikki Linnakangas authored
      If libpq ran out of memory while constructing the result set, it would hang,
      waiting for more data from the server, which might never arrive. To fix,
      distinguish between out-of-memory error and not-enough-data cases, and give
      a proper error message back to the client on OOM.
      
      There are still similar issues in handling COPY start messages, but let's
      handle that as a separate patch.
      
      Michael Paquier, Amit Kapila and me. Backpatch to all supported versions.
      7b96bf44
    • Andres Freund's avatar
      Fix bug in SetOffsetVacuumLimit() triggered by find_multixact_start() failure. · cca705a5
      Andres Freund authored
      Previously, if find_multixact_start() failed, SetOffsetVacuumLimit() would
      install 0 into MultiXactState->offsetStopLimit if it previously succeeded.
      Luckily, there are no known cases where find_multixact_start() will return
      an error in 9.5 and above. But if it were to happen, for example due to
      filesystem permission issues, it'd be somewhat bad: GetNewMultiXactId()
      could continue allocating mxids even if close to a wraparound, or it could
      erroneously stop allocating mxids, even if no wraparound is looming.  The
      wrong value would be corrected the next time SetOffsetVacuumLimit() is
      called, or by a restart.
      
      Reported-By: Noah Misch, although this is not his preferred fix
      Discussion: 20151210140450.GA22278@alap3.anarazel.de
      Backpatch: 9.5, where the bug was introduced as part of 4f627f
      cca705a5
    • Andres Freund's avatar
      Correct statement to actually be the intended assert statement. · 2a354496
      Andres Freund authored
      e3f4cfc7 introduced a LWLockHeldByMe() call, without the corresponding
      Assert() surrounding it.
      
      Spotted by Coverity.
      
      Backpatch: 9.1+, like the previous commit
      2a354496
    • Tom Lane's avatar
      Docs: document that psql's "\i -" means read from stdin. · 7bd149ce
      Tom Lane authored
      This has worked that way for a long time, maybe always, but you would
      not have known it from the documentation.  Also back-patch the notes
      I added to HEAD earlier today about behavior of the "-f -" switch,
      which likewise have been valid for many releases.
      7bd149ce
  4. 13 Dec, 2015 4 commits
  5. 12 Dec, 2015 3 commits
    • Peter Eisentraut's avatar
      doc: Add some markup · 19e7ca89
      Peter Eisentraut authored
      19e7ca89
    • Andres Freund's avatar
      Fix ALTER TABLE ... SET TABLESPACE for unlogged relations. · f54d0629
      Andres Freund authored
      Changing the tablespace of an unlogged relation did not WAL log the
      creation and content of the init fork. Thus, after a standby is
      promoted, unlogged relation cannot be accessed anymore, with errors
      like:
      ERROR:  58P01: could not open file "pg_tblspc/...": No such file or directory
      Additionally the init fork was not synced to disk, independent of the
      configured wal_level, a relatively small durability risk.
      
      Investigation of that problem also brought to light that, even for
      permanent relations, the creation of !main forks was not WAL logged,
      i.e. no XLOG_SMGR_CREATE record were emitted. That mostly turns out not
      to be a problem, because these files were created when the actual
      relation data is copied; nonexistent files are not treated as an error
      condition during replay. But that doesn't work for empty files, and
      generally feels a bit haphazard. Luckily, outside init and main forks,
      empty forks don't occur often or are not a problem.
      
      Add the required WAL logging and syncing to disk.
      
      Reported-By: Michael Paquier
      Author: Michael Paquier and Andres Freund
      Discussion: 20151210163230.GA11331@alap3.anarazel.de
      Backpatch: 9.1, where unlogged relations were introduced
      f54d0629
    • Tom Lane's avatar
      Add an expected-file to match behavior of latest libxml2. · 085423e3
      Tom Lane authored
      Recent releases of libxml2 do not provide error context reports for errors
      detected at the very end of the input string.  This appears to be a bug, or
      at least an infelicity, introduced by the fix for libxml2's CVE-2015-7499.
      We can hope that this behavioral change will get undone before too long;
      but the security patch is likely to spread a lot faster/further than any
      follow-on cleanup, which means this behavior is likely to be present in the
      wild for some time to come.  As a stopgap, add a variant regression test
      expected-file that matches what you get with a libxml2 that acts this way.
      085423e3
  6. 11 Dec, 2015 9 commits
    • Peter Eisentraut's avatar
      pg_rewind: Don't error if the two clusters are already on the same timeline · 6b34e556
      Peter Eisentraut authored
      This previously resulted in an error and a nonzero exit status, but
      after discussion this should rather be a noop with a zero exit status.
      6b34e556
    • Alvaro Herrera's avatar
      For REASSIGN OWNED for foreign user mappings · 8c161553
      Alvaro Herrera authored
      As reported in bug #13809 by Alexander Ashurkov, the code for REASSIGN
      OWNED hadn't gotten word about user mappings.  Deal with them in the
      same way default ACLs do, which is to ignore them altogether; they are
      handled just fine by DROP OWNED.  The other foreign object cases are
      already handled correctly by both commands.
      
      Also add a REASSIGN OWNED statement to foreign_data test to exercise the
      foreign data objects.  (The changes are just before the "cleanup" phase,
      so it shouldn't remove any existing live test.)
      
      Reported by Alexander Ashurkov, then independently by Jaime Casanova.
      8c161553
    • Tom Lane's avatar
      Install our "missing" script where PGXS builds can find it. · dccf8e9e
      Tom Lane authored
      This allows sane behavior in a PGXS build done on a machine where build
      tools such as bison are missing.
      
      Jim Nasby
      dccf8e9e
    • Stephen Frost's avatar
      Handle policies during DROP OWNED BY · 833728d4
      Stephen Frost authored
      DROP OWNED BY handled GRANT-based ACLs but was not removing roles from
      policies.  Fix that by having DROP OWNED BY remove the role specified
      from the list of roles the policy (or policies) apply to, or the entire
      policy (or policies) if it only applied to the role specified.
      
      As with ACLs, the DROP OWNED BY caller must have permission to modify
      the policy or a WARNING is thrown and no change is made to the policy.
      833728d4
    • Tom Lane's avatar
      Get rid of the planner's LateralJoinInfo data structure. · 4fcf4845
      Tom Lane authored
      I originally modeled this data structure on SpecialJoinInfo, but after
      commit acfcd45c that looks like a pretty poor decision.
      All we really need is relid sets identifying laterally-referenced rels;
      and most of the time, what we want to know about includes indirect lateral
      references, a case the LateralJoinInfo data was unsuited to compute with
      any efficiency.  The previous commit redefined RelOptInfo.lateral_relids
      as the transitive closure of lateral references, so that it easily supports
      checking indirect references.  For the places where we really do want just
      direct references, add a new RelOptInfo field direct_lateral_relids, which
      is easily set up as a copy of lateral_relids before we perform the
      transitive closure calculation.  Then we can just drop lateral_info_list
      and LateralJoinInfo and the supporting code.  This makes the planner's
      handling of lateral references noticeably more efficient, and shorter too.
      
      Such a change can't be back-patched into stable branches for fear of
      breaking extensions that might be looking at the planner's data structures;
      but it seems not too late to push it into 9.5, so I've done so.
      4fcf4845
    • Stephen Frost's avatar
      Handle dependencies properly in ALTER POLICY · ed8bec91
      Stephen Frost authored
      ALTER POLICY hadn't fully considered partial policy alternation
      (eg: change just the roles on the policy, or just change one of
      the expressions) when rebuilding the dependencies.  Instead, it
      would happily remove all dependencies which existed for the
      policy and then only recreate the dependencies for the objects
      referred to in the specific ALTER POLICY command.
      
      Correct that by extracting and building the dependencies for all
      objects referenced by the policy, regardless of if they were
      provided as part of the ALTER POLICY command or were already in
      place as part of the pre-existing policy.
      ed8bec91
    • Tom Lane's avatar
      Still more fixes for planner's handling of LATERAL references. · acfcd45c
      Tom Lane authored
      More fuzz testing by Andreas Seltenreich exposed that the planner did not
      cope well with chains of lateral references.  If relation X references Y
      laterally, and Y references Z laterally, then we will have to scan X on the
      inside of a nestloop with Z, so for all intents and purposes X is laterally
      dependent on Z too.  The planner did not understand this and would generate
      intermediate joins that could not be used.  While that was usually harmless
      except for wasting some planning cycles, under the right circumstances it
      would lead to "failed to build any N-way joins" or "could not devise a
      query plan" planner failures.
      
      To fix that, convert the existing per-relation lateral_relids and
      lateral_referencers relid sets into their transitive closures; that is,
      they now show all relations on which a rel is directly or indirectly
      laterally dependent.  This not only fixes the chained-reference problem
      but allows some of the relevant tests to be made substantially simpler
      and faster, since they can be reduced to simple bitmap manipulations
      instead of searches of the LateralJoinInfo list.
      
      Also, when a PlaceHolderVar that is due to be evaluated at a join contains
      lateral references, we should treat those references as indirect lateral
      dependencies of each of the join's base relations.  This prevents us from
      trying to join any individual base relations to the lateral reference
      source before the join is formed, which again cannot work.
      
      Andreas' testing also exposed another oversight in the "dangerous
      PlaceHolderVar" test added in commit 85e5e222.  Simply rejecting
      unsafe join paths in joinpath.c is insufficient, because in some cases
      we will end up rejecting *all* possible paths for a particular join, again
      leading to "could not devise a query plan" failures.  The restriction has
      to be known also to join_is_legal and its cohort functions, so that they
      will not select a join for which that will happen.  I chose to move the
      supporting logic into joinrels.c where the latter functions are.
      
      Back-patch to 9.3 where LATERAL support was introduced.
      acfcd45c
    • Alvaro Herrera's avatar
      Fix commit timestamp initialization · 69e7235c
      Alvaro Herrera authored
      This module needs explicit initialization in order to replay WAL records
      in recovery, but we had broken this recently following changes to make
      other (stranger) scenarios work correctly.  To fix, rework the
      initialization sequence so that it always takes place before WAL replay
      commences for both master and standby.
      
      I could have gone for a more localized fix that just added a "startup"
      call for the master server, but it seemed better to restructure the
      existing callers as well so that the whole thing made more sense.  As a
      drawback, there is more control logic in xlog.c now than previously, but
      doing otherwise meant passing down the ControlFile flag, which seemed
      uglier as a whole.
      
      This also meant adding a check to not re-execute ActivateCommitTs if it
      had already been called.
      
      Reported by Fujii Masao.
      
      Backpatch to 9.5.
      69e7235c
    • Peter Eisentraut's avatar
      Improve some messages · a351705d
      Peter Eisentraut authored
      a351705d
  7. 10 Dec, 2015 5 commits
    • Robert Haas's avatar
      Improve ALTER POLICY tab completion. · 8b469bd7
      Robert Haas authored
      Complete "ALTER POLICY" with a policy name, as we do for DROP POLICY.
      And, complete "ALTER POLICY polname ON" with a table name that has such
      a policy, as we do for DROP POLICY, rather than with any table name
      at all.
      
      Masahiko Sawada
      8b469bd7
    • Robert Haas's avatar
      Fix typo. · 348bcd86
      Robert Haas authored
      Etsuro Fujita
      348bcd86
    • Andres Freund's avatar
      Fix ON CONFLICT UPDATE bug breaking AFTER UPDATE triggers. · 84ac126e
      Andres Freund authored
      ExecOnConflictUpdate() passed t_ctid of the to-be-updated tuple to
      ExecUpdate(). That's problematic primarily because of two reason: First
      and foremost t_ctid could point to a different tuple. Secondly, and
      that's what triggered the complaint by Stanislav, t_ctid is changed by
      heap_update() to point to the new tuple version.  The behavior of AFTER
      UPDATE triggers was therefore broken, with NEW.* and OLD.* tuples
      spuriously identical within AFTER UPDATE triggers.
      
      To fix both issues, pass a pointer to t_self of a on-stack HeapTuple
      instead.
      
      Fixing this bug lead to one change in regression tests, which previously
      failed due to the first issue mentioned above. There's a reasonable
      expectation that test fails, as it updates one row repeatedly within one
      INSERT ... ON CONFLICT statement. That is only possible if the second
      update is triggered via ON CONFLICT ... SET, ON CONFLICT ... WHERE, or
      by a WITH CHECK expression, as those are executed after
      ExecOnConflictUpdate() does a visibility check. That could easily be
      prohibited, but given it's allowed for plain UPDATEs and a rare corner
      case, it doesn't seem worthwhile.
      
      Reported-By: Stanislav Grozev
      Author: Andres Freund and Peter Geoghegan
      Discussion: CAA78GVqy1+LisN-8DygekD_Ldfy=BJLarSpjGhytOsgkpMavfQ@mail.gmail.com
      Backpatch: 9.5, where ON CONFLICT was introduced
      84ac126e
    • Andres Freund's avatar
      Fix bug leading to restoring unlogged relations from empty files. · e3f4cfc7
      Andres Freund authored
      At the end of crash recovery, unlogged relations are reset to the empty
      state, using their init fork as the template. The init fork is copied to
      the main fork without going through shared buffers. Unfortunately WAL
      replay so far has not necessarily flushed writes from shared buffers to
      disk at that point. In normal crash recovery, and before the
      introduction of 'fast promotions' in fd4ced52 / 9.3, the
      END_OF_RECOVERY checkpoint flushes the buffers out in time. But with
      fast promotions that's not the case anymore.
      
      To fix, force WAL writes targeting the init fork to be flushed
      immediately (using the new FlushOneBuffer() function). In 9.5+ that
      flush can centrally be triggered from the code dealing with restoring
      full page writes (XLogReadBufferForRedoExtended), in earlier releases
      that responsibility is in the hands of XLOG_HEAP_NEWPAGE's replay
      function.
      
      Backpatch to 9.1, even if this currently is only known to trigger in
      9.3+. Flushing earlier is more robust, and it is advantageous to keep
      the branches similar.
      
      Typical symptoms of this bug are errors like
      'ERROR:  index "..." contains unexpected zero page at block 0'
      shortly after promoting a node.
      
      Reported-By: Thom Brown
      Author: Andres Freund and Michael Paquier
      Discussion: 20150326175024.GJ451@alap3.anarazel.de
      Backpatch: 9.1-
      e3f4cfc7
    • Tom Lane's avatar
      Accept flex > 2.5.x on Windows, too. · 9c779c49
      Tom Lane authored
      Commit 32f15d05 fixed this in configure, but missed the similar check
      in the MSVC scripts.
      
      Michael Paquier, per report from Victor Wagner
      9c779c49
  8. 09 Dec, 2015 2 commits
    • Robert Haas's avatar
      Remove redundant sentence. · c00239ea
      Robert Haas authored
      Peter Geoghegan
      c00239ea
    • Robert Haas's avatar
      Allow EXPLAIN (ANALYZE, VERBOSE) to display per-worker statistics. · b287df70
      Robert Haas authored
      The original parallel sequential scan commit included only very limited
      changes to the EXPLAIN output.  Aggregated totals from all workers were
      displayed, but there was no way to see what each individual worker did
      or to distinguish the effort made by the workers from the effort made by
      the leader.
      
      Per a gripe by Thom Brown (and maybe others).  Patch by me, reviewed
      by Amit Kapila.
      b287df70
  9. 08 Dec, 2015 2 commits
    • Kevin Grittner's avatar
      Improve performance in freeing memory contexts · 25c53923
      Kevin Grittner authored
      The single linked list of memory contexts could result in O(N^2)
      performance to free a set of contexts if they were not freed in
      reverse order of creation.  In many cases the reverse order was
      used, but there were some significant exceptions that caused real-
      world performance problems.  Rather than requiring all callers to
      care about the order in which contexts were freed, and hunting down
      and changing all existing cases where the wrong order was used, we
      add one pointer per memory context so that the implementation
      details are not so visible.
      
      Jan Wieck
      25c53923
    • Tom Lane's avatar
      Make failure to open psql's --log-file fatal. · 521f0458
      Tom Lane authored
      Commit 344cdff2 made failure to open the target of --output fatal.
      For consistency, the --log-file switch should behave similarly.
      Like the previous commit, back-patch to 9.5 but no further.
      
      Daniel Verite
      521f0458