Features Download
From: David Fetter <david <at> fetter.org>
Subject: == PostgreSQL Weekly News - December 16 2012 ==
Newsgroups: gmane.comp.db.postgresql.announce
Date: Monday 17th December 2012 04:30:49 UTC (over 3 years ago)
== PostgreSQL Weekly News - December 16 2012 ==

There will be a PgDay at PyCon on March 13th, 2012 in the Santa Clara
convention center.  More details once we have things organized.
Please put it on your calendar.

== PostgreSQL Product News ==

Barman 1.1.2, a backup and recovery manager for PostgreSQL, released.

psycopg2 2.4.6, a Python connector for PostgreSQL, released.

== PostgreSQL Jobs for December ==


== PostgreSQL Local ==

The FOSDEM PGDay conference that will be held before FOSDEM in
Brussels, Belgium, on Feb 1st, 2013.  The CfP for both this event and
for the PG track of FOSDEM are open.

PGDay NYC 2013 will be held on March 22, 2013 in New York City.  The
CfP submission deadline is January 7th, 2013 at noon eastern time.
papers AT nycpug DOT org.

PostgreSQL Session will be held on March 28th, 2013 in Paris,
France.  The Call for Papers is open.

PGCon 2013 will be held May 23-24 2013, in Ottawa at the University of
Ottawa.  The Call for Papers is open.

== PostgreSQL in the News ==

Planet PostgreSQL: http://planet.postgresql.org/

PostgreSQL Weekly News is brought to you this week by David Fetter

Submit news and announcements by Sunday at 3:00pm Pacific time.
Please send English language ones to [email protected], German language
to [email protected], Italian language to [email protected]  Spanish language
to [email protected]

== Applied Patches ==

Heikki Linnakangas pushed:

- Fix the tracking of min recovery point timeline.  Forgot to update
  it at the right place. Also, consider checkpoint record that
  switches to new timelne to be on the new timeline.  This fixes
  erroneous "requested timeline 2 does not contain minimum recovery
  point" errors, pointed out by Amit Kapila while testing another

- Update minimum recovery point on truncation.  If a file is
  truncated, we must update minRecoveryPoint. Once a file is
  truncated, there's no going back; it would not be safe to stop
  recovery at a point earlier than that anymore.  Per report from
  Kyotaro HORIGUCHI. Backpatch to 8.4. Before that, minRecoveryPoint
  was not updated during recovery at all.

- Consistency check should compare last record replayed, not last
  record read.  EndRecPtr is the last record that we've read, but not
  necessarily yet replayed. CheckRecoveryConsistency should compare
  minRecoveryPoint with the last replayed record instead. This caused
  recovery to think it's reached consistency too early.  Now that we
  do the check in CheckRecoveryConsistency correctly, we have to move
  the call of that function to after redoing a record. The current
  place, after reading a record but before replaying it, is wrong. In
  particular, if there are no more records after the one ending at
  minRecoveryPoint, we don't enter hot standby until one extra record
  is generated and read by the standby, and CheckRecoveryConsistency
  is called. These two bugs conspired to make the code appear to work
  correctly, except for the small window between reading the last
  record that reaches minRecoveryPoint, and replaying it.  In the
  passing, rename recoveryLastRecPtr, which is the last record
  replayed, to lastReplayedEndRecPtr. This makes it slightly less
  confusing with replayEndRecPtr, which is the last record read that
  we're about to replay.  Original report from Kyotaro HORIGUCHI,
  further diagnosis by Fujii Masao.  Backpatch to 9.0, where Hot
  Standby subtly changed the test from "minRecoveryPoint < EndRecPtr"
  to "minRecoveryPoint <= EndRecPtr".  The former works because where
  the test is performed, we have always read one more record than
  we've replayed.

- In multi-insert, don't go into infinite loop on a huge tuple and
  fillfactor.  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.

- Make xlog_internal.h includable in frontend context.  This makes
  unnecessary the ugly hack used to #include postgres.h in
  pg_basebackup.  Based on Alvaro Herrera's patch

- Allow a streaming replication standby to follow a timeline switch.
  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

Peter Eisentraut pushed:

- doc: Remove blastwave.org link.  Apparently, this service has been
  dead since 2008.

- doc: Improve search_path mentions in index.  Karl O. Pinc

- NLS: Use msgmerge --previous option.  It provides some additional
  help to translators.

- doc: Add pg_stat_reset and related functions to index

- doc: Add oid columns to system catalog documentation.  Karl O. Pinc
  and Jeff Davis

- doc: Remove extra table column.  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.

Bruce Momjian pushed:

- Fix pg_upgrade -O/-o options.  Fix previous commit that added
  synchronous_commit=off, but broke -O/-o due to missing space in
  argument passing.  Backpatch to 9.2.

- Fix pg_upgrade for invalid indexes All versions of pg_upgrade
  upgraded invalid indexes caused by CREATE INDEX CONCURRENTLY
  failures and marked them as valid.  The patch adds a check to all
  pg_upgrade versions and throws an error during upgrade or --check.
  Backpatch to 9.2, 9.1, 9.0.  Patch slightly adjusted.

Andrew Dunstan pushed:

