Features Download
From: David Fetter <david <at> fetter.org>
Subject: == PostgreSQL Weekly News - November 18 2012 ==
Newsgroups: gmane.comp.db.postgresql.announce
Date: Monday 19th November 2012 07:05:09 UTC (over 3 years ago)
== PostgreSQL Weekly News - November 18 2012 ==

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 Product News ==

pgBadger 2.2, a PostgreSQL log analyzer written in Perl, released:

== PostgreSQL Jobs for November ==


== PostgreSQL Local ==

The sixth edition of the Italian PostgreSQL Day (PGDay.IT 2012) will
be held on November 23, 2012 in Prato, Tuscany.  The International
Call for Papers is now open. Talks and presentations in English are
accepted.  Information in English for papers submission is available

== 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:

- Silence "expression result unused" warnings in
  AssertVariableIsOfTypeMacro.  At least clang 3.1 generates those
  warnings. Prepend (void) to avoid them, like we have in AssertMacro.

- Use correct text domain for translating errcontext() messages.
  errcontext() is typically used in an error context callback
  function, not within an ereport() invocation like e.g errmsg and
  errdetail are. That means that the message domain that the
  TEXTDOMAIN magic in ereport() determines is not the right one for
  the errcontext() calls. The message domain needs to be determined by
  the C file containing the errcontext() call, not the file containing
  the ereport() call.  Fix by turning errcontext() into a macro that
  passes the TEXTDOMAIN to use for the errcontext message.
  "errcontext" was used in a few places as a variable or struct field
  name, I had to rename those out of the way, now that errcontext is a
  macro.  We've had this problem all along, but this isn't doesn't
  seem worth backporting. It's a fairly minor issue, and turning
  errcontext from a function to a macro requires at least a recompile
  of any external code that calls errcontext().

- Oops, have to rename local variables called 'errcontext' in contrib,
  too.  As pointed out by Alvaro Herrera.

Peter Eisentraut pushed:

- Use a stamp file for the XSLT HTML doc build.  This way it works
  more like the DSSSL build, and dependencies are tracked better by
  make.  Also copy the CSS stylesheet to the html directory.  This was
  forgotten when the output directory was changed.

- doc: Add link to CREATE TABLE AS on CREATE TABLE reference page.
  Karl O. Pinc

- doc: Put commas in the right place on pg_restore reference page.
  Karl O. Pinc

- Add -Wlogical-op to standard compiler flags, if supported.

- doc: Put pg_temp into documentation index.  Karl O. Pinc

Tom Lane pushed:

