1. 09 Sep, 2016 2 commits
    • 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
  2. 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
  3. 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
  4. 06 Sep, 2016 7 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
    • Tom Lane's avatar
      Guard against possible memory allocation botch in batchmemtuples(). · f032722f
      Tom Lane authored
      Negative availMemLessRefund would be problematic.  It's not entirely
      clear whether the case can be hit in the code as it stands, but this
      seems like good future-proofing in any case.  While we're at it,
      insist that the value be not merely positive but not tiny, so as to
      avoid doing a lot of repalloc work for little gain.
      
      Peter Geoghegan
      
      Discussion: <CAM3SWZRVkuUB68DbAkgw=532gW0f+fofKueAMsY7hVYi68MuYQ@mail.gmail.com>
      f032722f
    • Tom Lane's avatar
      Teach appendShellString() to not quote strings containing "-". · cdc70597
      Tom Lane authored
      Brain fade in commit a00c5831: I was thinking that a string starting with
      "-" could be taken as a switch depending on command line syntax.  That's
      true, but having appendShellString() quote it will not help, so we may as
      well not do so.  Per complaint from Peter Eisentraut.
      cdc70597
    • Tom Lane's avatar
      Repair whitespace in initdb message. · a2ee579b
      Tom Lane authored
      What used to be four spaces somehow turned into a tab and a couple of
      spaces in commit a00c5831, no doubt from overhelpful emacs autoindent.
      Noted by Peter Eisentraut.
      a2ee579b
    • Simon Riggs's avatar
      Fix VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL · dcb12ce8
      Simon Riggs authored
      lazy_truncate_heap() was waiting for
      VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL, but in microseconds
      not milliseconds as originally intended.
      
      Found by code inspection.
      
      Simon Riggs
      dcb12ce8
    • Bruce Momjian's avatar
      C comment: fix file name mention on line 1 · 67e1e2aa
      Bruce Momjian authored
      Author: Amit Langote
      67e1e2aa
  5. 05 Sep, 2016 10 commits
    • Tom Lane's avatar
      Cosmetic code cleanup in commands/extension.c. · 25794e84
      Tom Lane authored
      Some of the comments added by the CREATE EXTENSION CASCADE patch were
      a bit sloppy, and I didn't care for redeclaring the same local variable
      inside a nested block either.  No functional changes.
      25794e84
    • Alvaro Herrera's avatar
      2093f663
    • Tom Lane's avatar
      Make locale-dependent regex character classes work for large char codes. · c54159d4
      Tom Lane authored
      Previously, we failed to recognize Unicode characters above U+7FF as
      being members of locale-dependent character classes such as [[:alpha:]].
      (Actually, the same problem occurs for large pg_wchar values in any
      multibyte encoding, but UTF8 is the only case people have actually
      complained about.)  It's impractical to get Spencer's original code to
      handle character classes or ranges containing many thousands of characters,
      because it insists on considering each member character individually at
      regex compile time, whether or not the character will ever be of interest
      at run time.  To fix, choose a cutoff point MAX_SIMPLE_CHR below which
      we process characters individually as before, and deal with entire ranges
      or classes as single entities above that.  We can actually make things
      cheaper than before for chars below the cutoff, because the color map can
      now be a simple linear array for those chars, rather than the multilevel
      tree structure Spencer designed.  It's more expensive than before for
      chars above the cutoff, because we must do a binary search in a list of
      high chars and char ranges used in the regex pattern, plus call iswalpha()
      and friends for each locale-dependent character class used in the pattern.
      However, multibyte encodings are normally designed to give smaller codes
      to popular characters, so that we can expect that the slow path will be
      taken relatively infrequently.  In any case, the speed penalty appears
      minor except when we have to apply iswalpha() etc. to high character codes
      at runtime --- and the previous coding gave wrong answers for those cases,
      so whether it was faster is moot.
      
      Tom Lane, reviewed by Heikki Linnakangas
      
      Discussion: <15563.1471913698@sss.pgh.pa.us>
      c54159d4
    • Bruce Momjian's avatar
      C comment: align dashes in GroupState node header · f80049f7
      Bruce Momjian authored
      Author: Jim Nasby
      f80049f7
    • Tom Lane's avatar
      Relax transactional restrictions on ALTER TYPE ... ADD VALUE. · 15bc038f
      Tom Lane authored
      To prevent possibly breaking indexes on enum columns, we must keep
      uncommitted enum values from getting stored in tables, unless we
      can be sure that any such column is new in the current transaction.
      
      Formerly, we enforced this by disallowing ALTER TYPE ... ADD VALUE
      from being executed at all in a transaction block, unless the target
      enum type had been created in the current transaction.  This patch
      removes that restriction, and instead insists that an uncommitted enum
      value can't be referenced unless it belongs to an enum type created
      in the same transaction as the value.  Per discussion, this should be
      a bit less onerous.  It does require each function that could possibly
      return a new enum value to SQL operations to check this restriction,
      but there aren't so many of those that this seems unmaintainable.
      
      Andrew Dunstan and Tom Lane
      
      Discussion: <4075.1459088427@sss.pgh.pa.us>
      15bc038f
    • Simon Riggs's avatar
      Add debug check function LWLockHeldByMeInMode() · 016abf1f
      Simon Riggs authored
      Tests whether my process holds a lock in given mode.
      Add initial usage in MarkBufferDirty().
      
      Thomas Munro
      016abf1f
    • Simon Riggs's avatar
      Document LSN acronym in WAL Internals · ec03f412
      Simon Riggs authored
      We previously didn't mention what an LSN actually was.
      
      Simon Riggs and Michael Paquier
      ec03f412
    • Simon Riggs's avatar
      Dirty replication slots when using sql interface · d851bef2
      Simon Riggs authored
      When pg_logical_slot_get_changes(...) sets confirmed_flush_lsn to the point at
      which replay stopped, it doesn't dirty the replication slot.  So if the replay
      didn't cause restart_lsn or catalog_xmin to change as well, this change will
      not get written out to disk. Even on a clean shutdown.
      
      If Pg crashes or restarts, a subsequent pg_logical_slot_get_changes(...) call
      will see the same changes already replayed since it uses the slot's
      confirmed_flush_lsn as the start point for fetching changes. The caller can't
      specify a start LSN when using the SQL interface.
      
      Mark the slot as dirty after reading changes using the SQL interface so that
      users won't see repeated changes after a clean shutdown. Repeated changes still
      occur when using the walsender interface or after an unclean shutdown.
      
      Craig Ringer
      d851bef2
    • Tom Lane's avatar
      Remove duplicate code from ReorderBufferCleanupTXN(). · b6182081
      Tom Lane authored
      Andres is apparently the only hacker who thinks this code is better as-is.
      I (tgl) follow some of his logic, but the fact that it's setting off
      warnings from static code analyzers seems like a sufficient reason to
      put the complexity into a comment rather than the code.
      
      Aleksander Alekseev
      
      Discussion: <20160404190345.54d84ee8@fujitsu>
      b6182081
    • Tom Lane's avatar
      Add regression test coverage for non-default timezone abbreviation sets. · c7f68bea
      Tom Lane authored
      After further reflection about the mess cleaned up in commit 39b691f2,
      I decided the main bit of test coverage that was still missing was to
      check that the non-default abbreviation-set files we supply are usable.
      Add that.
      
      Back-patch to supported branches, just because it seems like a good
      idea to keep this all in sync.
      c7f68bea
  6. 04 Sep, 2016 4 commits
    • Tom Lane's avatar
      Remove vestigial references to "zic" in favor of "IANA database". · da6ea70c
      Tom Lane authored
      Commit b2cbced9 instituted a policy of referring to the timezone database
      as the "IANA timezone database" in our user-facing documentation.
      Propagate that wording into a couple of places that were still using "zic"
      to refer to the database, which is definitely not right (zic is the
      compilation tool, not the data).
      
      Back-patch, not because this is very important in itself, but because
      we routinely cherry-pick updates to the tznames files and I don't want
      to risk future merge failures.
      da6ea70c
    • Tom Lane's avatar
      Update release notes to mention need for ALTER EXTENSION UPDATE. · 5a072244
      Tom Lane authored
      Maybe we ought to make pg_upgrade do this for you, but it won't happen
      in 9.6, so call out the need for it as a migration consideration.
      5a072244
    • Tom Lane's avatar
      Remove useless pg_strdup() operations. · a2d75b67
      Tom Lane authored
      split_to_stringlist() doesn't modify its first argument nor expect it
      to remain valid after exit, so there's no need to duplicate the optarg
      string at the call sites.  Per Coverity.  (This has been wrong all along,
      but commit 052cc223 changed the useless calls from "strdup" to
      "pg_strdup", which apparently made Coverity think it's a new bug.
      It's not, but it's also not worth back-patching.)
      a2d75b67
    • Heikki Linnakangas's avatar
      Clarify the new Red-Black post-order traversal code a bit. · e21db14b
      Heikki Linnakangas authored
      Coverity complained about the for(;;) loop, because it never actually
      iterated. It was used just to be able to use "break" to exit it early. I
      agree with Coverity, that's a bit confusing, so refactor the code to
      use if-else instead.
      
      While we're at it, use a local variable to hold the "current" node. That's
      shorter and clearer than referring to "iter->last_visited" all the time.
      e21db14b
  7. 03 Sep, 2016 5 commits
    • Tom Lane's avatar
      Improve readability of the output of psql's \timing command. · 6591f422
      Tom Lane authored
      In addition to the existing decimal-milliseconds output value,
      display the same value in mm:ss.fff format if it exceeds one second.
      Tack on hours and even days fields if the interval is large enough.
      This avoids needing mental arithmetic to convert the values into
      customary time units.
      
      Corey Huinker, reviewed by Gerdan Santos; bikeshedding by many
      
      Discussion: <CADkLM=dbC4R8sbbuFXQVBFWoJGQkTEW8RWnC0PbW9nZsovZpJQ@mail.gmail.com>
      6591f422
    • Tom Lane's avatar
      Fix multiple bugs in numeric_poly_deserialize(). · 600dc4c0
      Tom Lane authored
      These were evidently introduced by yesterday's commit 9cca11c9,
      which perhaps needs more review than it got.
      
      Per report from Andreas Seltenreich and additional examination
      of nearby code.
      
      Report: <87oa45qfwq.fsf@credativ.de>
      600dc4c0
    • Tom Lane's avatar
      Fix corrupt GIN_SEGMENT_ADDITEMS WAL records on big-endian hardware. · 60893786
      Tom Lane authored
      computeLeafRecompressWALData() tried to produce a uint16 WAL log field by
      memcpy'ing the first two bytes of an int-sized variable.  That accidentally
      works on little-endian hardware, but not at all on big-endian.  Replay then
      thinks it's looking at an ADDITEMS action with zero entries, and reads the
      first two bytes of the first TID therein as the next segno/action,
      typically leading to "unexpected GIN leaf action" errors during replay.
      Even if replay failed to crash, the resulting GIN index page would surely
      be incorrect.  To fix, just declare the variable as uint16 instead.
      
      Per bug #14295 from Spencer Thomason (much thanks to Spencer for turning
      his problem into a self-contained test case).  This likely also explains
      a previous report of the same symptom from Bernd Helmle.
      
      Back-patch to 9.4 where the problem was introduced (by commit 14d02f0b).
      
      Discussion: <20160826072658.15676.7628@wrigleys.postgresql.org>
      Possible-Report: <2DA7350F7296B2A142272901@eje.land.credativ.lan>
      60893786
    • Simon Riggs's avatar
      New recovery target recovery_target_lsn · 35250b6a
      Simon Riggs authored
      Michael Paquier
      35250b6a
    • Simon Riggs's avatar
      Fix wording of logical decoding concepts · 0c40ab3a
      Simon Riggs authored
      Be specific about conditions under which we emit >1 copy of message
      
      Craig Ringer
      0c40ab3a
  8. 02 Sep, 2016 1 commit
    • Tom Lane's avatar
      Don't require dynamic timezone abbreviations to match underlying time zone. · 39b691f2
      Tom Lane authored
      Previously, we threw an error if a dynamic timezone abbreviation did not
      match any abbreviation recorded in the referenced IANA time zone entry.
      That seemed like a good consistency check at the time, but it turns out
      that a number of the abbreviations in the IANA database are things that
      Olson and crew made up out of whole cloth.  Their current policy is to
      remove such names in favor of using simple numeric offsets.  Perhaps
      unsurprisingly, a lot of these made-up abbreviations have varied in meaning
      over time, which meant that our commit b2cbced9 and later changes made
      them into dynamic abbreviations.  So with newer IANA database versions
      that don't mention these abbreviations at all, we fail, as reported in bug
      #14307 from Neil Anderson.  It's worse than just a few unused-in-the-wild
      abbreviations not working, because the pg_timezone_abbrevs view stops
      working altogether (since its underlying function tries to compute the
      whole view result in one call).
      
      We considered deleting these abbreviations from our abbreviations list, but
      the problem with that is that we can't stay ahead of possible future IANA
      changes.  Instead, let's leave the abbreviations list alone, and treat any
      "orphaned" dynamic abbreviation as just meaning the referenced time zone.
      It will behave a bit differently than it used to, in that you can't any
      longer override the zone's standard vs. daylight rule by using the "wrong"
      abbreviation of a pair, but that's better than failing entirely.  (Also,
      this solution can be interpreted as adding a small new feature, which is
      that any abbreviation a user wants can be defined as referencing a time
      zone name.)
      
      Back-patch to all supported branches, since this problem affects all
      of them when using tzdata 2016f or newer.
      
      Report: <20160902031551.15674.67337@wrigleys.postgresql.org>
      Discussion: <6189.1472820913@sss.pgh.pa.us>
      39b691f2