]> granicus.if.org Git - postgresql/log
postgresql
12 years agoRevise parameterized-path mechanism to fix assorted issues.
Tom Lane [Thu, 19 Apr 2012 19:52:46 +0000 (15:52 -0400)]
Revise parameterized-path mechanism to fix assorted issues.

This patch adjusts the treatment of parameterized paths so that all paths
with the same parameterization (same set of required outer rels) for the
same relation will have the same rowcount estimate.  We cache the rowcount
estimates to ensure that property, and hopefully save a few cycles too.
Doing this makes it practical for add_path_precheck to operate without
a rowcount estimate: it need only assume that paths with different
parameterizations never dominate each other, which is close enough to
true anyway for coarse filtering, because normally a more-parameterized
path should yield fewer rows thanks to having more join clauses to apply.

In add_path, we do the full nine yards of comparing rowcount estimates
along with everything else, so that we can discard parameterized paths that
don't actually have an advantage.  This fixes some issues I'd found with
add_path rejecting parameterized paths on the grounds that they were more
expensive than not-parameterized ones, even though they yielded many fewer
rows and hence would be cheaper once subsequent joining was considered.

To make the same-rowcounts assumption valid, we have to require that any
parameterized path enforce *all* join clauses that could be obtained from
the particular set of outer rels, even if not all of them are useful for
indexing.  This is required at both base scans and joins.  It's a good
thing anyway since the net impact is that join quals are checked at the
lowest practical level in the join tree.  Hence, discard the original
rather ad-hoc mechanism for choosing parameterization joinquals, and build
a better one that has a more principled rule for when clauses can be moved.
The original rule was actually buggy anyway for lack of knowledge about
which relations are part of an outer join's outer side; getting this right
requires adding an outer_relids field to RestrictInfo.

12 years agoUntabify DSSSL and XSL files and add to check-tabs target
Peter Eisentraut [Thu, 19 Apr 2012 19:38:14 +0000 (22:38 +0300)]
Untabify DSSSL and XSL files and add to check-tabs target

Like with SGML files, using tabs in these files is confusing and
unnecessary.

12 years agoRemove bogus comment from HeapTupleSatisfiesNow.
Robert Haas [Wed, 18 Apr 2012 15:50:45 +0000 (11:50 -0400)]
Remove bogus comment from HeapTupleSatisfiesNow.

This has been wrong for a really long time.  We don't use two-phase
locking to protect against serialization anomalies.

Per discussion on pgsql-hackers about 2011-03-07; original report
by Dan Ports.

12 years agoFinish rename of FastPathStrongLocks to FastPathStrongRelationLocks.
Robert Haas [Wed, 18 Apr 2012 15:29:34 +0000 (11:29 -0400)]
Finish rename of FastPathStrongLocks to FastPathStrongRelationLocks.

Commit 8e5ac74c1249820ca55481223a95b9124b4a4f95 tried to do this renaming,
but I relied on gcc to tell me where I needed to make changes, instead of
grep.

Noted by Jeff Davis.

12 years agoTighten up error recovery for fast-path locking.
Robert Haas [Wed, 18 Apr 2012 15:17:30 +0000 (11:17 -0400)]
Tighten up error recovery for fast-path locking.

The previous code could cause a backend crash after BEGIN; SAVEPOINT a;
LOCK TABLE foo (interrupted by ^C or statement timeout); ROLLBACK TO
SAVEPOINT a; LOCK TABLE foo, and might have leaked strong-lock counts
in other situations.

Report by Zoltán Böszörményi; patch review by Jeff Davis.

12 years agoFix incorrect comment in SetBufferCommitInfoNeedsSave().
Robert Haas [Wed, 18 Apr 2012 14:55:40 +0000 (10:55 -0400)]
Fix incorrect comment in SetBufferCommitInfoNeedsSave().

Noah Misch spotted the fact that the old comment is in fact incorrect, due
to memory ordering hazards.

12 years agoAfter PageSetAllVisible, use MarkBufferDirty.
Robert Haas [Wed, 18 Apr 2012 14:49:37 +0000 (10:49 -0400)]
After PageSetAllVisible, use MarkBufferDirty.

Previously, we used SetBufferCommitInfoNeedsSave, but that's really
intended for dirty-marks we can theoretically afford to lose, such as
hint bits.  As for 9.2, the PD_ALL_VISIBLE mustn't be lost in this
way, since we could then end up with a heap page that isn't
all-visible and a visibility map page that is all visible, causing
index-only scans to return wrong answers.

12 years agoFix copyfuncs/equalfuncs support for ReassignOwnedStmt.
Robert Haas [Wed, 18 Apr 2012 14:45:18 +0000 (10:45 -0400)]
Fix copyfuncs/equalfuncs support for ReassignOwnedStmt.

Noah Misch

12 years agoFix various infelicities in node functions.
Robert Haas [Wed, 18 Apr 2012 14:43:16 +0000 (10:43 -0400)]
Fix various infelicities in node functions.

Mostly, this consists of adding support for fields which exist in the
structure but aren't handled by copy/equal/outfuncs; but the create
foreign table case can actually produce garbage output.

Noah Misch

12 years agoDoc clarification for synchronous_commit.
Robert Haas [Wed, 18 Apr 2012 14:09:41 +0000 (10:09 -0400)]
Doc clarification for synchronous_commit.

Fujii Masao

12 years agopsql: Add tab completion for CREATE/ALTER ROLE name WITH
Peter Eisentraut [Wed, 18 Apr 2012 13:55:01 +0000 (16:55 +0300)]
psql: Add tab completion for CREATE/ALTER ROLE name WITH

Previously, the use of the optional key word WITH was not supported.

Josh Kupershmidt