- Add mode where contrib installcheck runs each module in a separately
  named database.  Normally each module is tested in a database named
  contrib_regression, which is dropped and recreated at the beginhning
  of each pg_regress run.  This new mode, enabled by adding
  USE_MODULE_DB=1 to the make command line, runs most modules in a
  database with the module name embedded in it.  This will make
  testing pg_upgrade on clusters with the contrib modules a lot
  easier.  Second attempt at this, this time accomodating make
  versions older than 3.82.  Still to be done: adapt to the MSVC build
  system.  Backpatch to 9.0, which is the earliest version it is
  reasonably possible to test upgrading from.

- Provide Assert() for frontend code.  Per discussion on-hackers. psql
  is converted to use the new code.  Follows a suggestion from Heikki

- Tidy up from frontend Assert change.  Quiet compiler warnings noted
  by Peter Eisentraut.

Kevin Grittner pushed:

- Fix performance problems with autovacuum truncation in busy
  workloads.  In situations where there are over 8MB of empty pages at
  the end of a table, the truncation work for trailing empty pages
  takes longer than deadlock_timeout, and there is frequent access to
  the table by processes other than autovacuum, there was a problem
  with the autovacuum worker process being canceled by the deadlock
  checking code. The truncation work done by autovacuum up that point
  was lost, and the attempt tried again by a later autovacuum worker.
  The attempts could continue indefinitely without making progress,
  consuming resources and blocking other processes for up to
  deadlock_timeout each time.  This patch has the autovacuum worker
  checking whether it is blocking any other thread at 20ms intervals.
  If such a condition develops, the autovacuum worker will persist the
  work it has done so far, release its lock on the table, and sleep in
  50ms intervals for up to 5 seconds, hoping to be able to re-acquire
  the lock and try again. If it is unable to get the lock in that
  time, it moves on and a worker will try to continue later from the
  point this one left off.  While this patch doesn't change the rules
  about when and what to truncate, it does cause the truncation to
  occur sooner, with less blocking, and with the consumption of fewer
  resources when there is contention for the table's lock.  The only
  user-visible change other than improved performance is that the
  table size during truncation may change incrementally instead of
  just once.  This problem exists in all supported versions but is
  infrequently reported, although some reports of performance problems
  when autovacuum runs might be caused by this. Initial commit is just
  the master branch, but this should probably be backpatched once the
  build farm and general developer usage confirm that there are no
  surprising effects.  Jan Wieck

Tom Lane pushed:

- Disable event triggers in standalone mode.  Per discussion, this
  seems necessary to allow recovery from broken event triggers, or
  broken indexes on pg_event_trigger.  Dimitri Fontaine

- Add defenses against integer overflow in dynahash numbuckets
  calculations.  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
  299d1716525c659f0e02840e31fbe4dea3, 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.

- Fix filling of postmaster.pid in bootstrap/standalone mode.  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.

Robert Haas pushed:

- Update comment in heapgetpage() regarding PD_ALL_VISIBLE vs. Hot
  Standby.  Pavan Deolasee, slightly modified by me

Magnus Hagander pushed:

- Properly copy fmgroids.h after clean on Win32.  Craig Ringer

== Rejected Patches (for now) ==

No one was disappointed this week :-)

== Pending Patches ==

Peter Geoghegan sent in another revision of a patch to enhance error

Noah Misch sent in a patch fixing some comments in

Amit Kapila sent in another revision of a patch to allow changing
values in postgresql.conf via SQL.

Karl O. Pinc sent in another revision of a patch to elucidate the
nature of the permission system.

Dimitri Fontaine sent in two more revisions of a patch to add
information to event triggers.

Laurenz Albe and KaiGai Kohei traded patch sets to enable writes to
foreign tables.

Josh Kupershmidt and Karl O. Pinc traded patches to allow multiple
--tables options for utilities other than pg_dump, where the feature

Andres Freund and Heikki Linnakangas traded patches to add an
XLogReader generic WAL-reading facility.

Mikko Tiihonen sent in a patch to use gcc built-in atomic inc/dec in
lock.c where available.

KaiGai Kohei sent in another revision of a patch to implement
OAT_POST_ALTER object access hooks.

Alexander Korotkov sent in another revision of a patch to improve
statistics and selectivity estimation for ranges.

Alexander Korotkov sent in another revision of a patch to implement
SP-GiST for ranges based on 2d-mapping and quad-tree.

Alexander Korotkov and Jeff Davis traded patches to de-bloat

Andres Freund sent in a patch to add GetOldestXminNoLock as a variant
(and implementation) of GetOldestXmin, along with a patch to do wal
decoding by using GetOldestXminNoLock to compute the initial logical
xmin safely.

Pavan Deolasee sent in another revision of a patch to set a visibility
map bit after a HOT prune operation.

Alexander Korotkov sent in another revision of a patch to help support
DFA regex searches with indexes.

Tomas Vondra sent in another revision of a patch to optimizing
dropping multiple tables within a transaction.

Tomas Vondra sent in another revision of a patch to allow trimming
down the amount of log output pgbench generates.

Michael Paquier sent in another revision of a patch to add REINDEX

Sent via pgsql-announce mailing list ([email protected])
To make changes to your subscription:
CD: 4ms