== PostgreSQL Weekly News – May 29 2011 ==
== PostgreSQL Weekly News – May 29 2011 ==
== PostgreSQL Product News ==
pgmp 1.0, a multiple-precision arithmetic system for PostgreSQL, released on PGXN.
== PostgreSQL Jobs for May ==
== PostgreSQL Local ==
PG Session 2, on PostGIS, will be held on June 23rd in Paris. The CfP
CHAR(11), the PostgreSQL Conference on Clustering, High Availability
and Replication is now open for online registration and bookings.
July 11-12 2011 in Cambridge, UK.
PostgreSQL Conference China 2011 will be held in Guangzhou July
PDXPUG is hosting PgDay on Sunday, July 24, 2011, one day before
OSCON, in Portland, Oregon, USA. Details here:
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.
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.
== 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 ==
Tom Lane pushed:
- Install defenses against overflow in BuildTupleHashTable(). The
planner can sometimes compute very large values for numGroups, and
in cases where we have no alternative to building a hashtable, such
a value will get fed directly to BuildTupleHashTable as its nbuckets
parameter. There were two ways in which that could go bad. First,
BuildTupleHashTable declared the parameter as “int” but most callers
were passing “long”s, so on 64-bit machines undetected overflow
could occur leading to a bogus negative value. The obvious fix for
that is to change the parameter to “long”, which is what I’ve done
in HEAD. In the back branches that seems a bit risky, though, since
third-party code might be calling this function. So for them, just
put in a kluge to treat negative inputs as INT_MAX. Second,
hash_create can go nuts with extremely large requested table sizes
(notably, my_log2 becomes an infinite loop for inputs larger than
LONG_MAX/2). What seems most appropriate to avoid that is to bound
the initial table size request to work_mem. This fixes bug #6035
reported by Daniel Schreiber. Although the reported case only
occurs back to 8.4 since it involves WITH RECURSIVE, I think it’s a
good idea to install the defenses in all supported branches.
- Lobotomize typmod check in convert_tuples_by_position, back branches
only. convert_tuples_by_position was rejecting attempts to coerce a
record field with -1 typmod to the same type with a non-default
typmod. This is in fact the “correct” thing to do (since we’re just
going to do a type relabeling, not invoke any length-conversion cast
function); but it results in rejecting valid cases like bug #6020,
because the source record’s tupdesc is built from Params that don’t
have typmod assigned. Since that’s a regression from previous
versions, which accepted this code, we have to do something about
it. In HEAD, I’ve fixed the problem properly by causing the Params
to receive the correct typmods; but the potential for incidental
behavioral changes seems high enough to make it unattractive to make
the same change in released branches. (And it couldn’t be fixed
that way in 8.4 anyway…) Hence this patch just modifies
convert_tuples_by_position to not complain if either the input or
the output tupdesc has typmod -1. This is still a shade tighter
checking than we did before 9.0, since before that plpgsql failed to
consider typmods at all when checking record compatibility.
(convert_tuples_by_position is currently used only by plpgsql, so
we’re not affecting other behavior.) Back-patch to 8.4, since we
recently back-ported convert_tuples_by_position into that branch.
- Make plpgsql complain about conflicting IN and OUT parameter names.
The core CREATE FUNCTION code only enforces that IN parameter names
are non-duplicate, and that OUT parameter names are separately
non-duplicate. This is because some function languages might not
have any confusion between the two. But in plpgsql, such names are
all in the same namespace, so we’d better disallow it. Per a recent
complaint from Dan S. Not back-patching since this is a small issue
and the change could cause unexpected failures if we started to
enforce it in a minor release.
- Avoid uninitialized bits in the result of QTN2QT(). Found with
additional valgrind testing. Noah Misch
- Adjust configure’s probe for libselinux so it rejects too-old
versions. We need at least version 2.0.93, so probe for a function
that was added in that version. Kaigai Kohei
- Cleanup for pull-up-isReset patch. Clear isReset before, not after,
calling the context-specific alloc method, so as to preserve the
option to do a tail call in MemoryContextAlloc (and also so this
code isn’t assuming that a failed alloc call won’t have changed the
context’s state before failing). Fix missed direct invocation of
reset method. Reformat a comment.
- Grammar cleanup for src/test/isolation/README. Josh Kupershmidt
- Suppress extensions in partial dumps. We initially had pg_dump emit
CREATE EXTENSION commands unconditionally. However, pg_dump has
long been in the habit of not dumping procedural language
definitions when a –schema or –table switch is given. It seems
appropriate to handle extensions the same way, since like PLs they
are SQL objects that are not in any particular schema. Per
complaint from Adrian Schreyer.
- Adjust configure to use “+Olibmerrno” with HP-UX C compiler, if
possible. This is reported to be necessary on some versions of that
OS. In service of this, cause PGAC_PROG_CC_CFLAGS_OPT to reject
switches that result in compiler warnings, since on yet other
versions of that OS, the switch does nothing except provoke a
warning. Report and patch by Ibrar Ahmed, further tweaking by me.
- Make decompilation of optimized CASE constructs more robust. We had
some hacks in ruleutils.c to cope with various odd transformations
that the optimizer could do on a CASE foo WHEN “CaseTestExpr = RHS”
clause. However, the fundamental impossibility of covering all
cases was exposed by Heikki, who pointed out that the “=” operator
could get replaced by an inlined SQL function, which could contain
nearly anything at all. So give up on the hacks and just print the
expression as-is if we fail to recognize it as “CaseTestExpr = RHS”.
(We must cover that case so that decompiled rules print correctly;
but we are not under any obligation to make EXPLAIN output be 100%
valid SQL in all cases, and already could not do so in some other
cases.) This approach requires that we have some printable
representation of the CaseTestExpr node type; I used
“CASE_TEST_EXPR”. Back-patch to all supported branches, since the
problem case fails in all.
- Preserve caller’s memory context in ProcessCompletedNotifies().
This is necessary to avoid long-term memory leakage, because the
main loop in PostgresMain expects to be executing in MessageContext,
and hence is a bit sloppy about freeing stuff that is only needed
for the duration of processing the current client message. The
known case of an actual leak is when encoding conversion has to be
done on the incoming command string, but there might be others. Per
report from Per-Olov Esgard. Back-patch to 9.0, where the bug was
introduced by the LISTEN/NOTIFY rewrite.
- Improve corner cases in pg_ctl’s new wait-for-postmaster-startup
code. With “-w -t 0″, we should report “still starting up”, not
“ok”. If we fall out of the loop without ever being able to call
PQping (because we were never able to construct a connection
string), report “no response”, not “ok”. This gets rid of corner
cases in which we’d claim the server had started even though it had
not. Also, if the postmaster.pid file is not there at any point
after we’ve waited 5 seconds, assume the postmaster has failed and
report that, rather than almost-certainly-fruitlessly continuing to
wait. The pidfile should appear almost instantly even when there is
extensive startup work to do, so 5 seconds is already a very
conservative figure. This part is per a gripe from MauMau — there
might be better ways to do it, but nothing simple enough to get done
- Fix null-dereference crash in parse_xml_decl(). parse_xml_decl’s
header comment says you can pass NULL for any unwanted output
parameter, but it failed to honor this contract for the “standalone”
flag. The only currently-affected caller is xml_recv, so the net
effect is that sending a binary XML value containing a standalone
parameter in its xml declaration would crash the backend. Per bug
#6044 from Christopher Dillard. In passing, remove useless
initializations of parse_xml_decl’s output parameters in xml_parse.
Back-patch to 8.3, where this code was introduced.
Peter Eisentraut pushed:
- Message style improvements
- Add a “local” replication sample entry. Also adjust alignment a bit
to distinguish commented out from comment.
- Message improvements
- Put options in some sensible order. For the –help output and
reference pages of pg_dump, pg_dumpall, pg_restore, put the options
in some consistent, mostly alphabetical, and consistent order,
rather than newest option last or something like that.
- Remove literal tabs from message strings
- Avoid compiler warning when building without zlib.
- Allow pg_basebackup compressed tar output to stdout
- Correct description of log_connections and log_disconnections. The
previous claim when these parameters could be changed was incorrect.
- Add pg_basebackup -z option for compression with default level
Robert Haas pushed:
- Improve hash_array() logic for combining hash values. The new logic
is less vulnerable to transpositions. This invalidates the contents
of hash indexes built with the old functions; hence, bump
catversion. Dean Rasheed
Heikki Linnakangas pushed:
- Fix integer overflow in text_format function, reported by Dean
Rasheed. In the passing, clarify the comment on why text_format_nv
wrapper is needed.
- Replace strdup() with pstrdup(), to avoid leaking memory. It’s been
like this since the seg module was introduced, so backpatch to 8.2
which is the oldest supported version.
- Check the return code of pthread_create(). Otherwise we go into an
infinite loop if it fails, which is what what happened on my HP-UX
box. (I think the reason it failed on that box is a misconfiguration
on my behalf, but that’s no reason to hang.)
Bruce Momjian pushed:
- In pg_upgrade, do case-insensitive checks of locale, encoding, and
ctype because these are often inconsistently capitalized.
- Add C comment about why we don’t spell out “month” in interval
Andrew Dunstan pushed:
- Convert builddoc.bat into a perl script that actually works. The
old .bat file wasn’t working for reasons that are unclear, and which
it did not seem worth the trouble to ascertain. The new perl script
has been tested and is known to work. Soon it will be tested
regularly on the buildfarm. The .bat file is kept as a simple
wrapper for the perl script.
Peter Eisentraut pushed:
- Drop “meaning” column from error code table. This is currently the
same as the condition name, so it doesn’t add any value, only clutter.
Alvaro Herrera pushed:
- Remove unused variable. Cédric Villemain
== Rejected Patches (for now) ==
No one was disappointed this week
== Pending Patches ==
Robert Haas sent in another revision of the patch to make the
visibility map crash-safe.
Alexander Korotkov sent in two more revisions of the patch to collect
statistics for array columns.
Aaron Swenson sent in a patch which changes the pg_ctl exit status
when the server is not running to 3, which the Linux Standard Base
Core Specification 3.1 requires.
Alexander Korotkov sent in a patch for GiST which moves the
GISTInsertStack structure from parent to child. This simplifies
coding and allows maintaining parts of the tree in GISTInsertStack
Jaime Casanova sent in two more revisions of the patch to add a new
column to IDENTIFY_SYSTEM.
Leonardo Francalanci sent in three more revisions of the patch to use
less space in xl_xact_commit.
Josh Kupershmidt sent in another revision of the patch to allow \dd to
show constraint comments.
Kevin Grittner sent in patches to convert from row to tuple locking,
and to document same.
Noah Misch sent in a patch to further help the domain/array mismatch.
Fujii Masao sent in a WIP patch to allow for cascading replication.
Peter Geoghegan sent in two more revisions of the patch which
monitiors and acts on postmaster death via latches on both *n*x and
Stephen Frost sent in a PoC patch to Pre-allocate ListCells.
Tom Lane sent in a patch to change how vacuum analyzes reltuples.
MauMau sent in a patch to help distinguish PostgreSQL instances in the
Windows event log.
Josh Kupershmidt sent in a patch to enable some new tab completions
for COMMENT ON in psql.
Jeff Janes sent in a patch to add an option to pgbench which stresses
Comments are closed.