12 years agoDon't override arguments set via options with positional arguments.
Andrew Dunstan [Tue, 17 Apr 2012 22:30:34 +0000 (18:30 -0400)]
Don't override arguments set via options with positional arguments.

A number of utility programs were rather careless about paremeters
that can be set via both an option argument and a positional
argument. This leads to results which can violate the Principal
Of Least Astonishment. These changes refuse to use positional
arguments to override settings that have been made via positional
arguments. The changes are backpatched to all live branches.

12 years agoDon't wait for the commit record to be replicated if we wrote no WAL.
Heikki Linnakangas [Tue, 17 Apr 2012 13:28:31 +0000 (16:28 +0300)]
Don't wait for the commit record to be replicated if we wrote no WAL.

When using synchronous replication, we waited for the commit record to be
replicated, but if we our transaction didn't write any other WAL records,
that's not required because we don't even flush the WAL locally to disk in
that case. This lead to long waits when committing a transaction that only
modified a temporary table. Bug spotted by Thom Brown.

12 years agoAdd compatibility information for prepared transaction commands
Peter Eisentraut [Mon, 16 Apr 2012 19:40:54 +0000 (22:40 +0300)]
Add compatibility information for prepared transaction commands

12 years agoFix typo
Peter Eisentraut [Mon, 16 Apr 2012 12:36:40 +0000 (15:36 +0300)]
Fix typo

Kyotaro HORIGUCHI

12 years agoInstall plpgsql.h to to include/server at "make install".
Heikki Linnakangas [Mon, 16 Apr 2012 09:58:37 +0000 (12:58 +0300)]
Install plpgsql.h to to include/server at "make install".

The header file is needed by any module that wants to use the PL/pgSQL
instrumentation plugin interface. Most notably, the pldebugger plugin needs
this. With this patch, it can be built using pgxs, without having the full
server source tree available.

12 years agoPL/Python: Improve documentation of nrows() method
Peter Eisentraut [Mon, 16 Apr 2012 08:30:32 +0000 (11:30 +0300)]
PL/Python: Improve documentation of nrows() method

Clarify that nrows() is the number of rows processed, versus the
number of rows returned, which can be obtained using len.  Also add
tests about that.

12 years agoPL/Python: Fix crash when colnames() etc. called without result set
Peter Eisentraut [Sun, 15 Apr 2012 17:23:08 +0000 (20:23 +0300)]
PL/Python: Fix crash when colnames() etc. called without result set

The result object methods colnames() etc. would crash when called
after a command that did not produce a result set.  Now they throw an
exception.

discovery and initial patch by Jean-Baptiste Quenot

12 years agoAdd missing descriptions about '--timeout' and '--mode' to help
Tatsuo Ishii [Sun, 15 Apr 2012 00:12:51 +0000 (09:12 +0900)]
Add missing descriptions about '--timeout' and '--mode' to help
message. They are already implemented in the source code.
Suggestions about the message formatting from Tom Lane.

12 years agoRename synchronous_commit='write' to 'remote_write'.
Robert Haas [Sat, 14 Apr 2012 14:53:22 +0000 (10:53 -0400)]
Rename synchronous_commit='write' to 'remote_write'.

Fujii Masao, per discussion on pgsql-hackers

12 years agopg_size_pretty(numeric)
Robert Haas [Sat, 14 Apr 2012 12:04:11 +0000 (08:04 -0400)]
pg_size_pretty(numeric)

The output of the new pg_xlog_location_diff function is of type numeric,
since it could theoretically overflow an int8 due to signedness; this
provides a convenient way to format such values.

Fujii Masao, with some beautification by me.

12 years agoAdd description of long options for '-c', '-D', '-l' and '-s'. Per
Tatsuo Ishii [Sat, 14 Apr 2012 09:40:35 +0000 (18:40 +0900)]
Add description of long options for '-c', '-D', '-l' and '-s'.  Per
discussion of hackers list on 2012/3/10 "missing description initdb
manual".

12 years agoUpdate contrib/README
Peter Eisentraut [Sat, 14 Apr 2012 06:29:54 +0000 (09:29 +0300)]
Update contrib/README

Remove lots of outdated information that is duplicated by the
better-maintained SGML documentation.  In particular, remove the
outdated listing of contrib modules.  Update the installation
instructions to mention CREATE EXTENSION, but don't go into too much
detail.

12 years agoDocument that VALUES can be used in WITH
Peter Eisentraut [Sat, 14 Apr 2012 06:08:08 +0000 (09:08 +0300)]
Document that VALUES can be used in WITH

12 years agoFix typo
Peter Eisentraut [Fri, 13 Apr 2012 22:05:34 +0000 (01:05 +0300)]
Fix typo

Etsuro Fujita

12 years agoAdd Peter Geoghegan as additional author of pg_stat_statements.
Robert Haas [Fri, 13 Apr 2012 20:42:24 +0000 (16:42 -0400)]
Add Peter Geoghegan as additional author of pg_stat_statements.

12 years agoRemove the "last ditch" code path in join_search_one_level().
Tom Lane [Fri, 13 Apr 2012 20:03:16 +0000 (16:03 -0400)]
Remove the "last ditch" code path in join_search_one_level().

So far as I can tell, it is no longer possible for this heuristic to do
anything useful, because the new weaker definition of
have_relevant_joinclause means that any relation with a joinclause must be
considered joinable to at least one other relation.  It would still be
possible for the code block to be entered, for example if there are join
order restrictions that prevent any join of the current level from being
formed; but in that case it's just a waste of cycles to attempt to form
cartesian joins, since the restrictions will still apply.

Furthermore, IMO the existence of this code path can mask bugs elsewhere;
we would have noticed the problem with cartesian joins a lot sooner if
this code hadn't compensated for it in the simplest case.

Accordingly, let's remove it and see what happens.  I'm committing this
separately from the prerequisite changes in have_relevant_joinclause,
just to make the question easier to revisit if there is some fault in
my logic.

