]> granicus.if.org Git - postgresql/log
postgresql
11 years agoUpdate comments concerning PGC_S_TEST.
Tom Lane [Tue, 3 Sep 2013 22:56:22 +0000 (18:56 -0400)]
Update comments concerning PGC_S_TEST.

This GUC context value was once only used by ALTER DATABASE SET and
ALTER USER SET.  That's not true anymore, though, so rewrite the
comments to be a bit more general.

Patch in HEAD only, since this is just an internal documentation issue.

11 years agoDon't fail for bad GUCs in CREATE FUNCTION with check_function_bodies off.
Tom Lane [Tue, 3 Sep 2013 22:32:20 +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 agoAllow aggregate functions to be VARIADIC.
Tom Lane [Tue, 3 Sep 2013 21:08:38 +0000 (17:08 -0400)]
Allow aggregate functions to be VARIADIC.

There's no inherent reason why an aggregate function can't be variadic
(even VARIADIC ANY) if its transition function can handle the case.
Indeed, this patch to add the feature touches none of the planner or
executor, and little of the parser; the main missing stuff was DDL and
pg_dump support.

It is true that variadic aggregates can create the same sort of ambiguity
about parameters versus ORDER BY keys that was complained of when we
(briefly) had both one- and two-argument forms of string_agg().  However,
the policy formed in response to that discussion only said that we'd not
create any built-in aggregates with varying numbers of arguments, not that
we shouldn't allow users to do it.  So the logical extension of that is
we can allow users to make variadic aggregates as long as we're wary about
shipping any such in core.

In passing, this patch allows aggregate function arguments to be named, to
the extent of remembering the names in pg_proc and dumping them in pg_dump.
You can't yet call an aggregate using named-parameter notation.  That seems
like a likely future extension, but it'll take some work, and it's not what
this patch is really about.  Likewise, there's still some work needed to
make window functions handle VARIADIC fully, but I left that for another
day.

initdb forced because of new aggvariadic field in Aggref parse nodes.

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

11 years agoDocs: wording improvements in discussion of timestamp arithmetic.
Tom Lane [Tue, 3 Sep 2013 20:28:56 +0000 (16:28 -0400)]
Docs: wording improvements in discussion of timestamp arithmetic.

I started out just to fix the broken markup in commit
1c2085766187031eaeaae7db4785b9e1d4241988, but got distracted by
copy-editing.  I see Bruce already fixed the markup, but I'll
commit the wordsmithing anyway.

11 years agodoc: Fix SGML markup for date patch
Bruce Momjian [Tue, 3 Sep 2013 20:06:24 +0000 (16:06 -0400)]
doc:  Fix SGML markup for date patch

11 years agoDocs: add paragraph about date/timestamp subtraction
Bruce Momjian [Tue, 3 Sep 2013 17:24:39 +0000 (13:24 -0400)]
Docs:  add paragraph about date/timestamp subtraction

per suggestion from Francisco Olart

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 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 agoFix typo in comment.
Heikki Linnakangas [Tue, 3 Sep 2013 10:17:09 +0000 (13:17 +0300)]
Fix typo in comment.

Also line-wrap an over-wide line in a comment that's ignored by pgindent.

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:38:12 +0000 (14:38 -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:24 +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 agoUse a non-locking initial test in TAS_SPIN on x86_64.
Heikki Linnakangas [Thu, 29 Aug 2013 10:48:59 +0000 (13:48 +0300)]
Use a non-locking initial test in TAS_SPIN on x86_64.

Testing done in 2011 by Tom Lane concluded that this is a win on Intel Xeons
and AMD Opterons, but it was not changed back then, because of an old
comment in tas() that suggested that it's a huge loss on older Opterons.
However, didn't have separate TAS() and TAS_SPIN() macros back then, so the
comment referred to doing a non-locked initial test even on the first
access, in uncontended case. I don't have access to older Opterons, but I'm
pretty sure that doing an initial unlocked test is unlikely to be a loss
while spinning, even though it might be for the first access.

We probably should do the same on 32-bit x86, but I'm afraid of changing it
without any testing. Hence just add a note to the x86 implementation
suggesting that we probably should do the same there.

11 years agoAllow discovery of whether a dynamic background worker is running.
Robert Haas [Wed, 28 Aug 2013 18:08:13 +0000 (14:08 -0400)]
Allow discovery of whether a dynamic background worker is running.

Using the infrastructure provided by this patch, it's possible either
to wait for the startup of a dynamically-registered background worker,
or to poll the status of such a worker without waiting.  In either
case, the current PID of the worker process can also be obtained.
As usual, worker_spi is updated to demonstrate the new functionality.

Patch by me.  Review by Andres Freund.

11 years agoPartially restore comments discussing enum renumbering hazards.
Robert Haas [Wed, 28 Aug 2013 17:21:08 +0000 (13:21 -0400)]
Partially restore comments discussing enum renumbering hazards.

As noted by Tom Lane, commit 813fb0315587d32e3b77af1051a0ef517d187763
was overly optimistic about how safe it is to concurrently change
enumsortorder values under MVCC catalog scan semantics.  Restore
some of the previous text, with hopefully-correct adjustments for
the new state of play.

11 years agoAccept multiple -I, -P, -T and -n options in pg_restore.
Heikki Linnakangas [Wed, 28 Aug 2013 06:43:34 +0000 (09:43 +0300)]
Accept multiple -I, -P, -T and -n options in pg_restore.

We already did this for -t (--table) in 9.3, but missed the other similar
options. For consistency, allow all of them to be specified multiple times.

Unfortunately it's too late to sneak this into 9.3, so commit to master
only.

11 years agoInitialize cached OID to Invalid in new hash entries
Alvaro Herrera [Tue, 27 Aug 2013 18:53:17 +0000 (14:53 -0400)]
Initialize cached OID to Invalid in new hash entries

Andres Freund; bug detected by valgrind

11 years agoFix some "translator:" comments mangled by pgindent
Alvaro Herrera [Tue, 27 Aug 2013 17:33:37 +0000 (13:33 -0400)]
Fix some "translator:" comments mangled by pgindent

11 years agodoc: Explain that ereport doesn't return for ERROR or higher levels.
Robert Haas [Mon, 26 Aug 2013 18:27:43 +0000 (14:27 -0400)]
doc: Explain that ereport doesn't return for ERROR or higher levels.

Christophe Pettus

11 years agoAccount better for planning cost when choosing whether to use custom plans.
Tom Lane [Sat, 24 Aug 2013 19:14:17 +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:53 +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:16 +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 agodocs: Remove second 'trim' index reference
Bruce Momjian [Wed, 21 Aug 2013 11:32:43 +0000 (07:32 -0400)]
docs: Remove second 'trim' index reference

Per suggestion from Vik Fearing

11 years agoUnconditionally use the WSA equivalents of Socket error constants.
Andrew Dunstan [Tue, 20 Aug 2013 18:11:36 +0000 (14:11 -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.

If this doesn't upset older compilers in the buildfarm, it will be
backpatched to 9.1.

Problem reported by Michael Cronenworth, although not his patch.

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

Backpatch to 9.3.

Pavel Stehule

11 years agoBe more wary of unwanted whitespace in pgstat_reset_remove_files().
Tom Lane [Mon, 19 Aug 2013 23:36:04 +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:25 +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:19:22 +0000 (16:19 -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:37 +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:05 +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 agoMove more bgworker code to bgworker.c; also, some renaming.
Robert Haas [Fri, 16 Aug 2013 19:14:54 +0000 (15:14 -0400)]
Move more bgworker code to bgworker.c; also, some renaming.

Per discussion on pgsql-hackers.

Michael Paquier, slightly modified by me.  Original suggestion
from Amit Kapila.

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 agoFix typo in comment.
Heikki Linnakangas [Fri, 16 Aug 2013 13:25:52 +0000 (16:25 +0300)]
Fix typo in comment.

11 years agoDon't allow ALTER MATERIALIZED VIEW ADD UNIQUE.
Kevin Grittner [Thu, 15 Aug 2013 18:14:48 +0000 (13:14 -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:32 +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 agodocs: document TRIM "comma" syntax
Bruce Momjian [Wed, 14 Aug 2013 21:26:36 +0000 (17:26 -0400)]
docs:  document TRIM "comma" syntax

This syntax is supported by the parser, but is non-standard.

_Not_ backpatched to 9.3 in case we change our minds.

11 years agoRemove Assert that matview is not in system schema from REFRESH.
Kevin Grittner [Wed, 14 Aug 2013 17:36:55 +0000 (12:36 -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 agoUpdate Emacs configuration
Peter Eisentraut [Wed, 14 Aug 2013 00:08:44 +0000 (20:08 -0400)]
Update Emacs configuration

Update emacs.samples with new configuration snippets that match pgindent
et al. formatting more accurately and follow Emacs Lisp best practices
better.

Add .dir-locals.el with a subset of that configuration for casual
editing and viewing.

Reviewed-by: Dimitri Fontaine <dimitri@2ndQuadrant.fr>
Reviewed-by: Noah Misch <noah@leadboat.com>
11 years agoEmit a log message if output is about to be redirected away from stderr.
Tom Lane [Tue, 13 Aug 2013 19:24:52 +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:49:24 +0000 (12:49 -0400)]
9.3 release notes:  move foreign table item

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

From Etsuro Fujita

11 years agopg_dump: avoid schema qualification for ALTER ... OWNER
Bruce Momjian [Tue, 13 Aug 2013 15:45:56 +0000 (11:45 -0400)]
pg_dump:  avoid schema qualification for ALTER ... OWNER

We already use search_path to specify the schema, so there is no need
for pg_dump to schema-qualify the name.  Also remove dead code.

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:13:28 +0000 (22:13 +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 agoFix assertion failure by an immediate shutdown.
Fujii Masao [Wed, 7 Aug 2013 17:48:53 +0000 (02:48 +0900)]
Fix assertion failure by an immediate shutdown.

In PM_WAIT_DEAD_END state, checkpointer process must be dead already.
But an immediate shutdown could make postmaster's state machine
transition to PM_WAIT_DEAD_END state even if checkpointer process is
still running,  and which caused assertion failure. This bug was introduced
in commit 457d6cf049c57cabe9b46ea13f26138040a214ec.

This patch ensures that postmaster's state machine doesn't transition to
PM_WAIT_DEAD_END state in an immediate shutdown while checkpointer
process is running.

11 years agopgtest: allow passing parameters, e.g. -s/--silent
Bruce Momjian [Mon, 5 Aug 2013 23:59:52 +0000 (19:59 -0400)]
pgtest:  allow passing parameters, e.g. -s/--silent
Previously only -n was recognized.

11 years agoSimplify query_planner's API by having it return the top-level RelOptInfo.
Tom Lane [Mon, 5 Aug 2013 19:00:57 +0000 (15:00 -0400)]
Simplify query_planner's API by having it return the top-level RelOptInfo.

Formerly, query_planner returned one or possibly two Paths for the topmost
join relation, so that grouping_planner didn't see the join RelOptInfo
(at least not directly; it didn't have any hesitation about examining
cheapest_path->parent, though).  However, correct selection of the Paths
involved a significant amount of coupling between query_planner and
grouping_planner, a problem which has gotten worse over time.  It seems
best to give up on this API choice and instead return the topmost
RelOptInfo explicitly.  Then grouping_planner can pull out the Paths it
wants from the rel's path list.  In this way we can remove all knowledge
of grouping behaviors from query_planner.

The only real benefit of the old way is that in the case of an empty
FROM clause, we never made any RelOptInfos at all, just a Path.  Now
we have to gin up a dummy RelOptInfo to represent the empty FROM clause.
That's not a very big deal though.

While at it, simplify query_planner's API a bit more by having the caller
set up root->tuple_fraction and root->limit_tuples, rather than passing
those values as separate parameters.  Since query_planner no longer does
anything with either value, requiring it to fill the PlannerInfo fields
seemed pretty arbitrary.

This patch just rearranges code; it doesn't (intentionally) change any
behaviors.  Followup patches will do more interesting things.

11 years agoVarious cleanups for REFRESH MATERIALIZED VIEW CONCURRENTLY.
Kevin Grittner [Mon, 5 Aug 2013 14:57:56 +0000 (09:57 -0500)]
Various cleanups for REFRESH MATERIALIZED VIEW CONCURRENTLY.

Open and lock each index before checking definition in RMVC.  The
ExclusiveLock on the related table is not viewed as sufficient to
ensure that no changes are made to the index definition, and
invalidation messages from other backends might have been missed.
Additionally, use RelationGetIndexExpressions() and check for NIL
rather than doing our own loop.

Protect against redefinition of tid and rowvar operators in RMVC.
While working on this, noticed that the fixes for bugs found during
the CF made the UPDATE statement useless, since no rows could
qualify for that treatment any more.  Ripping out code to support
the UPDATE statement simplified the operator cleanups.

Change slightly confusing local field name.

Use meaningful alias names on queries in refresh_by_match_merge().

Per concerns of raised by Andres Freund and comments and
suggestions from Noah Misch.  Some additional issues remain, which
will be addressed separately.

11 years agoMake sure float4in/float8in accept all standard spellings of "infinity".
Tom Lane [Sat, 3 Aug 2013 16:39:47 +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.

11 years agoFix old visibility bug in HeapTupleSatisfiesDirty
Alvaro Herrera [Fri, 2 Aug 2013 18:34:56 +0000 (14:34 -0400)]
Fix old visibility bug in HeapTupleSatisfiesDirty

If a tuple is locked but not updated by a concurrent transaction,
HeapTupleSatisfiesDirty would return that transaction's Xid in xmax,
causing callers to wait on it, when it is not necessary (in fact, if the
other transaction had used a multixact instead of a plain Xid to mark
the tuple, HeapTupleSatisfiesDirty would have behave differently and
*not* returned the Xmax).

This bug was introduced in commit 3f7fbf85dc5b42, dated December 1998,
so it's almost 15 years old now.  However, it's hard to see this
misbehave, because before we had NOWAIT the only consequence of this is
that transactions would wait for slightly more time than necessary; so
it's not surprising that this hasn't been reported yet.

Craig Ringer and Andres Freund

11 years agoFix crash in error report of invalid tuple lock
Alvaro Herrera [Fri, 2 Aug 2013 16:49:03 +0000 (12:49 -0400)]
Fix crash in error report of invalid tuple lock

My tweak of these error messages in commit c359a1b082 contained the
thinko that a query would always have rowMarks set for a query
containing a locking clause.  Not so: when declaring a cursor, for
instance, rowMarks isn't set at the point we're checking, so we'd be
dereferencing a NULL pointer.

The fix is to pass the lock strength to the function raising the error,
instead of trying to reverse-engineer it.  The result not only is more
robust, but it also seems cleaner overall.

Per report from Robert Haas.

11 years agoFix typo in comment.
Robert Haas [Fri, 2 Aug 2013 13:15:42 +0000 (09:15 -0400)]
Fix typo in comment.

Etsuro Fujita

11 years agopg_test_fsync: expand ops/sec display
Bruce Momjian [Fri, 2 Aug 2013 04:45:19 +0000 (00:45 -0400)]
pg_test_fsync: expand ops/sec display
Expand ops/sec by two digits to maintain alignment on servers with fast
I/O subsystems, e.g. can now display < 10M ops/sec with consistent
alignment.

11 years agoImprove handling of pthread_mutex_lock error case
Stephen Frost [Thu, 1 Aug 2013 19:42:07 +0000 (15:42 -0400)]
Improve handling of pthread_mutex_lock error case

We should really be reporting a useful error along with returning
a valid return code if pthread_mutex_lock() throws an error for
some reason.  Add that and back-patch to 9.0 as the prior patch.

Pointed out by Alvaro Herrera

11 years agoImprove comments for IncrementalMaintenance DML enabling functions.
Kevin Grittner [Thu, 1 Aug 2013 19:31:09 +0000 (14:31 -0500)]
Improve comments for IncrementalMaintenance DML enabling functions.

Move the static functions after the comment and expand the comment.

Per complaint from Andres Freund, although using different comment
text.

11 years agoAssorted bgworker-related comment fixes.
Robert Haas [Thu, 1 Aug 2013 16:20:31 +0000 (12:20 -0400)]
Assorted bgworker-related comment fixes.

Per gripes by Amit Kapila.

11 years agoRemove SnapshotNow and HeapTupleSatisfiesNow.
Robert Haas [Thu, 1 Aug 2013 14:46:19 +0000 (10:46 -0400)]
Remove SnapshotNow and HeapTupleSatisfiesNow.

We now use MVCC catalog scans, and, per discussion, have eliminated
all other remaining uses of SnapshotNow, so that we can now get rid of
it.  This will break third-party code which is still using it, which
is intentional, as we want such code to be updated to do things the
new way.

11 years agoAdd locking around SSL_context usage in libpq
Stephen Frost [Thu, 1 Aug 2013 05:15:45 +0000 (01:15 -0400)]
Add locking around SSL_context usage in libpq

I've been working with Nick Phillips on an issue he ran into when
trying to use threads with SSL client certificates.  As it turns out,
the call in initialize_SSL() to SSL_CTX_use_certificate_chain_file()
will modify our SSL_context without any protection from other threads
also calling that function or being at some other point and trying to
read from SSL_context.

To protect against this, I've written up the attached (based on an
initial patch from Nick and much subsequent discussion) which puts
locks around SSL_CTX_use_certificate_chain_file() and all of the other
users of SSL_context which weren't already protected.

Nick Phillips, much reworked by Stephen Frost

Back-patch to 9.0 where we started loading the cert directly instead of
using a callback.

11 years agoAllow a context to be passed in for error handling
Stephen Frost [Thu, 1 Aug 2013 05:07:20 +0000 (01:07 -0400)]
Allow a context to be passed in for error handling

As pointed out by Tom Lane, we can allow other users of the error
handler callbacks to provide their own memory context by adding
the context to use to ErrorData and using that instead of explicitly
using ErrorContext.

This then allows GetErrorContextStack() to be called from inside
exception handlers, so modify plpgsql to take advantage of that and
add an associated regression test for it.

11 years agoFix mis-indented lines
Alvaro Herrera [Wed, 31 Jul 2013 21:57:15 +0000 (17:57 -0400)]
Fix mis-indented lines

Per Coverity

11 years agoFix a couple of inconsequential typos in new header
Alvaro Herrera [Wed, 31 Jul 2013 21:57:00 +0000 (17:57 -0400)]
Fix a couple of inconsequential typos in new header

11 years agopg_dump/pg_dumpall: remove unnecessary SQL trailing semicolons
Bruce Momjian [Wed, 31 Jul 2013 15:37:17 +0000 (11:37 -0400)]
pg_dump/pg_dumpall:  remove unnecessary SQL trailing semicolons
Patch by Ian Lawrence Barwick

11 years agoFix regexp_matches() handling of zero-length matches.
Tom Lane [Wed, 31 Jul 2013 15:31:22 +0000 (11:31 -0400)]
Fix regexp_matches() handling of zero-length matches.

We'd find the same match twice if it was of zero length and not immediately
adjacent to the previous match.  replace_text_regexp() got similar cases
right, so adjust this search logic to match that.  Note that even though
the regexp_split_to_xxx() functions share this code, they did not display
equivalent misbehavior, because the second match would be considered
degenerate and ignored.

Jeevan Chalke, with some cosmetic changes by me.

11 years agoFix typo in comment.
Fujii Masao [Wed, 31 Jul 2013 13:53:20 +0000 (22:53 +0900)]
Fix typo in comment.

Hitoshi Harada

11 years agoFix inaccurate description of tablespace.
Fujii Masao [Wed, 31 Jul 2013 13:35:12 +0000 (22:35 +0900)]
Fix inaccurate description of tablespace.

Currently we don't need to update the pg_tablespace catalog
after redefining the symbolic links to the tablespaces
because pg_tablespace.spclocation column was removed in
PostgreSQL 9.2.

Back patch to 9.2 where pg_tablespace.spclocation was removed.

Ian Barwick, with minor change by me.

11 years agoRestore REINDEX constraint validation.
Noah Misch [Tue, 30 Jul 2013 22:36:52 +0000 (18:36 -0400)]
Restore REINDEX constraint validation.

Refactoring as part of commit 8ceb24568054232696dddc1166a8563bc78c900a
had the unintended effect of making REINDEX TABLE and REINDEX DATABASE
no longer validate constraints enforced by the indexes in question;
REINDEX INDEX still did so.  Indexes marked invalid remained so, and
constraint violations arising from data corruption went undetected.
Back-patch to 9.0, like the causative commit.

11 years agopg_upgrade: clarify C comment about Windows thread struct pointers
Bruce Momjian [Tue, 30 Jul 2013 13:23:31 +0000 (09:23 -0400)]
pg_upgrade: clarify C comment about Windows thread struct pointers
Backpatch to 9.3 to keep source trees consistent.

11 years agoSync ECPG with WITH ORDINALITY changes
Greg Stark [Mon, 29 Jul 2013 22:43:44 +0000 (23:43 +0100)]
Sync ECPG with WITH ORDINALITY changes

11 years agoAdd SQL Standard WITH ORDINALITY support for UNNEST (and any other SRF)
Greg Stark [Mon, 29 Jul 2013 15:38:01 +0000 (16:38 +0100)]
Add SQL Standard WITH ORDINALITY support for UNNEST (and any other SRF)

Author: Andrew Gierth, David Fetter
Reviewers: Dean Rasheed, Jeevan Chalke, Stephen Frost

11 years agoFix contrib/cube and contrib/seg to build with bison 3.0.
Tom Lane [Mon, 29 Jul 2013 14:42:37 +0000 (10:42 -0400)]
Fix contrib/cube and contrib/seg to build with bison 3.0.

These modules used the YYPARSE_PARAM macro, which has been deprecated
by the bison folk since 1.875, and which they finally removed in 3.0.
Adjust the code to use the replacement facility, %parse-param, which
is a much better solution anyway since it allows specification of the
type of the extra parser parameter.  We can thus get rid of a lot of
unsightly casting.

Back-patch to all active branches, since somebody might try to build
a back branch with up-to-date tools.

11 years agoMessage style improvements
Peter Eisentraut [Sun, 28 Jul 2013 10:59:09 +0000 (06:59 -0400)]
Message style improvements

11 years agopg_upgrade: fix -j race condition on Windows
Bruce Momjian [Sat, 27 Jul 2013 19:00:58 +0000 (15:00 -0400)]
pg_upgrade: fix -j race condition on Windows
Pg_Upgrade cannot write the command string to the log file and then call
system() to write to the same file without causing occasional file-share
errors on Windows.  So instead, write the command string to the log file
after system(), in those cases.
Backpatch to 9.3.

11 years agopg_upgrade docs: don't use cluster for binary/lib
Bruce Momjian [Fri, 26 Jul 2013 17:52:01 +0000 (13:52 -0400)]
pg_upgrade docs: don't use cluster for binary/lib
In a few cases, pg_upgrade said old/new cluster location when it meant
old/new Postgres install location, so fix those.
Per private email report

11 years agoPrevent leakage of SPI tuple tables during subtransaction abort.
Tom Lane [Thu, 25 Jul 2013 20:45:43 +0000 (16:45 -0400)]
Prevent leakage of SPI tuple tables during subtransaction abort.

plpgsql often just remembers SPI-result tuple tables in local variables,
and has no mechanism for freeing them if an ereport(ERROR) causes an escape
out of the execution function whose local variable it is.  In the original
coding, that wasn't a problem because the tuple table would be cleaned up
when the function's SPI context went away during transaction abort.
However, once plpgsql grew the ability to trap exceptions, repeated
trapping of errors within a function could result in significant
intra-function-call memory leakage, as illustrated in bug #8279 from
Chad Wagner.

We could fix this locally in plpgsql with a bunch of PG_TRY/PG_CATCH
coding, but that would be tedious, probably slow, and prone to bugs of
omission; moreover it would do nothing for similar risks elsewhere.
What seems like a better plan is to make SPI itself responsible for
freeing tuple tables at subtransaction abort.  This patch attacks the
problem that way, keeping a list of live tuple tables within each SPI
function context.  Currently, such freeing is automatic for tuple tables
made within the failed subtransaction.  We might later add a SPI call to
mark a tuple table as not to be freed this way, allowing callers to opt
out; but until someone exhibits a clear use-case for such behavior, it
doesn't seem worth bothering.

A very useful side-effect of this change is that SPI_freetuptable() can
now defend itself against bad calls, such as duplicate free requests;
this should make things more robust in many places.  (In particular,
this reduces the risks involved if a third-party extension contains
now-redundant SPI_freetuptable() calls in error cleanup code.)

Even though the leakage problem is of long standing, it seems imprudent
to back-patch this into stable branches, since it does represent an API
semantics change for SPI users.  We'll patch this in 9.3, but live with
the leakage in older branches.

11 years agopgstattuple: Doc update for previous commit.
Robert Haas [Thu, 25 Jul 2013 20:36:49 +0000 (16:36 -0400)]
pgstattuple: Doc update for previous commit.

In my previous change to make pgstattuple use SnapshotDirty rather
than SnapshotNow, I failed to notice that the documenation also
needed to be updated to match.  Fix.

11 years agoChange currtid functions to use an MVCC snapshot, not SnapshotNow.
Robert Haas [Thu, 25 Jul 2013 20:32:02 +0000 (16:32 -0400)]
Change currtid functions to use an MVCC snapshot, not SnapshotNow.

This has a slight performance cost, but the only known consumers
of these functions, known at the SQL level as currtid and currtid2,
is pgsql-odbc; whose usage, we hope, is not sufficiently intensive
to make this a problem.

Per discussion.

11 years agopgstattuple: Use SnapshotDirty, not SnapshotNow.
Robert Haas [Thu, 25 Jul 2013 20:16:42 +0000 (16:16 -0400)]
pgstattuple: Use SnapshotDirty, not SnapshotNow.

Tuples belonging to uncommitted transactions should not be
counted as dead.

This is arguably a bug fix that should be back-patched, but
as no one ever noticed until it came time to try to get rid
of SnapshotNow, I'm only doing this in master for now.

11 years agoDon't use SnapshotNow in get_actual_variable_range.
Robert Haas [Thu, 25 Jul 2013 18:30:00 +0000 (14:30 -0400)]
Don't use SnapshotNow in get_actual_variable_range.

Instead, use the active snapshot.  Per Tom Lane, this function is
most interested in knowing the range of tuples our scan will actually
see.

This is another step towards full removal of SnapshotNow.