]> granicus.if.org Git - postgresql/log
postgresql
11 years agoPrevent using strncpy with src == dest in TupleDescInitEntry.
Tom Lane [Tue, 29 Oct 2013 00:49:28 +0000 (20:49 -0400)]
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.

11 years agoWork around NetBSD shell issue in pg_upgrade test script.
Andrew Dunstan [Mon, 28 Oct 2013 15:45:50 +0000 (11:45 -0400)]
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 Rémi Zara.

11 years agoImprove documentation about usage of FDW validator functions.
Tom Lane [Mon, 28 Oct 2013 14:28:35 +0000 (10:28 -0400)]
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

11 years agoPlug memory leak when reloading config file.
Heikki Linnakangas [Thu, 24 Oct 2013 12:21:50 +0000 (15:21 +0300)]
Plug memory leak when reloading config file.

The absolute path to config file was not pfreed. There are probably more
small leaks here and there in the config file reload code and assign hooks,
and in practice no-one reloads the config files frequently enough for it to
be a problem, but this one is trivial enough that might as well fix it.

Backpatch to 9.3 where the leak was introduced.

11 years agoFix memory leak when an empty ident file is reloaded.
Heikki Linnakangas [Thu, 24 Oct 2013 11:03:26 +0000 (14:03 +0300)]
Fix memory leak when an empty ident file is reloaded.

Hari Babu

11 years agoFix typos in comments.
Heikki Linnakangas [Thu, 24 Oct 2013 08:50:02 +0000 (11:50 +0300)]
Fix typos in comments.

11 years agoFix two bugs in setting the vm bit of empty pages.
Heikki Linnakangas [Wed, 23 Oct 2013 11:03:54 +0000 (14:03 +0300)]
Fix two bugs in setting the vm bit of empty pages.

Use a critical section when setting the all-visible flag on an empty page,
and WAL-logging it. log_newpage_buffer() contains an assertion that it
must be called inside a critical section, and it's the right thing to do
when modifying a buffer anyway.

Also, the page should be marked dirty before calling log_newpage_buffer(),
per the comment in log_newpage_buffer() and src/backend/access/transam/README.

Patch by Andres Freund, in response to my report. Backpatch to 9.2, like
the patch that introduced these bugs (a6370fd9).

11 years agoAdd libpgcommon to backend gettext source files
Peter Eisentraut [Sat, 19 Oct 2013 17:49:05 +0000 (13:49 -0400)]
Add libpgcommon to backend gettext source files

This ought to have been done when libpgcommon was split off from
libpgport.

11 years agoReturn valid json when converting an empty hstore.
Andrew Dunstan [Thu, 17 Oct 2013 15:09:55 +0000 (11:09 -0400)]
Return valid json when converting an empty hstore.

Oskari Saarenmaa.

11 years agodocs: correct 9.1 and 9.2 release note mention of timeline switch fix
Bruce Momjian [Tue, 15 Oct 2013 14:34:05 +0000 (10:34 -0400)]
docs: correct 9.1 and 9.2 release note mention of timeline switch fix

Backpatch through 9.1.

KONDO Mitsumasa

11 years agodoc: Fix table column number declaration
Peter Eisentraut [Fri, 11 Oct 2013 01:17:31 +0000 (21:17 -0400)]
doc: Fix table column number declaration

11 years agodoc: fix typo in release notes
Bruce Momjian [Wed, 9 Oct 2013 12:44:52 +0000 (08:44 -0400)]
doc:  fix typo in release notes

Backpatch through 8.4

Per suggestion by Amit Langote

11 years agodocs: clarify references to md5 hash and md5 crypt in pgcrypto docs
Bruce Momjian [Tue, 8 Oct 2013 16:25:18 +0000 (12:25 -0400)]
docs:  clarify references to md5 hash and md5 crypt in pgcrypto docs

Backpatch to 9.3.X.

Suggestion from Richard Neill

11 years agoStamp 9.3.1. REL9_3_1
Peter Eisentraut [Tue, 8 Oct 2013 03:17:38 +0000 (23:17 -0400)]
Stamp 9.3.1.

11 years agoRevert "Document support for VPATH builds of extensions."
Peter Eisentraut [Tue, 8 Oct 2013 02:42:52 +0000 (22:42 -0400)]
Revert "Document support for VPATH builds of extensions."

This reverts commit 9598134e3030a883ff6eea8a822466ce5143ffeb.

11 years agoRevert "Backpatch pgxs vpath build and installation fixes."
Peter Eisentraut [Tue, 8 Oct 2013 02:32:04 +0000 (22:32 -0400)]
Revert "Backpatch pgxs vpath build and installation fixes."

This reverts commit f8110c5f66ad079e3dbc0b66bed06207c43643ef.

pending resolution of
http://www.postgresql.org/message-id/1381193255.25702.4.camel@vanquo.pezone.net

11 years agoRevert "Ensure installation dirs are built before contents are installed (v2)"
Peter Eisentraut [Tue, 8 Oct 2013 02:31:31 +0000 (22:31 -0400)]
Revert "Ensure installation dirs are built before contents are installed (v2)"

This reverts commit 7f165f2587f6dafe7d4d438136dd959ed5610979.

pending resolution of
http://www.postgresql.org/message-id/1381193255.25702.4.camel@vanquo.pezone.net