12 years agoWeaken the planner's tests for relevant joinclauses.
Tom Lane [Fri, 13 Apr 2012 19:32:34 +0000 (15:32 -0400)]
Weaken the planner's tests for relevant joinclauses.

We should be willing to cross-join two small relations if that allows us
to use an inner indexscan on a large relation (that is, the potential
indexqual for the large table requires both smaller relations).  This
worked in simple cases but fell apart as soon as there was a join clause
to a fourth relation, because the existence of any two-relation join clause
caused the planner to not consider clauseless joins between other base
relations.  The added regression test shows an example case adapted from
a recent complaint from Benoit Delbosc.

Adjust have_relevant_joinclause, have_relevant_eclass_joinclause, and
has_relevant_eclass_joinclause to consider that a join clause mentioning
three or more relations is sufficient grounds for joining any subset of
those relations, even if we have to do so via a cartesian join.  Since such
clauses are relatively uncommon, this shouldn't affect planning speed on
typical queries; in fact it should help a bit, because the latter two
functions in particular get significantly simpler.

Although this is arguably a bug fix, I'm not going to risk back-patching
it, since it might have currently-unforeseen consequences.

12 years agoRename bytea_agg to string_agg and add delimiter argument
Peter Eisentraut [Fri, 13 Apr 2012 18:36:59 +0000 (21:36 +0300)]
Rename bytea_agg to string_agg and add delimiter argument

Per mailing list discussion, we would like to keep the bytea functions
parallel to the text functions, so rename bytea_agg to string_agg,
which already exists for text.

Also, to satisfy the rule that we don't want aggregate functions of
the same name with a different number of arguments, add a delimiter
argument, just like string_agg for text already has.

12 years agoConsistently quote encoding and locale names in messages
Peter Eisentraut [Fri, 13 Apr 2012 17:37:07 +0000 (20:37 +0300)]
Consistently quote encoding and locale names in messages

12 years agoGrammar corrections.
Robert Haas [Fri, 13 Apr 2012 16:47:23 +0000 (12:47 -0400)]
Grammar corrections.

Christoph Berg

12 years agoFix typo in comment.
Robert Haas [Fri, 13 Apr 2012 12:54:13 +0000 (08:54 -0400)]
Fix typo in comment.

12 years agoUpdate lazy_scan_heap header comment.
Robert Haas [Fri, 13 Apr 2012 12:49:59 +0000 (08:49 -0400)]
Update lazy_scan_heap header comment.

The previous comment described how things worked in PostgreSQL 8.2
and prior.

12 years agoAssorted spelling corrections.
Tom Lane [Thu, 12 Apr 2012 14:43:39 +0000 (10:43 -0400)]
Assorted spelling corrections.

Thom Brown

12 years agoFix cost estimation for indexscan filter conditions.
Tom Lane [Thu, 12 Apr 2012 00:24:17 +0000 (20:24 -0400)]
Fix cost estimation for indexscan filter conditions.

cost_index's method for estimating per-tuple costs of evaluating filter
conditions (a/k/a qpquals) was completely wrong in the presence of derived
indexable conditions, such as range conditions derived from a LIKE clause.
This was largely masked in common cases as a result of all simple operator
clauses having about the same costs, but it could show up in a big way when
dealing with functional indexes containing expensive functions, as seen for
example in bug #6579 from Istvan Endredy.  Rejigger the calculation to give
sane answers when the indexquals aren't a subset of the baserestrictinfo
list.  As a side benefit, we now do the calculation properly for cases
involving join clauses (ie, parameterized indexscans), which we always
overestimated before.

There are still cases where this is an oversimplification, such as clauses
that can be dropped because they are implied by a partial index's
predicate.  But we've never accounted for that in cost estimates before,
and I'm not convinced it's worth the cycles to try to do so.

12 years agoSilently ignore any nonexistent schemas that are listed in search_path.
Tom Lane [Wed, 11 Apr 2012 15:29:22 +0000 (11:29 -0400)]
Silently ignore any nonexistent schemas that are listed in search_path.

