== PostgreSQL Weekly News – October 14 2012 ==
== PostgreSQL Weekly News – October 14 2012 ==
The 6th annual Highload++ conference will be on October 22-23, 2012 in
== PostgreSQL Product News ==
Barman 1.1.0, a backup and recovery manager for PostgreSQL, released.
Features: 9.2 support, pre/post backup hook scripts and Debian/Ubuntu
pgpool-II 3.2.1, 3.1.5 and 3.0.9, a multi-purpose middleware which can
provide connection pooling, replication, load balancing, parallel
execution and more, released.
Skytools 3.1.1, a package of tools developed by Skype for replication
and failover including PgQ, a generic queuing framework and Londiste,
a row-based master-slave replication replication system, released:
== PostgreSQL Jobs for October ==
== PostgreSQL Local ==
PostgreSQL Conference Europe 2012 will be in Prague, Czech Republic
on October 23-26.
There will be a PGDay November 9, 2012 at USP, São Paulo
PostgreSQL Day Argentina 2012 will be held on November 13th in Bernal,
Buenos Aires, at the National University of Quilmes. It will cover
topics for PostgreSQL users, developers and contributors, as well as
decision and policy makers. For more information about the
conference, please see the website at
This year Ecuador’s PGDay will be held at Quito city on November 17th,
2012. The Call for Papers is open until October 10. Send proposals
to Jaime Casanova jaime <AT> 2ndquadrant <DOT> com.
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@example.com, German language
to firstname.lastname@example.org, Italian language to email@example.com. Spanish language
== Applied Patches ==
Heikki Linnakangas pushed:
– Fix walsender handling of postmaster shutdown, to not go into
endless loop. This bug was introduced by my patch to use the
regular die/quickdie signal handlers in walsender processes. I tried
to make walsender exit at next CHECK_FOR_INTERRUPTS() by setting
ProcDiePending, but that’s not enough, you need to set
InterruptPending too. On second thoght, it was not a very good way
to make walsender exit anyway, so use proc_exit(0) instead. Also,
send a CommandComplete message before exiting; that’s what we did
before, and you get a nicer error message in the standby that way.
Reported by Thom Brown.
– Say ANALYZE, not VACUUM, in error message on analyze in hot standby.
– Remove stray newline in comment.
– Put the logic to wait for WAL in standby mode to a separate
function. This is just refactoring with no user-visible effect, to
make the code more readable.
– Fix silly bug in previous refactoring. I extracted the refactoring
patch from a larger patch that contained other changes too, but
missed one unintentional change and didn’t test enough…
– Fix thinko in previous commit. Since postgres.h includes palloc.h,
definitions that affect the latter must be present before the former
is included. Per buildfarm results
– Improve replication connection timeouts. Rename replication_timeout
to wal_sender_timeout, and add a new setting called
wal_receiver_timeout that does the same at the walreceiver side.
There was previously no timeout in walreceiver, so if the network
went down, for example, the walreceiver could take a long time to
notice that the connection was lost. Now with the two settings, both
sides of a replication connection will detect a broken connection
similarly. It is no longer necessary to manually set
wal_receiver_status_interval to a value smaller than the timeout.
Both wal sender and receiver now automatically send a “ping” message
if more than 1/2 of the configured timeout has elapsed, and it
hasn’t received any messages from the other end. Amit Kapila,
heavily edited by me.
Robert Haas pushed:
– Add #define for UUIDOID. Phil Sorber and Thom Brown. Reviewed by
Alvaro Herrera pushed:
– Add support for easily declaring static inline functions. We
already had those, but they forced modules to spell out the function
bodies twice. Eliminate some duplicates we had already grown.
Extracted from a somewhat larger patch from Andres Freund.
– Rename USE_INLINE to PG_USE_INLINE. The former name was too likely
to conflict with symbols from external headers; and, as seen in
recent buildfarm failures in member spoonbill, it has now happened
at least in plpython.
– restore permission bits
Tom Lane pushed:
– Code review for 64-bit-large-object patch. Fix
broken-on-bigendian-machines byte-swapping functions, add missed
update of alternate regression expected file, improve error
reporting, remove some unnecessary code, sync testlo64.c with
current testlo.c (it seems to have been cloned from a very old copy
of that), assorted cosmetic improvements.
– Fix lo_read, lo_write, lo_truncate to cope with “size_t” length
parameters. libpq defines these functions as accepting “size_t”
lengths … but the underlying backend functions expect signed int32
length parameters, and so will misinterpret any value exceeding
INT_MAX. Fix the libpq side to throw error rather than possibly
doing something unexpected. This is a bug of long standing, but I
doubt it’s worth back-patching. The problem is really pretty
academic anyway with lo_read/lo_write, since any caller expecting
sane behavior would have to have provided a multi-gigabyte buffer.
It’s slightly more pressing with lo_truncate, but still we haven’t
supported large objects over 2GB until now.
– Fix lo_export usage in example programs. lo_export returns -1, not
zero, on failure.
– Fix lo_import and lo_export to return useful error messages more
often. I found that these functions tend to return -1 while leaving
an empty error message string in the PGconn, if they suffer some
kind of I/O error on the file. The reason is that lo_close, which
thinks it’s executed a perfectly fine SQL command, clears the
errorMessage. The minimum-change workaround is to reorder
operations here so that we don’t fill the errorMessage until after
– Remove unnecessary overhead in backend’s large-object operations.
Do read/write permissions checks at most once per large object
descriptor, not once per lo_read or lo_write call as before. The
repeated tests were quite useless in the read case since the
snapshot-based tests were guaranteed to produce the same answer
every time. In the write case, the extra tests could in principle
detect revocation of write privileges after a series of writes has
started — but there’s a race condition there anyway, since we’d
check privileges before performing and certainly before committing
the write. So there’s no real advantage to checking every single
time, and we might as well redefine it as “only check the first
time”. On the same reasoning, remove the LargeObjectExists checks
in inv_write and inv_truncate. We already checked existence when
the descriptor was opened, and checking again doesn’t provide any
real increment of safety that would justify the cost.
– Fix PGXS support for building loadable modules on AIX. Building a
shlib on AIX requires use of the mkldexport.sh script, but we failed
to install that, preventing its use from non-source-tree contexts.
Also, Makefile.aix had the wrong idea about where to find the
installed copy of the postgres.imp symbol file used by AIX. Per
report from John Pierce. Patch all the way back, since this has
been broken since the beginning of PGXS.
– Set procost to 10 for each of the pg_foo_is_visible() functions.
The idea here is to make sure the planner will evaluate these
functions last not first among the filter conditions in psql pattern
search and tab-completion queries. We’ve discussed this several
times, and there was consensus to do it back in August, but we
didn’t want to do it just before a release. Now seems like a safer
time. No catversion bump, since this catalog change doesn’t create
a backend incompatibility nor any regression test result changes.
– Update obsolete text in fdwhandler.sgml. Etsuro Fujita, with some
wording adjustment by me.
– Update obsolete comment. We no longer use GetNewOidWithIndex on
pg_largeobject; rather, pg_largeobject_metadata’s regular OID column
is considered the repository of OIDs for large objects. The special
functionality is still needed for TOAST tables however.
– Create an improved FDW option validator function for contrib/dblink.
dblink now has its own validator function dblink_fdw_validator(),
which is better than the core function postgresql_fdw_validator()
because it gets the list of legal options from libpq instead of
having a hard-wired list. Make the dblink extension module provide
a standard foreign data wrapper dblink_fdw that encapsulates use of
this validator, and recommend use of that wrapper instead of making
up wrappers on the fly. Unfortunately, because ad-hoc wrappers
*were* recommended practice previously, it’s not clear when we can
get rid of postgresql_fdw_validator without causing upgrade
problems. But this is a step in the right direction. Shigeru
Hanada, reviewed by KaiGai Kohei
– Remove configure-option-dependent test cases from dblink tests. The
HINTs generated for these error cases vary across builds. We could
try to work around that, but the test cases aren’t really useful
enough to justify taking any trouble. Per buildfarm.
– Fix cross-type case in partial row matching for hashed subplans.
When hashing a subplan like “WHERE (a, b) NOT IN (SELECT x, y FROM
…)”, findPartialMatch() attempted to match rows using the
hashtable’s internal equality operators, which of course are for x
and y’s datatypes. What we need to use are the potentially
cross-type operators for a=x, b=y, etc. Failure to do that leads to
wrong answers or even crashes. The scope for problems is limited to
cases where we have different types with compatible hash functions
(else we’d not be using a hashed subplan), but for example int4 vs
int8 can cause the problem. Per bug #7597 from Bo Jensen. This has
been wrong since the hashed-subplan code was written, so patch all
the way back.
– Make equal() ignore CoercionForm fields for better planning with
casts. This change ensures that the planner will see implicit and
explicit casts as equivalent for all purposes, except in the
minority of cases where there’s actually a semantic difference (as
reflected by having a 3-argument cast function). In particular,
this fixes cases where the EquivalenceClass machinery failed to
consider two references to a varchar column as equivalent if one was
implicitly cast to text but the other was explicitly cast to text,
as seen in bug #7598 from Vaclav Juza. We have had similar bugs
before in other parts of the planner, so I think it’s time to fix
this problem at the core instead of continuing to band-aid around
it. Remove set_coercionform_dontcare(), which represents the
band-aid previously in use for allowing matching of index and
constraint expressions with inconsistent cast labeling. (We can
probably get rid of COERCE_DONTCARE altogether, but I don’t think
removing that enum value in back branches would be wise; it’s
possible there’s third party code referring to it.) Back-patch to
9.2. We could go back further, and might want to once this has been
tested more; but for the moment I won’t risk destabilizing plan
choices in long-since-stable branches.
– Fix unportable format string. Per compiler warning.
– Get rid of COERCE_DONTCARE. We don’t need this hack any more.
– Fix oversight in new code for printing rangetable aliases. In
commit 11e131854f8231a21613f834c40fe9d046926387, I missed the case
of a CTE RTE that doesn’t have a user-defined alias, but does have
an alias assigned by set_rtable_names(). Per report from Peter
Eisentraut. While at it, refactor slightly to reduce code
– Split up process latch initialization for more-fail-soft behavior.
In the previous coding, new backend processes would attempt to
create their self-pipe during the OwnLatch call in InitProcess.
However, pipe creation could fail if the kernel is short of
resources; and the system does not recover gracefully from a FATAL
error right there, since we have armed the dead-man switch for this
process and not yet set up the on_shmem_exit callback that would
disarm it. The postmaster then forces an unnecessary database-wide
crash and restart, as reported by Sean Chittenden. There are
various ways we could rearrange the code to fix this, but the
simplest and sanest seems to be to split out creation of the
self-pipe into a new function InitializeLatchSupport, which must be
called from a place where failure is allowed. For most processes
that gets called in InitProcess or InitAuxiliaryProcess, but
processes that don’t call either but still use latches need their
own calls. Back-patch to 9.1, which has only a part of the latch
logic that 9.2 and HEAD have, but nonetheless includes this bug.
Peter Eisentraut pushed:
– Remove generation of repl_gram.h. It was apparently never
– Remove _FORTIFY_SOURCE. Apparently, on some glibc versions this
causes warnings when optimization is not enabled. Altogether, there
appear to be too many incompatibilities surrounding this.
– Refactor flex and bison make rules. Numerous flex and bison make
rules have appeared in the source tree over time, and they are all
virtually identical, so we can replace them by pattern rules with
some variables for customization. Users of pgxs will also be able
to benefit from this.
Simon Riggs pushed:
– Add microsecs/op display to pg_test_fsync utility e.g. fsync
2103.613 ops/sec ( 475 microsecs/op) Peter Geoghegan
– Use tablespace_option consistently on doc page. Fujii Masao
Bruce Momjian pushed:
– In pg_upgrade, issue proper error message when we can’t open
PG_VERSION. Backpatch to 9.2.
– In our source code, make a copy of getopt’s ‘optarg’ string
arguments, rather than just storing a pointer.
Andrew Dunstan pushed:
– Unbreak MSVC builds after recent Makefile refactoring. Based on a
suggestion by Peter Eisentraut.
http://git.postgresql.org/pg/commitdiff/e583ffe947de7a6e3be49a0f267234616f390485== Rejected Patches (for now) ==
No one was disappointed this week
== Pending Patches ==
Amit Kapila sent in another revision of the patch to increase
performance of update operations by decreasing WAL volume.
KaiGai Kohei sent in another revision of the patch to add row-level
Andres Freund sent in a patch to make MemSetLoop stop ignoring the
Peter Geoghegan sent in a patch to fix the FORTIFY_SOURCE fix of
Peter Geoghegan and Alvaro Herrera traded new revisions of the patch
to add embedded lists.
Noah Misch and Brar Piening traded revisions of the patch to allow
compiling with Microsoft Visual Studio 2012 RC.
Alexander Korotkov sent in another revision of the patch to sharpen
statistics and selectivity estimation for ranges.
Shigeru HANADA sent in another revision of the patch to add a FDW for
Heikki Linnakangas sent in another revision of the patch to ease
switching timeline over streaming replication.
Sébastien Lardière sent in two revisions of a patch to add TRUNCATE IF
Vik Reykja sent in two revisions of a patch to add DEALLOCATE IF
Marco Nenciarini sent in another revision of the patch to add array
ELEMENT foreign keys.
Joel Jacobson sent in another revision of the patch to ensure that
pg_dump dumps functions in a deterministic order.
Pavel Stehule sent in another revision of the patch to add enhanced
Zoltan Boszormenyi sent in five more revisions of a patch to make
pg_basebackup configure and start standby.
Marcus Wanner sent in a patch to fix an issue where WAL_DEBUG logs
Dean Rasheed sent in another revision of the patch to make VIEWs
updateable automatically where appropriate.
Abhijit Menon-Sen sent in a patch to clarify the meanings of
tup_returned and tup_fetched.
Dimitri Fontaine sent in another revision of the patch to deparse DDL
in service of event triggers.
Pavel Stehule and Shigeru HANADA traded patches to add gset to
psql, setting a set of variables to the row returned.
Bruce Momjian sent in a patch to fix log_line_prefix and session
Michael Paquier sent in another revision of the patch to add REINDEX
Guillaume Lelarge sent in a patch to fix a bug in pg_restore -c.
Fujii Masao sent in a patch to fix a typo in Heikki Linnakangas’s
patch to ensure that standbys detect network partitions faster.
KaiGai Kohei sent in another revision of the patch to extend the
arguments of OAT_POST_CREATE for sepgsql.
Phil Sorber sent in a WIP patch to create a pg_ping utility.
Andrew Dunstan sent in another revision of the patch to allow pg_dump
to run in parallel.
Satoshi Nagayasu sent in two more revisions of a patch to add a
Gilles Darold sent in a patch to add IF EXISTS to DROP statements in
pg_restore, bullet-proofing same against that type of confusing
Josh Kupershmidt sent in a patch to fix the string escaping in
tutorial/syscat.source, as it had not kept up with
standards_conforming_strings’ modern default.
Comments are closed.