11 years agodocs: update release notes for 8.4.18, 9.0.14, 9.1.10, 9.2.5, 9.3.1
Bruce Momjian [Tue, 8 Oct 2013 01:35:02 +0000 (21:35 -0400)]
docs:  update release notes for 8.4.18, 9.0.14, 9.1.10, 9.2.5, 9.3.1

11 years agoFix bugs in SSI tuple locking.
Heikki Linnakangas [Mon, 7 Oct 2013 20:57:40 +0000 (23:57 +0300)]
Fix bugs in SSI tuple locking.

1. In heap_hot_search_buffer(), the PredicateLockTuple() call is passed
wrong offset number. heapTuple->t_self is set to the tid of the first
tuple in the chain that's visited, not the one actually being read.

2. CheckForSerializableConflictIn() uses the tuple's t_ctid field
instead of t_self to check for exiting predicate locks on the tuple. If
the tuple was updated, but the updater rolled back, t_ctid points to the
aborted dead tuple.

Reported by Hannu Krosing. Backpatch to 9.1.

11 years agoTranslation updates
Peter Eisentraut [Mon, 7 Oct 2013 20:27:04 +0000 (16:27 -0400)]
Translation updates

11 years agoEliminate xmin from hash tag for predicate locks on heap tuples.
Kevin Grittner [Mon, 7 Oct 2013 19:26:54 +0000 (14:26 -0500)]
Eliminate xmin from hash tag for predicate locks on heap tuples.

If a tuple was frozen while its predicate locks mattered,
read-write dependencies could be missed, resulting in failure to
detect conflicts which could lead to anomalies in committed
serializable transactions.

This field was added to the tag when we still thought that it was
necessary to carry locks forward to a new version of an updated
row.  That was later proven to be unnecessary, which allowed
simplification of the code, but elimination of xmin from the tag
was missed at the time.

Per report and analysis by Heikki Linnakangas.
Backpatch to 9.1.

11 years agoDocument support for VPATH builds of extensions.
Andrew Dunstan [Mon, 7 Oct 2013 03:03:57 +0000 (23:03 -0400)]
Document support for VPATH builds of extensions.

Cédric Villemain and me.

11 years agopg_upgrade doc: link mode additions
Bruce Momjian [Sat, 5 Oct 2013 14:18:02 +0000 (10:18 -0400)]
pg_upgrade doc: link mode additions

Mention that link mode uses less disk space, and uses junction points on
Windows.

Backpatch to 9.3.

11 years agoadd multixact-no-deadlock to schedule
Alvaro Herrera [Fri, 4 Oct 2013 17:25:30 +0000 (14:25 -0300)]
add multixact-no-deadlock to schedule

11 years agoMake some isolationtester specs more complete
Alvaro Herrera [Fri, 4 Oct 2013 17:24:46 +0000 (14:24 -0300)]
Make some isolationtester specs more complete

Also, make sure they pass on all transaction isolation levels.

11 years agoisolationtester: Allow tuples to be returned in more places
Alvaro Herrera [Fri, 4 Oct 2013 13:32:48 +0000 (10:32 -0300)]
isolationtester: Allow tuples to be returned in more places

Previously, isolationtester would forbid returning tuples in
session-specific teardown (but not global teardown), as well as in
global setup.  Allow these places to return tuples, too.

11 years agodoc: Correct psycopg URL
Peter Eisentraut [Thu, 3 Oct 2013 01:33:26 +0000 (21:33 -0400)]
doc: Correct psycopg URL

11 years agoFix copy/paste error
Magnus Hagander [Wed, 2 Oct 2013 14:42:36 +0000 (16:42 +0200)]
Fix copy/paste error

11 years agoRemove broken PGXS code for pg_xlogdump
Alvaro Herrera [Tue, 1 Oct 2013 20:36:15 +0000 (17:36 -0300)]
Remove broken PGXS code for pg_xlogdump

With the PGXS boilerplate in place, pg_xlogdump currently fails with an
ominous error message that certain targets cannot be built because
certain files do not exist.  Remove that and instead throw a quick error
message alerting the user of the actual problem, which should be easier
to diagnose that the statu quo.

Andres Freund

11 years agoAdd missing condition for pg_depend in hstore migration script.
Andrew Dunstan [Mon, 30 Sep 2013 15:33:54 +0000 (11:33 -0400)]
Add missing condition for pg_depend in hstore migration script.

Error noted by Andres Freund.

11 years agoEnsure installation dirs are built before contents are installed (v2)
Andrew Dunstan [Mon, 30 Sep 2013 14:17:30 +0000 (10:17 -0400)]
Ensure installation dirs are built before contents are installed (v2)

Push dependency on installdirs down to individual targets.

Christoph Berg

11 years agoFix snapshot leak if lo_open called on non-existent object.
Heikki Linnakangas [Mon, 30 Sep 2013 08:29:09 +0000 (11:29 +0300)]
Fix snapshot leak if lo_open called on non-existent object.

lo_open registers the currently active snapshot, and checks if the
large object exists after that. Normally, snapshots registered by lo_open
are unregistered at end of transaction when the lo descriptor is closed, but
if we error out before the lo descriptor is added to the list of open
descriptors, it is leaked. Fix by moving the snapshot registration to after
checking if the large object exists.

Reported by Pavel Stehule. Backpatch to 8.4. The snapshot registration
system was introduced in 8.4, so prior versions are not affected (and not
supported, anyway).

11 years agoFix makefile broken by hstore fix.
Andrew Dunstan [Mon, 30 Sep 2013 02:46:30 +0000 (22:46 -0400)]
Fix makefile broken by hstore fix.

11 years agoUse a new hstore extension version for added json functions.
Andrew Dunstan [Sun, 29 Sep 2013 21:41:56 +0000 (17:41 -0400)]
Use a new hstore extension version for added json functions.

This should have been done when the json functionality was added to
hstore in 9.3.0. To handle this correctly, the upgrade script therefore
uses conditional logic by using plpgsql in a DO statement to add the two
new functions and the new cast. If hstore_to_json_loose is detected as
already present and dependent on the hstore extension nothing is done.
This will require that the database be loaded with plpgsql.

People who have installed the earlier and spurious 1.1 version of hstore
will need to do:

ALTER EXTENSION hstore UPDATE;

to pick up the new functions properly.

11 years agoBackpatch pgxs vpath build and installation fixes.
Andrew Dunstan [Sun, 29 Sep 2013 21:28:16 +0000 (17:28 -0400)]
Backpatch pgxs vpath build and installation fixes.

This is a backpatch of commits d942f9d982b01026, and 6697aa2bc, back
to release 9.1 where we introduced extensions which make heavy use of
the PGXS infrastructure.

11 years agoFix erroneous statements about multiply specified JSON columns.
Andrew Dunstan [Thu, 26 Sep 2013 21:46:07 +0000 (17:46 -0400)]
Fix erroneous statements about multiply specified JSON columns.

The behaviour in json_populate_record() and json_populate_recordset()
was changed during development but the docs were not.

11 years agoFix spurious warning after vacuuming a page on a table with no indexes.
Heikki Linnakangas [Thu, 26 Sep 2013 08:24:40 +0000 (11:24 +0300)]
Fix spurious warning after vacuuming a page on a table with no indexes.

There is a rare race condition, when a transaction that inserted a tuple
aborts while vacuum is processing the page containing the inserted tuple.
Vacuum prunes the page first, which normally removes any dead tuples, but
if the inserting transaction aborts right after that, the loop after
pruning will see a dead tuple and remove it instead. That's OK, but if the
page is on a table with no indexes, and the page becomes completely empty
after removing the dead tuple (or tuples) on it, it will be immediately
marked as all-visible. That's OK, but the sanity check in vacuum would
throw a warning because it thinks that the page contains dead tuples and
was nevertheless marked as all-visible, even though it just vacuumed away
the dead tuples and so it doesn't actually contain any.

Spotted this while reading the code. It's difficult to hit the race
condition otherwise, but can be done by putting a breakpoint after the
heap_page_prune() call.

Backpatch all the way to 8.4, where this code first appeared.

11 years agoPlug memory leak in range_cmp function.
Heikki Linnakangas [Wed, 25 Sep 2013 13:02:00 +0000 (16:02 +0300)]
Plug memory leak in range_cmp function.

B-tree operators are not allowed to leak memory into the current memory
context. Range_cmp leaked detoasted copies of the arguments. That caused
a quick out-of-memory error when creating an index on a range column.

Reported by Marian Krucina, bug #8468.

11 years agoFix pgindent comment breakage
Alvaro Herrera [Tue, 24 Sep 2013 21:19:14 +0000 (18:19 -0300)]
Fix pgindent comment breakage

11 years agoUse @libdir@ in both of regress/{input,output}/security_label.source
Noah Misch [Mon, 23 Sep 2013 20:00:13 +0000 (16:00 -0400)]
Use @libdir@ in both of regress/{input,output}/security_label.source

Though @libdir@ almost always matches @abs_builddir@ in this context,
the test could only fail if they differed.  Back-patch to 9.1, where the
test was introduced.

Hamid Quddus Akhtar

11 years agodoc: Clarify that file_fdw options require values.
Robert Haas [Mon, 23 Sep 2013 18:57:01 +0000 (14:57 -0400)]
doc: Clarify that file_fdw options require values.

Mike Blackwell and Robert Haas

11 years agoFix SSL deadlock risk in libpq
Stephen Frost [Mon, 23 Sep 2013 12:33:41 +0000 (08:33 -0400)]
Fix SSL deadlock risk in libpq

In libpq, we set up and pass to OpenSSL callback routines to handle
locking.  When we run out of SSL connections, we try to clean things
up by de-registering the hooks.  Unfortunately, we had a few calls
into the OpenSSL library after these hooks were de-registered during
SSL cleanup which lead to deadlocking.  This moves the thread callback
cleanup to be after all SSL-cleanup related OpenSSL library calls.
I've been unable to reproduce the deadlock with this fix.

In passing, also move the close_SSL call to be after unlocking our
ssl_config mutex when in a failure state.  While it looks pretty
unlikely to be an issue, it could have resulted in deadlocks if we
ended up in this code path due to something other than SSL_new
failing.  Thanks to Heikki for pointing this out.

Back-patch to all supported versions; note that the close_SSL issue
only goes back to 9.0, so that hunk isn't included in the 8.4 patch.

Initially found and reported by Vesa-Matti J Kari; many thanks to
both Heikki and Andres for their help running down the specific
issue and reviewing the patch.

11 years agoFix two timeline handling bugs in pg_receivexlog.
Heikki Linnakangas [Mon, 23 Sep 2013 07:17:52 +0000 (10:17 +0300)]
Fix two timeline handling bugs in pg_receivexlog.

When a timeline history file is fetched from server, it is initially created
with a temporary file name, and renamed to place. However, the temporary
file name was constructed using an uninitialized buffer. Usually that meant
that the file was created in current directory instead of the target, which
usually goes unnoticed, but if the target is on a different filesystem than
the current dir, the rename() would fail. Fix that.

The second issue is that pg_receivexlog would not take .partial files into
account when determining when scanning the target directory for existing
WAL files. If the timeline has switched in the server several times in the
last WAL segment, and pg_receivexlog is restarted, it would choose a too
old starting point. That's not a problem as long as the old WAL segment
exists in the server and can be streamed over, but will cause a failure if
it's not.

Backpatch to 9.3, where this timeline handling code was written.

Analysed by Andrew Gierth, bug #8453, based on a bug report on IRC.

11 years agoRename various "freeze multixact" variables
Alvaro Herrera [Mon, 16 Sep 2013 18:45:00 +0000 (15:45 -0300)]
Rename various "freeze multixact" variables

It seems to make more sense to use "cutoff multixact" terminology
throughout the backend code; "freeze" is associated with replacing of an
Xid with FrozenTransactionId, which is not what we do for MultiXactIds.

Andres Freund
Some adjustments by Álvaro Herrera

11 years agoIgnore interrupts during quickdie().
Noah Misch [Thu, 12 Sep 2013 00:10:15 +0000 (20:10 -0400)]
Ignore interrupts during quickdie().

Once the administrator has called for an immediate shutdown or a backend
crash has triggered a reinitialization, no mere SIGINT or SIGTERM should
change that course.  Such derailment remains possible when the signal
arrives before quickdie() blocks signals.  That being a narrow race
affecting most PostgreSQL signal handlers in some way, leave it for
another patch.  Back-patch this to all supported versions.

11 years agoReturn error if allocation of new element was not possible.
Michael Meskes [Sun, 8 Sep 2013 10:59:43 +0000 (12:59 +0200)]
Return error if allocation of new element was not possible.

Found by Coverity.

11 years agoClose file to no leak file descriptor memory. Found by Coverity.
Michael Meskes [Sun, 8 Sep 2013 10:49:54 +0000 (12:49 +0200)]
Close file to no leak file descriptor memory. Found by Coverity.

11 years agoImprove Range Types and Exclusion Constraints example.
Jeff Davis [Thu, 5 Sep 2013 06:30:27 +0000 (23:30 -0700)]
Improve Range Types and Exclusion Constraints example.

Make the examples self-contained to avoid confusion. Per bug report
8367 from KOIZUMI Satoru.

11 years agoRemove dead URL mention in OSX startup script
Bruce Momjian [Wed, 4 Sep 2013 21:04:12 +0000 (17:04 -0400)]
Remove dead URL mention in OSX startup script

Backpatch to 9.3.

Per suggestion from Gavan Schneider

11 years agoDon't fail for bad GUCs in CREATE FUNCTION with check_function_bodies off.
Tom Lane [Tue, 3 Sep 2013 22:32:23 +0000 (18:32 -0400)]
Don't fail for bad GUCs in CREATE FUNCTION with check_function_bodies off.

The previous coding attempted to activate all the GUC settings specified
in SET clauses, so that the function validator could operate in the GUC
environment expected by the function body.  However, this is problematic
when restoring a dump, since the SET clauses might refer to database
objects that don't exist yet.  We already have the parameter
check_function_bodies that's meant to prevent forward references in
function definitions from breaking dumps, so let's change CREATE FUNCTION
to not install the SET values if check_function_bodies is off.

Authors of function validators were already advised not to make any
"context sensitive" checks when check_function_bodies is off, if indeed
they're checking anything at all in that mode.  But extend the
documentation to point out the GUC issue in particular.

(Note that we still check the SET clauses to some extent; the behavior
with !check_function_bodies is now approximately equivalent to what ALTER
DATABASE/ROLE have been doing for awhile with context-dependent GUCs.)

This problem can be demonstrated in all active branches, so back-patch
all the way.

11 years agoUpdate obsolete comment
Alvaro Herrera [Tue, 3 Sep 2013 20:52:11 +0000 (16:52 -0400)]
Update obsolete comment

11 years agoFix thinko in worker_spi, count(*) returns a bigint. Thanks RhodiumToad
Greg Stark [Tue, 3 Sep 2013 12:27:34 +0000 (13:27 +0100)]
Fix thinko in worker_spi, count(*) returns a bigint. Thanks RhodiumToad

11 years agodocs: Clarify that we also support Solaris versions greater than 10.
Robert Haas [Tue, 3 Sep 2013 15:16:37 +0000 (11:16 -0400)]
docs: Clarify that we also support Solaris versions greater than 10.

MauMau

11 years agoStamp 9.3.0. REL9_3_0
Tom Lane [Mon, 2 Sep 2013 20:53:17 +0000 (16:53 -0400)]
Stamp 9.3.0.

11 years agoUpdate time zone data files to tzdata release 2013d.
Tom Lane [Mon, 2 Sep 2013 19:06:21 +0000 (15:06 -0400)]
Update time zone data files to tzdata release 2013d.

DST law changes in Israel, Morocco, Palestine, Paraguay.
Historical corrections for Macquarie Island.

11 years agoFix relfrozenxid query in docs to include TOAST tables.
Andrew Dunstan [Mon, 2 Sep 2013 18:37:53 +0000 (14:37 -0400)]
Fix relfrozenxid query in docs to include TOAST tables.

The original query ignored TOAST tables which could result in tables
needing a vacuum not being reported.

Backpatch to all live branches.

11 years agoTranslation updates
Peter Eisentraut [Mon, 2 Sep 2013 06:28:21 +0000 (02:28 -0400)]
Translation updates

11 years agoUpdate "Using EXPLAIN" documentation examples using current code.
Tom Lane [Sun, 1 Sep 2013 23:43:02 +0000 (19:43 -0400)]
Update "Using EXPLAIN" documentation examples using current code.

It seems like a good idea to update these examples since some fairly
basic planner behaviors have changed in 9.3; notably that the startup cost
for an indexscan plan node is no longer invariably estimated at 0.00.

11 years agoUpdate 9.3 release notes.
Tom Lane [Sun, 1 Sep 2013 03:53:33 +0000 (23:53 -0400)]
Update 9.3 release notes.

Some corrections, a lot of copy-editing.

Set projected release date as 2013-09-09.

11 years agoImprove regression test for #8410.
Tom Lane [Sat, 31 Aug 2013 01:40:21 +0000 (21:40 -0400)]
Improve regression test for #8410.

The previous version of the query disregarded the result of the MergeAppend
instead of checking its results.

Andres Freund

11 years agoAdd test case for bug #8410.
Tom Lane [Fri, 30 Aug 2013 23:27:40 +0000 (19:27 -0400)]
Add test case for bug #8410.

Per Andres Freund.

11 years agoReset the binary heap in MergeAppend rescans.
Tom Lane [Fri, 30 Aug 2013 23:15:21 +0000 (19:15 -0400)]
Reset the binary heap in MergeAppend rescans.

Failing to do so can cause queries to return wrong data, error out or crash.
This requires adding a new binaryheap_reset() method to binaryheap.c,
but that probably should have been there anyway.

Per bug #8410 from Terje Elde.  Diagnosis and patch by Andres Freund.

11 years agoMake error wording more consistent
Alvaro Herrera [Thu, 29 Aug 2013 16:33:50 +0000 (12:33 -0400)]
Make error wording more consistent

11 years agoUnconditionally use the WSA equivalents of Socket error constants.
Andrew Dunstan [Mon, 26 Aug 2013 18:58:14 +0000 (14:58 -0400)]
Unconditionally use the WSA equivalents of Socket error constants.

This change will only apply to mingw compilers, and has been found
necessary by late versions of the mingw-w64 compiler. It's the same as
what is done elsewhere for the Microsoft compilers.

Backpatch of commit 73838b5251e.

Problem reported by Michael Cronenworth, although not his patch.

11 years agoAccount better for planning cost when choosing whether to use custom plans.
Tom Lane [Sat, 24 Aug 2013 19:14:21 +0000 (15:14 -0400)]
Account better for planning cost when choosing whether to use custom plans.

The previous coding in plancache.c essentially used 10% of the estimated
runtime as its cost estimate for planning.  This can be pretty bogus,
especially when the estimated runtime is very small, such as in a simple
expression plan created by plpgsql, or a simple INSERT ... VALUES.

While we don't have a really good handle on how planning time compares
to runtime, it seems reasonable to use an estimate based on the number of
relations referenced in the query, with a rather large multiplier.  This
patch uses 1000 * cpu_operator_cost * (nrelations + 1), so that even a
trivial query will be charged 1000 * cpu_operator_cost for planning.
This should address the problem reported by Marc Cousin and others that
9.2 and up prefer custom plans in cases where the planning time greatly
exceeds what can be saved.

11 years agoDon't crash when pg_xlog is empty and pg_basebackup -x is used
Magnus Hagander [Sat, 24 Aug 2013 15:11:31 +0000 (17:11 +0200)]
Don't crash when pg_xlog is empty and pg_basebackup -x is used

The backup will not work (without a logarchive, and that's the whole
point of -x) in this case, this patch just changes it to throw an
error instead of crashing when this happens.

Noticed and diagnosed by TAKATSUKA Haruka

11 years agoIn locate_grouping_columns(), don't expect an exact match of Var typmods.
Tom Lane [Fri, 23 Aug 2013 21:30:56 +0000 (17:30 -0400)]
In locate_grouping_columns(), don't expect an exact match of Var typmods.

It's possible that inlining of SQL functions (or perhaps other changes?)
has exposed typmod information not known at parse time.  In such cases,
Vars generated by query_planner might have valid typmod values while the
original grouping columns only have typmod -1.  This isn't a semantic
problem since the behavior of grouping only depends on type not typmod,
but it breaks locate_grouping_columns' use of tlist_member to locate the
matching entry in query_planner's result tlist.

We can fix this without an excessive amount of new code or complexity by
relying on the fact that locate_grouping_columns only gets called when
make_subplanTargetList has set need_tlist_eval == false, and that can only
happen if all the grouping columns are simple Vars.  Therefore we only need
to search the sub_tlist for a matching Var, and we can reasonably define a
"match" as being a match of the Var identity fields
varno/varattno/varlevelsup.  The code still Asserts that vartype matches,
but ignores vartypmod.

Per bug #8393 from Evan Martin.  The added regression test case is
basically the same as his example.  This has been broken for a very long
time, so back-patch to all supported branches.

11 years agoFix hash table size estimation error in choose_hashed_distinct().
Tom Lane [Wed, 21 Aug 2013 17:38:20 +0000 (13:38 -0400)]
Fix hash table size estimation error in choose_hashed_distinct().

We should account for the per-group hashtable entry overhead when
considering whether to use a hash aggregate to implement DISTINCT.  The
comparable logic in choose_hashed_grouping() gets this right, but I think
I omitted it here in the mistaken belief that there would be no overhead
if there were no aggregate functions to be evaluated.  This can result in
more than 2X underestimate of the hash table size, if the tuples being
aggregated aren't very wide.  Per report from Tomas Vondra.

This bug is of long standing, but per discussion we'll only back-patch into
9.3.  Changing the estimation behavior in stable branches seems to carry too
much risk of destabilizing plan choices for already-tuned applications.

11 years agorelease notes: update link to 9.3 PL/pgSQL constraint error info
Bruce Momjian [Tue, 20 Aug 2013 13:39:00 +0000 (09:39 -0400)]
release notes: update link to 9.3 PL/pgSQL constraint error info

Backpatch to 9.3.

Pavel Stehule

11 years agoStamp 9.3rc1. REL9_3_RC1
Tom Lane [Mon, 19 Aug 2013 23:45:10 +0000 (19:45 -0400)]
Stamp 9.3rc1.

11 years agoBe more wary of unwanted whitespace in pgstat_reset_remove_files().
Tom Lane [Mon, 19 Aug 2013 23:36:06 +0000 (19:36 -0400)]
Be more wary of unwanted whitespace in pgstat_reset_remove_files().

sscanf isn't the easiest thing to use for exact pattern checks ...
also, don't use strncmp where strcmp will do.

11 years agoFix removal of files in pgstats directories
Alvaro Herrera [Mon, 19 Aug 2013 21:48:17 +0000 (17:48 -0400)]
Fix removal of files in pgstats directories

Instead of deleting all files in stats_temp_directory and the permanent
directory on a crash, only remove those files that match the pattern of
files we actually write in them, to avoid possibly clobbering existing
unrelated contents of the temporary directory.  Per complaint from Jeff
Janes, and subsequent discussion, starting at message
CAMkU=1z9+7RsDODnT4=cDFBRBp8wYQbd_qsLcMtKEf-oFwuOdQ@mail.gmail.com

Also, fix a bug in the same routine to avoid removing files from the
permanent directory twice (instead of once from that directory and then
from the temporary directory), also per report from Jeff Janes, in
message
CAMkU=1wbk947=-pAosDMX5VC+sQw9W4ttq6RM9rXu=MjNeEQKA@mail.gmail.com

11 years agoRename the "fast_promote" file to just "promote".
Heikki Linnakangas [Mon, 19 Aug 2013 17:57:53 +0000 (20:57 +0300)]
Rename the "fast_promote" file to just "promote".

This keeps the usual trigger file name unchanged from 9.2, avoiding nasty
issues if you use a pre-9.3 pg_ctl binary with a 9.3 server or vice versa.
The fallback behavior of creating a full checkpoint before starting up is now
triggered by a file called "fallback_promote". That can be useful for
debugging purposes, but we don't expect any users to have to resort to that
and we might want to remove that in the future, which is why the fallback
mechanism is undocumented.

11 years agoFix qual-clause-misplacement issues with pulled-up LATERAL subqueries.
Tom Lane [Mon, 19 Aug 2013 17:19:28 +0000 (13:19 -0400)]
Fix qual-clause-misplacement issues with pulled-up LATERAL subqueries.

In an example such as
SELECT * FROM
  i LEFT JOIN LATERAL (SELECT * FROM j WHERE i.n = j.n) j ON true;
it is safe to pull up the LATERAL subquery into its parent, but we must
then treat the "i.n = j.n" clause as a qual clause of the LEFT JOIN.  The
previous coding in deconstruct_recurse mistakenly labeled the clause as
"is_pushed_down", resulting in wrong semantics if the clause were applied
at the join node, as per an example submitted awhile ago by Jeremy Evans.
To fix, postpone processing of such clauses until we return back up to
the appropriate recursion depth in deconstruct_recurse.

In addition, tighten the is-safe-to-pull-up checks in is_simple_subquery;
we previously missed the possibility that the LATERAL subquery might itself
contain an outer join that makes lateral references in lower quals unsafe.

A regression test case equivalent to Jeremy's example was already in my
commit of yesterday, but was giving the wrong results because of this
bug.  This patch fixes the expected output for that, and also adds a
test case for the second problem.

11 years agoFix pg_upgrade failure from servers older than 9.3
Alvaro Herrera [Mon, 19 Aug 2013 16:33:07 +0000 (12:33 -0400)]
Fix pg_upgrade failure from servers older than 9.3

When upgrading from servers of versions 9.2 and older, and MultiXactIds
have been used in the old server beyond the first page (that is, 2048
multis or more in the default 8kB-page build), pg_upgrade would set the
next multixact offset to use beyond what has been allocated in the new
cluster.  This would cause a failure the first time the new cluster
needs to use this value, because the pg_multixact/offsets/ file wouldn't
exist or wouldn't be large enough.  To fix, ensure that the transient
server instances launched by pg_upgrade extend the file as necessary.

Per report from Jesse Denardo in
CANiVXAj4c88YqipsyFQPboqMudnjcNTdB3pqe8ReXqAFQ=HXyA@mail.gmail.com

11 years agorelease notes: remove username from 9.3 major item
Bruce Momjian [Mon, 19 Aug 2013 16:26:22 +0000 (12:26 -0400)]
release notes: remove username from 9.3 major item

Etsuro Fujita

11 years agoTranslation updates
Peter Eisentraut [Mon, 19 Aug 2013 03:36:20 +0000 (23:36 -0400)]
Translation updates

11 years agoRemove relcache entry invalidation in REFRESH MATERIALIZED VIEW.
Kevin Grittner [Sun, 18 Aug 2013 21:24:59 +0000 (16:24 -0500)]
Remove relcache entry invalidation in REFRESH MATERIALIZED VIEW.

This was added as part of the attempt to support unlogged matviews
along with a populated status.  It got missed when unlogged
support was removed pre-commit.

Noticed by Noah Misch.  Back-patched to 9.3 branch.

11 years agolibpq: Report strerror on pthread_mutex_lock() failure
Peter Eisentraut [Sun, 18 Aug 2013 01:46:32 +0000 (21:46 -0400)]
libpq: Report strerror on pthread_mutex_lock() failure

11 years agoFix thinko in comment.
Tom Lane [Sun, 18 Aug 2013 00:36:29 +0000 (20:36 -0400)]
Fix thinko in comment.

11 years agoFix planner problems with LATERAL references in PlaceHolderVars.
Tom Lane [Sun, 18 Aug 2013 00:22:41 +0000 (20:22 -0400)]
Fix planner problems with LATERAL references in PlaceHolderVars.

The planner largely failed to consider the possibility that a
PlaceHolderVar's expression might contain a lateral reference to a Var
coming from somewhere outside the PHV's syntactic scope.  We had a previous
report of a problem in this area, which I tried to fix in a quick-hack way
in commit 4da6439bd8553059766011e2a42c6e39df08717f, but Antonin Houska
pointed out that there were still some problems, and investigation turned
up other issues.  This patch largely reverts that commit in favor of a more
thoroughly thought-through solution.  The new theory is that a PHV's
ph_eval_at level cannot be higher than its original syntactic level.  If it
contains lateral references, those don't change the ph_eval_at level, but
rather they create a lateral-reference requirement for the ph_eval_at join
relation.  The code in joinpath.c needs to handle that.

Another issue is that createplan.c wasn't handling nested PlaceHolderVars
properly.

In passing, push knowledge of lateral-reference checks for join clauses
into join_clause_is_movable_to.  This is mainly so that FDWs don't need
to deal with it.

This patch doesn't fix the original join-qual-placement problem reported by
Jeremy Evans (and indeed, one of the new regression test cases shows the
wrong answer because of that).  But the PlaceHolderVar problems need to be
fixed before that issue can be addressed, so committing this separately
seems reasonable.

11 years agorelease notes: update 9.3 major feature list
Bruce Momjian [Fri, 16 Aug 2013 22:01:04 +0000 (18:01 -0400)]
release notes: update 9.3 major feature list

Backpatch to 9.3.

11 years agorelease notes: Update to 9.3 git current
Bruce Momjian [Fri, 16 Aug 2013 20:54:18 +0000 (16:54 -0400)]
release notes: Update to 9.3 git current

Backpatch to 9.3, of course.

11 years agoRename some bgworker functions as we've done in master.
Robert Haas [Fri, 16 Aug 2013 19:28:03 +0000 (15:28 -0400)]
Rename some bgworker functions as we've done in master.

Commit 2dee7998f93062e2ae7fcc9048ff170e528d1724 renames these
functions in master, for consistency; per discussion, backport
just the renaming portion of that commit to 9.3 to keep the
branches in sync.

Michael Paquier

11 years agopg_upgrade: shut down server after auth failure
Bruce Momjian [Fri, 16 Aug 2013 15:09:09 +0000 (11:09 -0400)]
pg_upgrade: shut down server after auth failure

Register atexit() server shutdown if pg_ctl successfully started the
server, but we can't connect to it.

Backpatch to 9.3.

Pavel Raiskup

11 years agoDon't allow ALTER MATERIALIZED VIEW ADD UNIQUE.
Kevin Grittner [Thu, 15 Aug 2013 18:16:45 +0000 (13:16 -0500)]
Don't allow ALTER MATERIALIZED VIEW ADD UNIQUE.

Was accidentally allowed, but not documented and lacked support
for rename or drop once created.

Per report from Noah Misch.

11 years agoAdd tab completion for \dx in psql
Magnus Hagander [Thu, 15 Aug 2013 16:24:25 +0000 (18:24 +0200)]
Add tab completion for \dx in psql

11 years agoTreat timeline IDs as unsigned in replication parser
Peter Eisentraut [Thu, 15 Aug 2013 03:18:49 +0000 (23:18 -0400)]
Treat timeline IDs as unsigned in replication parser

Timeline IDs are unsigned ints everywhere, except the replication parser
treated them as signed ints.

11 years agoImprove error message when view is not updatable
Peter Eisentraut [Thu, 15 Aug 2013 03:00:34 +0000 (23:00 -0400)]
Improve error message when view is not updatable

Avoid using the term "updatable" in confusing ways.  Suggest a trigger
first, before a rule.

11 years agoRemove ph_may_need from PlaceHolderInfo, with attendant simplifications.
Tom Lane [Wed, 14 Aug 2013 22:38:36 +0000 (18:38 -0400)]
Remove ph_may_need from PlaceHolderInfo, with attendant simplifications.

The planner logic that attempted to make a preliminary estimate of the
ph_needed levels for PlaceHolderVars seems to be completely broken by
lateral references.  Fortunately, the potential join order optimization
that this code supported seems to be of relatively little value in
practice; so let's just get rid of it rather than trying to fix it.

Getting rid of this allows fairly substantial simplifications in
placeholder.c, too, so planning in such cases should be a bit faster.

Issue noted while pursuing bugs reported by Jeremy Evans and Antonin
Houska, though this doesn't in itself fix either of their reported cases.
What this does do is prevent an Assert crash in the kind of query
illustrated by the added regression test.  (I'm not sure that the plan for
that query is stable enough across platforms to be usable as a regression
test output ... but we'll soon find out from the buildfarm.)

Back-patch to 9.3.  The problem case can't arise without LATERAL, so
no need to touch older branches.

11 years agoRemove Assert that matview is not in system schema from REFRESH.
Kevin Grittner [Wed, 14 Aug 2013 17:43:01 +0000 (12:43 -0500)]
Remove Assert that matview is not in system schema from REFRESH.

We don't want to prevent an extension which creates a matview from
being installed in pg_catalog.

Issue was raised by Hitoshi Harada.
Backpatched to 9.3.

11 years agoEmit a log message if output is about to be redirected away from stderr.
Tom Lane [Tue, 13 Aug 2013 19:24:56 +0000 (15:24 -0400)]
Emit a log message if output is about to be redirected away from stderr.

We've seen multiple cases of people looking at the postmaster's original
stderr output to try to diagnose problems, not realizing/remembering that
their logging configuration is set up to send log messages somewhere else.
This seems particularly likely to happen in prepackaged distributions,
since many packagers patch the code to change the factory-standard logging
configuration to something more in line with their platform conventions.

In hopes of reducing confusion, emit a LOG message about this at the point
in startup where we are about to switch log output away from the original
stderr, providing a pointer to where to look instead.  This message will
appear as the last thing in the original stderr output.  (We might later
also try to emit such link messages when logging parameters are changed
on-the-fly; but that case seems to be both noticeably harder to do nicely,
and much less frequently a problem in practice.)

Per discussion, back-patch to 9.3 but not further.

11 years ago9.3 release notes: move foreign table item
Bruce Momjian [Tue, 13 Aug 2013 16:51:26 +0000 (12:51 -0400)]
9.3 release notes:  move foreign table item

Move item about foreign data wrappers supporting inserts/updates/deletes
to object manipulation.

Backpatch to 9.3.

From Etsuro Fujita

11 years agoPL/Python: Adjust the regression tests for Python 3.3
Peter Eisentraut [Sun, 11 Aug 2013 13:17:04 +0000 (09:17 -0400)]
PL/Python: Adjust the regression tests for Python 3.3

Similar to 2cfb1c6f77734db81b6e74bcae630f93b94f69be, the order in which
dictionary elements are printed is not reliable.  This reappeared in the
tests of the string representation of result objects.  Reduce the test
case to one result set column so that there is no question of order.

11 years agodocs: mention Julian is midnight _UTC_
Bruce Momjian [Sat, 10 Aug 2013 01:46:13 +0000 (21:46 -0400)]
docs:  mention Julian is midnight _UTC_
(Yes, there was no UTC back then, but we compute it that way.)
Backpatch to 9.3.

11 years agoDocs: Document to_*() Julian values are integers
Bruce Momjian [Fri, 9 Aug 2013 23:25:51 +0000 (19:25 -0400)]
Docs:  Document to_*() Julian values are integers
Backpatch to 9.3.
Per request from Marc Dahn

11 years agoDocument how auto_explain.log_timing can be changed.
Fujii Masao [Fri, 9 Aug 2013 13:14:26 +0000 (22:14 +0900)]
Document how auto_explain.log_timing can be changed.

11 years agoMessage punctuation and pluralization fixes
Peter Eisentraut [Fri, 9 Aug 2013 11:59:53 +0000 (07:59 -0400)]
Message punctuation and pluralization fixes

11 years agoMessage style improvements
Peter Eisentraut [Thu, 8 Aug 2013 02:48:40 +0000 (22:48 -0400)]
Message style improvements

11 years agoMake sure float4in/float8in accept all standard spellings of "infinity".
Tom Lane [Sat, 3 Aug 2013 16:39:51 +0000 (12:39 -0400)]
Make sure float4in/float8in accept all standard spellings of "infinity".

The C99 and POSIX standards require strtod() to accept all these spellings
(case-insensitively): "inf", "+inf", "-inf", "infinity", "+infinity",
"-infinity".  However, pre-C99 systems might accept only some or none of
these, and apparently Windows still doesn't accept "inf".  To avoid
surprising cross-platform behavioral differences, manually check for each
of these spellings if strtod() fails.  We were previously handling just
"infinity" and "-infinity" that way, but since C99 is most of the world
now, it seems likely that applications are expecting all these spellings
to work.

Per bug #8355 from Basil Peace.  It turns out this fix won't actually
resolve his problem, because Python isn't being this careful; but that
doesn't mean we shouldn't be.