Previously we attempted to throw an error or at least warning for missing
schemas, but this was done inconsistently because of implementation
restrictions (in many cases, GUC settings are applied outside transactions
so that we can't do system catalog lookups).  Furthermore, there were
exceptions to the rule even in the beginning, and we'd been poking more
and more holes in it as time went on, because it turns out that there are
lots of use-cases for having some irrelevant items in a common search_path
value.  It seems better to just adopt a philosophy similar to what's always
been done with Unix PATH settings, wherein nonexistent or unreadable
directories are silently ignored.

This commit also fixes the documentation to point out that schemas for
which the user lacks USAGE privilege are silently ignored.  That's always
been true but was previously not documented.

This is mostly in response to Robert Haas' complaint that 9.1 started to
throw errors or warnings for missing schemas in cases where prior releases
had not.  We won't adopt such a significant behavioral change in a back
branch, so something different will be needed in 9.1.

12 years agoAccept postgres:// URIs in libpq connection functions
Alvaro Herrera [Wed, 11 Apr 2012 06:59:32 +0000 (03:59 -0300)]
Accept postgres:// URIs in libpq connection functions

postgres:// URIs are an attempt to "stop the bleeding" in this general
area that has been said to occur due to external projects adopting their
own syntaxes.  The syntaxes supported by this patch:

 postgres://[user[:pwd]@][unix-socket][:port[/dbname]][?param1=value1&...]
 postgres://[user[:pwd]@][net-location][:port][/dbname][?param1=value1&...]

should be enough to cover most interesting cases without having to
resort to "param=value" pairs, but those are provided for the cases that
need them regardless.

libpq documentation has been shuffled around a bit, to avoid stuffing
all the format details into the PQconnectdbParams description, which was
already a bit overwhelming.  The list of keywords has moved to its own
subsection, and the details on the URI format live in another subsection.

This includes a simple test program, as requested in discussion, to
ensure that interesting corner cases continue to work appropriately in
the future.

Author: Alexander Shulgin
Some tweaking by Álvaro Herrera, Greg Smith, Daniel Farina, Peter Eisentraut
Reviewed by Robert Haas, Alexey Klyukin (offlist), Heikki Linnakangas,
Marko Kreen, and others

Oh, it also supports postgresql:// but that's probably just an accident.

12 years agoMake pg_tablespace_location(0) return the database's default tablespace.
Tom Lane [Wed, 11 Apr 2012 01:42:46 +0000 (21:42 -0400)]
Make pg_tablespace_location(0) return the database's default tablespace.

This definition is convenient when applying the function to the
reltablespace column of pg_class, since that's what zero means there;
and it doesn't interfere with any other plausible use of the function.
Per gripe from Bruce Momjian.

12 years agoFix pg_upgrade to properly upgrade a table that is stored in the cluster
Bruce Momjian [Tue, 10 Apr 2012 23:57:14 +0000 (19:57 -0400)]
Fix pg_upgrade to properly upgrade a table that is stored in the cluster
default tablespace, but part of a database that is in a user-defined
tablespace.  Caused "file not found" error during upgrade.

Per bug report from Ants Aasma.

Backpatch to 9.1 and 9.0.

12 years agoNLS: Initialize Project-Id-Version field by xgettext
Peter Eisentraut [Tue, 10 Apr 2012 18:26:17 +0000 (21:26 +0300)]
NLS: Initialize Project-Id-Version field by xgettext

Since xgettext provides options to do this now, we might as well use
them.

12 years agopsql: Improve tab completion of WITH
Peter Eisentraut [Tue, 10 Apr 2012 17:35:39 +0000 (20:35 +0300)]
psql: Improve tab completion of WITH

Only match when WITH is the first word, as WITH may appear in many
other contexts.

Josh Kupershmidt

12 years agoMeasure epoch of timestamp-without-time-zone from local not UTC midnight.
Tom Lane [Tue, 10 Apr 2012 16:04:42 +0000 (12:04 -0400)]
Measure epoch of timestamp-without-time-zone from local not UTC midnight.

This patch reverts commit 191ef2b407f065544ceed5700e42400857d9270f
and thereby restores the pre-7.3 behavior of EXTRACT(EPOCH FROM
timestamp-without-tz).  Per discussion, the more recent behavior was
misguided on a couple of grounds: it makes it hard to get a
non-timezone-aware epoch value for a timestamp, and it makes this one
case dependent on the value of the timezone GUC, which is incompatible
with having timestamp_part() labeled as immutable.

The other behavior is still available (in all releases) by explicitly
casting the timestamp to timestamp with time zone before applying EXTRACT.

This will need to be called out as an incompatible change in the 9.2
release notes.  Although having mutable behavior in a function marked
immutable is clearly a bug, we're not going to back-patch such a change.

12 years agoPoint the URL to PL/py directly to the page about the procedural language.
Heikki Linnakangas [Tue, 10 Apr 2012 06:46:44 +0000 (09:46 +0300)]
Point the URL to PL/py directly to the page about the procedural language.

It used to point to a top-level page that contains client-side tools as
well. It was hard to find the procedural language there.

12 years agoFix typos in docs, some words were doubled.
Heikki Linnakangas [Tue, 10 Apr 2012 06:30:58 +0000 (09:30 +0300)]
Fix typos in docs, some words were doubled.

Thom Brown

12 years agoAdjust various references to GEQO being non-deterministic.
Tom Lane [Tue, 10 Apr 2012 00:49:01 +0000 (20:49 -0400)]
Adjust various references to GEQO being non-deterministic.

It's still non-deterministic in some sense ... but given fixed settings
and identical planning problems, it will now always choose the same plan,
so we probably shouldn't tar it with that brush.  Per bug #6565 from
Guillaume Cottenceau.  Back-patch to 9.0 where the behavior was fixed.

12 years agoRe-add documentation recommendation to use gzip/gunzip for archive file
Bruce Momjian [Mon, 9 Apr 2012 18:50:48 +0000 (14:50 -0400)]
Re-add documentation recommendation to use gzip/gunzip for archive file
storage.

12 years agoUpdate documentation to more clearly label the streaming replication option.
Bruce Momjian [Mon, 9 Apr 2012 18:40:16 +0000 (14:40 -0400)]
Update documentation to more clearly label the streaming replication option.

12 years agoRemove documentation mention of pglesslog, which was added in 2009
Bruce Momjian [Mon, 9 Apr 2012 18:12:04 +0000 (14:12 -0400)]
Remove documentation mention of pglesslog, which was added in 2009
because there was only a beta for 9.0 and it does not compile on 9.1.

12 years agoFix an Assert that turns out to be reachable after all.
Tom Lane [Mon, 9 Apr 2012 15:58:24 +0000 (11:58 -0400)]
Fix an Assert that turns out to be reachable after all.

estimate_num_groups() gets unhappy with
create table empty();
select * from empty except select * from empty e2;
I can't see any actual use-case for such a query (and the table is illegal
per SQL spec), but it seems like a good idea that it not cause an assert
failure.

12 years agoDon't bother copying empty support arrays in a zero-column MergeJoin.
Tom Lane [Mon, 9 Apr 2012 15:41:54 +0000 (11:41 -0400)]
Don't bother copying empty support arrays in a zero-column MergeJoin.

The case could not arise when this code was originally written, but it can
now (since we made zero-column MergeJoins work for the benefit of FULL JOIN
ON TRUE).  I don't think there is any actual bug here, but we might as well
treat it consistently with other uses of COPY_POINTER_FIELD().  Per comment
from Ashutosh Bapat.

