1. 13 Sep, 2016 4 commits
    • Robert Haas's avatar
      Have heapam.h include lockdefs.h rather than lock.h. · 445a38ab
      Robert Haas authored
      lockdefs.h was only split from lock.h relatively recently, and
      represents a minimal subset of the old lock.h.  heapam.h only needs
      that smaller subset, so adjust it to include only that.  This requires
      some corresponding adjustments elsewhere.
      
      Peter Geoghegan
      445a38ab
    • Andres Freund's avatar
      Remove user_relns() SRF from regression tests. · 0dba54f1
      Andres Freund authored
      The output of the function changes whenever previous (or, as in this
      case, concurrent) tests leave a table in place. That causes unneeded
      churn.
      
      This should fix failures due to the tests added bfe16d1a, like on
      lapwing, caused by the tsrf test running concurrently with misc. Those
      could also have been addressed by using temp tables, but that test has
      annoyed me before.
      
      Discussion: <27626.1473729905@sss.pgh.pa.us>
      0dba54f1
    • Andres Freund's avatar
      9f478b4f
    • Andres Freund's avatar
      Add more tests for targetlist SRFs. · bfe16d1a
      Andres Freund authored
      We're considering changing the implementation of targetlist SRFs
      considerably, and a lot of the current behaviour isn't tested in our
      regression tests. Thus it seems useful to increase coverage to avoid
      accidental behaviour changes.
      
      It's quite possible that some of the plans here will require adjustments
      to avoid falling afoul of ordering differences (e.g. hashed group
      bys). The buildfarm will tell us.
      
      Reviewed-By: Tom Lane
      Discussion: <20160827214829.zo2dfb5jaikii5nw@alap3.anarazel.de>
      bfe16d1a
  2. 12 Sep, 2016 5 commits
    • Tom Lane's avatar
      Docs: assorted minor cleanups. · 42fd984c
      Tom Lane authored
      Standardize on "user_name" for a field name in related examples in
      ddl.sgml; before we had variously "user_name", "username", and "user".
      The last is flat wrong because it conflicts with a reserved word.
      
      Be consistent about entry capitalization in a table in func.sgml.
      
      Fix a typo in pgtrgm.sgml.
      
      Back-patch to 9.6 and 9.5 as relevant.
      
      Alexander Law
      42fd984c
    • Peter Eisentraut's avatar
      pg_basebackup: Clean created directories on failure · 9083353b
      Peter Eisentraut authored
      Like initdb, clean up created data and xlog directories, unless the new
      -n/--noclean option is specified.
      
      Tablespace directories are not cleaned up, but a message is written
      about that.
      Reviewed-by: default avatarMasahiko Sawada <sawada.mshk@gmail.com>
      9083353b
    • Kevin Grittner's avatar
      Fix recent commit for tab-completion of database template. · 63c1a871
      Kevin Grittner authored
      The details of commit 52803098 were
      based on a misunderstanding of the role inheritance allowing use
      of a database for a template.  While the CREATEDB privilege is not
      inherited, the database ownership is privileges are.
      
      Pointed out by Vitaly Burovoy and Tom Lane.
      Fix provided by Tom Lane, reviewed by Vitaly Burovoy.
      63c1a871
    • Simon Riggs's avatar
      Fix copy/pasto in file identification · 4068eb99
      Simon Riggs authored
      Daniel Gustafsson
      4068eb99
    • Simon Riggs's avatar
      Identify walsenders in pg_stat_activity · fc3d4a44
      Simon Riggs authored
      Following 8299471c walsender procs are now visible in pg_stat_activity.
      Set query to ‘walsender’ for walsender procs to allow them to be identified.
      
      Discussion:CAB7nPqS8c76KPSufK_HSDeYrbtg+zZ7D0EEkjeM6txSEuCB_jA@mail.gmail.com
      
      Michael Paquier, issue raised by Fujii Masao, reviewed by Tom Lane
      fc3d4a44
  3. 11 Sep, 2016 5 commits
    • Simon Riggs's avatar
      Raise max setting of checkpoint_timeout to 1d · c3c0d7bd
      Simon Riggs authored
      Previously checkpoint_timeout was capped at 3600s
      New max setting is 86400s = 24h = 1d
      
      Discussion: 32558.1454471895@sss.pgh.pa.us
      c3c0d7bd
    • Kevin Grittner's avatar
      psql tab completion for CREATE DATABASE ... TEMPLATE ... · 52803098
      Kevin Grittner authored
      Sehrope Sarkuni, reviewed by Merlin Moncure & Vitaly Burovoy
      with some editing by me
      52803098
    • Tom Lane's avatar
      Allow CREATE EXTENSION to follow extension update paths. · 40b449ae
      Tom Lane authored
      Previously, to update an extension you had to produce both a version-update
      script and a new base installation script.  It's become more and more
      obvious that that's tedious, duplicative, and error-prone.  This patch
      attempts to improve matters by allowing the new base installation script
      to be omitted.  CREATE EXTENSION will install a requested version if it
      can find a base script and a chain of update scripts that will get there.
      As in the existing update logic, shorter chains are preferred if there's
      more than one possibility, with an arbitrary tie-break rule for chains
      of equal length.
      
      Also adjust the pg_available_extension_versions view to show such versions
      as installable.
      
      While at it, refactor the code so that CASCADE processing works for
      extensions requested during ApplyExtensionUpdates().  Without this,
      addition of a new requirement in an updated extension would require
      creating a new base script, even if there was no other reason to do that.
      (It would be easy at this point to add a CASCADE option to ALTER EXTENSION
      UPDATE, to allow the same thing to happen during a manually-commanded
      version update, but I have not done that here.)
      
      Tom Lane, reviewed by Andres Freund
      
      Discussion: <20160905005919.jz2m2yh3und2dsuy@alap3.anarazel.de>
      40b449ae
    • Tom Lane's avatar
      Fix and simplify MSVC build's handling of xml/xslt/uuid dependencies. · 28e5e564
      Tom Lane authored
      Solution.pm mistakenly believed that the xml option requires the xslt
      option, when actually the dependency is the other way around; and it
      believed that libxml requires libiconv, which is not necessarily so,
      so we shouldn't enforce it here.  Fix the option cross-checking logic.
      
      Also, since AddProject already takes care of adding libxml and libxslt
      include and library dependencies to every project, there's no need
      for the custom code that did that in mkvcbuild.  While at it, let's
      handle the similar dependencies for uuid in a similar fashion.
      
      Given the lack of field complaints about these overly strict build
      dependency requirements, there seems no need for a back-patch.
      
      Michael Paquier
      
      Discussion: <CAB7nPqR0+gpu3mRQvFjf-V-bMxmiSJ6NpTg9_WzVDL+a31cV2g@mail.gmail.com>
      28e5e564
    • Heikki Linnakangas's avatar
      Implement binary heap replace-top operation in a smarter way. · 24598337
      Heikki Linnakangas authored
      In external sort's merge phase, we maintain a binary heap holding the next
      tuple from each input tape. On each step, the topmost tuple is returned,
      and replaced with the next tuple from the same tape. We were doing the
      replacement by deleting the top node in one operation, and inserting the
      next tuple after that. However, you can do a "replace-top" operation more
      efficiently, in one "sift-up". A deletion will always walk the heap from
      top to bottom, but in a replacement, we can stop as soon as we find the
      right place for the new tuple. This is particularly helpful, if the tapes
      are not in completely random order, so that the next tuple from a tape is
      likely to land near the top of the heap.
      
      Peter Geoghegan, reviewed by Claudio Freire, with some editing by me.
      
      Discussion: <CAM3SWZRhBhiknTF_=NjDSnNZ11hx=U_SEYwbc5vd=x7M4mMiCw@mail.gmail.com>
      24598337
  4. 10 Sep, 2016 2 commits
    • Tom Lane's avatar
      Improve unreachability recognition in elog() macro. · f2717c79
      Tom Lane authored
      Some experimentation with an older version of gcc showed that it is able
      to determine whether "if (elevel_ >= ERROR)" is compile-time constant
      if elevel_ is declared "const", but otherwise not so much.  We had
      accounted for that in ereport() but were too miserly with braces to
      make it so in elog().  I don't know how many currently-interesting
      compilers have the same quirk, but in case it will save some code
      space, let's make sure that elog() is on the same footing as ereport()
      for this purpose.
      
      Back-patch to 9.3 where we introduced pg_unreachable() calls into
      elog/ereport.
      f2717c79
    • Tom Lane's avatar
      Fix miserable coding in pg_stat_get_activity(). · ddc88931
      Tom Lane authored
      Commit dd1a3bcc replaced a test on whether a subroutine returned a
      null pointer with a test on whether &pointer->backendStatus was null.
      This accidentally failed to fail, at least on common compilers, because
      backendStatus is the first field in the struct; but it was surely trouble
      waiting to happen.  Commit f91feba8 then messed things up further,
      changing the logic to
      
      	local_beentry = pgstat_fetch_stat_local_beentry(curr_backend);
      	if (!local_beentry)
      		continue;
      	beentry = &local_beentry->backendStatus;
      	if (!beentry)
      	{
      
      where the second "if" is now dead code, so that the intended behavior of
      printing a row with "<backend information not available>" cannot occur.
      
      I suspect this is all moot because pgstat_fetch_stat_local_beentry
      will never actually return null in this function's usage, but it's still
      very poor coding.  Repair back to 9.4 where the original problem was
      introduced.
      ddc88931
  5. 09 Sep, 2016 11 commits
    • Tom Lane's avatar
      Rewrite PageIndexDeleteNoCompact into a form that only deletes 1 tuple. · 24992c6d
      Tom Lane authored
      The full generality of deleting an arbitrary number of tuples is no longer
      needed, so let's save some code and cycles by replacing the original coding
      with an implementation based on PageIndexTupleDelete.
      
      We can always get back the old code from git if we need it again for new
      callers (though I don't care for its willingness to mess with line pointers
      it wasn't told to mess with).
      
      Discussion: <552.1473445163@sss.pgh.pa.us>
      24992c6d
    • Tom Lane's avatar
      Convert PageAddItem into a macro to save a few cycles. · 1a4be103
      Tom Lane authored
      Nowadays this is just a backwards-compatibility wrapper around
      PageAddItemExtended, so let's avoid the extra level of function call.
      In addition, because pretty much all callers are passing constants
      for the two bool arguments, compilers will be able to constant-fold
      the conversion to a flags bitmask.
      
      Discussion: <552.1473445163@sss.pgh.pa.us>
      1a4be103
    • Tom Lane's avatar
      Invent PageIndexTupleOverwrite, and teach BRIN and GiST to use it. · b1328d78
      Tom Lane authored
      PageIndexTupleOverwrite performs approximately the same function as
      PageIndexTupleDelete (or PageIndexDeleteNoCompact) followed by PageAddItem
      targeting the same item pointer offset.  But in the case where the new
      tuple is the same size as the old, it avoids shuffling other data around on
      the page, because the new tuple is placed where the old one was rather than
      being appended to the end of the page.  This has been shown to provide a
      substantial speedup for some GiST use-cases.
      
      Also, this change allows some API simplifications: we can get rid of
      the rather klugy and error-prone PAI_ALLOW_FAR_OFFSET flag for
      PageAddItemExtended, since that was used only to cover a corner case
      for BRIN that's better expressed by using PageIndexTupleOverwrite.
      
      Note that this patch causes a rather subtle WAL incompatibility: the
      physical page content change represented by certain WAL records is now
      different than it was before, because while the tuples have the same
      itempointer line numbers, the tuples themselves are in different places.
      I have not bumped the WAL version number because I think it doesn't matter
      unless you are trying to do bitwise comparisons of original and replayed
      pages, and in any case we're early in a devel cycle and there will probably
      be more WAL changes before v10 gets out the door.
      
      There is probably room to make use of PageIndexTupleOverwrite in SP-GiST
      and GIN too, but that is left for a future patch.
      
      Andrey Borodin, reviewed by Anastasia Lubennikova, whacked around a bit
      by me
      
      Discussion: <CAJEAwVGQjGGOj6mMSgMwGvtFd5Kwe6VFAxY=uEPZWMDjzbn4VQ@mail.gmail.com>
      b1328d78
    • Alvaro Herrera's avatar
      Fix locking a tuple updated by an aborted (sub)transaction · 5c609a74
      Alvaro Herrera authored
      When heap_lock_tuple decides to follow the update chain, it tried to
      also lock any version of the tuple that was created by an update that
      was subsequently rolled back.  This is pointless, since for all intents
      and purposes that tuple exists no more; and moreover it causes
      misbehavior, as reported independently by Marko Tiikkaja and Marti
      Raudsepp: some SELECT FOR UPDATE/SHARE queries may fail to return
      the tuples, and assertion-enabled builds crash.
      
      Fix by having heap_lock_updated_tuple test the xmin and return success
      immediately if the tuple was created by an aborted transaction.
      
      The condition where tuples become invisible occurs when an updated tuple
      chain is followed by heap_lock_updated_tuple, which reports the problem
      as HeapTupleSelfUpdated to its caller heap_lock_tuple, which in turn
      propagates that code outwards possibly leading the calling code
      (ExecLockRows) to believe that the tuple exists no longer.
      
      Backpatch to 9.3.  Only on 9.5 and newer this leads to a visible
      failure, because of commit 27846f02; before that, heap_lock_tuple
      skips the whole dance when the tuple is already locked by the same
      transaction, because of the ancient HeapTupleSatisfiesUpdate behavior.
      Still, the buggy condition may also exist in more convoluted scenarios
      involving concurrent transactions, so it seems safer to fix the bug in
      the old branches too.
      
      Discussion:
      	https://www.postgresql.org/message-id/CABRT9RC81YUf1=jsmWopcKJEro=VoeG2ou6sPwyOUTx_qteRsg@mail.gmail.com
      	https://www.postgresql.org/message-id/48d3eade-98d3-8b9a-477e-1a8dc32a724d@joh.to
      5c609a74
    • Tom Lane's avatar
      In PageIndexTupleDelete, don't assume stored item lengths are MAXALIGNed. · 984d0a14
      Tom Lane authored
      PageAddItem stores the item length as-is.  It MAXALIGN's the amount of
      space actually allocated for each tuple, but not the stored length.
      PageRepairFragmentation, PageIndexMultiDelete, and PageIndexDeleteNoCompact
      are all on board with this and MAXALIGN item lengths after fetching them.
      But PageIndexTupleDelete expects the stored length to be a MAXALIGN
      multiple already.  This accidentally works for existing index AMs because
      they all maxalign their tuple sizes internally; but we don't do that for
      heap tuples, and it shouldn't be a requirement for index tuples either.
      
      So, sync PageIndexTupleDelete with the rest of bufpage.c by having it
      maxalign the item size after fetching.
      
      Also add a check that pd_special is maxaligned, to ensure that the test
      "(offset + size) > phdr->pd_special" is still doing the right thing.
      (If offset and pd_special are aligned, it doesn't matter whether size is.)
      Again, this is in sync with the rest of the routines here, except for
      PageAddItem which doesn't test because it doesn't actually do anything
      for which pd_special alignment matters.
      
      This shouldn't have any immediate functional impact; it just adds the
      flexibility to use PageIndexTupleDelete on index tuples with non-aligned
      lengths.
      
      Discussion: <3814.1473366762@sss.pgh.pa.us>
      984d0a14
    • Peter Eisentraut's avatar
      Make better use of existing enums in plpgsql · e0013deb
      Peter Eisentraut authored
      plpgsql.h defines a number of enums, but most of the code passes them
      around as ints.  Update structs and function prototypes to take enum
      types instead.  This clarifies the struct definitions in plpgsql.h in
      particular.
      Reviewed-by: default avatarPavel Stehule <pavel.stehule@gmail.com>
      e0013deb
    • Tom Lane's avatar
      Avoid reporting "cache lookup failed" for some user-reachable cases. · 967a7b0f
      Tom Lane authored
      We have a not-terribly-thoroughly-enforced-yet project policy that internal
      errors with SQLSTATE XX000 (ie, plain elog) should not be triggerable from
      SQL.  record_in, domain_in, and PL validator functions all failed to meet
      this standard, because they threw plain elog("cache lookup failed for XXX")
      errors on bad OIDs, and those are all invokable from SQL.
      
      For record_in, the best fix is to upgrade typcache.c (lookup_type_cache)
      to throw a user-facing error for this case.  That seems consistent because
      it was more than halfway there already, having user-facing errors for shell
      types and non-composite types.  Having done that, tweak domain_in to rely
      on the typcache to throw an appropriate error.  (This costs little because
      InitDomainConstraintRef would fetch the typcache entry anyway.)
      
      For the PL validator functions, we already have a single choke point at
      CheckFunctionValidatorAccess, so just fix its error to be user-facing.
      
      Dilip Kumar, reviewed by Haribabu Kommi
      
      Discussion: <87wpxfygg9.fsf@credativ.de>
      967a7b0f
    • Simon Riggs's avatar
      Fix corruption of 2PC recovery with subxacts · ec253de1
      Simon Riggs authored
      Reading 2PC state files during recovery was borked, causing corruptions during
      recovery. Effect limited to servers with 2PC, subtransactions and
      recovery/replication.
      
      Stas Kelvich, reviewed by Michael Paquier and Pavan Deolasee
      ec253de1
    • Simon Riggs's avatar
      Correct TABLESAMPLE docs · f6647242
      Simon Riggs authored
      Revert to original use of word “sample”, though with clarification,
      per Tom Lane.
      
      Discussion: 29052.1471015383@sss.pgh.pa.us
      f6647242
    • Andres Freund's avatar
      Improve scalability of md.c for large relations. · 45e191e3
      Andres Freund authored
      So far md.c used a linked list of segments. That proved to be a problem
      when processing large relations, because every smgr.c/md.c level access
      to a page incurred walking through a linked list of all preceding
      segments. Thus making accessing pages O(#segments).
      
      Replace the linked list of segments hanging off SMgrRelationData with an
      array of opened segments. That allows O(1) access to individual
      segments, if they've previously been opened.
      
      Discussion: <20140331101001.GE13135@alap3.anarazel.de>
      Reviewed-By: Peter Geoghegan, Tom Lane (in an older version)
      45e191e3
    • Andres Freund's avatar
      Faster PageIsVerified() for the all zeroes case. · 417fefaf
      Andres Freund authored
      That's primarily useful for testing very large relations, using sparse
      files.
      
      Discussion: <20140331101001.GE13135@alap3.anarazel.de>
      Reviewed-By: Peter Geoghegan
      417fefaf
  6. 08 Sep, 2016 8 commits
    • Andres Freund's avatar
      Fix mdtruncate() to close fd.c handle of deleted segments. · 769fd9d8
      Andres Freund authored
      mdtruncate() forgot to FileClose() a segment's mdfd_vfd, when deleting
      it. That lead to a fd.c handle to a truncated file being kept open until
      backend exit.
      
      The issue appears to have been introduced way back in 1a5c450f,
      before that the handle was closed inside FileUnlink().
      
      The impact of this bug is limited - only VACUUM and ON COMMIT TRUNCATE
      for temporary tables, truncate files in place (i.e. TRUNCATE itself is
      not affected), and the relation has to be bigger than 1GB. The
      consequences of a leaked fd.c handle aren't severe either.
      
      Discussion: <20160908220748.oqh37ukwqqncbl3n@alap3.anarazel.de>
      Backpatch: all supported releases
      769fd9d8
    • Alvaro Herrera's avatar
      Fix two src/test/modules Makefiles · 19acee8c
      Alvaro Herrera authored
      commit_ts and test_pg_dump were declaring targets before including the
      PGXS stanza, which meant that the "all" target customarily defined as
      the first (and therefore default target) was not the default anymore.
      Fix that by moving those target definitions to after PGXS.
      
      commit_ts was initially good, but I broke it in commit 9def031b;
      test_pg_dump was born broken, probably copying from commit_ts' mistake.
      
      In passing, fix a comment mistake in test_pg_dump/Makefile.
      
      Backpatch to 9.6.
      
      Noted by Tom Lane.
      19acee8c
    • Tom Lane's avatar
      Allow pg_dump to dump non-extension members of an extension-owned schema. · df5d9bb8
      Tom Lane authored
      Previously, if a schema was created by an extension, a normal pg_dump run
      (not --binary-upgrade) would summarily skip every object in that schema.
      In a case where an extension creates a schema and then users create other
      objects within that schema, this does the wrong thing: we want pg_dump
      to skip the schema but still create the non-extension-owned objects.
      
      There's no easy way to fix this pre-9.6, because in earlier versions the
      "dump" status for a schema is just a bool and there's no way to distinguish
      "dump me" from "dump my members".  However, as of 9.6 we do have enough
      state to represent that, so this is a simple correction of the logic in
      selectDumpableNamespace.
      
      In passing, make some cosmetic fixes in nearby code.
      
      Martín Marqués, reviewed by Michael Paquier
      
      Discussion: <99581032-71de-6466-c325-069861f1947d@2ndquadrant.com>
      df5d9bb8
    • Tom Lane's avatar
      Don't print database's tablespace in pg_dump -C --no-tablespaces output. · e97e9c57
      Tom Lane authored
      If the database has a non-default tablespace, we emitted a TABLESPACE
      clause in the CREATE DATABASE command emitted by -C, even if
      --no-tablespaces was also specified.  This seems wrong, and it's
      inconsistent with what pg_dumpall does, so change it.  Per bug #14315
      from Danylo Hlynskyi.
      
      Back-patch to 9.5.  The bug is much older, but it'd be a more invasive
      change before 9.5 because dumpDatabase() hasn't got an easy way to get
      to the outputNoTablespaces flag.  Doesn't seem worth the work given
      the lack of previous complaints.
      
      Report: <20160908081953.1402.75347@wrigleys.postgresql.org>
      e97e9c57
    • Simon Riggs's avatar
      Fix minor memory leak in Standby startup · 67c6bd1c
      Simon Riggs authored
      StandbyRecoverPreparedTransactions() leaked the buffer
      used for two phase state file. This was leaked once
      at startup and at every shutdown checkpoint seen.
      
      Backpatch to 9.6
      
      Stas Kelvich
      67c6bd1c
    • Noah Misch's avatar
      MSVC: Pass any user-set MSBFLAGS to MSBuild and VCBUILD. · d299eb41
      Noah Misch authored
      This is particularly useful to pass /m, to perform a parallel build.
      
      Christian Ullrich, reviewed by Michael Paquier.
      d299eb41
    • Noah Misch's avatar
      MSVC: Place gendef.pl temporary file in the target directory. · 976a9bbd
      Noah Misch authored
      Until now, it used the current working directory.  This makes it safe
      for simultaneous invocations of gendef.pl, with different target
      directories, to run from a single current working directory, such as
      $(top_srcdir).  The MSVC build system will soon rely on this.
      
      Christian Ullrich, reviewed by Michael Paquier.
      976a9bbd
    • Bruce Momjian's avatar
      9.6 release notes: correct summary item about freeze · c9cf432e
      Bruce Momjian authored
      Previously it less precisely talked about autovacuum.
      
      Backpatch-through: 9.6
      c9cf432e
  7. 07 Sep, 2016 3 commits
    • Tom Lane's avatar
      Support renaming an existing value of an enum type. · 0ab9c56d
      Tom Lane authored
      Not much to be said about this patch: it does what it says on the tin.
      
      In passing, rename AlterEnumStmt.skipIfExists to skipIfNewValExists
      to clarify what it actually does.  In the discussion of this patch
      we considered supporting other similar options, such as IF EXISTS
      on the type as a whole or IF NOT EXISTS on the target name.  This
      patch doesn't actually add any such feature, but it might happen later.
      
      Dagfinn Ilmari Mannsåker, reviewed by Emre Hasegeli
      
      Discussion: <CAO=2mx6uvgPaPDf-rHqG8=1MZnGyVDMQeh8zS4euRyyg4D35OQ@mail.gmail.com>
      0ab9c56d
    • Tom Lane's avatar
      Doc: minor documentation improvements about extensions. · bd180b60
      Tom Lane authored
      Document the formerly-undocumented behavior that schema and comment
      control-file entries for an extension are honored only during initial
      installation, whereas other properties are also honored during updates.
      
      While at it, do some copy-editing on the recently-added docs for CREATE
      EXTENSION ... CASCADE, use links for some formerly vague cross references,
      and make a couple other minor improvements.
      
      Back-patch to 9.6 where CASCADE was added.  The other parts of this
      could go further back, but they're probably not important enough to
      bother.
      bd180b60
    • Tom Lane's avatar
      Add a HINT for client-vs-server COPY failure cases. · 4f405c8e
      Tom Lane authored
      Users often get confused between COPY and \copy and try to use client-side
      paths with COPY.  The server then cannot find the file (if remote), or sees
      a permissions problem (if local), or some variant of that.  Emit a hint
      about this in the most common cases.
      
      In future we might want to expand the set of errnos for which the hint
      gets printed, but be conservative for now.
      
      Craig Ringer, reviewed by Christoph Berg and Tom Lane
      
      Discussion: <CAMsr+YEqtD97qPEzQDqrCt5QiqPbWP_X4hmvy2pQzWC0GWiyPA@mail.gmail.com>
      4f405c8e
  8. 06 Sep, 2016 2 commits
    • Peter Eisentraut's avatar
      Add location field to DefElem · 49eb0fd0
      Peter Eisentraut authored
      Add a location field to the DefElem struct, used to parse many utility
      commands.  Update various error messages to supply error position
      information.
      
      To propogate the error position information in a more systematic way,
      create a ParseState in standard_ProcessUtility() and pass that to
      interested functions implementing the utility commands.  This seems
      better than passing the query string and then reassembling a parse state
      ad hoc, which violates the encapsulation of the ParseState type.
      Reviewed-by: default avatarPavel Stehule <pavel.stehule@gmail.com>
      49eb0fd0
    • Tom Lane's avatar
      Doc: small improvements for documentation about VACUUM freezing. · 975768f8
      Tom Lane authored
      Mostly, explain how row xmin's used to be replaced by FrozenTransactionId
      and no longer are.  Do a little copy-editing on the side.
      
      Per discussion with Egor Rogov.  Back-patch to 9.4 where the behavioral
      change occurred.
      
      Discussion: <575D7955.6060209@postgrespro.ru>
      975768f8