|| ||David Fetter <david-AT-fetter.org> |
|| ||PostgreSQL Announce <pgsql-announce-AT-postgresql.org> |
|| ||[ANNOUNCE] == PostgreSQL Weekly News - November 18 2012 == |
|| ||Sun, 18 Nov 2012 23:05:09 -0800|
|| ||Article, Thread
== 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@example.com, German language
to firstname.lastname@example.org, Italian language to email@example.com. Spanish language
== 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
- 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
Peter Eisentraut sent in a patch to add CREATE RECURSIVE VIEW.
Peter Geoghegan sent in a patch to recommend settings for the
Abhijit Menon-Sen sent in two revisions of a patch to create a binary
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
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
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
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
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 (firstname.lastname@example.org)
To make changes to your subscription:
to post comments)