12 years agoSave a few cycles while creating "sticky" entries in pg_stat_statements.
Tom Lane [Mon, 9 Apr 2012 15:16:04 +0000 (11:16 -0400)]
Save a few cycles while creating "sticky" entries in pg_stat_statements.

There's no need to sit there and increment the stats when we know all the
increments would be zero anyway.  The actual additions might not be very
expensive, but skipping acquisition of the spinlock seems like a good
thing.  Pushing the logic about initialization of the usage count down into
entry_alloc() allows us to do that while making the code actually simpler,
not more complex.  Expansion on a suggestion by Peter Geoghegan.

12 years agoRemove link to ODBCng project from the docs.
Heikki Linnakangas [Mon, 9 Apr 2012 06:45:06 +0000 (09:45 +0300)]
Remove link to ODBCng project from the docs.

Thom Browne pointed out that the URL was out of date, and Devrim GÜNDÜZ
pointed out that the project isn't maintained anymore.

12 years agoTeach SLRU code to avoid replacing I/O-busy pages.
Robert Haas [Mon, 9 Apr 2012 03:04:07 +0000 (23:04 -0400)]
Teach SLRU code to avoid replacing I/O-busy pages.

Patch by me; review by Tom Lane and others.

12 years agoImprove management of "sticky" entries in contrib/pg_stat_statements.
Tom Lane [Sun, 8 Apr 2012 19:49:47 +0000 (15:49 -0400)]
Improve management of "sticky" entries in contrib/pg_stat_statements.

This patch addresses a deficiency in the previous pg_stat_statements patch.
We want to give sticky entries an initial "usage" factor high enough that
they probably will stick around until their query is completed.  However,
if the query never completes (eg it gets an error during execution), the
entry shouldn't persist indefinitely.  Manage this by starting out with
a usage setting equal to the (approximate) median usage value within the
whole hashtable, but decaying the value much more aggressively than we
do for normal entries.

Peter Geoghegan

12 years agoset_stack_base() no longer needs to be called in PostgresMain.
Heikki Linnakangas [Sun, 8 Apr 2012 16:39:12 +0000 (19:39 +0300)]
set_stack_base() no longer needs to be called in PostgresMain.

This was a thinko in previous commit. Now that stack base pointer is now set
in PostmasterMain and SubPostmasterMain, it doesn't need to be set in
PostgresMain anymore.

12 years agoDo stack-depth checking in all postmaster children.
Heikki Linnakangas [Sun, 8 Apr 2012 15:28:12 +0000 (18:28 +0300)]
Do stack-depth checking in all postmaster children.

We used to only initialize the stack base pointer when starting up a regular
backend, not in other processes. In particular, autovacuum workers can run
arbitrary user code, and without stack-depth checking, infinite recursion
in e.g an index expression will bring down the whole cluster.

The comment about PL/Java using set_stack_base() is not yet true. As the
code stands, PL/java still modifies the stack_base_ptr variable directly.
However, it's been discussed in the PL/Java mailing list that it should be
changed to use the function, because PL/Java is currently oblivious to the
register stack used on Itanium. There's another issues with PL/Java, namely
that the stack base pointer it sets is not really the base of the stack, it
could be something close to the bottom of the stack. That's a separate issue
that might need some further changes to this code, but that's a different
story.

Backpatch to all supported releases.

12 years agoFix incorrect make maintainer-clean rule.
Tom Lane [Sat, 7 Apr 2012 22:16:50 +0000 (18:16 -0400)]
Fix incorrect make maintainer-clean rule.

12 years agoFurther adjustment of comment about qsort_tuple.
Tom Lane [Sat, 7 Apr 2012 21:48:40 +0000 (17:48 -0400)]
Further adjustment of comment about qsort_tuple.

12 years agoRemove useless variable to suppress compiler warning.
Tom Lane [Sat, 7 Apr 2012 20:44:43 +0000 (16:44 -0400)]
Remove useless variable to suppress compiler warning.

12 years agoStamp libraries versions for 9.2 (better late than never).
Bruce Momjian [Sat, 7 Apr 2012 20:19:43 +0000 (16:19 -0400)]
Stamp libraries versions for 9.2 (better late than never).

12 years agoUpdate URL for pgtclng project.
Tom Lane [Fri, 6 Apr 2012 23:00:14 +0000 (19:00 -0400)]
Update URL for pgtclng project.

Thom Brown

12 years agoFix misleading output from gin_desc().
Tom Lane [Fri, 6 Apr 2012 22:10:21 +0000 (18:10 -0400)]
Fix misleading output from gin_desc().

XLOG_GIN_UPDATE_META_PAGE and XLOG_GIN_DELETE_LISTPAGE records were printed
with a list link field labeled as "blkno", which was confusing, especially
when the link was empty (InvalidBlockNumber).  Print the metapage block
number instead, since that's what's actually being updated.  We could
include the link values too as a separate field, but not clear it's worth
the trouble.

Back-patch to 8.4 where the dubious code was added.

12 years agoFix broken comparetup_datum code.
Tom Lane [Fri, 6 Apr 2012 20:58:17 +0000 (16:58 -0400)]
Fix broken comparetup_datum code.

Commit 337b6f5ecf05b21b5e997986884d097d60e4e3d0 contained the entirely
fanciful assumption that it had made comparetup_datum unreachable.
Reported and patched by Takashi Yamamoto.

Fix up some not terribly accurate/useful comments from that commit, too.

12 years agoFix some typos in the documentation
Peter Eisentraut [Fri, 6 Apr 2012 20:55:24 +0000 (23:55 +0300)]
Fix some typos in the documentation

Thom Brown