- Fix multiple problems in WAL replay.  Most of the replay functions
  for WAL record types that modify more than one page failed to ensure
  that those pages were locked correctly to ensure that concurrent
  queries could not see inconsistent page states.  This is a hangover
  from coding decisions made long before Hot Standby was added, when
  it was hardly necessary to acquire buffer locks during WAL replay at
  all, let alone hold them for carefully-chosen periods.  The key
  problem was that RestoreBkpBlocks was written to hold lock on each
  page restored from a full-page image for only as long as it took to
  update that page.  This was guaranteed to break any WAL replay
  function in which there was any update-ordering constraint between
  pages, because even if the nominal order of the pages is the right
  one, any mixture of full-page and non-full-page updates in the same
  record would result in out-of-order updates.  Moreover, it wouldn't
  work for situations where there's a requirement to maintain lock on
  one page while updating another.  Failure to honor an update
  ordering constraint in this way is thought to be the cause of bug
  #7648 from Daniel Farina: what seems to have happened there is that
  a btree page being split was rewritten from a full-page image before
  the new right sibling page was written, and because lock on the
  original page was not maintained it was possible for hot standby
  queries to try to traverse the page's right-link to the
  not-yet-existing sibling page.  To fix, get rid of RestoreBkpBlocks
  as such, and instead create a new function RestoreBackupBlock that
  restores just one full-page image at a time.  This function can be
  invoked by WAL replay functions at the points where they would
  otherwise perform non-full-page updates; in this way, the physical
  order of page updates remains the same no matter which pages are
  replaced by full-page images.  We can then further adjust the logic
  in individual replay functions if it is necessary to hold buffer
  locks for overlapping periods.  A side benefit is that we can
  simplify the handling of concurrency conflict resolution by moving
  that code into the record-type-specfic functions; there's no more
  need to contort the code layout to keep conflict resolution in front
  of the RestoreBkpBlocks call.  In connection with that, standardize
  on zero-based numbering rather than one-based numbering for
  referencing the full-page images.  In HEAD, I removed the macros
  XLR_BKP_BLOCK_1 through XLR_BKP_BLOCK_4.  They are still there in
  the header files in previous branches, but are no longer used by the
  code.  In addition, fix some other bugs identified in the course of
  making these changes: spgRedoAddNode could fail to update the parent
  downlink at all, if the parent tuple is in the same page as either
  the old or new split tuple and we're not doing a full-page image: it
  would get fooled by the LSN having been advanced already.  This
  would result in permanent index corruption, not just transient
  failure of concurrent queries.  Also, ginHeapTupleFastInsert's
  "merge lists" case failed to mark the old tail page as a candidate
  for a full-page image; in the worst case this could result in
  torn-page corruption.  heap_xlog_freeze() was inconsistent about
  using a cleanup lock or plain exclusive lock: it did the former in
  the normal path but the latter for a full-page image.  A plain
  exclusive lock seems sufficient, so change to that.  Also, remove
  gistRedoPageDeleteRecord(), which has been dead code since VACUUM
  FULL was rewritten.  Back-patch to 9.0, where hot standby was
  introduced.  Note however that 9.0 had a significantly different
  WAL-logging scheme for GIST index updates, and it doesn't appear
  possible to make that scheme safe for concurrent hot standby
  queries, because it can leave inconsistent states in the index even
  between WAL records.  Given the lack of complaints from the field,
  we won't work too hard on fixing that branch.

- Fix memory leaks in record_out() and record_send().  record_out()
  leaks memory: it fails to free the strings returned by the
  per-column output functions, and also is careless about detoasted
  values.  This results in a query-lifespan memory leakage when
  returning composite values to the client, because printtup() runs
  the output functions in the query-lifespan memory context.  Fix it
  to handle these issues the same way printtup() does.  Also fix a
  similar leakage in record_send().  (At some point we might want to
  try to run output functions in shorter-lived memory contexts, so
  that we don't need a zero-leakage policy for them.  But that would
  be a significantly more invasive patch, which doesn't seem like
  material for back-patching.) In passing, use
  appendStringInfoCharMacro instead of appendStringInfoChar in the
  innermost data-copying loop of record_out, to try to shave a few
  cycles from this function's runtime.  Per trouble report from Carlos
  Henrique Reimer.  Back-patch to all supported versions.

- Fix the int8 and int2 cases of (minimum possible integer) % (-1).
  The correct answer for this (or any other case with arg2 = -1) is
  zero, but some machines throw a floating-point exception instead of
  behaving sanely.  Commit f9ac414c35ea084ff70c564ab2c32adb06d5296f
  dealt with this in int4mod, but overlooked the fact that it also
  happens in int8mod (at least on my Linux x86_64 machine).  Protect
  int2mod as well; it's not clear whether any machines fail there
  (mine does not) but since the test is so cheap it seems better safe
  than sorry.  While at it, simplify the original guard in int4mod: we
  need only check for arg2 == -1, we don't need to check arg1
  explicitly.  Xi Wang, with some editing by me.

- Improve check_partial_indexes() to consider join clauses in proof
  attempts.  Traditionally check_partial_indexes() has only looked at
  restriction clauses while trying to prove partial indexes usable in
  queries.  However, join clauses can also be used in some cases;
  mainly, that a strict operator on "x" proves an "x IS NOT NULL"
  index predicate, even if the operator is in a join clause rather
  than a restriction clause.  Adding this code fixes a regression in
  9.2, because previously we would take join clauses into account when
  considering whether a partial index could be used in a nestloop
  inner indexscan path.  9.2 doesn't handle nestloop inner indexscans
  in the same way, and this consideration was overlooked in the
  rewrite.  Moving the work to check_partial_indexes() is a better
  solution anyway, since the proof applies whether or not we actually
  use the index in that particular way, and we don't have to do it
  over again for each possible outer relation.  Per report from Dave

