1. 24 Dec, 2012 3 commits
  2. 23 Dec, 2012 2 commits
    • Robert Haas's avatar
      Adjust many backend functions to return OID rather than void. · c504513f
      Robert Haas authored
      Extracted from a larger patch by Dimitri Fontaine.  It is hoped that
      this will provide infrastructure for enriching the new event trigger
      functionality, but it seems possibly useful for other purposes as
      well.
      c504513f
    • Tom Lane's avatar
      Prevent failure when RowExpr or XmlExpr is parse-analyzed twice. · 31bc8397
      Tom Lane authored
      transformExpr() is required to cope with already-transformed expression
      trees, for various ugly-but-not-quite-worth-cleaning-up reasons.  However,
      some of its newer subroutines hadn't gotten the memo.  This accounts for
      bug #7763 from Norbert Buchmuller: transformRowExpr() was overwriting the
      previously determined type of a RowExpr during CREATE TABLE LIKE INCLUDING
      INDEXES.  Additional investigation showed that transformXmlExpr had the
      same kind of problem, but all the other cases seem to be safe.
      
      Andres Freund and Tom Lane
      31bc8397
  3. 22 Dec, 2012 1 commit
    • Tom Lane's avatar
      Fix documentation typo. · eb035068
      Tom Lane authored
      "GetForeignTableColumnOptions" should be "GetForeignColumnOptions".
      Noted by Metin Döşlü.
      eb035068
  4. 21 Dec, 2012 5 commits
  5. 20 Dec, 2012 6 commits
    • Tom Lane's avatar
      Fix pg_extension_config_dump() to handle update cases more sanely. · 343c2a86
      Tom Lane authored
      If pg_extension_config_dump() is executed again for a table already listed
      in the extension's extconfig, the code was blindly making a new array entry.
      This does not seem useful.  Fix it to replace the existing array entry
      instead, so that it's possible for extension update scripts to alter the
      filter conditions for configuration tables.
      
      In addition, teach ALTER EXTENSION DROP TABLE to check for an extconfig
      entry for the target table, and remove it if present.  This is not a 100%
      solution because it's allowed for an extension update script to just
      summarily DROP a member table, and that code path doesn't go through
      ExecAlterExtensionContentsStmt.  We could probably make that case clean
      things up if we had to, but it would involve sticking a very ugly wart
      somewhere in the guts of dependency.c.  Since on the whole it seems quite
      unlikely that extension updates would want to remove pre-existing
      configuration tables, making the case possible with an explicit command
      seems sufficient.
      
      Per bug #7756 from Regina Obe.  Back-patch to 9.1 where extensions were
      introduced.
      343c2a86
    • Heikki Linnakangas's avatar
      Fix recycling of WAL segments after switching timeline during recovery. · 343ee00b
      Heikki Linnakangas authored
      This was broken before, we would recycle old WAL segments on wrong timeline
      after the recovery target timeline had changed, but my recent commit to
      not initialize ThisTimeLineID at all in a standby's checkpointer process
      broke this completely.
      
      The problem is that when installing a recycled WAL segment as a future one,
      ThisTimeLineID is used to construct the filename. To fix, always update
      ThisTimeLineID to the current timeline being recovered, before recycling
      WAL segments at a restartpoint.
      
      This still leaves a small window where we might install WAL segments under
      wrong timeline ID, if the timeline is changed just as we're about to start
      recycling. Also, even if we're replaying timeline X at the momnent, there's
      no guarantee that we'll need as many WAL segments on that timeline as we
      recycle. We might be just about to reach the point where we switch to next
      timeline, so might only need one more WAL segment on the current timeline.
      We'll live with the waste in that situation.
      
      Bug pointed out by Fujii Masao. 9.1 and 9.2 had the same issue, when
      recovery target timeline was changed, but I committed a slightly different
      version of this patch on those branches.
      343ee00b
    • Bruce Momjian's avatar
      Avoid using NAMEDATALEN in pg_upgrade · dc9896a2
      Bruce Momjian authored
      Because the client encoding might not match the server encoding,
      pg_upgrade can't allocate NAMEDATALEN bytes for storage of database,
      relation, and namespace identifiers.  Instead pg_strdup() the memory and
      free it.
      
      Also add C comment in initdb.c about safe NAMEDATALEN usage.
      dc9896a2
    • Heikki Linnakangas's avatar
      Follow TLI of last replayed record, not recovery target TLI, in walsenders. · af275a12
      Heikki Linnakangas authored
      Most of the time, the last replayed record comes from the recovery target
      timeline, but there is a corner case where it makes a difference. When
      the startup process scans for a new timeline, and decides to change recovery
      target timeline, there is a window where the recovery target TLI has already
      been bumped, but there are no WAL segments from the new timeline in pg_xlog
      yet. For example, if we have just replayed up to point 0/30002D8, on
      timeline 1, there is a WAL file called 000000010000000000000003 in pg_xlog
      that contains the WAL up to that point. When recovery switches recovery
      target timeline to 2, a walsender can immediately try to read WAL from
      0/30002D8, from timeline 2, so it will try to open WAL file
      000000020000000000000003. However, that doesn't exist yet - the startup
      process hasn't copied that file from the archive yet nor has the walreceiver
      streamed it yet, so walsender fails with error "requested WAL segment
      000000020000000000000003 has already been removed". That's harmless, in that
      the standby will try to reconnect later and by that time the segment is
      already created, but error messages that should be ignored are not good.
      
      To fix that, have walsender track the TLI of the last replayed record,
      instead of the recovery target timeline. That way walsender will not try to
      read anything from timeline 2, until the WAL segment has been created and at
      least one record has been replayed from it. The recovery target timeline is
      now xlog.c's internal affair, it doesn't need to be exposed in shared memory
      anymore.
      
      This fixes the error reported by Thom Brown. depesz the same error message,
      but I'm not sure if this fixes his scenario.
      af275a12
    • Heikki Linnakangas's avatar
      Don't set ThisTimeLineID in checkpointer & bgwriter during recovery. · 1a11d460
      Heikki Linnakangas authored
      We used to set it to the current recovery target timeline, but the recovery
      target timeline can change during recovery, leaving ThisTimeLineID at an
      old value. That seems worse than always leaving it at zero to begin with.
      
      AFAICS there was no good reason to set it in the first place. ThisTimeLineID
      is not needed in checkpointer or bgwriter process, until it's time to write
      the end-of-recovery checkpoint, and at that point ThisTimeLineID is updated
      anyway.
      1a11d460
    • Bruce Momjian's avatar
      Add pg_upgrade comment about mismatch error · 345fb82f
      Bruce Momjian authored
      Add comment stating that constraint and index names must match.
      345fb82f
  6. 19 Dec, 2012 3 commits
  7. 18 Dec, 2012 5 commits
    • Andrew Dunstan's avatar
      Don't include postgres.h in postgres_fe.h for cpluspluscheck. · 9ac749ce
      Andrew Dunstan authored
      Error exposed by recent Assert changes.
      
      Complaint from Peter Eisentraut.
      9ac749ce
    • Tom Lane's avatar
      Ignore libedit/libreadline while probing for standard functions. · 2666a6d0
      Tom Lane authored
      Some versions of libedit expose bogus definitions of setproctitle(),
      optreset, and perhaps other symbols that we don't want configure to pick up
      on.  There was a previous report of similar problems with strlcpy(), which
      we addressed in commit 59cf88da, but the
      problem has evidently grown in scope since then.  In hopes of not having to
      deal with it again in future, rearrange configure's tests for supplied
      functions so that we ignore libedit/libreadline except when probing
      specifically for functions we expect them to provide.
      
      Per report from Christoph Berg, though this is slightly more aggressive
      than his proposed patch.
      2666a6d0
    • Peter Eisentraut's avatar
      Remove allow_nonpic_in_shlib · 1a5f04dd
      Peter Eisentraut authored
      This was used in a time when a shared libperl or libpython was difficult
      to come by.  That is obsolete, and the idea behind the flag was never
      fully portable anyway and will likely fail on more modern CPU
      architectures.
      1a5f04dd
    • Peter Eisentraut's avatar
      doc: Put PL/pgSQL RAISE USING keywords into a list · 8d2e9a9d
      Peter Eisentraut authored
      Karl O. Pinc
      8d2e9a9d
    • Tom Lane's avatar
      Fix failure to ignore leftover temp tables after a server crash. · 6919b7e3
      Tom Lane authored
      During crash recovery, we remove disk files belonging to temporary tables,
      but the system catalog entries for such tables are intentionally not
      cleaned up right away.  Instead, the first backend that uses a temp schema
      is expected to clean out any leftover objects therein.  This approach
      requires that we be careful to ignore leftover temp tables (since any
      actual access attempt would fail), *even if their BackendId matches our
      session*, if we have not yet established use of the session's corresponding
      temp schema.  That worked fine in the past, but was broken by commit
      debcec7d which incorrectly removed the
      rd_islocaltemp relcache flag.  Put it back, and undo various changes
      that substituted tests like "rel->rd_backend == MyBackendId" for use
      of a state-aware flag.  Per trouble report from Heikki Linnakangas.
      
      Back-patch to 9.1 where the erroneous change was made.  In the back
      branches, be careful to add rd_islocaltemp in a spot in the struct that
      was alignment padding before, so as not to break existing add-on code.
      6919b7e3
  8. 16 Dec, 2012 4 commits
    • Tom Lane's avatar
      Fix filling of postmaster.pid in bootstrap/standalone mode. · c2994772
      Tom Lane authored
      We failed to ever fill the sixth line (LISTEN_ADDR), which caused the
      attempt to fill the seventh line (SHMEM_KEY) to fail, so that the shared
      memory key never got added to the file in standalone mode.  This has been
      broken since we added more content to our lock files in 9.1.
      
      To fix, tweak the logic in CreateLockFile to add an empty LISTEN_ADDR
      line in standalone mode.  This is a tad grotty, but since that function
      already knows almost everything there is to know about the contents of
      lock files, it doesn't seem that it's any better to hack it elsewhere.
      
      It's not clear how significant this bug really is, since a standalone
      backend should never have any children and thus it seems not critical
      to be able to check the nattch count of the shmem segment externally.
      But I'm going to back-patch the fix anyway.
      
      This problem had escaped notice because of an ancient (and in hindsight
      pretty dubious) decision to suppress LOG-level messages by default in
      standalone mode; so that the elog(LOG) complaint in AddToDataDirLockFile
      that should have warned of the problem didn't do anything.  Fixing that
      is material for a separate patch though.
      c2994772
    • Andrew Dunstan's avatar
      Tidy up from frontend Assert change. · 3717f083
      Andrew Dunstan authored
      Quiet compiler warnings noted by Peter Eisentraut.
      3717f083
    • Magnus Hagander's avatar
      Properly copy fmgroids.h after clean on Win32 · c1f856a1
      Magnus Hagander authored
      Craig Ringer
      c1f856a1
    • Peter Eisentraut's avatar
      doc: Remove extra table column · c2e32d5a
      Peter Eisentraut authored
      Not all system catalog description tables have the same number of
      columns, and the patch to add oid columns did one bit too much
      copy-and-pasting.
      c2e32d5a
  9. 15 Dec, 2012 2 commits
  10. 14 Dec, 2012 4 commits
  11. 13 Dec, 2012 2 commits
    • Heikki Linnakangas's avatar
      Allow a streaming replication standby to follow a timeline switch. · abfd192b
      Heikki Linnakangas authored
      Before this patch, streaming replication would refuse to start replicating
      if the timeline in the primary doesn't exactly match the standby. The
      situation where it doesn't match is when you have a master, and two
      standbys, and you promote one of the standbys to become new master.
      Promoting bumps up the timeline ID, and after that bump, the other standby
      would refuse to continue.
      
      There's significantly more timeline related logic in streaming replication
      now. First of all, when a standby connects to primary, it will ask the
      primary for any timeline history files that are missing from the standby.
      The missing files are sent using a new replication command TIMELINE_HISTORY,
      and stored in standby's pg_xlog directory. Using the timeline history files,
      the standby can follow the latest timeline present in the primary
      (recovery_target_timeline='latest'), just as it can follow new timelines
      appearing in an archive directory.
      
      START_REPLICATION now takes a TIMELINE parameter, to specify exactly which
      timeline to stream WAL from. This allows the standby to request the primary
      to send over WAL that precedes the promotion. The replication protocol is
      changed slightly (in a backwards-compatible way although there's little hope
      of streaming replication working across major versions anyway), to allow
      replication to stop when the end of timeline reached, putting the walsender
      back into accepting a replication command.
      
      Many thanks to Amit Kapila for testing and reviewing various versions of
      this patch.
      abfd192b
    • Heikki Linnakangas's avatar
      Make xlog_internal.h includable in frontend context. · 52766871
      Heikki Linnakangas authored
      This makes unnecessary the ugly hack used to #include postgres.h in
      pg_basebackup.
      
      Based on Alvaro Herrera's patch
      52766871
  12. 12 Dec, 2012 3 commits
    • Heikki Linnakangas's avatar
      In multi-insert, don't go into infinite loop on a huge tuple and fillfactor. · 6264cd3d
      Heikki Linnakangas authored
      If a tuple is larger than page size minus space reserved for fillfactor,
      heap_multi_insert would never find a page that it fits in and repeatedly ask
      for a new page from RelationGetBufferForTuple. If a tuple is too large to
      fit on any page, taking fillfactor into account, RelationGetBufferForTuple
      will always expand the relation. In a normal insert, heap_insert will accept
      that and put the tuple on the new page. heap_multi_insert, however, does a
      fillfactor check of its own, and doesn't accept the newly-extended page
      RelationGetBufferForTuple returns, even though there is no other choice to
      make the tuple fit.
      
      Fix that by making the logic in heap_multi_insert more like the heap_insert
      logic. The first tuple is always put on the page RelationGetBufferForTuple
      gives us, and the fillfactor check is only applied to the subsequent tuples.
      
      Report from David Gould, although I didn't use his patch.
      6264cd3d
    • Tom Lane's avatar
      Add defenses against integer overflow in dynahash numbuckets calculations. · 691c5ebf
      Tom Lane authored
      The dynahash code requires the number of buckets in a hash table to fit
      in an int; but since we calculate the desired hash table size dynamically,
      there are various scenarios where we might calculate too large a value.
      The resulting overflow can lead to infinite loops, division-by-zero
      crashes, etc.  I (tgl) had previously installed some defenses against that
      in commit 299d1716, but that covered only one
      call path.  Moreover it worked by limiting the request size to work_mem,
      but in a 64-bit machine it's possible to set work_mem high enough that the
      problem appears anyway.  So let's fix the problem at the root by installing
      limits in the dynahash.c functions themselves.
      
      Trouble report and patch by Jeff Davis.
      691c5ebf
    • Tom Lane's avatar
      Disable event triggers in standalone mode. · cd3413ec
      Tom Lane authored
      Per discussion, this seems necessary to allow recovery from broken event
      triggers, or broken indexes on pg_event_trigger.
      
      Dimitri Fontaine
      cd3413ec