1. 30 Apr, 2015 4 commits
    • Robert Haas's avatar
      Create an infrastructure for parallel computation in PostgreSQL. · 924bcf4f
      Robert Haas authored
      This does four basic things.  First, it provides convenience routines
      to coordinate the startup and shutdown of parallel workers.  Second,
      it synchronizes various pieces of state (e.g. GUCs, combo CID
      mappings, transaction snapshot) from the parallel group leader to the
      worker processes.  Third, it prohibits various operations that would
      result in unsafe changes to that state while parallelism is active.
      Finally, it propagates events that would result in an ErrorResponse,
      NoticeResponse, or NotifyResponse message being sent to the client
      from the parallel workers back to the master, from which they can then
      be sent on to the client.
      
      Robert Haas, Amit Kapila, Noah Misch, Rushabh Lathia, Jeevan Chalke.
      Suggestions and review from Andres Freund, Heikki Linnakangas, Noah
      Misch, Simon Riggs, Euler Taveira, and Jim Nasby.
      924bcf4f
    • Alvaro Herrera's avatar
      Fix pg_upgrade's multixact handling (again) · 669c7d20
      Alvaro Herrera authored
      We need to create the pg_multixact/offsets file deleted by pg_upgrade
      much earlier than we originally were: it was in TrimMultiXact(), which
      runs after we exit recovery, but it actually needs to run earlier than
      the first call to SetMultiXactIdLimit (before recovery), because that
      routine already wants to read the first offset segment.
      
      Per pg_upgrade trouble report from Jeff Janes.
      
      While at it, silence a compiler warning about a pointless assert that an
      unsigned variable was being tested non-negative.  This was a signed
      constant in Thomas Munro's patch which I changed to unsigned before
      commit.  Pointed out by Andres Freund.
      669c7d20
    • Magnus Hagander's avatar
      Fix typo · da114099
      Magnus Hagander authored
      Amit Langote
      da114099
    • Peter Eisentraut's avatar
      Fix parallel make risk with new check temp-install setup · dbf2ec1a
      Peter Eisentraut authored
      The "check" target no longer needs to depend on "all", because it now
      runs "install" directly, which in turn depends on "all".  Doing both
      will cause problems with parallel make, because two builds will run next
      to each other.
      
      Also remove the redirection of the temp-install output into a log file.
      This was appropriate when this was done from within pg_regress, but now
      it's just a regular make run, and especially with the above changes this
      will now take the place of running the "all" target before the test
      suites.
      
      problem report by Jeff Janes, patch in part by Michael Paquier
      dbf2ec1a
  2. 29 Apr, 2015 11 commits
    • Andres Freund's avatar
      Correct replication origin's use of UINT16_MAX to PG_UINT16_MAX. · e0f26fc7
      Andres Freund authored
      We can't rely on UINT16_MAX being present, which is why we introduced
      PG_UINT16_MAX...
      
      Buildfarm animal bowerbird via Andrew Gierth.
      e0f26fc7
    • Robert Haas's avatar
      Add <literal> markup, for consistency. · 49601ab1
      Robert Haas authored
      This file isn't entirely consistent about whether "on" and "off"
      should be marked up with <literal>, but it doesn't make much sense
      to be inconsistent within a single sentence.
      
      Etsuro Fujita
      49601ab1
    • Robert Haas's avatar
      fe72c4c5
    • Robert Haas's avatar
      Remove enum-related special cases for catalog scans. · 9b6a0ce5
      Robert Haas authored
      When this code was written, catalog scans were normally performed using
      SnapshotNow, making special handling necessary here.  Now, however, all
      catalog scans use MVCC snapshots, so we can change these cases to look
      more like what we do for catalog scans elsewhere in the code.
      
      Per discussion with Tom Lane and a reminder from Bruce Momjian.
      9b6a0ce5
    • Robert Haas's avatar
      Attempt to fix some compiler warnings. · ef3f9e64
      Robert Haas authored
      ef3f9e64
    • Andrew Dunstan's avatar
      Enable transforms tests for python 2 on MSVC builds · eb010637
      Andrew Dunstan authored
      Currently regression tests for python 3 are disabled on MSVC, and these
      tests fail with python 3, too, so we have some work to do to enable
      both. Meanwhile, all the buildfarm hosts seem to be building with python
      2 anyway, so this at least gets us some coverage.
      
      Original patch from Michael Paquier, significantly modified by me.
      eb010637
    • Andres Freund's avatar
      Introduce replication progress tracking infrastructure. · 5aa23504
      Andres Freund authored
      When implementing a replication solution ontop of logical decoding, two
      related problems exist:
      * How to safely keep track of replication progress
      * How to change replication behavior, based on the origin of a row;
        e.g. to avoid loops in bi-directional replication setups
      
      The solution to these problems, as implemented here, consist out of
      three parts:
      
      1) 'replication origins', which identify nodes in a replication setup.
      2) 'replication progress tracking', which remembers, for each
         replication origin, how far replay has progressed in a efficient and
         crash safe manner.
      3) The ability to filter out changes performed on the behest of a
         replication origin during logical decoding; this allows complex
         replication topologies. E.g. by filtering all replayed changes out.
      
      Most of this could also be implemented in "userspace", e.g. by inserting
      additional rows contain origin information, but that ends up being much
      less efficient and more complicated.  We don't want to require various
      replication solutions to reimplement logic for this independently. The
      infrastructure is intended to be generic enough to be reusable.
      
      This infrastructure also replaces the 'nodeid' infrastructure of commit
      timestamps. It is intended to provide all the former capabilities,
      except that there's only 2^16 different origins; but now they integrate
      with logical decoding. Additionally more functionality is accessible via
      SQL.  Since the commit timestamp infrastructure has also been introduced
      in 9.5 (commit 73c986ad) changing the API is not a problem.
      
      For now the number of origins for which the replication progress can be
      tracked simultaneously is determined by the max_replication_slots
      GUC. That GUC is not a perfect match to configure this, but there
      doesn't seem to be sufficient reason to introduce a separate new one.
      
      Bumps both catversion and wal page magic.
      
      Author: Andres Freund, with contributions from Petr Jelinek and Craig Ringer
      Reviewed-By: Heikki Linnakangas, Petr Jelinek, Robert Haas, Steve Singer
      Discussion: 20150216002155.GI15326@awork2.anarazel.de,
          20140923182422.GA15776@alap3.anarazel.de,
          20131114172632.GE7522@alap2.anarazel.de
      5aa23504
    • Robert Haas's avatar
      psql: Improve tab completion for ALTER FOREIGN TABLE. · c6e96a2f
      Robert Haas authored
      Etsuro Fujita
      c6e96a2f
    • Bruce Momjian's avatar
      to_char(): have format 'OF' only show the leading negative sign · 9b43d73b
      Bruce Momjian authored
      Previously both hours and minutes displayed as negative.
      
      Report by David Pozsar
      9b43d73b
    • Bruce Momjian's avatar
      doc: recommend use of GUC server_version_num for version checks · 5086dfce
      Bruce Momjian authored
      Patch by Craig Ringer
      5086dfce
    • Bruce Momjian's avatar
      pg_basebackup: canonicalize old and new tablespace paths · f19d8f14
      Bruce Momjian authored
      This avoids problems with double-slash-specified paths.
      
      Patch by Ian Barwick
      f19d8f14
  3. 28 Apr, 2015 6 commits
    • Bruce Momjian's avatar
      Warn about tablespace creation in PGDATA · 33cb8ff6
      Bruce Momjian authored
      Also add warning to pg_upgrade
      
      Report by Josh Berkus
      33cb8ff6
    • Tom Lane's avatar
      Fix another test for RELKIND_RELATION that should allow foreign tables now. · 290713e3
      Tom Lane authored
      I thought I'd gone through all of these before, but a fresh review found
      this one too.  (Perhaps it would be better to just delete this test and
      let the failure occur later, but for the moment I'll preserve the logic.)
      
      The case that this was rejecting is like
      	CREATE FOREIGN TABLE ft (f1 int ...) ...;
      	CREATE TABLE c1 (UNIQUE(f1)) INHERITS(ft);
      290713e3
    • Tom Lane's avatar
      Fix ATSimpleRecursion() to allow recursion from a foreign table. · ad9f08f7
      Tom Lane authored
      This is necessary in view of the changes to allow foreign tables to be
      full members of inheritance hierarchies, but I (tgl) unaccountably missed
      it in commit cb1ca4d8.
      
      Noted by Amit Langote, patch by Etsuro Fujita
      ad9f08f7
    • Alvaro Herrera's avatar
      Code review for multixact bugfix · d3821e70
      Alvaro Herrera authored
      Reword messages, rename a confusingly named function.
      
      Per Robert Haas.
      d3821e70
    • Andrew Dunstan's avatar
      Fix MSVC builds for contrib transforms modules. · cbf9f0ec
      Andrew Dunstan authored
      With this patch the MSVC build and installation will work correctly with
      the transforms. However the python transform tests for hstore and ltree
      are still disabled pending some further adjustments.
      
      Michael Paquier with some tweaks from me.
      cbf9f0ec
    • Alvaro Herrera's avatar
      Protect against multixact members wraparound · b69bf30b
      Alvaro Herrera authored
      Multixact member files are subject to early wraparound overflow and
      removal: if the average multixact size is above a certain threshold (see
      note below) the protections against offset overflow are not enough:
      during multixact truncation at checkpoint time, some
      pg_multixact/members files would be removed because the server considers
      them to be old and not needed anymore.  This leads to loss of files that
      are critical to interpret existing tuples's Xmax values.
      
      To protect against this, since we don't have enough info in pg_control
      and we can't modify it in old branches, we maintain shared memory state
      about the oldest value that we need to keep; we use this during new
      multixact creation to abort if an old still-needed file would get
      overwritten.  This value is kept up to date by checkpoints, which makes
      it not completely accurate but should be good enough.  We start emitting
      warnings sometime earlier, so that the eventual multixact-shutdown
      doesn't take DBAs completely by surprise (more precisely: once 20
      members SLRU segments are remaining before shutdown.)
      
      On troublesome average multixact size: The threshold size depends on the
      multixact freeze parameters. The oldest age is related to the greater of
      multixact_freeze_table_age and multixact_freeze_min_age: anything
      older than that should be removed promptly by autovacuum.  If autovacuum
      is keeping up with multixact freezing, the troublesome multixact average
      size is
      	(2^32-1) / Max(freeze table age, freeze min age)
      or around 28 members per multixact.  Having an average multixact size
      larger than that will eventually cause new multixact data to overwrite
      the data area for older multixacts.  (If autovacuum is not able to keep
      up, or there are errors in vacuuming, the actual maximum is
      multixact_freeeze_max_age instead, at which point multixact generation
      is stopped completely.  The default value for this limit is 400 million,
      which means that the multixact size that would cause trouble is about 10
      members).
      
      Initial bug report by Timothy Garnett, bug #12990
      Backpatch to 9.3, where the problem was introduced.
      
      Authors: Álvaro Herrera, Thomas Munro
      Reviews: Thomas Munro, Amit Kapila, Robert Haas, Kevin Grittner
      b69bf30b
  4. 27 Apr, 2015 3 commits
    • Andres Freund's avatar
      Use a fd opened for read/write when syncing slots during startup. · dfbaed45
      Andres Freund authored
      Some operating systems, including the reporter's windows, return EBADFD
      or similar when fsync() is invoked on a O_RDONLY file descriptor.
      Unfortunately RestoreSlotFromDisk() does exactly that; which causes
      failures after restarts in at least some scenarios.
      
      If you hit the bug the error message will be something like
      ERROR: could not fsync file "pg_replslot/$name/state": Bad file descriptor
      
      Simply use O_RDWR instead of O_RDONLY when opening the relevant file
      descriptor to fix the bug.  Unfortunately I have no way of verifying the
      fix, but we've seen similar problems in the past.
      
      This bug goes back to 9.4 where slots were introduced. Backpatch
      accordingly.
      
      Reported-By: Patrice Drolet
      Bug: #13143:
      Discussion: 20150424101006.2556.60897@wrigleys.postgresql.org
      dfbaed45
    • Stephen Frost's avatar
      Improve qual pushdown for RLS and SB views · dcbf5948
      Stephen Frost authored
      The original security barrier view implementation, on which RLS is
      built, prevented all non-leakproof functions from being pushed down to
      below the view, even when the function was not receiving any data from
      the view.  This optimization improves on that situation by, instead of
      checking strictly for non-leakproof functions, it checks for Vars being
      passed to non-leakproof functions and allows functions which do not
      accept arguments or whose arguments are not from the current query level
      (eg: constants can be particularly useful) to be pushed down.
      
      As discussed, this does mean that a function which is pushed down might
      gain some idea that there are rows meeting a certain criteria based on
      the number of times the function is called, but this isn't a
      particularly new issue and the documentation in rules.sgml already
      addressed similar covert-channel risks.  That documentation is updated
      to reflect that non-leakproof functions may be pushed down now, if
      they meet the above-described criteria.
      
      Author: Dean Rasheed, with a bit of rework to make things clearer,
      along with comment and documentation updates from me.
      dcbf5948
    • Andrew Dunstan's avatar
      Fix vcbuild failures and chkpass dependency caused by 854adb83 · 06ca28d5
      Andrew Dunstan authored
      Switching the Windows build scripts to use forward slashes instead of
      backslashes has caused a couple of issues in VC builds:
      - The file tree list was not correctly generated, build script
        generating vcproj file missing tree dependencies when listing items in
        Filter.
      - VC builds do not accept file paths with forward slashes, perhaps it
        could be possible to use a Condition but it seems safer to simply
        enforce the file paths to use backslashes in the vcproj files.
      - chkpass had an unneeded dependency with libpgport and libpgcommon to
        make build succeed but actually it is not necessary as crypt.c is
        already listed for this project and should be replaced with a fake name
        as it is a unique file.
      
      Michael Paquier
      06ca28d5
  5. 26 Apr, 2015 10 commits
    • Peter Eisentraut's avatar
      Fix hstore_plperl regression tests on some platforms · f9542547
      Peter Eisentraut authored
      On some platforms, plperl and plperlu cannot be loaded at the same
      time.  So split the test into two separate test files.
      f9542547
    • Andres Freund's avatar
      Also correct therefor to therefore. · 2e3ca04e
      Andres Freund authored
      Since both forms are arguably legal I wasn't sure about changing
      this. But then Tom argued for 'therefore'...
      
      Author: Dmitriy Olshevskiy
      Discussion: 34789.1430067832@sss.pgh.pa.us
      2e3ca04e
    • Andres Freund's avatar
      Fix various typos and grammar errors in comments. · 6aab1f45
      Andres Freund authored
      Author: Dmitriy Olshevskiy
      Discussion: 553D00A6.4090205@bk.ru
      6aab1f45
    • Andres Freund's avatar
      Fix possible division by zero in pg_xlogdump. · 9fe1d9ac
      Andres Freund authored
      When displaying stats it was possible that a floating point division by
      zero occured when no FPIs were issued for a type of record.
      
      Author: Abhijit Menon-Sen
      Discussion: 20150417091811.GA14008@toroid.org
      9fe1d9ac
    • Peter Eisentraut's avatar
      Add transforms feature · cac76582
      Peter Eisentraut authored
      This provides a mechanism for specifying conversions between SQL data
      types and procedural languages.  As examples, there are transforms
      for hstore and ltree for PL/Perl and PL/Python.
      
      reviews by Pavel Stěhule and Andres Freund
      cac76582
    • Tom Lane's avatar
      Fix typo in linux startup script. · f320cbb6
      Tom Lane authored
      Missed a "$" in what was meant to be a variable substitution.  Careless
      mistake in commit f23425fa.
      f320cbb6
    • Tom Lane's avatar
      Add comments warning against generalizing default_with_oids. · 0bd11d97
      Tom Lane authored
      pg_dump has historically assumed that default_with_oids affects only plain
      tables and not other relkinds.  Conceivably we could make it apply to some
      newly invented relkind if we did so from the get-go, but changing the
      behavior for existing object types will break existing dump scripts.
      Add code comments warning about this interaction.
      
      Also, make sure that default_with_oids doesn't cause parse_utilcmd.c to
      think that CREATE FOREIGN TABLE will create an OID column.  I think this is
      only a latent bug right now, since we don't allow UNIQUE/PKEY constraints
      in CREATE FOREIGN TABLE, but it's better to be consistent and future-proof.
      0bd11d97
    • Andrew Dunstan's avatar
      Try to unbreak some MSVC builds following forward slash change. · 04f1542d
      Andrew Dunstan authored
      Michael Paquier.
      04f1542d
    • Bruce Momjian's avatar
      Revert: Honor OID status of CREATE LIKE'd tables · 764ce22a
      Bruce Momjian authored
      Reverts d992f8a8
      
      Report by Tom Lane
      764ce22a
    • Peter Eisentraut's avatar
      Don't overwrite EXTRA_INSTALL · ee8d3927
      Peter Eisentraut authored
      The temp-install target sets EXTRA_INSTALL to install the current
      directory.  But when doing so, it should append instead of overwrite,
      otherwise settings of EXTRA_INSTALL from a makefile won't take effect.
      This would cause the earthdistance test to fail when called directly,
      because it would miss installing the cube module.
      ee8d3927
  6. 25 Apr, 2015 4 commits
    • Tom Lane's avatar
      Prevent improper reordering of antijoins vs. outer joins. · 3cf86860
      Tom Lane authored
      An outer join appearing within the RHS of an antijoin can't commute with
      the antijoin, but somehow I missed teaching make_outerjoininfo() about
      that.  In Teodor Sigaev's recent trouble report, this manifests as a
      "could not find RelOptInfo for given relids" error within eqjoinsel();
      but I think silently wrong query results are possible too, if the planner
      misorders the joins and doesn't happen to trigger any internal consistency
      checks.  It's broken as far back as we had antijoins, so back-patch to all
      supported branches.
      3cf86860
    • Peter Eisentraut's avatar
      Replace backslashes by forward slashes in MSVC build code · 854adb83
      Peter Eisentraut authored
      This makes it possible to run some stages of these build scripts on
      non-Windows systems.  That way, we can more easily test whether file
      moves or makefile changes might break the MSVC build.
      
      Peter Eisentraut and Michael Paquier
      854adb83
    • Stephen Frost's avatar
      Fix file comment for test_rls_hooks.c · 410cbfd6
      Stephen Frost authored
      The file-level comment wasn't updated when it was copied from the shared
      memory queue test module.  Fixed.
      
      Noted by Dean Rasheed.
      410cbfd6
    • Stephen Frost's avatar
      Perform RLS WITH CHECK before constraints, etc · e89bd02f
      Stephen Frost authored
      The RLS capability is built on top of the WITH CHECK OPTION
      system which was added for auto-updatable views, however, unlike
      WCOs on views (which are mandated by the SQL spec to not fire until
      after all other constraints and checks are done), it makes much more
      sense for RLS checks to happen earlier than constraint and uniqueness
      checks.
      
      This patch reworks the structure which holds the WCOs a bit to be
      explicitly either VIEW or RLS checks and the RLS-related checks are
      done prior to the constraint and uniqueness checks.  This also allows
      better error reporting as we are now reporting when a violation is due
      to a WITH CHECK OPTION and when it's due to an RLS policy violation,
      which was independently noted by Craig Ringer as being confusing.
      
      The documentation is also updated to include a paragraph about when RLS
      WITH CHECK handling is performed, as there have been a number of
      questions regarding that and the documentation was previously silent on
      the matter.
      
      Author: Dean Rasheed, with some kabitzing and comment changes by me.
      e89bd02f
  7. 24 Apr, 2015 2 commits