12 years agoCorrect various system catalog/view definitions in the documentation
Peter Eisentraut [Fri, 6 Apr 2012 20:54:27 +0000 (23:54 +0300)]
Correct various system catalog/view definitions in the documentation

Thom Brown

12 years agoDept of second thoughts: improve the API for AnalyzeForeignTable.
Tom Lane [Fri, 6 Apr 2012 20:04:10 +0000 (16:04 -0400)]
Dept of second thoughts: improve the API for AnalyzeForeignTable.

If we make the initially-called function return the table physical-size
estimate, acquire_inherited_sample_rows will be able to use that to
allocate numbers of samples among child tables, when the day comes that
we want to support foreign tables in inheritance trees.

12 years agoAllow statistics to be collected for foreign tables.
Tom Lane [Fri, 6 Apr 2012 19:02:35 +0000 (15:02 -0400)]
Allow statistics to be collected for foreign tables.

ANALYZE now accepts foreign tables and allows the table's FDW to control
how the sample rows are collected.  (But only manual ANALYZEs will touch
foreign tables, for the moment, since among other things it's not very
clear how to handle remote permissions checks in an auto-analyze.)

contrib/file_fdw is extended to support this.

Etsuro Fujita, reviewed by Shigeru Hanada, some further tweaking by me.

12 years agoAdd DROP INDEX CONCURRENTLY [IF EXISTS], uses ShareUpdateExclusiveLock
Simon Riggs [Fri, 6 Apr 2012 09:21:40 +0000 (10:21 +0100)]
Add DROP INDEX CONCURRENTLY [IF EXISTS], uses ShareUpdateExclusiveLock

12 years agocheckopint -> checkpoint
Robert Haas [Fri, 6 Apr 2012 01:36:42 +0000 (21:36 -0400)]
checkopint -> checkpoint

Report by Guillaume Lelarge.

12 years agoPut back code inadvertently deleted from exit_nicely.
Robert Haas [Fri, 6 Apr 2012 01:30:19 +0000 (21:30 -0400)]
Put back code inadvertently deleted from exit_nicely.

Report by Andrew Dunstan.

12 years agoNLS: Use msgmerge/xgettext --no-wrap and --sort-by-file
Peter Eisentraut [Thu, 5 Apr 2012 18:22:15 +0000 (21:22 +0300)]
NLS: Use msgmerge/xgettext --no-wrap and --sort-by-file

The option --no-wrap prevents wars with (most?) editors about proper
line wrapping.  --sort-by-file ensures consistent file order, for
easier diffing.

12 years agoAllow pg_archivecleanup to strip optional file extensions.
Robert Haas [Thu, 5 Apr 2012 18:18:42 +0000 (14:18 -0400)]
Allow pg_archivecleanup to strip optional file extensions.

Greg Smith and Jaime Casanova, reviewed by Alex Shulgin and myself.
e

12 years agoPublish checkpoint timing information to pg_stat_bgwriter.
Robert Haas [Thu, 5 Apr 2012 18:03:21 +0000 (14:03 -0400)]
Publish checkpoint timing information to pg_stat_bgwriter.

Greg Smith, Peter Geoghegan, and Robert Haas

12 years agoUpdate obsolete comment.
Tom Lane [Thu, 5 Apr 2012 17:05:02 +0000 (13:05 -0400)]
Update obsolete comment.

Somebody didn't bother to fix this comment while adding foreign table
support to the code below it.

In passing, remove the explicit calling-out of relkind letters, which adds
complexity to the comment but doesn't help in understanding the code.

12 years agoCorrectly explain units used by function-timing stats functions.
Robert Haas [Thu, 5 Apr 2012 15:50:06 +0000 (11:50 -0400)]
Correctly explain units used by function-timing stats functions.

The views are in milliseconds, but the raw functions return
microseconds.

12 years agoExpose track_iotiming data via the statistics collector.
Robert Haas [Thu, 5 Apr 2012 15:37:31 +0000 (11:37 -0400)]
Expose track_iotiming data via the statistics collector.

Ants Aasma's original patch to add timing information for buffer I/O
requests exposed this data at the relation level, which was judged too
costly.  I've here exposed it at the database level instead.

12 years agoFix plpgsql named-cursor-parameter feature for variable name conflicts.
Tom Lane [Thu, 5 Apr 2012 01:50:31 +0000 (21:50 -0400)]
Fix plpgsql named-cursor-parameter feature for variable name conflicts.

The parser got confused if a cursor parameter had the same name as
a plpgsql variable.  Reported and diagnosed by Yeb Havinga, though
this isn't exactly his proposed fix.

Also, some mostly-but-not-entirely-cosmetic adjustments to the original
named-cursor-parameter patch, for code readability and better error
diagnostics.

12 years agoImprove efficiency of dblink by using libpq's new row processor API.
Tom Lane [Wed, 4 Apr 2012 22:39:08 +0000 (18:39 -0400)]
Improve efficiency of dblink by using libpq's new row processor API.

This patch provides a test case for libpq's row processor API.
contrib/dblink can deal with very large result sets by dumping them into
a tuplestore (which can spill to disk) --- but until now, the intermediate
storage of the query result in a PGresult meant memory bloat for any large
result.  Now we use a row processor to convert the data to tuple form and
dump it directly into the tuplestore.

A limitation is that this only works for plain dblink() queries, not
dblink_send_query() followed by dblink_get_result().  In the latter
case we don't know the desired tuple rowtype soon enough.  While hack
solutions to that are possible, a different user-level API would
probably be a better answer.

Kyotaro Horiguchi, reviewed by Marko Kreen and Tom Lane

12 years agoAdd a "row processor" API to libpq for better handling of large results.
Tom Lane [Wed, 4 Apr 2012 22:27:56 +0000 (18:27 -0400)]
Add a "row processor" API to libpq for better handling of large results.

