== PostgreSQL Weekly News - November 03 2013 ==
== PostgreSQL Product News ==
direct_cp, a drop-in replacement for cp for use in WAL archiving which
streamlines by using direct IO, released.
grunt-pg-utils implements some things useful during code developement
such as tasks to version control the PostgreSql stored procedures,
automatized database restore/dump and execute query.
ODB 2.3.0, an ORM for C++ which supports PostgreSQL, released.
pgBadger 4.0, a parallel PostgreSQL log analyzer written in Perl,
pg_statsinfo 2.5.0 and pg_stats_reporter 2.0.0 released.
== PostgreSQL Jobs for November ==
== PostgreSQL Local ==
PGConf.DE 2013 will be held November 8th, 2013, at the Rhineland
Industrial Museum in Oberhausen.
The fourth edition of the Argentinian PostgreSQL Day will be held on
November 14 2013 in Buenos Aires, Argentina.
The next meeting of the Indian PostgreSQL User Group will be in Pune
on November 16, 2013. Info and RSVP:
PGDay Cuba will be November 28-29, 2013.
== 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 ==
Tom Lane pushed:
- Suppress duplicate-index-entry warning introduced by previous
commit. We don't need two index entries for lo_create pointing at
the same section. It's a bit pedantic for the toolchain to warn
about this, but warn it does.
- Improve documentation about usage of FDW validator functions. SGML
documentation, as well as code comments, failed to note that an
FDW's validator will be applied to foreign-table options for foreign
tables using the FDW. Etsuro Fujita
- Prevent using strncpy with src == dest in TupleDescInitEntry. The C
and POSIX standards state that strncpy's behavior is undefined when
source and destination areas overlap. While it remains dubious
whether any implementations really misbehave when the pointers are
exactly equal, some platforms are now starting to force the issue by
complaining when an undefined call occurs. (In particular OS X 10.9
has been seen to dump core here, though the exact set of
circumstances needed to trigger that remain elusive. Similar
behavior can be expected to be optional on Linux and other platforms
in the near future.) So tweak the code to explicitly do nothing
when nothing need be done. Back-patch to all active branches. In
HEAD, this also lets us get rid of an exception in valgrind.supp.
Per discussion of a report from Matthias Schmitt.
- Fix old typo in comment. NFAs have children, but their individual
- Fix some odd behaviors when using a SQL-style simple GMT offset
timezone. Formerly, when using a SQL-spec timezone setting with a
fixed GMT offset (called a "brute force" timezone in the code), the
session_timezone variable was not updated to match the nominal
timezone; rather, all code was expected to ignore session_timezone
if HasCTZSet was true. This is of course obviously fragile, though
a search of the code finds only timeofday() failing to honor the
rule. A bigger problem was that DetermineTimeZoneOffset() supposed
that if its pg_tz parameter was pointer-equal to session_timezone,
then HasCTZSet should override the parameter. This would cause
datetime input containing an explicit zone name to be treated as
referencing the brute-force zone instead, if the zone name happened
to match the session timezone that had prevailed before installing
the brute-force zone setting (as reported in bug #8572). The same
malady could affect AT TIME ZONE operators. To fix, set up
session_timezone so that it matches the brute-force zone
specification, which we can do using the POSIX timezone definition
syntax "offset", and get rid of the bogus lookaside check in
DetermineTimeZoneOffset(). Aside from fixing the erroneous behavior
in datetime parsing and AT TIME ZONE, this will cause the
timeofday() function to print its result in the user-requested time
zone rather than some previously-set zone. It might also affect
results in third-party extensions, if there are any that make use of
session_timezone without considering HasCTZSet, but in all cases the
new behavior should be saner than before. Back-patch to all
- Remove internal uses of CTimeZone/HasCTZSet. The only remaining
places where we actually look at CTimeZone/HasCTZSet are
abstime2tm() and timestamp2tm(). Now that session_timezone is
always valid, we can remove these special cases. The caller-visible
impact of this is that these functions now always return a valid
zone abbreviation if requested, whereas before they'd return a NULL
pointer if a brute-force timezone was in use. In the existing code,
the only place I can find that changes behavior is to_char(), whose
TZ format code will now print something useful rather than nothing
for such zones. (In the places where the returned zone abbreviation
is passed to EncodeDateTime, the lack of visible change is because
we've chosen the abbreviation used for these zones to match what
EncodeTimezone would have printed.) It's likely that there is now a
fair amount of removable dead code around the call sites, namely
anything that's meant to cope with getting a NULL timezone
abbreviation, but I've not made an effort to root that out. This
could be back-patched if we decide we'd like to fix to_char()'s
behavior in the back branches, but there doesn't seem to be much
enthusiasm for that at present.
- Remove CTimeZone/HasCTZSet, root and branch. These variables no
longer have any useful purpose, since there's no reason to
special-case brute force timezones now that we have a valid
session_timezone setting for them. Remove the variables, and remove
the SET/SHOW TIME ZONE code that deals with them. The user-visible
impact of this is that SHOW TIME ZONE will now show a POSIX-style
zone specification, in the form "<+-offset>-+offset", rather than an
interval value when a brute-force zone has been set. While perhaps
less intuitive, this is a better definition than before because it's
actually possible to give that string back to SET TIME ZONE and get
the same behavior, unlike what used to happen. We did not
previously mention the angle-bracket syntax when describing POSIX
timezone specifications; add some documentation so that people can
figure out what these strings do. (There's still quite a lot of
undocumented functionality there, but anybody who really cares can
go read the POSIX spec to find out about it. In practice most
people seem to prefer Olsen-style city names anyway.)
- Ensure all files created for a single BufFile have the same resource
owner. Callers expect that they only have to set the right resource
owner when creating a BufFile, not during subsequent operations on
it. While we could insist this be fixed at the caller level, it
seems more sensible for the BufFile to take care of it. Without
this, some temp files belonging to a BufFile can go away too soon,
eg at the end of a subtransaction, leading to errors or crashes.
Reported and fixed by Andres Freund. Back-patch to all active
- Retry after buffer locking failure during SPGiST index creation.
The original coding thought this case was impossible, but it can
happen if the bgwriter or checkpointer processes decide to write out
an index page while creation is still proceeding, leading to a bogus
"unexpected spgdoinsert() failure" error. Problem reported by
Jonathan S. Katz. Teodor Sigaev
- Prevent memory leaks from accumulating across printtup() calls.
Historically, printtup() has assumed that it could prevent memory
leakage by pfree'ing the string result of each output function and
manually managing detoasting of toasted values. This amounts to
assuming that datatype output functions never leak any memory
internally; an assumption we've already decided to be bogus
elsewhere, for example in COPY OUT. range_out in particular is
known to leak multiple kilobytes per call, as noted in bug #8573
from Godfried Vanluffelen. While we could go in and fix that leak,
it wouldn't be very notationally convenient, and in any case there
have been and undoubtedly will again be other leaks in other output
functions. So what seems like the best solution is to run the
output functions in a temporary memory context that can be reset
after each row, as we're doing in COPY OUT. Some quick
experimentation suggests this is actually a tad faster than the
retail pfree's anyway. This patch fixes all the variants of
printtup, except for debugtup() which is used in standalone mode.
It doesn't seem worth worrying about query-lifespan leaks in
standalone mode, and fixing that case would be a bit tedious since
debugtup() doesn't currently have any startup or shutdown functions.
While at it, remove manual detoast management from several other
output-function call sites that had copied it from printtup(). This
doesn't make a lot of difference right now, but in view of recent
discussions about supporting "non-flattened" Datums, we're going to
want that code gone eventually anyway. Back-patch to 9.2 where
range_out was introduced. We might eventually decide to back-patch
this further, but in the absence of known major leaks in older
output functions, I'll refrain for now.
- Get rid of more cases of the "must detoast before output function"
meme. I missed that json.c was doing this too, because for some
bizarre reason it wasn't doing it adjacent to the output function
Andrew Dunstan pushed:
- Work around NetBSD shell issue in pg_upgrade test script. The
NetBSD shell apparently returns non-zero from an unset command if
the variable is already unset. This matters when, as in pg_upgrade's
test.sh, we are working under 'set -e'. To protect against this, we
first set the PG variables to an empty string before unsetting them
completely. Error found on buildfarm member coypu, solution from
Robert Haas pushed:
- Modify dynamic shared memory code to use Size rather than uint64.
This is more consistent with what we do elsewhere.
- Avoid too-large shift on 32-bit Windows. Apparently, shifts greater
than or equal to the width of the type are undefined, and can
surprisingly produce a non-zero value. Amit Kapila, with a comment
- Use appendStringInfoString instead of appendStringInfo where
possible. This shaves a few cycles, and generally seems like good
programming practice. David Rowley
Kevin Grittner pushed:
- Fix subquery reference to non-populated MV in CMV. A subquery
reference to a matview should be allowed by CREATE MATERIALIZED VIEW
WITH NO DATA, just like a direct reference is. Per bug report from
Laurent Sartran. Backpatch to 9.3.
- Acquire appropriate locks when rewriting during RMV. Since the
query has not been freshly parsed when executing REFRESH
MATERIALIZED VIEW, locks must be explicitly taken before rewrite.
Backpatch to 9.3. Andres Freund
Michael Meskes pushed:
- Changed test case slightly so it doesn't have an unused typedef.
== Rejected Patches (for now) ==
No one was disappointed this week :-)
== Pending Patches ==
Asif Naeem sent in another revision of a patch to patch a
vulnerability in the Windows version of psql.
Nigel Heron sent in another revision of a patch to add stats for
Amit Kapila sent in a patch to fix an issue where in the Windows
implementation of dynamic shared memory, the Size calculation for
creating dynamic shared memory is assuming that requested size for
creation of dynamic shared memory segment is uint64, which is no
longer the correct type.
Abhijit Menon-Sen sent in a patch to round the size of dynamic shared
memory up a multiple of 2MB unconditionally, and adds a DEBUG1 log
message when the attempt with MAP_HUGETLB fails, falling back to
Gurjeet Singh sent in a patch to shave a few instructions from
child-process startup sequence.
Kyotaro HORIGUCHI sent in a WIP patch to enable using indexes in a
MauMau sent in three revisions of a patch to fix a bug where
PostgreSQL fails to start on Windows if it crashes after tablespace
Robert Haas sent in a set of patches to: 1. add the concept of
on_dsm_detach hooks. 2. provide a facility for sizing a dynamic
shared memory segment before creation, and for dividing it up into
chunks after it's been created. 3. Create an infrastructure for
sending and receiving messages of arbitrary length using ring buffers
stored in shared memory (presumably dynamic shared memory, but
hypothetically the main shared memory segment could be used). 4.
a demonstration of how to use the various background worker and
dynamic shared memory facilities introduced over the course of the 9.4
release cycle, and the facilities introduced by patches #1-#3 of this
series, to actually do something interesting.
Kyotaro HORIGUCHI sent in a patch to get more from indexes in the
UNION [ALL] cases.
Kyotaro HORIGUCHI sent in a patch to add a fallocate() system call to
improve sequential read/write peformance.
Antonin Houska sent in a patch to allow a reference to the parent
query from any sublink.
Etsuro Fujita sent in a patch to show lossy heap block info in the
EXPLAIN ANALYZE output for bitmap heap scans.
Kevin Grittner sent in a patch to silence some compiler warnings.
Mitsumasa KONDO sent in a patch to add an "accurate" option to
Teodor Sigaev sent in a patch to fix a bug in SP-GiST index creation.
Craig Ringer sent in a patch to add writer-side checks to row-based
Mika Eloranta sent in a patch to fix a bug in pg_receivelog where it
calculated the xlog segment number incorrectly when started after the
previous instance was interrupted.
Andres Freund sent in a patch to fix an issue where it currently is
possible that buffile.c segments get created belonging to the wrong
resource owner leading to WARNINGs ala "temporary file leak: File %d
still referenced", ERRORs like "write failed", asserts and segfaults.
Sent via pgsql-announce mailing list ([email protected])
To make changes to your subscription: