1. 07 Mar, 2012 3 commits
    • 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
  2. 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
  3. 05 Mar, 2012 4 commits
    • Tom Lane's avatar
      Redesign PlanForeignScan API to allow multiple paths for a foreign table. · 6b289942
      Tom Lane authored
      The original API specification only allowed an FDW to create a single
      access path, which doesn't seem like a terribly good idea in hindsight.
      Instead, move the responsibility for building the Path node and calling
      add_path() into the FDW's PlanForeignScan function.  Now, it can do that
      more than once if appropriate.  There is no longer any need for the
      transient FdwPlan struct, so get rid of that.
      
      Etsuro Fujita, Shigeru Hanada, Tom Lane
      6b289942
    • Tom Lane's avatar
      Improve documentation around logging_collector and use of stderr. · 3f47e145
      Tom Lane authored
      In backup.sgml, point out that you need to be using the logging collector
      if you want to log messages from a failing archive_command script.  (This
      is an oversimplification, in that it will work without the collector as
      long as you're not sending postmaster stderr to /dev/null; but it seems
      like a good idea to encourage use of the collector to avoid problems
      with multiple processes concurrently scribbling on one file.)
      
      In config.sgml, do some wordsmithing of logging_collector discussion.
      
      Per bug #6518 from Janning Vygen
      3f47e145
    • Peter Eisentraut's avatar
    • Tom Lane's avatar
      Rewrite GiST support code for rangetypes. · 80da9e68
      Tom Lane authored
      This patch installs significantly smarter penalty and picksplit functions
      for ranges, making GiST indexes for them smaller and faster to search.
      
      There is no on-disk format change, so no catversion bump, but you'd need
      to REINDEX to get the benefits for any existing index.
      
      Alexander Korotkov, reviewed by Jeff Davis
      80da9e68
  4. 04 Mar, 2012 5 commits
    • Tom Lane's avatar
      Remove useless "rough estimate" path from mcelem_array_contained_selec. · e2eed789
      Tom Lane authored
      The code in this function that tried to cope with a missing count histogram
      was quite ineffective for anything except a perfectly flat distribution.
      Furthermore, since we were already punting for missing MCELEM slot, it's
      rather useless to sweat over missing DECHIST: there are no cases where
      ANALYZE will create the first but not the second.  So just simplify the
      code by punting rather than pretending we can do something useful.
      e2eed789
    • Tom Lane's avatar
      Improve histogram-filling loop in new compute_array_stats() code. · 4fb694ae
      Tom Lane authored
      Do "frac" arithmetic in int64 to prevent overflow with large statistics
      targets, and improve the comments so people have some chance of
      understanding how it works.
      
      Alexander Korotkov and Tom Lane
      4fb694ae
    • Magnus Hagander's avatar
      More carefully validate xlog location string inputs · 141b8982
      Magnus Hagander authored
      Now that we have validate_xlog_location, call it from the previously
      existing functions taking xlog locatoins as a string input.
      
      Suggested by Fujii Masao
      141b8982
    • Magnus Hagander's avatar
      Add function pg_xlog_location_diff to help comparisons · bc5ac368
      Magnus Hagander authored
      Comparing two xlog locations are useful for example when calculating
      replication lag.
      
      Euler Taveira de Oliveira, reviewed by Fujii Masao, and some cleanups
      from me
      bc5ac368
    • Tom Lane's avatar
      Collect and use element-frequency statistics for arrays. · 0e5e167a
      Tom Lane authored
      This patch improves selectivity estimation for the array <@, &&, and @>
      (containment and overlaps) operators.  It enables collection of statistics
      about individual array element values by ANALYZE, and introduces
      operator-specific estimators that use these stats.  In addition,
      ScalarArrayOpExpr constructs of the forms "const = ANY/ALL (array_column)"
      and "const <> ANY/ALL (array_column)" are estimated by treating them as
      variants of the containment operators.
      
      Since we still collect scalar-style stats about the array values as a
      whole, the pg_stats view is expanded to show both these stats and the
      array-style stats in separate columns.  This creates an incompatible change
      in how stats for tsvector columns are displayed in pg_stats: the stats
      about lexemes are now displayed in the array-related columns instead of the
      original scalar-related columns.
      
      There are a few loose ends here, notably that it'd be nice to be able to
      suppress either the scalar-style stats or the array-element stats for
      columns for which they're not useful.  But the patch is in good enough
      shape to commit for wider testing.
      
      Alexander Korotkov, reviewed by Noah Misch and Nathan Boley
      0e5e167a
  5. 03 Mar, 2012 2 commits
  6. 02 Mar, 2012 7 commits
    • Peter Eisentraut's avatar
      Fix incorrect uses of gzFile · d923125b
      Peter Eisentraut authored
      gzFile is already a pointer, so code like
      
      gzFile *handle = gzopen(...)
      
      is wrong.
      
      This used to pass silently because gzFile used to be defined as void*,
      and you can assign a void* to a void**.  But somewhere between zlib
      versions 1.2.3.4 and 1.2.6, the definition of gzFile was changed to
      struct gzFile_s *, and with that new definition this usage causes
      compiler warnings.
      
      So remove all those extra pointer decorations.
      
      There is a related issue in pg_backup_archiver.h, where
      
      FILE       *FH;             /* General purpose file handle */
      
      is used throughout pg_dump as sometimes a real FILE* and sometimes a
      gzFile handle, which also causes warnings now.  This is not yet fixed
      here, because it might need more code restructuring.
      d923125b
    • Peter Eisentraut's avatar
      Re-add "make check" target in src/test/isolation/Makefile · 8e5f4300
      Peter Eisentraut authored
      This effectively reverts 7886cc73,
      which was done under the impression that isolationtester needs libpq,
      which it no longer does (and never really did).
      8e5f4300
    • Tom Lane's avatar
      Allow child-relation entries to be made in ec_has_const EquivalenceClasses. · 44634e47
      Tom Lane authored
      This fixes an oversight in commit 11cad29c,
      which introduced MergeAppend plans.  Before that happened, we never
      particularly cared about the sort ordering of scans of inheritance child
      relations, since appending their outputs together would destroy any
      ordering anyway.  But now it's important to be able to match child relation
      sort orderings to those of the surrounding query.  The original coding of
      add_child_rel_equivalences skipped ec_has_const EquivalenceClasses, on the
      originally-correct grounds that adding child expressions to them was
      useless.  The effect of this is that when a parent variable is equated to
      a constant, we can't recognize that index columns on the equivalent child
      variables are not sort-significant; that is, we can't recognize that a
      child index on, say, (x, y) is able to generate output in "ORDER BY y"
      order when there is a clause "WHERE x = constant".  Adding child
      expressions to the (x, constant) EquivalenceClass fixes this, without any
      downside that I can see other than a few more planner cycles expended on
      such queries.
      
      Per recent gripe from Robert McGehee.  Back-patch to 9.1 where MergeAppend
      was introduced.
      44634e47
    • Peter Eisentraut's avatar
      Add COLLATION FOR expression · 6688d287
      Peter Eisentraut authored
      reviewed by Jaime Casanova
      6688d287
    • Peter Eisentraut's avatar
      ecpg: Clean up some const usage · d41f510c
      Peter Eisentraut authored
      d41f510c
    • Magnus Hagander's avatar
      Add a rule to optionally build docs with the stylesheet from the website · 8efb0bc5
      Magnus Hagander authored
      For those of us who prefer the formatting of the docs using the
      website stylesheets. Use "make STYLE=website draft" (for example) to use.
      
      The stylesheet itself is referenced directly to the website, so there
      is currently no copy of it stored in the source repository. Thus, docs
      built with it will only look correct if the browser can access the website
      when viewing them.
      8efb0bc5
    • Heikki Linnakangas's avatar
      When a GiST page is split during index build, it might not have a buffer. · 2502f459
      Heikki Linnakangas authored
      Previously it was thought that it's impossible as the code stands, because
      insertions create buffers as tuples are cascaded downwards, and index
      split also creaters buffers eagerly for all halves. But the example from
      Jay Levitt demonstrates that it can happen, when the root page is split.
      It's in fact OK if the buffer doesn't exist, so we just need to remove the
      sanity check. In fact, we've been discussing the possibility of destroying
      empty buffers to conserve memory, which would render the sanity check
      completely useless anyway.
      
      Fix by Alexander Korotkov
      2502f459
  7. 01 Mar, 2012 4 commits
    • Peter Eisentraut's avatar
      Small possible clarification in pg_basebackup reference page · bc8765e9
      Peter Eisentraut authored
      The <literal> markup is not visible as distinct on man pages, which
      creates a bit of confusion when looking at the documentation of the
      pg_basebackup -l option.  Rather than reinventing the entire font
      system for man pages to remedy this, just put some quotes around this
      particular case, which should also help in other output formats.
      bc8765e9
    • Peter Eisentraut's avatar
      Don't link pg_isolation_regress with libpq · 36a1a8c3
      Peter Eisentraut authored
      It's not necessary and can only create confusion about which libpq
      installation should be used.
      
      Also remove some dead code from the makefile that was apparently
      copied from elsewhere.
      36a1a8c3
    • Peter Eisentraut's avatar
      psql: Improve error display for psql -f - · 89c2f573
      Peter Eisentraut authored
      Running "psql -f -" used to print
      
      psql:<stdin>:1: ERROR:  blah
      
      but that got broken between 8.4 and 9.0 (commit
      b291c0fb), and now it printed
      
      psql:-:1: ERROR:  blah
      
      This reverts to the old behavior and cleans up some code that was left
      dead or useless by the mentioned commit.
      89c2f573
    • Alvaro Herrera's avatar
      Remove TOAST table from pg_database · 3433c6ba
      Alvaro Herrera authored
      The only toastable column now is datacl, but we don't really support
      long ACLs anyway.  The TOAST table should have been removed when the
      pg_db_role_setting catalog was introduced in commit
      2eda8dfb, but I forgot to do that.
      
      Per -hackers discussion on March 2011.
      3433c6ba
  8. 29 Feb, 2012 5 commits
    • Tom Lane's avatar
      Simplify references to backslash-doubling in func.sgml. · a5c1a196
      Tom Lane authored
      Several places were still written as though standard_conforming_strings
      didn't exist, much less be the default.  Now that it is on by default,
      we can simplify the text and just insert occasional notes suggesting that
      you might have to think harder if it's turned off.  Per discussion of a
      suggestion from Hannes Frederic Sowa.
      
      Back-patch to 9.1 where standard_conforming_strings was made the default.
      a5c1a196
    • Heikki Linnakangas's avatar
      Correctly detect SSI conflicts of prepared transactions after crash. · d6a72719
      Heikki Linnakangas authored
      A prepared transaction can get new conflicts in and out after preparing, so
      we cannot rely on the in- and out-flags stored in the statefile at prepare-
      time. As a quick fix, make the conservative assumption that after a restart,
      all prepared transactions are considered to have both in- and out-conflicts.
      That can lead to unnecessary rollbacks after a crash, but that shouldn't be
      a big problem in practice; you don't want prepared transactions to hang
      around for a long time anyway.
      
      Dan Ports
      d6a72719
    • Tom Lane's avatar
      Fix MSVC builds for previous patch's addition of a src/port file. · 8cae5810
      Tom Lane authored
      (And why in the world is this OBJS list not being scraped from the
      corresponding Makefile?)
      8cae5810
    • Alvaro Herrera's avatar
      Fix typo in comment · 58e9f974
      Alvaro Herrera authored
      Haifeng Liu
      58e9f974
    • Tom Lane's avatar
      Move CRC tables to libpgport, and provide them in a separate include file. · 5c02a00d
      Tom Lane authored
      This makes it much more convenient to build tools for Postgres that are
      separately compiled and require a matching CRC implementation.
      
      To prevent multiple copies of the CRC polynomial tables being introduced
      into the postgres binaries, they are now included in the static library
      libpgport that is mainly meant for replacement system functions.  That
      seems like a bit of a kludge, but there's no better place.
      
      This cleans up building of the tools pg_controldata and pg_resetxlog,
      which previously had to build their own copies of pg_crc.o.
      
      In the future, external programs that need access to the CRC tables can
      include the tables directly from the new header file pg_crc_tables.h.
      
      Daniel Farina, reviewed by Abhijit Menon-Sen and Tom Lane
      5c02a00d
  9. 28 Feb, 2012 3 commits
    • Tom Lane's avatar
      Fix thinko in new match_join_clauses_to_index() logic. · 0140a11b
      Tom Lane authored
      We don't need to constrain the other side of an indexable join clause to
      not be below an outer join; an example here is
      
      SELECT FROM t1 LEFT JOIN t2 ON t1.a = t2.b LEFT JOIN t3 ON t2.c = t3.d;
      
      We can consider an inner indexscan on t3.d using c = d as indexqual, even
      though t2.c is potentially nulled by a previous outer join.  The comparable
      logic in orindxpath.c has always worked that way, but I was being overly
      cautious here.
      0140a11b
    • Peter Eisentraut's avatar
      Add const qualifiers where they are accidentally cast away · 973e9fb2
      Peter Eisentraut authored
      This only produces warnings under -Wcast-qual, but it's more correct
      and consistent in any case.
      973e9fb2
    • Alvaro Herrera's avatar
      psql: when tab-completing, use quotes on file names that need them · 41e3c94c
      Alvaro Herrera authored
      psql backslash commands that deal with file or directory names require
      quotes around those that have spaces, single quotes, or backslashes.
      However, tab-completing such names does not provide said quotes, and is
      thus almost useless with them.
      
      This patch fixes the problem by having a wrapper function around
      rl_filename_completion_function that dequotes on input and quotes on
      output.  This eases dealing with such names.
      
      Author: Noah Misch
      41e3c94c