Traditionally libpq has collected an entire query result before passing
it back to the application.  That provides a simple and transactional API,
but it's pretty inefficient for large result sets.  This patch allows the
application to process each row on-the-fly instead of accumulating the
rows into the PGresult.  Error recovery becomes a bit more complex, but
often that tradeoff is well worth making.

Kyotaro Horiguchi, reviewed by Marko Kreen and Tom Lane

12 years agoRemove useless PGRES_COPY_BOTH "support" in psql.
Tom Lane [Wed, 4 Apr 2012 20:15:04 +0000 (16:15 -0400)]
Remove useless PGRES_COPY_BOTH "support" in psql.

There is no existing or foreseeable case in which psql should see a
PGRES_COPY_BOTH PQresultStatus; and if such a case ever emerges, it's a
pretty good bet that these code fragments wouldn't do the right thing
anyway.  Remove them, and let the existing default cases do the appropriate
thing, namely emit an "unexpected PQresultStatus" bleat.

Noted while working on libpq row processor patch, for which I was
considering adding a PGRES_SUSPENDED status code --- the same default-case
treatment would be appropriate for that.

12 years agoFix syslogger to not lose log coherency under high load.
Tom Lane [Wed, 4 Apr 2012 19:05:10 +0000 (15:05 -0400)]
Fix syslogger to not lose log coherency under high load.

The original coding of the syslogger had an arbitrary limit of 20 large
messages concurrently in progress, after which it would just punt and dump
message fragments to the output file separately.  Our ambitions are a bit
higher than that now, so allow the data structure to expand as necessary.

Reported and patched by Andrew Dunstan; some editing by Tom

12 years agoFix a couple of contrib/dblink bugs.
Tom Lane [Wed, 4 Apr 2012 00:43:15 +0000 (20:43 -0400)]
Fix a couple of contrib/dblink bugs.

dblink_exec leaked temporary database connections if any error occurred
after connection setup, for example
SELECT dblink_exec('...connect string...', 'select 1/0');
Add a PG_TRY block to ensure PQfinish gets done when it is needed.
(dblink_record_internal is on the hairy edge of needing similar treatment,
but seems not to be actively broken at the moment.)

Also, in 9.0 and up, only one of the three functions using tuplestore
return mode was properly checking that the query context would allow
a tuplestore result.

Noted while reviewing dblink patch.  Back-patch to all supported branches.

12 years agoArrange for on_exit_nicely to be thread-safe.
Robert Haas [Tue, 3 Apr 2012 12:38:24 +0000 (08:38 -0400)]
Arrange for on_exit_nicely to be thread-safe.

Extracted from Joachim Wieland's parallel pg_dump patch, with some
additional comments by me.

12 years agoAdd support for renaming domain constraints
Peter Eisentraut [Tue, 3 Apr 2012 05:11:51 +0000 (08:11 +0300)]
Add support for renaming domain constraints

12 years agoNLS: Seed Language field in PO header
Peter Eisentraut [Sun, 1 Apr 2012 23:58:37 +0000 (02:58 +0300)]
NLS: Seed Language field in PO header

Use msgmerge --lang option to seed the Language field, recently
introduced by gettext, in the header of the new PO file.

12 years agoFix recently introduced typo in NLS file lists
Peter Eisentraut [Sun, 1 Apr 2012 23:39:34 +0000 (02:39 +0300)]
Fix recently introduced typo in NLS file lists

12 years agoFix O(N^2) behavior in pg_dump when many objects are in dependency loops.
Tom Lane [Sat, 31 Mar 2012 19:51:07 +0000 (15:51 -0400)]
Fix O(N^2) behavior in pg_dump when many objects are in dependency loops.

Combining the loop workspace with the record of already-processed objects
might have been a cute trick, but it behaves horridly if there are many
dependency loops to repair: the time spent in the first step of findLoop()
grows as O(N^2).  Instead use a separate flag array indexed by dump ID,
which we can check in constant time.  The length of the workspace array
is now never more than the actual length of a dependency chain, which
should be reasonably short in all cases of practical interest.  The code
is noticeably easier to understand this way, too.

Per gripe from Mike Roest.  Since this is a longstanding performance bug,
backpatch to all supported versions.

12 years agoFix O(N^2) behavior in pg_dump for large numbers of owned sequences.
Tom Lane [Sat, 31 Mar 2012 18:42:17 +0000 (14:42 -0400)]
Fix O(N^2) behavior in pg_dump for large numbers of owned sequences.

The loop that matched owned sequences to their owning tables required time
proportional to number of owned sequences times number of tables; although
this work was only expended in selective-dump situations, which is probably
why the issue wasn't recognized long since.  Refactor slightly so that we
can perform this work after the index array for findTableByOid has been
set up, reducing the time to O(M log N).

Per gripe from Mike Roest.  Since this is a longstanding performance bug,
backpatch to all supported versions.

12 years agoRename frontend keyword arrays to avoid conflict with backend.
Tom Lane [Sat, 31 Mar 2012 17:15:53 +0000 (13:15 -0400)]
Rename frontend keyword arrays to avoid conflict with backend.

ecpg and pg_dump each contain keyword arrays with structure similar
to the backend's keyword array.  Up to now, we actually named those
arrays the same as the backend's and relied on parser/keywords.h
to declare them.  This seems a tad too cute, though, and it breaks
now that we need to PGDLLIMPORT-decorate the backend symbols.
Rename to avoid the problem.  Per buildfarm.

