Skip to content
Snippets Groups Projects
  1. Oct 10, 2009
    • Tom Lane's avatar
      Split the processing of INSERT/UPDATE/DELETE operations out of execMain.c. · 8a5849b7
      Tom Lane authored
      They are now handled by a new plan node type called ModifyTable, which is
      placed at the top of the plan tree.  In itself this change doesn't do much,
      except perhaps make the handling of RETURNING lists and inherited UPDATEs a
      tad less klugy.  But it is necessary preparation for the intended extension of
      allowing RETURNING queries inside WITH.
      
      Marko Tiikkaja
      8a5849b7
  2. Oct 09, 2009
    • Peter Eisentraut's avatar
      Use pg_get_triggerdef in pg_dump · b865d275
      Peter Eisentraut authored
      Add a variant of pg_get_triggerdef with a second argument "pretty" that
      causes the output to be formatted in the way pg_dump used to do.  Use this
      variant in pg_dump with server versions >= 8.5.
      
      This insulates pg_dump from most future trigger feature additions, such as
      the upcoming column triggers patch.
      
      Author: Itagaki Takahiro <itagaki.takahiro@oss.ntt.co.jp>
      b865d275
  3. Oct 08, 2009
  4. Oct 07, 2009
    • Alvaro Herrera's avatar
      Fix snapshot management, take two. · 07cefdfb
      Alvaro Herrera authored
      Partially revert the previous patch I installed and replace it with a more
      general fix: any time a snapshot is pushed as Active, we need to ensure that it
      will not be modified in the future.  This means that if the same snapshot is
      used as CurrentSnapshot, it needs to be copied separately.  This affects
      serializable transactions only, because CurrentSnapshot has already been copied
      by RegisterSnapshot and so PushActiveSnapshot does not think it needs another
      copy.  However, CommandCounterIncrement would modify CurrentSnapshot, whereas
      ActiveSnapshots must not have their command counters incremented.
      
      I say "partially" because the regression test I added for the previous bug
      has been kept.
      
      (This restores 8.3 behavior, because before snapmgr.c existed, any snapshot set
      as Active was copied.)
      
      Per bug report from Stuart Bishop in
      6bc73d4c0910042358k3d1adff3qa36f8df75198ecea@mail.gmail.com
      07cefdfb
  5. Oct 05, 2009
    • Tom Lane's avatar
      Create an ALTER DEFAULT PRIVILEGES command, which allows users to adjust · 249724cb
      Tom Lane authored
      the privileges that will be applied to subsequently-created objects.
      
      Such adjustments are always per owning role, and can be restricted to objects
      created in particular schemas too.  A notable benefit is that users can
      override the traditional default privilege settings, eg, the PUBLIC EXECUTE
      privilege traditionally granted by default for functions.
      
      Petr Jelinek
      249724cb
  6. Oct 03, 2009
    • Tom Lane's avatar
      Fix a couple of issues in recent patch to print updates to postgresql.conf · 54d60bbd
      Tom Lane authored
      settings: avoid calling superuser() in contexts where it's not defined,
      don't leak the transient copies of GetConfigOption output, and avoid the
      whole exercise in postmaster child processes.
      
      I found that actually no current caller of GetConfigOption has any use for
      its internal check of GUC_SUPERUSER_ONLY.  But rather than just remove
      that entirely, it seemed better to add a parameter indicating whether to
      enforce the check.
      
      Per report from Simon and subsequent testing.
      54d60bbd
  7. Oct 02, 2009
  8. Sep 27, 2009
    • Tom Lane's avatar
      Revert my ill-considered change that made formrdesc not insert the correct · ca70c3cf
      Tom Lane authored
      relation rowtype OID into the relcache entries it builds.  This ensures
      that catcache copies of the relation tupdescs will be fully correct.
      While the deficiency doesn't seem to have any effect in the current
      sources, we have been bitten by not-quite-right catcache tupdescs before,
      so it seems like a good idea to maintain the rule that they should be right.
      ca70c3cf
  9. Sep 26, 2009
    • Tom Lane's avatar
      Fix RelationCacheInitializePhase2 (Phase3, in HEAD) to cope with the · c2e228d4
      Tom Lane authored
      possibility of shared-inval messages causing a relcache flush while it tries
      to fill in missing data in preloaded relcache entries.  There are actually
      two distinct failure modes here:
      
      1. The flush could delete the next-to-be-processed cache entry, causing
      the subsequent hash_seq_search calls to go off into the weeds.  This is
      the problem reported by Michael Brown, and I believe it also accounts
      for bug #5074.  The simplest fix is to restart the hashtable scan after
      we've read any new data from the catalogs.  It appears that pre-8.4
      branches have not suffered from this failure, because by chance there were
      no other catalogs sharing the same hash chains with the catalogs that
      RelationCacheInitializePhase2 had work to do for.  However that's obviously
      pretty fragile, and it seems possible that derivative versions with
      additional system catalogs might be vulnerable, so I'm back-patching this
      part of the fix anyway.
      
      2. The flush could delete the *current* cache entry, in which case the
      pointer to the newly-loaded data would end up being stored into an
      already-deleted Relation struct.  As long as it was still deleted, the only
      consequence would be some leaked space in CacheMemoryContext.  But it seems
      possible that the Relation struct could already have been recycled, in
      which case this represents a hard-to-reproduce clobber of cached data
      structures, with unforeseeable consequences.  The fix here is to pin the
      entry while we work on it.
      
      In passing, also change RelationCacheInitializePhase2 to Assert that
      formrdesc() set up the relation's cached TupleDesc (rd_att) with the
      correct type OID and hasoids values.  This is more appropriate than
      silently updating the values, because the original tupdesc might already
      have been copied into the catcache.  However this part of the patch is
      not in HEAD because it fails due to some questionable recent changes in
      formrdesc :-(.  That will be cleaned up in a subsequent patch.
      c2e228d4
  10. Sep 23, 2009
    • Tom Lane's avatar
      Implement the DO statement to support execution of PL code without having · 9048b731
      Tom Lane authored
      to create a function for it.
      
      Procedural languages now have an additional entry point, namely a function
      to execute an inline code block.  This seemed a better design than trying
      to hide the transient-ness of the code from the PL.  As of this patch, only
      plpgsql has an inline handler, but probably people will soon write handlers
      for the other standard PLs.
      
      In passing, remove the long-dead LANCOMPILER option of CREATE LANGUAGE.
      
      Petr Jelinek
      9048b731
  11. Sep 17, 2009
  12. Sep 11, 2009
  13. Sep 09, 2009
    • Peter Eisentraut's avatar
      Fix/improve bytea and boolean support in PL/Python · 3ab8b7fa
      Peter Eisentraut authored
      Before, PL/Python converted data between SQL and Python by going
      through a C string representation.  This broke for bytea in two ways:
      
      - On input (function parameters), you would get a Python string that
        contains bytea's particular external representation with backslashes
        etc., instead of a sequence of bytes, which is what you would expect
        in a Python environment.  This problem is exacerbated by the new
        bytea output format.
      
      - On output (function return value), null bytes in the Python string
        would cause truncation before the data gets stored into a bytea
        datum.
      
      This is now fixed by converting directly between the PostgreSQL datum
      and the Python representation.
      
      The required generalized infrastructure also allows for other
      improvements in passing:
      
      - When returning a boolean value, the SQL datum is now true if and
        only if Python considers the value that was passed out of the
        PL/Python function to be true.  Previously, this determination was
        left to the boolean data type input function.  So, now returning
        'foo' results in true, because Python considers it true, rather than
        false because PostgreSQL considers it false.
      
      - On input, we can convert the integer and float types directly to
        their Python equivalents without having to go through an
        intermediate string representation.
      
      original patch by Caleb Welton, with updates by myself
      3ab8b7fa
  14. Sep 08, 2009
    • Tom Lane's avatar
      Add a boolean GUC parameter "bonjour" to control whether a Bonjour-enabled · eeb6cb14
      Tom Lane authored
      build actually attempts to advertise itself via Bonjour.  Formerly it always
      did so, which meant that packagers had to decide for their users whether
      this behavior was wanted or not.  The default is "off" to be on the safe
      side, though this represents a change in the default behavior of a
      Bonjour-enabled build.  Per discussion.
      eeb6cb14
  15. Sep 04, 2009
    • Heikki Linnakangas's avatar
      Tigthen binary receive functions so that they reject values that the text · 7be39bb0
      Heikki Linnakangas authored
      input functions don't accept either. While the backend can handle such
      values fine, they can cause trouble in clients and in pg_dump/restore.
      
      This is followup to the original issue on time datatype reported by Andrew
      McNamara a while ago. Like that one, none of these seem worth
      back-patching.
      7be39bb0
    • Heikki Linnakangas's avatar
      Fix encoding handling in xml binary input function. If the XML header didn't · 237859e4
      Heikki Linnakangas authored
      specify an encoding explicitly, we used to treat it as being in database
      encoding when we parsed it, but then perform a UTF-8 -> database encoding
      conversion on it, which was completely bogus. It's now consistently treated as
      UTF-8.
      237859e4
    • Tom Lane's avatar
      Make LOAD of an already-loaded library into a no-op, instead of attempting · 602a9ef5
      Tom Lane authored
      to unload and re-load the library.
      
      The difficulty with unloading a library is that we haven't defined safe
      protocols for doing so.  In particular, there's no safe mechanism for
      getting out of a "hook" function pointer unless libraries are unloaded
      in reverse order of loading.  And there's no mechanism at all for undefining
      a custom GUC variable, so GUC would be left with a pointer to an old value
      that might or might not still be valid, and very possibly wouldn't be in
      the same place anymore.
      
      While the unload and reload behavior had some usefulness in easing
      development of new loadable libraries, it's of no use whatever to normal
      users, so just disabling it isn't giving up that much.  Someday we might
      care to expend the effort to develop safe unload protocols; but even if
      we did, there'd be little certainty that every third-party loadable module
      was following them, so some security restrictions would still be needed.
      
      Back-patch to 8.2; before that, LOAD was superuser-only anyway.
      
      Security: unprivileged users could crash backend.  CVE not assigned yet
      602a9ef5
    • Tom Lane's avatar
      Disallow RESET ROLE and RESET SESSION AUTHORIZATION inside security-definer · 187e5d89
      Tom Lane authored
      functions.
      
      This extends the previous patch that forbade SETting these variables inside
      security-definer functions.  RESET is equally a security hole, since it
      would allow regaining privileges of the caller; furthermore it can trigger
      Assert failures and perhaps other internal errors, since the code is not
      expecting these variables to change in such contexts.  The previous patch
      did not cover this case because assign hooks don't really have enough
      information, so move the responsibility for preventing this into guc.c.
      
      Problem discovered by Heikki Linnakangas.
      
      Security: no CVE assigned yet, extends CVE-2007-6600
      187e5d89
  16. Sep 03, 2009
    • Tom Lane's avatar
      Install a workaround for a longstanding gcc bug that allows SIGFPE traps · d0a368c6
      Tom Lane authored
      to occur for division by zero, even though the code is carefully avoiding
      that.  All available evidence is that the only functions affected are
      int24div, int48div, and int28div, so patch just those three functions to
      include a "return" after the ereport() call.
      
      Backpatch to 8.4 so that the fix can be tested in production builds.
      For older branches our recommendation will continue to be to use -O1
      on affected platforms (which are mostly non-mainstream anyway).
      d0a368c6
  17. Sep 01, 2009
  18. Aug 31, 2009
    • Tom Lane's avatar
      Change the autovacuum launcher to read pg_database directly, rather than · 00e6a16d
      Tom Lane authored
      via the "flat files" facility.  This requires making it enough like a backend
      to be able to run transactions; it's no longer an "auxiliary process" but
      more like the autovacuum worker processes.  Also, its signal handling has
      to be brought into line with backends/workers.  In particular, since it
      now has to handle procsignal.c processing, the special autovac-launcher-only
      signal conditions are moved to SIGUSR2.
      
      Alvaro, with some cleanup from Tom
      00e6a16d
    • Tom Lane's avatar
      Track the current XID wrap limit (or more accurately, the oldest unfrozen · 25ec228e
      Tom Lane authored
      XID) in checkpoint records.  This eliminates the need to recompute the value
      from scratch during database startup, which is one of the two remaining
      reasons for the flatfile code to exist.  It should also simplify life for
      hot-standby operation.
      
      To avoid bloating the checkpoint records unreasonably, I switched from
      tracking the oldest database by name to tracking it by OID.  This turns
      out to save cycles in general (everywhere but the warning-generating
      paths, which we hardly care about) and also helps us deal with the case
      that the oldest database got dropped instead of being vacuumed.  The prior
      coding might go for a long time without updating the wrap limit in that case,
      which is bad because it might result in a lot of useless autovacuum activity.
      25ec228e
  19. Aug 30, 2009
  20. Aug 29, 2009
    • Tom Lane's avatar
      Remove the use of the pg_auth flat file for client authentication. · e710b65c
      Tom Lane authored
      (That flat file is now completely useless, but removal will come later.)
      
      To do this, postpone client authentication into the startup transaction
      that's run by InitPostgres.  We still collect the startup packet and do
      SSL initialization (if needed) at the same time we did before.  The
      AuthenticationTimeout is applied separately to startup packet collection
      and the actual authentication cycle.  (This is a bit annoying, since it
      means a couple extra syscalls; but the signal handling requirements inside
      and outside a transaction are sufficiently different that it seems best
      to treat the timeouts as completely independent.)
      
      A small security disadvantage is that if the given database name is invalid,
      this will be reported to the client before any authentication happens.
      We could work around that by connecting to database "postgres" instead,
      but consensus seems to be that it's not worth introducing such surprising
      behavior.
      
      Processing of all command-line switches and GUC options received from the
      client is now postponed until after authentication.  This means that
      PostAuthDelay is much less useful than it used to be --- if you need to
      investigate problems during InitPostgres you'll have to set PreAuthDelay
      instead.  However, allowing an unauthenticated user to set any GUC options
      whatever seems a bit too risky, so we'll live with that.
      e710b65c
  21. Aug 28, 2009
    • Peter Eisentraut's avatar
      Derived files that are shipped in the distribution used to be built in the · 234c7ce9
      Peter Eisentraut authored
      source directory even for out-of-tree builds.  They are now alsl built in
      the build tree.  This should be more convenient for certain developers'
      workflows, and shouldn't really break anything else.
      234c7ce9
    • Tom Lane's avatar
      Remove useless code that propagated FrontendProtocol to a backend via a · 0a00c9a8
      Tom Lane authored
      PostgresMain switch.  In point of fact, FrontendProtocol is already set
      in a backend process, since ProcessStartupPacket() is executed inside
      the backend --- it hasn't been run by the postmaster for many years.
      And if it were, we'd still certainly want FrontendProtocol to be set before
      we get as far as PostgresMain, so that startup errors get reported in the
      right protocol.
      
      -v might have some future use in standalone backends, so I didn't go so
      far as to remove the switch outright.
      
      Also, initialize FrontendProtocol to 0 not PG_PROTOCOL_LATEST.  The only
      likely result of presetting it like that is to mask failure-to-set-it
      mistakes.
      0a00c9a8
  22. Aug 27, 2009
    • Tom Lane's avatar
      Make it reasonably safe to use pg_ctl to start the postmaster from a boot-time · 8f5500e6
      Tom Lane authored
      script.
      
      To do this, have pg_ctl pass down its parent shell's PID in an environment
      variable PG_GRANDPARENT_PID, and teach CreateLockFile() to disregard that PID
      as a false match if it finds it in postmaster.pid.  This allows us to cope
      with one level of postgres-owned shell process even with pg_ctl in the way,
      so it's just as safe as starting the postmaster directly.  You still have to
      be careful about how you write the initscript though.
      
      Adjust the comments in contrib/start-scripts/ to not deprecate use of
      pg_ctl.  Also, fix the ROTATELOGS option in the OSX script, which was
      indulging in exactly the sort of unsafe coding that renders this fix
      pointless :-(.  A pipe inside the "sudo" will probably result in more
      than one postgres-owned process hanging around.
      8f5500e6
    • Tom Lane's avatar
      Remove some unnecessary variable assignments, per results of "clang" · aaa9f7d4
      Tom Lane authored
      static checker.  Paul Matthews
      aaa9f7d4
    • Peter Eisentraut's avatar
      Update of install-sh, mkinstalldirs, and associated configury · 9d182ef0
      Peter Eisentraut authored
      Update install-sh to that from Autoconf 2.63, plus our Darwin-specific
      changes (which I simplified a bit).  install-sh is now able to install
      multiple files in one run, so we could simplify our makefiles sometime.
      
      install-sh also now has a -d option to create directories, so we don't need
      mkinstalldirs anymore.
      
      Use AC_PROG_MKDIR_P in configure.in, so we can use mkdir -p when available
      instead of install-sh -d.  For consistency with the rest of the world,
      the corresponding make variable has been renamed from $(mkinstalldirs) to
      $(MKDIR_P).
      9d182ef0
  23. Aug 24, 2009
    • Tom Lane's avatar
      Try to make silent_mode behave somewhat reasonably. · 8bed238c
      Tom Lane authored
      Instead of sending stdout/stderr to /dev/null after forking away from the
      terminal, send them to postmaster.log within the data directory.  Since
      this opens the door to indefinite logfile bloat, recommend even more
      strongly that log output be redirected when using silent_mode.
      
      Move the postmaster's initial calls of load_hba() and load_ident() down
      to after we have started the log collector, if we are going to.  This
      is so that errors reported by them will appear in the "usual" place.
      
      Reclassify silent_mode as a LOGGING_WHERE, not LOGGING_WHEN, parameter,
      since it's got absolutely nothing to do with the latter category.
      
      In passing, fix some obsolete references to -S ... this option hasn't
      had that switch letter for a long time.
      
      Back-patch to 8.4, since as of 8.4 load_hba() and load_ident() are more
      picky (and thus more likely to fail) than they used to be.  This entire
      change was driven by a complaint about those errors disappearing into
      the bit bucket.
      8bed238c
  24. Aug 18, 2009
  25. Aug 12, 2009
    • Tom Lane's avatar
      Allow backends to start up without use of the flat-file copy of pg_database. · 04011cc9
      Tom Lane authored
      To make this work in the base case, pg_database now has a nailed-in-cache
      relation descriptor that is initialized using hardwired knowledge in
      relcache.c.  This means pg_database is added to the set of relations that
      need to have a Schema_pg_xxx macro maintained in pg_attribute.h.  When this
      path is taken, we'll have to do a seqscan of pg_database to find the row
      we need.
      
      In the normal case, we are able to do an indexscan to find the database's row
      by name.  This is made possible by storing a global relcache init file that
      describes only the shared catalogs and their indexes (and therefore is usable
      by all backends in any database).  A new backend loads this cache file,
      finds its database OID after an indexscan on pg_database, and then loads
      the local relcache init file for that database.
      
      This change should effectively eliminate number of databases as a factor
      in backend startup time, even with large numbers of databases.  However,
      the real reason for doing it is as a first step towards getting rid of
      the flat files altogether.  There are still several other sub-projects
      to be tackled before that can happen.
      04011cc9
  26. Aug 10, 2009
Loading