Skip to content
Snippets Groups Projects
  1. Feb 23, 2014
    • Tom Lane's avatar
      Prefer pg_any_to_server/pg_server_to_any over pg_do_encoding_conversion. · 769065c1
      Tom Lane authored
      A large majority of the callers of pg_do_encoding_conversion were
      specifying the database encoding as either source or target of the
      conversion, meaning that we can use the less general functions
      pg_any_to_server/pg_server_to_any instead.
      
      The main advantage of using the latter functions is that they can make use
      of a cached conversion-function lookup in the common case that the other
      encoding is the current client_encoding.  It's notationally cleaner too in
      most cases, not least because of the historical artifact that the latter
      functions use "char *" rather than "unsigned char *" in their APIs.
      
      Note that pg_any_to_server will apply an encoding verification step in
      some cases where pg_do_encoding_conversion would have just done nothing.
      This seems to me to be a good idea at most of these call sites, though
      it partially negates the performance benefit.
      
      Per discussion of bug #9210.
      769065c1
  2. Feb 03, 2014
    • Fujii Masao's avatar
      Make pg_basebackup skip temporary statistics files. · 3e8554a5
      Fujii Masao authored
      The temporary statistics files don't need to be included in the backup
      because they are always reset at the beginning of the archive recovery.
      This patch changes pg_basebackup so that it skips all files located in
      $PGDATA/pg_stat_tmp or the directory specified by stats_temp_directory
      parameter.
      3e8554a5
  3. Jan 28, 2014
    • Tom Lane's avatar
      Update comment. · 98d62c28
      Tom Lane authored
      generate_normalized_query() no longer needs to truncate text, but this
      one comment didn't get the memo.  Per Peter Geoghegan.
      98d62c28
  4. Jan 27, 2014
    • Tom Lane's avatar
      Keep pg_stat_statements' query texts in a file, not in shared memory. · f0d6f202
      Tom Lane authored
      This change allows us to eliminate the previous limit on stored query
      length, and it makes the shared-memory hash table very much smaller,
      allowing more statements to be tracked.  (The default value of
      pg_stat_statements.max is therefore increased from 1000 to 5000.)
      In typical scenarios, the hash table can be large enough to hold all the
      statements commonly issued by an application, so that there is little
      "churn" in the set of tracked statements, and thus little need to do I/O
      to the file.
      
      To further reduce the need for I/O to the query-texts file, add a way
      to retrieve all the columns of the pg_stat_statements view except for
      the query text column.  This is probably not of much interest for human
      use but it could be exploited by programs, which will prefer using the
      queryid anyway.
      
      Ordinarily, we'd need to bump the extension version number for the latter
      change.  But since we already advanced pg_stat_statements' version number
      from 1.1 to 1.2 in the 9.4 development cycle, it seems all right to just
      redefine what 1.2 means.
      
      Peter Geoghegan, reviewed by Pavel Stehule
      f0d6f202
    • Robert Haas's avatar
      Relax the requirement that all lwlocks be stored in a single array. · ea9df812
      Robert Haas authored
      This makes it possible to store lwlocks as part of some other data
      structure in the main shared memory segment, or in a dynamic shared
      memory segment.  There is still a main LWLock array and this patch does
      not move anything out of it, but it provides necessary infrastructure
      for doing that in the future.
      
      This change is likely to increase the size of LWLockPadded on some
      platforms, especially 32-bit platforms where it was previously only
      16 bytes.
      
      Patch by me.  Review by Andres Freund and KaiGai Kohei.
      ea9df812
  5. Jan 20, 2014
  6. Jan 07, 2014
  7. Dec 23, 2013
    • Tom Lane's avatar
      Support ordered-set (WITHIN GROUP) aggregates. · 8d65da1f
      Tom Lane authored
      This patch introduces generic support for ordered-set and hypothetical-set
      aggregate functions, as well as implementations of the instances defined in
      SQL:2008 (percentile_cont(), percentile_disc(), rank(), dense_rank(),
      percent_rank(), cume_dist()).  We also added mode() though it is not in the
      spec, as well as versions of percentile_cont() and percentile_disc() that
      can compute multiple percentile values in one pass over the data.
      
      Unlike the original submission, this patch puts full control of the sorting
      process in the hands of the aggregate's support functions.  To allow the
      support functions to find out how they're supposed to sort, a new API
      function AggGetAggref() is added to nodeAgg.c.  This allows retrieval of
      the aggregate call's Aggref node, which may have other uses beyond the
      immediate need.  There is also support for ordered-set aggregates to
      install cleanup callback functions, so that they can be sure that
      infrastructure such as tuplesort objects gets cleaned up.
      
      In passing, make some fixes in the recently-added support for variadic
      aggregates, and make some editorial adjustments in the recent FILTER
      additions for aggregates.  Also, simplify use of IsBinaryCoercible() by
      allowing it to succeed whenever the target type is ANY or ANYELEMENT.
      It was inconsistent that it dealt with other polymorphic target types
      but not these.
      
      Atri Sharma and Andrew Gierth; reviewed by Pavel Stehule and Vik Fearing,
      and rather heavily editorialized upon by Tom Lane
      8d65da1f
  8. Dec 08, 2013
  9. Dec 07, 2013
    • Fujii Masao's avatar
      Expose qurey ID in pg_stat_statements view. · 91484409
      Fujii Masao authored
      The query ID is the internal hash identifier of the statement,
      and was not available in pg_stat_statements view so far.
      
      Daniel Farina, Sameer Thakur and Peter Geoghegan, reviewed by me.
      91484409
  10. Nov 22, 2013
    • Tom Lane's avatar
      Support multi-argument UNNEST(), and TABLE() syntax for multiple functions. · 784e762e
      Tom Lane authored
      This patch adds the ability to write TABLE( function1(), function2(), ...)
      as a single FROM-clause entry.  The result is the concatenation of the
      first row from each function, followed by the second row from each
      function, etc; with NULLs inserted if any function produces fewer rows than
      others.  This is believed to be a much more useful behavior than what
      Postgres currently does with multiple SRFs in a SELECT list.
      
      This syntax also provides a reasonable way to combine use of column
      definition lists with WITH ORDINALITY: put the column definition list
      inside TABLE(), where it's clear that it doesn't control the ordinality
      column as well.
      
      Also implement SQL-compliant multiple-argument UNNEST(), by turning
      UNNEST(a,b,c) into TABLE(unnest(a), unnest(b), unnest(c)).
      
      The SQL standard specifies TABLE() with only a single function, not
      multiple functions, and it seems to require an implicit UNNEST() which is
      not what this patch does.  There may be something wrong with that reading
      of the spec, though, because if it's right then the spec's TABLE() is just
      a pointless alternative spelling of UNNEST().  After further review of
      that, we might choose to adopt a different syntax for what this patch does,
      but in any case this functionality seems clearly worthwhile.
      
      Andrew Gierth, reviewed by Zoltán Böszörményi and Heikki Linnakangas, and
      significantly revised by me
      784e762e
  11. Jul 18, 2013
  12. Jul 17, 2013
  13. Apr 28, 2013
    • Tom Lane's avatar
      Editorialize a bit on new ProcessUtility() API. · f8db76e8
      Tom Lane authored
      Choose a saner ordering of parameters (adding a new input param after
      the output params seemed a bit random), update the function's header
      comment to match reality (cmon folks, is this really that hard?),
      get rid of useless and sloppily-defined distinction between
      PROCESS_UTILITY_SUBCOMMAND and PROCESS_UTILITY_GENERATED.
      f8db76e8
  14. Jan 01, 2013
  15. Aug 28, 2012
  16. Jul 20, 2012
    • Robert Haas's avatar
      Make new event trigger facility actually do something. · 3a0e4d36
      Robert Haas authored
      Commit 3855968f added syntax, pg_dump,
      psql support, and documentation, but the triggers didn't actually fire.
      With this commit, they now do.  This is still a pretty basic facility
      overall because event triggers do not get a whole lot of information
      about what the user is trying to do unless you write them in C; and
      there's still no option to fire them anywhere except at the very
      beginning of the execution sequence, but it's better than nothing,
      and a good building block for future work.
      
      Along the way, add a regression test for ALTER LARGE OBJECT, since
      testing of event triggers reveals that we haven't got one.
      
      Dimitri Fontaine and Robert Haas
      3a0e4d36
  17. Jun 10, 2012
  18. May 27, 2012
    • Magnus Hagander's avatar
      Fix handling of pg_stat_statements.stat temporary file · 2b97db61
      Magnus Hagander authored
      Write the file to a temporary name and then rename() it into the
      permanent name, to ensure it can't end up half-written and corrupt
      in case of a crash during shutdown.
      
      Unlink the file after it has been read so it's removed from the data
      directory and not included in base backups going to replication slaves.
      2b97db61
  19. Apr 30, 2012
  20. Apr 28, 2012
    • Tom Lane's avatar
      Adjust timing units in pg_stat_statements. · 93f94e35
      Tom Lane authored
      Display total time and I/O timings in milliseconds, for consistency with
      the units used for timings in the core statistics views.  The columns
      remain of float8 type, so that sub-msec precision is available.  (At some
      point we will probably want to convert the core views to use float8 type
      for the same reason, but this patch does not touch that issue.)
      
      This is a release-note-requiring change in the meaning of the total_time
      column.  The I/O timing columns are new as of 9.2, so there is no
      compatibility impact from redefining them.
      
      Do some minor copy-editing in the documentation, too.
      93f94e35
  21. Apr 09, 2012
    • Tom Lane's avatar
      Save a few cycles while creating "sticky" entries in pg_stat_statements. · e969f9a7
      Tom Lane authored
      There's no need to sit there and increment the stats when we know all the
      increments would be zero anyway.  The actual additions might not be very
      expensive, but skipping acquisition of the spinlock seems like a good
      thing.  Pushing the logic about initialization of the usage count down into
      entry_alloc() allows us to do that while making the code actually simpler,
      not more complex.  Expansion on a suggestion by Peter Geoghegan.
      e969f9a7
  22. Apr 08, 2012
    • Tom Lane's avatar
      Improve management of "sticky" entries in contrib/pg_stat_statements. · d5375491
      Tom Lane authored
      This patch addresses a deficiency in the previous pg_stat_statements patch.
      We want to give sticky entries an initial "usage" factor high enough that
      they probably will stick around until their query is completed.  However,
      if the query never completes (eg it gets an error during execution), the
      entry shouldn't persist indefinitely.  Manage this by starting out with
      a usage setting equal to the (approximate) median usage value within the
      whole hashtable, but decaying the value much more aggressively than we
      do for normal entries.
      
      Peter Geoghegan
      d5375491
  23. Mar 29, 2012
    • Tom Lane's avatar
      Improve contrib/pg_stat_statements' handling of PREPARE/EXECUTE statements. · 566a1d43
      Tom Lane authored
      It's actually more useful for the module to ignore these.  Ignoring
      EXECUTE (and not incrementing the nesting level) allows the executor
      hooks to charge the time to the underlying prepared query, which
      shows up as a stats entry with the original PREPARE as query string
      (possibly modified by suppression of constants, which might not be
      terribly useful here but it's not worth avoiding).  This is much more
      useful than cluttering the stats table with a distinct entry for each
      textually distinct EXECUTE.
      
      Experimentation with this idea shows that it's also preferable to ignore
      PREPARE.  If we don't, we get two stats table entries, one with the query
      string hash and one with the jumble-derived hash, but with the same visible
      query string (modulo those constants).  This is confusing and not very
      helpful, since the first entry will only receive costs associated with
      initial planning of the query, which is not something counted at all
      normally by pg_stat_statements.  (And if we do start tracking planning
      costs, we'd want them blamed on the other hash table entry anyway.)
      566a1d43
    • Tom Lane's avatar
      Improve handling of utility statements containing plannable statements. · e0e4ebe3
      Tom Lane authored
      When tracking nested statements, contrib/pg_stat_statements formerly
      double-counted the execution costs of utility statements that directly
      contain an executable statement, such as EXPLAIN and DECLARE CURSOR.
      This was not obvious since the ProcessUtility and Executor hooks
      would each add their measured costs to the same stats table entry.
      However, with the new implementation that hashes utility and plannable
      statements differently, this showed up as seemingly-duplicate stats
      entries.  Fix that by disabling the Executor hooks when the query has a
      queryId of zero, which was the case already for such statements but is now
      more clearly specified in the code.  (The zero queryId was causing problems
      anyway because all such statements would add to a single bogus entry.)
      
      The PREPARE/EXECUTE case still results in counting the same execution
      in two different stats table entries, but it should be much less surprising
      to users that there are two entries in such cases.
      
      In passing, include a CommonTableExpr's ctename in the query hash.
      I had left it out originally on the grounds that we wanted to omit all
      inessential aliases, but since RTE_CTE RTEs are hashing their referenced
      names, we'd better hash the CTE names too to make sure we don't hash
      semantically different queries the same.
      e0e4ebe3
    • Tom Lane's avatar
      Improve contrib/pg_stat_statements to lump "similar" queries together. · 7313cc01
      Tom Lane authored
      pg_stat_statements now hashes selected fields of the analyzed parse tree
      to assign a "fingerprint" to each query, and groups all queries with the
      same fingerprint into a single entry in the pg_stat_statements view.
      In practice it is expected that queries with the same fingerprint will be
      equivalent except for values of literal constants.  To make the display
      more useful, such constants are replaced by "?" in the displayed query
      strings.
      
      This mechanism currently supports only optimizable queries (SELECT,
      INSERT, UPDATE, DELETE).  Utility commands are still matched on the
      basis of their literal query strings.
      
      There remain some open questions about how to deal with utility statements
      that contain optimizable queries (such as EXPLAIN and SELECT INTO) and how
      to deal with expiring speculative hashtable entries that are made to save
      the normalized form of a query string.  However, fixing these issues should
      require only localized changes, and since there are other open patches
      involving contrib/pg_stat_statements, it seems best to go ahead and commit
      what we've got.
      
      Peter Geoghegan, reviewed by Daniel Farina
      7313cc01
  24. Mar 27, 2012
  25. Feb 23, 2012
  26. Jan 02, 2012
  27. Oct 12, 2011
    • Tom Lane's avatar
      Throw a useful error message if an extension script file is fed to psql. · 458857cc
      Tom Lane authored
      We have seen one too many reports of people trying to use 9.1 extension
      files in the old-fashioned way of sourcing them in psql.  Not only does
      that usually not work (due to failure to substitute for MODULE_PATHNAME
      and/or @extschema@), but if it did work they'd get a collection of loose
      objects not an extension.  To prevent this, insert an \echo ... \quit
      line that prints a suitable error message into each extension script file,
      and teach commands/extension.c to ignore lines starting with \echo.
      That should not only prevent any adverse consequences of loading a script
      file the wrong way, but make it crystal clear to users that they need to
      do it differently now.
      
      Tom Lane, following an idea of Andrew Dunstan's.  Back-patch into 9.1
      ... there is not going to be much value in this if we wait till 9.2.
      458857cc
  28. Sep 11, 2011
    • Peter Eisentraut's avatar
      Remove many -Wcast-qual warnings · 1b81c2fe
      Peter Eisentraut authored
      This addresses only those cases that are easy to fix by adding or
      moving a const qualifier or removing an unnecessary cast.  There are
      many more complicated cases remaining.
      1b81c2fe
  29. Sep 04, 2011
    • Tom Lane's avatar
      Clean up the #include mess a little. · 1609797c
      Tom Lane authored
      walsender.h should depend on xlog.h, not vice versa.  (Actually, the
      inclusion was circular until a couple hours ago, which was even sillier;
      but Bruce broke it in the expedient rather than logically correct
      direction.)  Because of that poor decision, plus blind application of
      pgrminclude, we had a situation where half the system was depending on
      xlog.h to include such unrelated stuff as array.h and guc.h.  Clean up
      the header inclusion, and manually revert a lot of what pgrminclude had
      done so things build again.
      
      This episode reinforces my feeling that pgrminclude should not be run
      without adult supervision.  Inclusion changes in header files in particular
      need to be reviewed with great care.  More generally, it'd be good if we
      had a clearer notion of module layering to dictate which headers can sanely
      include which others ... but that's a big task for another day.
      1609797c
  30. Sep 01, 2011
  31. Apr 10, 2011
  32. Apr 07, 2011
    • Tom Lane's avatar
      Revise the API for GUC variable assign hooks. · 2594cf0e
      Tom Lane authored
      The previous functions of assign hooks are now split between check hooks
      and assign hooks, where the former can fail but the latter shouldn't.
      Aside from being conceptually clearer, this approach exposes the
      "canonicalized" form of the variable value to guc.c without having to do
      an actual assignment.  And that lets us fix the problem recently noted by
      Bernd Helmle that the auto-tune patch for wal_buffers resulted in bogus
      log messages about "parameter "wal_buffers" cannot be changed without
      restarting the server".  There may be some speed advantage too, because
      this design lets hook functions avoid re-parsing variable values when
      restoring a previous state after a rollback (they can store a pre-parsed
      representation of the value instead).  This patch also resolves a
      longstanding annoyance about custom error messages from variable assign
      hooks: they should modify, not appear separately from, guc.c's own message
      about "invalid parameter value".
      2594cf0e
  33. Feb 27, 2011
    • Tom Lane's avatar
      Refactor the executor's API to support data-modifying CTEs better. · a874fe7b
      Tom Lane authored
      The originally committed patch for modifying CTEs didn't interact well
      with EXPLAIN, as noted by myself, and also had corner-case problems with
      triggers, as noted by Dean Rasheed.  Those problems show it is really not
      practical for ExecutorEnd to call any user-defined code; so split the
      cleanup duties out into a new function ExecutorFinish, which must be called
      between the last ExecutorRun call and ExecutorEnd.  Some Asserts have been
      added to these functions to help verify correct usage.
      
      It is no longer necessary for callers of the executor to call
      AfterTriggerBeginQuery/AfterTriggerEndQuery for themselves, as this is now
      done by ExecutorStart/ExecutorFinish respectively.  If you really need to
      suppress that and do it for yourself, pass EXEC_FLAG_SKIP_TRIGGERS to
      ExecutorStart.
      
      Also, refactor portal commit processing to allow for the possibility that
      PortalDrop will invoke user-defined code.  I think this is not actually
      necessary just yet, since the portal-execution-strategy logic forces any
      non-pure-SELECT query to be run to completion before we will consider
      committing.  But it seems like good future-proofing.
      a874fe7b
  34. Feb 14, 2011
    • Tom Lane's avatar
      Convert contrib modules to use the extension facility. · 629b3af2
      Tom Lane authored
      This isn't fully tested as yet, in particular I'm not sure that the
      "foo--unpackaged--1.0.sql" scripts are OK.  But it's time to get some
      buildfarm cycles on it.
      
      sepgsql is not converted to an extension, mainly because it seems to
      require a very nonstandard installation process.
      
      Dimitri Fontaine and Tom Lane
      629b3af2
  35. Jan 01, 2011
  36. Sep 22, 2010
  37. Sep 20, 2010
Loading