(It strikes me that maybe we should get rid of the separate keywords.c
files altogether, and just define these arrays in the modules that use
them, but that's a rather more invasive change.)

12 years agoFix glitch recently introduced in psql tab completion.
Tom Lane [Sat, 31 Mar 2012 15:19:23 +0000 (11:19 -0400)]
Fix glitch recently introduced in psql tab completion.

Over-optimization (by me, looks like :-() broke the case of recognizing
a word boundary just before a quoted identifier.  Reported and diagnosed
by Dean Rasheed.

12 years agoAdd PGDLLIMPORT to ScanKeywords and NumScanKeywords.
Tom Lane [Sat, 31 Mar 2012 14:56:21 +0000 (10:56 -0400)]
Add PGDLLIMPORT to ScanKeywords and NumScanKeywords.

Per buildfarm, this is now needed by contrib/pg_stat_statements.

12 years agoAdd new files to NLS file lists
Peter Eisentraut [Fri, 30 Mar 2012 17:42:06 +0000 (20:42 +0300)]
Add new files to NLS file lists

Some of these are newly added, some are older and were forgotten, some
don't contain any translatable strings right now but look like they
could in the future.

12 years agoReplace printf format %i by %d
Peter Eisentraut [Fri, 30 Mar 2012 17:40:46 +0000 (20:40 +0300)]
Replace printf format %i by %d

see also ce8d7bb6440710058503d213b2aafcdf56a5b481

12 years agopgxs: Supply default values for BISON and FLEX variables
Peter Eisentraut [Fri, 30 Mar 2012 17:36:49 +0000 (20:36 +0300)]
pgxs: Supply default values for BISON and FLEX variables

Otherwise, the availability of these variables depends on what
happened to be available at the time the PostgreSQL build was
configured.

12 years agopg_test_timing: Lame hack to work around compiler warning.
Robert Haas [Fri, 30 Mar 2012 12:15:25 +0000 (08:15 -0400)]
pg_test_timing: Lame hack to work around compiler warning.

Fujii Masao, plus a comment by me.  While I'm at it, correctly tabify
this chunk of code.

12 years agoFix dblink's failure to report correct connection name in error messages.
Tom Lane [Thu, 29 Mar 2012 21:52:28 +0000 (17:52 -0400)]
Fix dblink's failure to report correct connection name in error messages.

The DBLINK_GET_CONN and DBLINK_GET_NAMED_CONN macros did not set the
surrounding function's conname variable, causing errors to be incorrectly
reported as having occurred on the "unnamed" connection in some cases.
This bug was actually visible in two cases in the regression tests,
but apparently whoever added those cases wasn't paying attention.

Noted by Kyotaro Horiguchi, though this is different from his proposed
patch.

Back-patch to 8.4; 8.3 does not have the same type of error reporting
so the patch is not relevant.

12 years agoImprove contrib/pg_stat_statements' handling of PREPARE/EXECUTE statements.
Tom Lane [Thu, 29 Mar 2012 20:42:09 +0000 (16:42 -0400)]
Improve contrib/pg_stat_statements' handling of PREPARE/EXECUTE statements.

It's actually more useful for the module to ignore these.  Ignoring
EXECUTE (and not incrementing the nesting level) allows the executor
hooks to charge the time to the underlying prepared query, which
shows up as a stats entry with the original PREPARE as query string
(possibly modified by suppression of constants, which might not be
terribly useful here but it's not worth avoiding).  This is much more
useful than cluttering the stats table with a distinct entry for each
textually distinct EXECUTE.

Experimentation with this idea shows that it's also preferable to ignore
PREPARE.  If we don't, we get two stats table entries, one with the query
string hash and one with the jumble-derived hash, but with the same visible
query string (modulo those constants).  This is confusing and not very
helpful, since the first entry will only receive costs associated with
initial planning of the query, which is not something counted at all
normally by pg_stat_statements.  (And if we do start tracking planning
costs, we'd want them blamed on the other hash table entry anyway.)

12 years agoImprove handling of utility statements containing plannable statements.
Tom Lane [Thu, 29 Mar 2012 19:32:50 +0000 (15:32 -0400)]
Improve handling of utility statements containing plannable statements.

When tracking nested statements, contrib/pg_stat_statements formerly
double-counted the execution costs of utility statements that directly
contain an executable statement, such as EXPLAIN and DECLARE CURSOR.
This was not obvious since the ProcessUtility and Executor hooks
would each add their measured costs to the same stats table entry.
However, with the new implementation that hashes utility and plannable
statements differently, this showed up as seemingly-duplicate stats
entries.  Fix that by disabling the Executor hooks when the query has a
queryId of zero, which was the case already for such statements but is now
more clearly specified in the code.  (The zero queryId was causing problems
anyway because all such statements would add to a single bogus entry.)

The PREPARE/EXECUTE case still results in counting the same execution
in two different stats table entries, but it should be much less surprising
to users that there are two entries in such cases.

In passing, include a CommonTableExpr's ctename in the query hash.
I had left it out originally on the grounds that we wanted to omit all
inessential aliases, but since RTE_CTE RTEs are hashing their referenced
names, we'd better hash the CTE names too to make sure we don't hash
semantically different queries the same.

12 years agoinitdb: Mark more messages for translation
Peter Eisentraut [Thu, 29 Mar 2012 18:16:28 +0000 (21:16 +0300)]
initdb: Mark more messages for translation

Some Windows-only messages had apparently been forgotten so far.

Also make the wording of the messages more consistent with similar
messages other parts, such as pg_ctl and pg_regress.

12 years agoCorrect epoch of txid_current() when executed on a Hot Standby server.
Simon Riggs [Thu, 29 Mar 2012 13:55:30 +0000 (14:55 +0100)]
Correct epoch of txid_current() when executed on a Hot Standby server.
Initialise ckptXidEpoch from starting checkpoint and maintain the correct
value as we roll forwards. This allows GetNextXidAndEpoch() to return the
correct epoch when executed during recovery. Backpatch to 9.0 when the
problem is first observable by a user.

Bug report from Daniel Farina