1. 12 Nov, 2014 3 commits
  2. 11 Nov, 2014 6 commits
    • Robert Haas's avatar
      Remove incorrect comment. · f1abd78b
      Robert Haas authored
      This was introduced by commit 5ea86e6e.
      
      Peter Geoghegan
      f1abd78b
    • Tom Lane's avatar
      Loop when necessary in contrib/pgcrypto's pktreader_pull(). · f2ad2bdd
      Tom Lane authored
      This fixes a scenario in which pgp_sym_decrypt() failed with "Wrong key
      or corrupt data" on messages whose length is 6 less than a power of 2.
      
      Per bug #11905 from Connor Penhale.  Fix by Marko Tiikkaja, regression
      test case from Jeff Janes.
      f2ad2bdd
    • Tom Lane's avatar
      Fix dependency searching for case where column is visited before table. · 2edfc021
      Tom Lane authored
      When the recursive search in dependency.c visits a column and then later
      visits the whole table containing the column, it needs to propagate the
      drop-context flags for the table to the existing target-object entry for
      the column.  Otherwise we might refuse the DROP (if not CASCADE) on the
      incorrect grounds that there was no automatic drop pathway to the column.
      Remarkably, this has not been reported before, though it's possible at
      least when an extension creates both a datatype and a table using that
      datatype.
      
      Rather than just marking the column as allowed to be dropped, it might
      seem good to skip the DROP COLUMN step altogether, since the later DROP
      of the table will surely get the job done.  The problem with that is that
      the datatype would then be dropped before the table (since the whole
      situation occurred because we visited the datatype, and then recursed to
      the dependent column, before visiting the table).  That seems pretty risky,
      and the case is rare enough that it doesn't seem worth expending a lot of
      effort or risk to make the drops happen in a safe order.  So we just play
      dumb and delete the column separately according to the existing drop
      ordering rules.
      
      Per report from Petr Jelinek, though this is different from his proposed
      patch.
      
      Back-patch to 9.1, where extensions were introduced.  There's currently
      no evidence that such cases can arise before 9.1, and in any case we would
      also need to back-patch cb5c2ba2 to 9.0
      if we wanted to back-patch this.
      2edfc021
    • Fujii Masao's avatar
      Add generate_series(numeric, numeric). · 1871c892
      Fujii Masao authored
      Платон Малюгин
      Reviewed by Michael Paquier, Ali Akbar and Marti Raudsepp
      1871c892
    • Fujii Masao's avatar
      Add GUC and storage parameter to set the maximum size of GIN pending list. · a1b395b6
      Fujii Masao authored
      Previously the maximum size of GIN pending list was controlled only by
      work_mem. But the reasonable value of work_mem and the reasonable size
      of the list are basically not the same, so it was not appropriate to
      control both of them by only one GUC, i.e., work_mem. This commit
      separates new GUC, pending_list_cleanup_size, from work_mem to allow
      users to control only the size of the list.
      
      Also this commit adds pending_list_cleanup_size as new storage parameter
      to allow users to specify the size of the list per index. This is useful,
      for example, when users want to increase the size of the list only for
      the GIN index which can be updated heavily, and decrease it otherwise.
      
      Reviewed by Etsuro Fujita.
      a1b395b6
    • Heikki Linnakangas's avatar
      Really fix compilation failure on MIPS. · ae667f77
      Heikki Linnakangas authored
      I missed an additional colon in previous patch. Oops. to make that mistake
      less likely in the future, add comments as placeholders for unused inputs
      and outputs in inline assembly.
      ae667f77
  3. 10 Nov, 2014 8 commits
    • Heikki Linnakangas's avatar
      Fix compilation failure on MIPS. · baf7b3a5
      Heikki Linnakangas authored
      Rémi Zara
      baf7b3a5
    • Alvaro Herrera's avatar
      BRIN: fix bug in xlog backup block counting · a590f266
      Alvaro Herrera authored
      The code that generates the BRIN_XLOG_UPDATE removes the buffer
      reference when the page that's target for the updated tuple is freshly
      initialized.  This is a pretty usual optimization, but was breaking the
      case where the revmap buffer, which is referenced in the same WAL
      record, is getting a backup block: the replay code was using backup
      block index 1, which is not valid when the update target buffer gets
      pruned; the revmap buffer gets assigned 0 instead.  Make sure to use the
      correct backup block index for revmap when replaying.
      
      Bug reported by Fujii Masao.
      a590f266
    • Robert Haas's avatar
      Fix potential NULL-pointer dereference. · c8df9477
      Robert Haas authored
      Commit 2781b4be arranged to defer
      the setup of after-trigger-related data structures, but
      AfterTriggerPendingOnRel didn't get the memo.
      c8df9477
    • Tom Lane's avatar
      Ensure that RowExprs and whole-row Vars produce the expected column names. · bf7ca158
      Tom Lane authored
      At one time it wasn't terribly important what column names were associated
      with the fields of a composite Datum, but since the introduction of
      operations like row_to_json(), it's important that looking up the rowtype
      ID embedded in the Datum returns the column names that users would expect.
      That did not work terribly well before this patch: you could get the column
      names of the underlying table, or column aliases from any level of the
      query, depending on minor details of the plan tree.  You could even get
      totally empty field names, which is disastrous for cases like row_to_json().
      
      To fix this for whole-row Vars, look to the RTE referenced by the Var, and
      make sure its column aliases are applied to the rowtype associated with
      the result Datums.  This is a tad scary because we might have to return
      a transient RECORD type even though the Var is declared as having some
      named rowtype.  In principle it should be all right because the record
      type will still be physically compatible with the named rowtype; but
      I had to weaken one Assert in ExecEvalConvertRowtype, and there might be
      third-party code containing similar assumptions.
      
      Similarly, RowExprs have to be willing to override the column names coming
      from a named composite result type and produce a RECORD when the column
      aliases visible at the site of the RowExpr differ from the underlying
      table's column names.
      
      In passing, revert the decision made in commit 398f70ec to add
      an alias-list argument to ExecTypeFromExprList: better to provide that
      functionality in a separate function.  This also reverts most of the code
      changes in d6858148, which we don't need because we're no longer
      depending on the tupdesc found in the child plan node's result slot to be
      blessed.
      
      Back-patch to 9.4, but not earlier, since this solution changes the results
      in some cases that users might not have realized were buggy.  We'll apply a
      more restricted form of this patch in older branches.
      bf7ca158
    • Alvaro Herrera's avatar
      Further code and wording tweaks in BRIN · 1e0b4365
      Alvaro Herrera authored
      Besides a couple of typo fixes, per David Rowley, Thom Brown, and Amit
      Langote, and mentions of BRIN in the general CREATE INDEX page again per
      David, this includes silencing MSVC compiler warnings (thanks Microsoft)
      and an additional variable initialization per Coverity scanner.
      1e0b4365
    • Kevin Grittner's avatar
      Fix compiler warning for non-assert builds. · 96a73fcd
      Kevin Grittner authored
      Reported by Peter Geoghegan
      David Rowley
      96a73fcd
    • Robert Haas's avatar
      Tab complete second argument to \c with role names. · 095d4012
      Robert Haas authored
      Ian Barwick
      095d4012
    • Bruce Momjian's avatar
      C comment: mention 1500-02-29 as an invalid date · 67067f9a
      Bruce Momjian authored
      It is invalid because the Gregorian calendar is used for all years.
      67067f9a
  4. 08 Nov, 2014 3 commits
    • Alvaro Herrera's avatar
      Fix some coding issues in BRIN · b89ee54e
      Alvaro Herrera authored
      Reported by David Rowley: variadic macros are a problem.  Get rid of
      them using a trick suggested by Tom Lane: add extra parentheses where
      needed.  In the future we might decide we don't need the calls at all
      and remove them, but it seems appropriate to keep them while this code
      is still new.
      
      Also from David Rowley: brininsert() was trying to use a variable before
      initializing it.  Fix by moving the brin_form_tuple call (which
      initializes the variable) to within the locked section.
      
      Reported by Peter Eisentraut: can't use "new" as a struct member name,
      because C++ compilers will choke on it, as reported by cpluspluscheck.
      b89ee54e
    • Peter Eisentraut's avatar
      pg_basebackup: Adjust tests for long file name issues · 926f5cea
      Peter Eisentraut authored
      Work around accidental test failures because the working directory path
      is too long by creating a temporary directory in the (hopefully shorter)
      system location, symlinking that to the working directory, and creating
      the tablespaces using the shorter path.
      926f5cea
    • Peter Eisentraut's avatar
      doc: Update pg_receivexlog note · 552faefd
      Peter Eisentraut authored
      The old note about how to use pg_receivexlog as an alternative to
      archive_command was obsoleted by replication slots.
      552faefd
  5. 07 Nov, 2014 9 commits
    • Robert Haas's avatar
      Introduce custom path and scan providers. · 0b03e595
      Robert Haas authored
      This allows extension modules to define their own methods for
      scanning a relation, and get the core code to use them.  It's
      unclear as yet how much use this capability will find, but we
      won't find out if we never commit it.
      
      KaiGai Kohei, reviewed at various times and in various levels
      of detail by Shigeru Hanada, Tom Lane, Andres Freund, Álvaro
      Herrera, and myself.
      0b03e595
    • Heikki Linnakangas's avatar
      Fix building with WAL_DEBUG. · 7250d853
      Heikki Linnakangas authored
      Now that the backup blocks are appended to the WAL record in xloginsert.c,
      XLogInsert doesn't see them anymore and cannot remove them from the version
      reconstructed for xlog_outdesc. This makes running with wal_debug=on more
      expensive, as we now make (unnecessary) temporary copies of the backup
      blocks, but it doesn't seem worth convoluting the code to keep that
      optimization.
      
      Reported by Alvaro Herrera.
      7250d853
    • Robert Haas's avatar
      Use the sortsupport infrastructure in more cases. · 5ea86e6e
      Robert Haas authored
      This removes some fmgr overhead from cases such as btree index builds.
      
      Peter Geoghegan, reviewed by Andreas Karlsson and me.
      5ea86e6e
    • Robert Haas's avatar
      99e8f08f
    • Alvaro Herrera's avatar
      Fix serial schedule · 0e892e04
      Alvaro Herrera authored
      Test misc depends on brin, but it was earlier in the serial schedule
      file.  I didn't notice this because I only run the parallel schedule,
      but the buildfarm exposed my folly ...
      0e892e04
    • Alvaro Herrera's avatar
      BRIN: Block Range Indexes · 7516f525
      Alvaro Herrera authored
      BRIN is a new index access method intended to accelerate scans of very
      large tables, without the maintenance overhead of btrees or other
      traditional indexes.  They work by maintaining "summary" data about
      block ranges.  Bitmap index scans work by reading each summary tuple and
      comparing them with the query quals; all pages in the range are returned
      in a lossy TID bitmap if the quals are consistent with the values in the
      summary tuple, otherwise not.  Normal index scans are not supported
      because these indexes do not store TIDs.
      
      As new tuples are added into the index, the summary information is
      updated (if the block range in which the tuple is added is already
      summarized) or not; in the latter case, a subsequent pass of VACUUM or
      the brin_summarize_new_values() function will create the summary
      information.
      
      For data types with natural 1-D sort orders, the summary info consists
      of the maximum and the minimum values of each indexed column within each
      page range.  This type of operator class we call "Minmax", and we
      supply a bunch of them for most data types with B-tree opclasses.
      Since the BRIN code is generalized, other approaches are possible for
      things such as arrays, geometric types, ranges, etc; even for things
      such as enum types we could do something different than minmax with
      better results.  In this commit I only include minmax.
      
      Catalog version bumped due to new builtin catalog entries.
      
      There's more that could be done here, but this is a good step forwards.
      
      Loosely based on ideas from Simon Riggs; code mostly by Álvaro Herrera,
      with contribution by Heikki Linnakangas.
      
      Patch reviewed by: Amit Kapila, Heikki Linnakangas, Robert Haas.
      Testing help from Jeff Janes, Erik Rijkers, Emanuel Calvo.
      
      PS:
        The research leading to these results has received funding from the
        European Union's Seventh Framework Programme (FP7/2007-2013) under
        grant agreement n° 318633.
      7516f525
    • Heikki Linnakangas's avatar
      Fix generation of SP-GiST vacuum WAL records. · 1961b1c1
      Heikki Linnakangas authored
      I broke these in 8776faa8. Backpatch to
      9.4, where that was done.
      1961b1c1
    • Heikki Linnakangas's avatar
      Remove obsolete cases from GiST update redo code. · 2effb72e
      Heikki Linnakangas authored
      The code that generated a record to clear the F_TUPLES_DELETED flag hasn't
      existed since we got rid of old-style VACUUM FULL. I kept the code that sets
      the flag, although it's not used for anything anymore, because it might
      still be interesting information for debugging purposes that some tuples
      have been deleted from a page.
      
      Likewise, the code to turn the root page from non-leaf to leaf page was
      removed when we got rid of old-style VACUUM FULL. Remove the code to replay
      that action, too.
      2effb72e
    • Tom Lane's avatar
      Cope with more than 64K phrases in a thesaurus dictionary. · d6e37b35
      Tom Lane authored
      dict_thesaurus stored phrase IDs in uint16 fields, so it would get confused
      and even crash if there were more than 64K entries in the configuration
      file.  It turns out to be basically free to widen the phrase IDs to uint32,
      so let's just do so.
      
      This was complained of some time ago by David Boutin (in bug #7793);
      he later submitted an informal patch but it was never acted on.
      We now have another complaint (bug #11901 from Luc Ouellette) so it's
      time to make something happen.
      
      This is basically Boutin's patch, but for future-proofing I also added a
      defense against too many words per phrase.  Note that we don't need any
      explicit defense against overflow of the uint32 counters, since before that
      happens we'd hit array allocation sizes that repalloc rejects.
      
      Back-patch to all supported branches because of the crash risk.
      d6e37b35
  6. 06 Nov, 2014 7 commits
    • Tom Lane's avatar
      Fix normalization of numeric values in JSONB GIN indexes. · 48759319
      Tom Lane authored
      The default JSONB GIN opclass (jsonb_ops) converts numeric data values
      to strings for storage in the index.  It must ensure that numeric values
      that would compare equal (such as 12 and 12.00) produce identical strings,
      else index searches would have behavior different from regular JSONB
      comparisons.  Unfortunately the function charged with doing this was
      completely wrong: it could reduce distinct numeric values to the same
      string, or reduce equivalent numeric values to different strings.  The
      former type of error would only lead to search inefficiency, but the
      latter type of error would cause index entries that should be found by
      a search to not be found.
      
      Repairing this bug therefore means that it will be necessary for 9.4 beta
      testers to reindex GIN jsonb_ops indexes, if they care about getting
      correct results from index searches involving numeric data values within
      the comparison JSONB object.
      
      Per report from Thomas Fanghaenel.
      48759319
    • Fujii Masao's avatar
      Prevent the unnecessary creation of .ready file for the timeline history file. · 5332b8ce
      Fujii Masao authored
      Previously .ready file was created for the timeline history file at the end
      of an archive recovery even when WAL archiving was not enabled.
      This creation is unnecessary and causes .ready file to remain infinitely.
      
      This commit changes an archive recovery so that it creates .ready file for
      the timeline history file only when WAL archiving is enabled.
      
      Backpatch to all supported versions.
      5332b8ce
    • Heikki Linnakangas's avatar
      Move the backup-block logic from XLogInsert to a new file, xloginsert.c. · 2076db2a
      Heikki Linnakangas authored
      xlog.c is huge, this makes it a little bit smaller, which is nice. Functions
      related to putting together the WAL record are in xloginsert.c, and the
      lower level stuff for managing WAL buffers and such are in xlog.c.
      
      Also move the definition of XLogRecord to a separate header file. This
      causes churn in the #includes of all the files that write WAL records, and
      redo routines, but it avoids pulling in xlog.h into most places.
      
      Reviewed by Michael Paquier, Alvaro Herrera, Andres Freund and Amit Kapila.
      2076db2a
    • Fujii Masao's avatar
      Fix typo in comment. · d2b8a2c7
      Fujii Masao authored
      Etsuro Fujita
      d2b8a2c7
    • Fujii Masao's avatar
      Implement IF NOT EXIST for CREATE INDEX. · 08309aaf
      Fujii Masao authored
      Fabrízio de Royes Mello, reviewed by Marti Raudsepp, Adam Brightwell and me.
      08309aaf
    • Bruce Momjian's avatar
    • Tom Lane's avatar
      Remove the last vestige of server-side autocommit. · 525a4899
      Tom Lane authored
      Long ago we briefly had an "autocommit" GUC that turned server-side
      autocommit on and off.  That behavior was removed in 7.4 after concluding
      that it broke far too much client-side logic, and making clients cope with
      both behaviors was impractical.  But the GUC variable was left behind, so
      as not to break any client code that might be trying to read its value.
      Enough time has now passed that we should remove the GUC completely.
      Whatever vestigial backwards-compatibility benefit it had is outweighed by
      the risk of confusion for newbies who assume it ought to do something,
      as per a recent complaint from Wolfgang Wilhelm.
      
      In passing, adjust what seemed to me a rather confusing documentation
      reference to libpq's autocommit behavior.  libpq as such knows nothing
      about autocommit, so psql is probably what was meant.
      525a4899
  7. 05 Nov, 2014 3 commits
    • Robert Haas's avatar
      Fix thinko in commit 2bd9e412. · c30be978
      Robert Haas authored
      Obviously, every translation unit should not be declaring this
      separately.  It needs to be PGDLLIMPORT as well, to avoid breaking
      third-party code that uses any of the functions that the commit
      mentioned above changed to macros.
      c30be978
    • Tom Lane's avatar
      Make CREATE TYPE print warnings if a datatype's I/O functions are volatile. · 465d7e18
      Tom Lane authored
      This is a followup to commit 43ac12c6,
      which added regression tests checking that I/O functions of built-in
      types are not marked volatile.  Complaining in CREATE TYPE should push
      developers of add-on types to fix any misdeclared functions in their
      types.  It's just a warning not an error, to avoid creating upgrade
      problems for what might be just cosmetic mis-markings.
      
      Aside from adding the warning code, fix a number of types that were
      sloppily created in the regression tests.
      465d7e18
    • Tom Lane's avatar
      Fix volatility markings of some contrib I/O functions. · 66c029c8
      Tom Lane authored
      In general, datatype I/O functions are supposed to be immutable or at
      worst stable.  Some contrib I/O functions were, through oversight, not
      marked with any volatility property at all, which made them VOLATILE.
      Since (most of) these functions actually behave immutably, the erroneous
      marking isn't terribly harmful; but it can be user-visible in certain
      circumstances, as per a recent bug report from Joe Van Dyk in which a
      cast to text was disallowed in an expression index definition.
      
      To fix, just adjust the declarations in the extension SQL scripts.  If we
      were being very fussy about this, we'd bump the extension version numbers,
      but that seems like more trouble (for both developers and users) than the
      problem is worth.
      
      A fly in the ointment is that chkpass_in actually is volatile, because
      of its use of random() to generate a fresh salt when presented with a
      not-yet-encrypted password.  This is bad because of the general assumption
      that I/O functions aren't volatile: the consequence is that records or
      arrays containing chkpass elements may have input behavior a bit different
      from a bare chkpass column.  But there seems no way to fix this without
      breaking existing usage patterns for chkpass, and the consequences of the
      inconsistency don't seem bad enough to justify that.  So for the moment,
      just document it in a comment.
      
      Since we're not bumping version numbers, there seems no harm in
      back-patching these fixes; at least future installations will get the
      functions marked correctly.
      66c029c8
  8. 04 Nov, 2014 1 commit