== PostgreSQL Weekly News – July 24 2011 ==
== PostgreSQL Weekly News – July 24 2011 ==
== PostgreSQL Product News ==
pgbuildfarm client 4.6 released.
== PostgreSQL Jobs for July ==
== PostgreSQL Local ==
PGDay Porto Alegre will be on August 19, 2011 in Porto Alegre, RS, Brazil.
Postgres Open 2011, a conference focused on disruption of the database
industry through PostgreSQL, will take place September 14-16, 2011 in
Chicago, Illinois at the Westin Michigan Avenue hotel.
PG-Day Denver 2011 will be held on Friday, October 21st, 2011 at
the Auraria Campus near downtown Denver, Colorado.
PostgreSQL Conference West (#PgWest) will be held September 27th-30th,
2011 at the San Jose Convention center in San Jose, California, USA.
PostgreSQL Conference Europe 2011 will be held on October 18-21 in
pgbr will be in Sao Paulo, Brazil November 3-4, 2011.
PGConf.DE 2011 is the German-speaking PostgreSQL Conference and will
take place on November 11th in the Rheinisches Industriemuseum in
Oberhausen, Germany. 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 firstname.lastname@example.org, German language
to email@example.com, Italian language to firstname.lastname@example.org. Spanish language
== Reviews ==
== Applied Patches ==
Robert Haas pushed:
– Add pg_opfamily_is_visible. We already have similar functions for
many other object types, including operator classes, so it seems
like we should have this one, too. Extracted from a larger patch by
– Create a “fast path” for acquiring weak relation locks. When an
AccessShareLock, RowShareLock, or RowExclusiveLock is requested on
an unshared database relation, and we can verify that no conflicting
locks can possibly be present, record the lock in a per-backend
queue, stored within the PGPROC, rather than in the primary lock
table. This eliminates a great deal of contention on the lock
manager LWLocks. This patch also refactors the interface between
GetLockStatusData() and pg_lock_status() to be a bit more abstract,
so that we don’t rely so heavily on the lock manager’s internal
representation details. The new fast path lock structures don’t
have a LOCK or PROCLOCK structure to return, so we mustn’t depend on
that for purposes of listing outstanding locks. Review by Jeff
– Avoid index rebuild for no-rewrite ALTER TABLE .. ALTER TYPE. Noah
Misch. Review and minor cosmetic changes by me.
– Remove superfluous variable. Reported by Peter Eisentraut.
– Some refinement for the “fast path” lock patch. 1. In
GetLockStatusData, avoid initializing instance before we’ve ensured
that the array is large enough. Otherwise, if repalloc moves the
block around, we’re hosed. 2. Add the word “Relation” to the name
of some identifiers, to avoid assuming that the fast-path mechanism
will only ever apply to relations (though these particular parts
certainly will). Some of the macros could possibly use similar
treatment, but the names are getting awfully long already. 3. Add a
missing word to comment in AtPrepare_Locks().
– Minor improvement to pg_seclabel documentation. This is a bit more
consistent with the way pg_description is documented, and also
include a useful cross-link.
– Improve sepgsql and SECURITY LABEL documentation. KaiGai Kohei,
based on feedback from Yeb Havinga, with some corrections by me.
– Support SECURITY LABEL on databases, tablespaces, and roles. This
requires a new shared catalog, pg_shseclabel. Along the way, fix
the security_label regression tests so that they don’t monkey with
the labels of any pre-existing objects. This is unlikely to matter
in practice, since only the label for the “dummy” provider was being
manipulated. But this way still seems cleaner. KaiGai Kohei, with
fairly extensive hacking by me.
– Unbreak unlogged tables. I broke this in commit
5da79169d3e9f0fab47da03318c44075b3f824c5, which was obviously
insufficiently well tested. Add some regression tests in the hope
of making future slip-ups more likely to be noticed.
Peter Eisentraut pushed:
– Remove claim that the project is not represented in the SQL working
group We have a few people involved there now.
– Note that information_schema.sql_languages was removed in SQL:2008
– Put inline declaration before return type. gcc -Wextra complains
that the other way around is obsolescent, and this was the only
place where it was written in this order.
– Change debug message from ereport to elog
– Fix typo
– Change EDITOR_LINENUMBER_SWITCH to an environment variable. Also
change “switch” to “arg” because “switch” is a bit of a sloppy term.
So the environment variable is called PSQL_EDITOR_LINENUMBER_ARG.
Set “+” as hardcoded default value on Unix (since “vi” is the
hardcoded default editor), so many users won’t have to configure
this at all. Move the documentation around a bit to centralize the
editor configuration under environment variables, rather than
repeating bits of it under every backslash command that invokes an
Michael Meskes pushed:
– Made ecpglib write double with a precision of 15 digits. Patch
originally by Akira Kurosawa <email@example.com>.
– Adapted expected result for latest change to ecpglib.
Tom Lane pushed:
– Add GET STACKED DIAGNOSTICS plpgsql command to retrieve exception
info. This is more SQL-spec-compliant, more easily extensible, and
better performing than the old method of inventing special
variables. Pavel Stehule, reviewed by Shigeru Hanada and David
– Rewrite libxml error handling to be more robust. libxml reports
some errors (like invalid xmlns attributes) via the error handler
hook, but still returns a success indicator to the library caller.
This causes us to miss some errors that are important to report.
Since the “generic” error handler hook doesn’t know whether the
message it’s getting is for an error, warning, or notice, stop using
that and instead start using the “structured” error handler hook,
which gets enough information to be useful. While at it, arrange to
save and restore the error handler hook setting in each libxml-using
function, rather than assuming we can set and forget the hook. This
should improve the odds of working nicely with third-party libraries
that also use libxml. In passing, volatile-ize some local variables
that get modified within PG_TRY blocks. I noticed this while
testing with an older gcc version than I’d previously tried to
compile xml.c with. Florian Pflug and Tom Lane, with extensive
review/testing by Noah Misch
– Ensure that xpath() escapes special characters in string values.
Without this it’s possible for the output to not be legal XML, as
illustrated by the added regression test cases. NB: this change
will need to be called out as an incompatibility in the 9.2 release
notes, since it’s possible somebody was relying on the old behavior,
even though it’s clearly wrong. Florian Pflug, reviewed by Radoslaw
– Make xpath() do something useful with XPath expressions that return
scalars. Previously, xpath() simply returned an empty array if the
expression did not yield a node set. This is useless for
expressions that return scalars, such as one with name() at the top
level. Arrange to return the scalar value as a single-element xml
array, instead. (String values will be suitably escaped.) This
change will also cause xpath_exists() to return true, not false, for
such expressions. Florian Pflug, reviewed by Radoslaw Smogura
– Fix PQsetvalue() to avoid possible crash when adding a new tuple.
PQsetvalue unnecessarily duplicated the logic in pqAddTuple, and
didn’t duplicate it exactly either — pqAddTuple does not care what
is in the tuple-pointer array positions beyond the last valid entry,
whereas the code in PQsetvalue assumed such positions would contain
NULL. This led to possible crashes if PQsetvalue was applied to a
PGresult that had previously been enlarged with pqAddTuple, for
instance one built from a server query. Fix by relying on
pqAddTuple instead of duplicating logic, and not assuming anything
about the contents of res->tuples[res->ntups]. Back-patch to 8.4,
where PQsetvalue was introduced. Andrew Chernow
– Rethink behavior of CREATE OR REPLACE during CREATE EXTENSION. The
original implementation simply did nothing when replacing an
existing object during CREATE EXTENSION. The folly of this was
exposed by a report from Marc Munro: if the existing object belongs
to another extension, we are left in an inconsistent state. We
should insist that the object does not belong to another extension,
and then add it to the current extension if not already a member.
– Use OpenSSL’s SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag. This
disables an entirely unnecessary “sanity check” that causes failures
in nonblocking mode, because OpenSSL complains if we move or compact
the write buffer. The only actual requirement is that we not modify
pending data once we’ve attempted to send it, which we don’t. Per
testing and research by Martin Pihlak, though this fix is a lot
simpler than his patch. I put the same change into the backend,
although it’s less clear whether it’s necessary there. We do use
nonblock mode in some situations in streaming replication, so seems
best to keep the same behavior in the backend as in libpq.
Back-patch to all supported releases.
– Improve libpq’s error reporting for SSL failures. In many cases,
pqsecure_read/pqsecure_write set up useful error messages, which
were then overwritten with useless ones by their callers. Fix this
by defining the responsibility to set an error message to be
entirely that of the lower-level function when using SSL.
Back-patch to 8.3; the code is too different in 8.2 to be worth the
– Fix previous patch so it also works if not USE_SSL (mea culpa). On
balance, the need to cover this case changes my mind in favor of
pushing all error-message generation duties into the two fe-secure.c
routines. So do it that way.
Simon Riggs pushed:
– Cascading replication feature for streaming log-based replication.
Standby servers can now have WALSender processes, which can work
with either WALReceiver or archive_commands to pass data. Fully
updated docs, including new conceptual terms of sending server,
upstream and downstream servers. WALSenders terminated when promote
to master. Fujii Masao, review, rework and doc rewrite by Simon
– Introduce sending servers as new category for replication params.
– Minor doc additions for cascading replication.
– Remove O(N
) performance issue with multiple SAVEPOINTs.
Subtransaction locks now released en masse at main commit, rather
than repeatedly re-scanning for locks as we ascend the nested
transaction tree. Split transaction state TBLOCK_SUBEND into two
states, TBLOCK_SUBCOMMIT and TBLOCK_SUBRELEASE to allow the commit
path to be optimised using the existing code in
ResourceOwnerRelease() which appears to have been intended for this
usage, judging from comments therein.
Alvaro Herrera pushed:
- Add expected regress output on stricter isolation levels. These new
files allow the new FK tests on isolationtester to pass on the
serializable and repeatable read isolation levels (which are
untested by the buildfarm). Author: Kevin Grittner Reviewed by Noah
- Make isolationtester more robust on locked commands. Noah Misch
diagnosed the buildfarm problems in the isolation tests partly as
failure to differentiate backends properly; the old code was using
backend IDs, which is not good enough because a new backend might
use an already used ID. Use PIDs instead. Also, the code was
purposely careless about other concurrent activity, because it isn't
expected; and in fact, it doesn't affect the vast majority of the
time. However, it can be observed that autovacuum can block tables
for long enough to cause sporadic failures. The new code accounts
for that by ignoring locks held by processes not explicitly declared
in our spec file. Author: Noah Misch
- Increase deadlock_timeout to 100ms in FK isolation tests. The
previous value of 20ms is dangerously close to the time actually
spent just waiting for the deadlock to happen, so on occasion it
causes the test to fail simply because the other session didn't get
to run early enough, not managing to cause the deadlock that needs
to be detected. With this new value, it's expected that most
machines on normal load will be able to pass the test. Author: Noah
Bruce Momjian pushed:
- In pg_upgrade, use pg_strudup(), for consistency.
- In pg_upgrade, fix the -l/log option to work on Windows. Also,
double-quote the log file name in all places, to allow (on all
platforms) log file names with spaces. Back patch to 9.0 and 9.1.
- In pg_upgrade, add C comment about why we don't try to do shared
file writes for logging.
- In pg_upgrade on Windows, check if the directory is writable by
actually creating and removing a file because access() doesn't work
on that platform. Backpatch to 9.1 where this check was added.
Andrew Dunstan pushed:
- Unbreak Windows builds broken by EDITOR_LINENUMBER_ARG change.
== Rejected Patches (for now) ==
No one was disappointed this week :-)
== Pending Patches ==
Alexander Korotkov sent in two more revisions of the patch to do fast
GiST index builds.
Peter Eisentraut sent in a patch to allow reporting of hostnames from
pg_hba.conf in error messages.
KaiGai Kohei and Yeb Havinga traded revisions of the patch to create a
userspace access vector cache.
Josh Kupershmidt sent in two more revisions of the patch to allow
psql's \dd to show constraint comments.
Robert Haas sent in another revision of a patch to enable lazy vxid
Kevin Grittner sent in two revisions of a patch to fix bug 6123.
Robert Haas sent in a patch to eliminate sinval in several places
where it was slowing things down.
Alvaro Herrera sent in a patch to catalog NOT NULL constraints.
Josh Kupershmidt sent in a patch to fix some wrong descriptions in
\d+, and an patch for 8.4 which documents the fact that it's possible
to put comments on index columns.
Hitoshi Harada and Yeb Havinga traded patches to optimize aggregates
Josh Kupershmidt sent in another revision of the patch to fix describe
comments in psql.
Laurenz Albe sent in a doc patch explaining more about how foreign
data wrappers work from the implementor's point of view.
Florian Pflug sent in a patch, per discussion around a similar issue
in JSON, which changes behavior in cases of non-UTF8-encoded content.
Andrew Dunstan sent in a patch to clean up python usage in the source
code for PL/PythonU.
Comments are closed.