- Assert that WaitLatch's timeout is not more than INT_MAX
  milliseconds.  The behavior with larger values is unspecified by the
  Single Unix Spec.  It appears that BSD-derived kernels report
  EINVAL, although Linux does not.  If waiting for longer intervals is
  desired, the calling code has to do something to limit the delay; we
  can't portably fix it here since "long" may not be any wider than
  "int" in the first place.  Part of response to bug #7670, though
  this change doesn't fix that (in fact, it converts the problem from
  an ERROR into an Assert failure).  No back-patch since it's just an
  assertion addition.

- Fix syslogger to not fail when log_rotation_age exceeds 2^31
  milliseconds.  We need to avoid calling WaitLatch with timeouts
  exceeding INT_MAX.  Fortunately a simple clamp will do the trick,
  since no harm is done if the wait times out before it's really time
  to rotate the log file.  Per bug #7670 (probably bug #7545 is the
  same thing, too).  In passing, fix bogus definition of
  log_rotation_age's maximum value in guc.c --- it was numerically
  right, but only because MINS_PER_HOUR and SECS_PER_MINUTE have the
  same value.  Back-patch to 9.2.  Before that, syslogger wasn't using

- Limit values of archive_timeout, post_auth_delay,
  auth_delay.milliseconds.  The previous definitions of these GUC
  variables allowed them to range up to INT_MAX, but in point of fact
  the underlying code would suffer overflows or other errors with
  large values.  Reduce the maximum values to something that won't
  misbehave.  There's no apparent value in working harder than this,
  since very large delays aren't sensible for any of these.  (Note:
  the risk with archive_timeout is that if we're late checking the
  state, the timestamp difference it's being compared to might
  overflow.  So we need some amount of slop; the choice of INT_MAX/2
  is arbitrary.) Per followup investigation of bug #7670.  Although
  this isn't a very significant fix, might as well back-patch.

Simon Riggs pushed:

- Clarify docs on hot standby lock release.  Andres Freund and Simon

- Skip searching for subxact locks at commit.  At commit all standby
  locks are released for the top-level transaction, so searching for
  locks for each subtransaction is both pointless and costly (N^2) in
  the presence of many AccessExclusiveLocks.

Bruce Momjian pushed:

- Adjust find_status for newer Linux 'nm' output format.

- Mark pg_upgrade's free_db_and_rel_infos() as a static function.

- In pg_upgrade, add third meaningless parameter to open().

- In pg_upgrade, copy fsm, vm, and extent files by checking for file
  existence via open(), rather than collecting a directory listing and
  looking up matching relfilenode files with sequential scans of the
  array.  This speeds up pg_upgrade by 2x for a large number of
  tables, e.g. 16k.  Per observation by Ants Aasma.

== Rejected Patches (for now) ==

Karl O. Pinc's patch to document the automatically created names of
constraints and indexes.  We're not guaranteeing these will remain

Nicholas White's patch to fix a mis-compilation on cygwin and mingw.
Turned out to be a misconfiguration.

== Pending Patches ==

Kyotaro HORIGUCHI sent in another revision of the patch to reduce
palloc's in numeric operations.

Kyotaro HORIGUCHI sent in another revision of the identity projection

Asif Rehman sent in a patch intended to fix a problem in PL/pgsql
where functions can't return a row expression.

Karl O. Pinc sent in another revision of the patch to add a
--truncate-tables option to pg_restore.

Andrew Dunstan sent in a patch to make vacuumlo use a cursor.

Dimitri Fontaine sent in a RFC patch to implement pg_dump

Peter Eisentraut sent in a patch to enable using LDAP URLs in

Karl O. Pinc sent in a patch to document when search_path is used in
secure functions.

Peter Eisentraut sent in a patch to add CREATE RECURSIVE VIEW.

