1. 13 Mar, 2012 2 commits
  2. 12 Mar, 2012 5 commits
    • Bruce Momjian's avatar
      In pg_upgrade, add various logging improvements: · 717f6d60
      Bruce Momjian authored
      	add ability to control permissions of created files
      	have psql echo its queries for easier debugging
      	output four separate log files, and delete them on success
      	add -r/--retain option to keep log files after success
      	make logs file append-only
      	remove -g/-G/-l logging options
      	sugggest tailing appropriate log file on failure
      	enhance -v/--verbose behavior
      717f6d60
    • Tom Lane's avatar
      Fix SPGiST vacuum algorithm to handle concurrent tuple motion properly. · b4af1c25
      Tom Lane authored
      A leaf tuple that we need to delete could get moved as a consequence of an
      insertion happening concurrently with the VACUUM scan.  If it moves from a
      page past the current scan point to a page before, we'll miss it, which is
      not acceptable.  Hence, when we see a leaf-page REDIRECT that could have
      been made since our scan started, chase down the redirection pointer much
      as if we were doing a normal index search, and be sure to vacuum every page
      it leads to.  This fixes the issue because, if the tuple was on page N at
      the instant we start our scan, we will surely find it as a consequence of
      chasing the redirect from page N, no matter how much it moves around in
      between.  Problem noted by Takashi Yamamoto.
      b4af1c25
    • Peter Eisentraut's avatar
      Use correct sizeof operand in qsort call · bad250f4
      Peter Eisentraut authored
      Probably no practical impact, since all pointers ought to have the
      same size, but it was wrong nonetheless.  Found by Coverity.
      bad250f4
    • Peter Eisentraut's avatar
      Add comment for missing break in switch · c9f310d3
      Peter Eisentraut authored
      For clarity, following other sites, and to silence Coverity.
      c9f310d3
    • Bruce Momjian's avatar
      Remove tabs in SGML files · 9a395832
      Bruce Momjian authored
      9a395832
  3. 11 Mar, 2012 7 commits
    • Tom Lane's avatar
      Make INSERT/UPDATE queries depend on their specific target columns. · c6be1f43
      Tom Lane authored
      We have always created a whole-table dependency for the target relation,
      but that's not really good enough, as it doesn't prevent scenarios such
      as dropping an individual target column or altering its type.  So we
      have to create an individual dependency for each target column, as well.
      
      Per report from Bill MacArthur of a rule containing UPDATE breaking
      after such an alteration.  Note that this patch doesn't try to make
      such cases work, only to ensure that the attempted ALTER TABLE throws
      an error telling you it can't cope with adjusting the rule.
      
      This is a long-standing bug, but given the lack of prior reports
      I'm not going to risk back-patching it.  A back-patch wouldn't do
      anything to fix existing rules' dependency lists, anyway.
      c6be1f43
    • Tom Lane's avatar
      Make parameter name consistent with syntax summary. · 81421661
      Tom Lane authored
      Thomas Hunger
      81421661
    • Tom Lane's avatar
      Fix documented type of t_infomask2. · 1e496447
      Tom Lane authored
      Per Koizumi Satoru
      1e496447
    • Tom Lane's avatar
      Teach SPGiST to store nulls and do whole-index scans. · c6a11b89
      Tom Lane authored
      This patch fixes the other major compatibility-breaking limitation of
      SPGiST, that it didn't store anything for null values of the indexed
      column, and so could not support whole-index scans or "x IS NULL"
      tests.  The approach is to create a wholly separate search tree for
      the null entries, and use fixed "allTheSame" insertion and search
      rules when processing this tree, instead of calling the index opclass
      methods.  This way the opclass methods do not need to worry about
      dealing with nulls.
      
      Catversion bump is for pg_am updates as well as the change in on-disk
      format of SPGiST indexes; there are some tweaks in SPGiST WAL records
      as well.
      
      Heavily rewritten version of a patch by Oleg Bartunov and Teodor Sigaev.
      (The original also stored nulls separately, but it reused GIN code to do
      so; which required undesirable compromises in the on-disk format, and
      would likely lead to bugs due to the GIN code being required to work in
      two very different contexts.)
      c6a11b89
    • Michael Meskes's avatar
      Removed redundant "the" from ecpg's docs. · fc227a4e
      Michael Meskes authored
      Typo spotted by Erik Rijkers.
      fc227a4e
    • Tatsuo Ishii's avatar
      da9e73a1
    • Peter Eisentraut's avatar
      Add more detail to error message for invalid arguments for server process · 86947e66
      Peter Eisentraut authored
      It now prints the argument that was at fault.
      
      Also fix a small misbehavior where the error message issued by
      getopt() would complain about a program named "--single", because
      that's what argv[0] is in the server process.
      86947e66
  4. 10 Mar, 2012 2 commits
    • Tom Lane's avatar
      Restructure SPGiST opclass interface API to support whole-index scans. · 03e56f79
      Tom Lane authored
      The original API definition was incapable of supporting whole-index scans
      because there was no way to invoke leaf-value reconstruction without
      checking any qual conditions.  Also, it was inefficient for
      multiple-qual-condition scans because value reconstruction got done over
      again for each qual condition, and because other internal work in the
      consistent functions likewise had to be done for each qual.  To fix these
      issues, pass the whole scankey array to the opclass consistent functions,
      instead of only letting them see one item at a time.  (Essentially, the
      loop over scankey entries is now inside the consistent functions not
      outside them.  This makes the consistent functions a bit more complicated,
      but not unreasonably so.)
      
      In itself this commit does nothing except save a few cycles in
      multiple-qual-condition index scans, since we can't support whole-index
      scans on SPGiST indexes until nulls are included in the index.  However,
      I consider this a must-fix for 9.2 because once we release it will get
      very much harder to change the opclass API definition.
      03e56f79
    • Peter Eisentraut's avatar
      Add support for renaming constraints · 39d74e34
      Peter Eisentraut authored
      reviewed by Josh Berkus and Dimitri Fontaine
      39d74e34
  5. 09 Mar, 2012 4 commits
    • Robert Haas's avatar
      sepgsql DROP support. · e914a144
      Robert Haas authored
      KaiGai Kohei
      e914a144
    • Robert Haas's avatar
      Extend object access hook framework to support arguments, and DROP. · 07d1edb9
      Robert Haas authored
      This allows loadable modules to get control at drop time, perhaps for the
      purpose of performing additional security checks or to log the event.
      The initial purpose of this code is to support sepgsql, but other
      applications should be possible as well.
      
      KaiGai Kohei, reviewed by me.
      07d1edb9
    • Tom Lane's avatar
      Revise FDW planning API, again. · b1495393
      Tom Lane authored
      Further reflection shows that a single callback isn't very workable if we
      desire to let FDWs generate multiple Paths, because that forces the FDW to
      do all work necessary to generate a valid Plan node for each Path.  Instead
      split the former PlanForeignScan API into three steps: GetForeignRelSize,
      GetForeignPaths, GetForeignPlan.  We had already bit the bullet of breaking
      the 9.1 FDW API for 9.2, so this shouldn't cause very much additional pain,
      and it's substantially more flexible for complex FDWs.
      
      Add an fdw_private field to RelOptInfo so that the new functions can save
      state there rather than possibly having to recalculate information two or
      three times.
      
      In addition, we'd not thought through what would be needed to allow an FDW
      to set up subexpressions of its choice for runtime execution.  We could
      treat ForeignScan.fdw_private as an executable expression but that seems
      likely to break existing FDWs unnecessarily (in particular, it would
      restrict the set of node types allowable in fdw_private to those supported
      by expression_tree_walker).  Instead, invent a separate field fdw_exprs
      which will receive the postprocessing appropriate for expression trees.
      (One field is enough since it can be a list of expressions; also, we assume
      the corresponding expression state tree(s) will be held within fdw_state,
      so we don't need to add anything to ForeignScanState.)
      
      Per review of Hanada Shigeru's pgsql_fdw patch.  We may need to tweak this
      further as we continue to work on that patch, but to me it feels a lot
      closer to being right now.
      b1495393
    • Heikki Linnakangas's avatar
  6. 08 Mar, 2012 7 commits
    • Peter Eisentraut's avatar
      psql: Remove useless code · 410ee35e
      Peter Eisentraut authored
      Apparently a copy-and-paste mistake introduced in
      8ddd22f2.
      
      found by Coverity
      410ee35e
    • Tom Lane's avatar
      Fix some issues with temp/transient tables in extension scripts. · 08dd23ce
      Tom Lane authored
      Phil Sorber reported that a rewriting ALTER TABLE within an extension
      update script failed, because it creates and then drops a placeholder
      table; the drop was being disallowed because the table was marked as an
      extension member.  We could hack that specific case but it seems likely
      that there might be related cases now or in the future, so the most
      practical solution seems to be to create an exception to the general rule
      that extension member objects can only be dropped by dropping the owning
      extension.  To wit: if the DROP is issued within the extension's own
      creation or update scripts, we'll allow it, implicitly performing an
      "ALTER EXTENSION DROP object" first.  This will simplify cases such as
      extension downgrade scripts anyway.
      
      No docs change since we don't seem to have documented the idea that you
      would need ALTER EXTENSION DROP for such an action to begin with.
      
      Also, arrange for explicitly temporary tables to not get linked as
      extension members in the first place, and the same for the magic
      pg_temp_nnn schemas that are created to hold them.  This prevents assorted
      unpleasant results if an extension script creates a temp table: the forced
      drop at session end would either fail or remove the entire extension, and
      neither of those outcomes is desirable.  Note that this doesn't fix the
      ALTER TABLE scenario, since the placeholder table is not temp (unless the
      table being rewritten is).
      
      Back-patch to 9.1.
      08dd23ce
    • Peter Eisentraut's avatar
      ecpg: Fix off-by-one error in memory copying · c5e073ca
      Peter Eisentraut authored
      In a rare case, one byte past the end of memory belonging to the
      sqlca_t structure would be written to.
      
      found by Coverity
      c5e073ca
    • Peter Eisentraut's avatar
      ecpg: Fix rare memory leaks · 8dd4d10d
      Peter Eisentraut authored
      found by Coverity
      8dd4d10d
    • Heikki Linnakangas's avatar
    • Tom Lane's avatar
      Improve estimation of IN/NOT IN by assuming array elements are distinct. · 66a7e6ba
      Tom Lane authored
      In constructs such as "x IN (1,2,3,4)" and "x <> ALL(ARRAY[1,2,3,4])",
      we formerly always used a general-purpose assumption that the probability
      of success is independent for each comparison of "x" to an array element.
      But in real-world usage of these constructs, that's a pretty poor
      assumption; it's much saner to assume that the array elements are distinct
      and so the match probabilities are disjoint.  Apply that assumption if the
      operator appears to behave as equality (for ANY) or inequality (for ALL).
      But fall back to the normal independent-probabilities calculation if this
      yields an impossible result, ie probability > 1 or < 0.  We could protect
      ourselves against bad estimates even more by explicitly checking for equal
      array elements, but that is expensive and doesn't seem worthwhile: doing
      it would amount to optimizing for poorly-written queries at the expense
      of well-written ones.
      
      Daniele Varrazzo and Tom Lane, after a suggestion by Ants Aasma
      66a7e6ba
    • Tom Lane's avatar
      Fix indentation of \d footers for non-ASCII cases. · 1ed7f0e6
      Tom Lane authored
      Multi-line "Inherits:" and "Child tables:" footers were misindented when
      those strings' translations involved multibyte characters, because we were
      using strlen() instead of an appropriate display width measurement.
      
      In passing, avoid doing gettext() more than once per loop in these places.
      
      While at it, fix pg_wcswidth(), which has been entirely broken since about
      8.2, but fortunately has been unused for the same length of time.
      
      Report and patch by Sergey Burladyan (bug #6480)
      1ed7f0e6
  7. 07 Mar, 2012 6 commits
    • Tom Lane's avatar
      Add GetForeignColumnOptions() to foreign.c, and add some documentation. · 9088d1b9
      Tom Lane authored
      GetForeignColumnOptions provides some abstraction for accessing
      column-specific FDW options, on a par with the access functions that were
      already provided here for other FDW-related information.
      
      Adjust file_fdw.c to use GetForeignColumnOptions instead of equivalent
      hand-rolled code.
      
      In addition, add some SGML documentation for the functions exported by
      foreign.c that are meant for use by FDW authors.
      
      (This is the fdw_helper portion of the proposed pgsql_fdw patch.)
      
      Hanada Shigeru, reviewed by KaiGai Kohei
      9088d1b9
    • Robert Haas's avatar
      psql: Avoid some spurious output if the server croaks. · cf7026b6
      Robert Haas authored
      Fixes a regression in commit 08146775.
      
      Noah Misch
      cf7026b6
    • Peter Eisentraut's avatar
      psql: Fix memory leak · 16731221
      Peter Eisentraut authored
      In expanded auto mode, a lot of allocated memory was not cleaned up.
      
      found by Coverity
      16731221
    • Peter Eisentraut's avatar
      psql: Fix invalid memory access · 561ec761
      Peter Eisentraut authored
      Due to an apparent thinko, when printing a table in expanded mode
      (\x), space would be allocated for 1 slot plus 1 byte per line,
      instead of 1 slot per line plus 1 slot for the NULL terminator.  When
      the line count is small, reading or writing the terminator would
      therefore access memory beyond what was allocated.
      561ec761
    • Peter Eisentraut's avatar
      libpq: Fix memory leak · f9325df0
      Peter Eisentraut authored
      If a client encoding is specified as a connection parameter (or
      environment variable), internal storage allocated for it would never
      be freed.
      f9325df0
    • Tom Lane's avatar
      Expose an API for calculating catcache hash values. · d4bf3c9c
      Tom Lane authored
      Now that cache invalidation callbacks get only a hash value, and not a
      tuple TID (per commits 632ae682 and
      b5282aa8), the only way they can restrict
      what they invalidate is to know what the hash values mean.  setrefs.c was
      doing this via a hard-wired assumption but that seems pretty grotty, and
      it'll only get worse as more cases come up.  So let's expose a calculation
      function that takes the same parameters as SearchSysCache.  Per complaint
      from Marko Kreen.
      d4bf3c9c
  8. 06 Mar, 2012 7 commits
    • Peter Eisentraut's avatar
    • Tom Lane's avatar
      Add a hook for processing messages due to be sent to the server log. · 19dbc346
      Tom Lane authored
      Use-cases for this include custom log filtering rules and custom log
      message transmission mechanisms (for instance, lossy log message
      collection, which has been discussed several times recently).
      
      As is our common practice for hooks, there's no regression test nor
      user-facing documentation for this, though the author did exhibit a
      sample module using the hook.
      
      Martin Pihlak, reviewed by Marti Raudsepp
      19dbc346
    • Robert Haas's avatar
      Typo fix. · bc97c381
      Robert Haas authored
      Fujii Masao
      bc97c381
    • Heikki Linnakangas's avatar
      Make the comments more clear on the fact that UpdateFullPageWrites() is not · e587e2e3
      Heikki Linnakangas authored
      safe to call concurrently from multiple processes.
      e587e2e3
    • Heikki Linnakangas's avatar
      Remove extra copies of LogwrtResult. · 7714c638
      Heikki Linnakangas authored
      This simplifies the code a little bit. The new rule is that to update
      XLogCtl->LogwrtResult, you must hold both WALWriteLock and info_lck, whereas
      before we had two copies, one that was protected by WALWriteLock and another
      protected by info_lck. The code that updates them was already holding both
      locks, so merging the two is trivial.
      
      The third copy, XLogCtl->Insert.LogwrtResult, was not totally redundant, it
      was used in AdvanceXLInsertBuffer to update the backend-local copy, before
      acquiring the info_lck to read the up-to-date value. But the value of that
      seems dubious; at best it's saving one spinlock acquisition per completed
      WAL page, which is not significant compared to all the other work involved.
      And in practice, it's probably not saving even that much.
      7714c638
    • Heikki Linnakangas's avatar
      Simplify the way changes to full_page_writes are logged. · 3b682df3
      Heikki Linnakangas authored
      It's harmless to do full page writes even when not strictly necessary, so
      when turning full_page_writes on, we can set the global flag first, and then
      call XLogInsert. Likewise, when turning it off, we can write the WAL record
      first, and then clear the flag. This way XLogInsert doesn't need any special
      handling of the XLOG_FPW_CHANGE record type. XLogInsert is complicated
      enough already, so anything we can keep away from there is a good thing.
      
      Actually I don't think the atomicity of the shared memory flag matters,
      anyway, because we only write the XLOG_FPW_CHANGE at the end of recovery,
      when there are no concurrent WAL insertions going on. But might as well make
      it safe, in case we allow changing full_page_writes on the fly in the
      future.
      3b682df3
    • Bruce Momjian's avatar
      In pg_upgrade, only lock the old cluster if link mode is used, and do it · 2127aac6
      Bruce Momjian authored
      right after we restore the schema (a common failure point), and right
      before we do the link operation.
      
      Per suggesgtions from Robert and ^!C^!^@lvaro
      2127aac6