Peter Geoghegan sent in a patch to recommend settings for the
commit_delay parameter.

Abhijit Menon-Sen sent in two revisions of a patch to create a binary
heap implementation.

Etsuro Fujita sent in another revision of the patch to add PRE- and
POST-processor options to COPY.

Atri Sharma sent in another revision of a patch to mitigate hint bit

Alvaro Herrera sent in another revision of the patch to implement
foreign key locks.

Kevin Grittner sent in a patch to implement materialized views.

Jeff Davis sent in two more revisions of a patch to add disk page

Andres Freund sent in a placeholder patch, to be replaced by Abhijit
Menon-Sen's above, for a binary heap implementation.

Andres Freund sent in another revision of the patch to a add new
function pg_relation_by_filenode to look up a relation given the
tablespace and the filenode OIDs.

Andres Freund sent in another revision of a patch to add a new
RELFILENODE syscache to fetch a pg_class entry via (reltablespace,

Andres Freund sent in new revisions of replication design document
and a snapshot building design document.

Andres Freund sent in another revision of a patch to introduce
InvalidCommandId and declare that to be the new maximum for

Andres Freund sent in another revision of a patch to allow walsenders
to connect to a specific database.

Andres Freund sent in another revision of a patch to introduce
pg_receivellog, the pg_receivexlog equivalent for logical changes.
Michael Paquier sent in a follow-on patch adding the installer for

Andres Freund sent in another revision of a patch to add a simple
decoding module in contrib named 'test_decoding'.

Andres Freund sent in another revision of a patch to Introduce wal
decoding via catalog timetravel.

Andres Freund sent in another revision of a patch to store the number
of subtransactions in xl_running_xacts separately from toplevel xids.

Andres Freund sent in another revision of a patch to add simple
xlogdump tool.

Andres Freund and Alvaro Herrera traded patches to add support for a
generic wal reading facility dubbed XLogReader.

Andres Freund sent in another revision of a patch to adjust all
*Satisfies routines to take a HeapTuple instead of a HeapTupleHeader.

Andres Freund sent in another revision of a patch to add a new
relmapper.c function RelationMapFilenodeToOid that acts as a reverse
of RelationMapOidToFilenode.

Amit Kapila sent in two more revisions of a patch to allow
postgresql.conf values to be changed via SQL.

Shigeru HANADA sent in another revision of a patch to add a FDW for

KaiGai Kohei sent in another revision of a patch to refactor the ALTER

Karl O. Pinc sent in a patch to enable controlling the destination of
psql's error stream.

KaiGai Kohei sent in another revision of a patch to implement
row-level access control.

KaiGai Kohei sent in two more revisions of a patch to implement
OAT_POST_ALTER object access hooks.

Greg Smith sent in a WIP patch saving Timing Events via a new hook.

Amit Kapila sent in a patch to make pg_basebackup and pg_receivexlog

Heikki Linnakangas sent in two more revisions of a patch to enable
switching timelines over streaming replication.

Robert Haas sent in another revision of a patch to deal with tuplesort
memory usage via grow_memtuples.

KaiGai Kohei sent in another revision of a patch to enable writing to
foreign tables.

Fujii Masao sent in a patch extending pg_trgm to be able to use a GIN
index in partial matches.

Pavel Stehule sent in a patch to add a width specification for s
specifier (format function) and fix behavior when both positional and
ordered placeholders are used.

Amit Kapila sent in another revision of a patch to compute the max LSN of
data pages.

Euler Taveira de Oliveira sent in another revision of a patch to
enable changing global configuration settings from SQL.

Phil Sorber sent in another revision of a patch to implement a pg_ping

Simon Riggs sent in a partial WIP patch implementing part of Jeff
Davis's suggestion as to how to reduce the number of hint bits.

Alexander Korotkov sent in a WIP patch to enable GIN indexes to store
additional information with item pointers in posting lists and trees.

Tomas Vondra sent in another revision of a patch to allow reducing the
logging load via not writing all logs.

JiangGuiqing sent in a patch to fix ecpg library installations on

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