]> granicus.if.org Git - postgresql/log
postgresql
12 years agoDocument that pg_reload_conf() is also an easy way to reload the
Bruce Momjian [Wed, 22 Aug 2012 16:00:24 +0000 (12:00 -0400)]
Document that pg_reload_conf() is also an easy way to reload the
configuration file.

12 years agoFix install-strip on Mac OS X
Peter Eisentraut [Wed, 22 Aug 2012 03:42:43 +0000 (23:42 -0400)]
Fix install-strip on Mac OS X

There was a hack put into install-sh to call strip with the correct
options on Mac OS X.  But that never worked, because configure
disabled stripping on that platform altogether.  So remove that dead
code, and while we're at it, update install-sh to the latest upstream
source (from Automake).

Instead, set up the right strip options in programs.m4, so this now
actually works the way it was originally intended.

12 years agoMark DateTimeParseError() noreturn
Peter Eisentraut [Wed, 22 Aug 2012 03:30:05 +0000 (23:30 -0400)]
Mark DateTimeParseError() noreturn

This avoids a warning from clang 3.2 about an uninitialized variable
'dtype' in date_in().

12 years agoUpdate 9.2 release notes to reflect commits to date.
Tom Lane [Wed, 22 Aug 2012 02:56:10 +0000 (22:56 -0400)]
Update 9.2 release notes to reflect commits to date.

I was unable to entirely resist the temptation to copy-edit related
entries, but will save most of that for a separate pass.

12 years agoAvoid somewhat-theoretical overflow risks in RecordIsValid().
Tom Lane [Tue, 21 Aug 2012 22:41:52 +0000 (18:41 -0400)]
Avoid somewhat-theoretical overflow risks in RecordIsValid().

This improves on commit 51fed14d73ed3acd2282b531fb1396877e44e86a by
eliminating the assumption that we can form <some pointer value> +
<some offset> without overflow.  The entire point of those tests is that
we don't trust the offset value, so coding them in a way that could wrap
around if the buffer happens to be near the top of memory doesn't seem
sound.  Instead, track the remaining space as a size_t variable and
compare offsets against that.

Also, improve comment about why we need the extra early check on
xl_tot_len.

12 years agoFix dumping of security_barrier views with circular dependencies.
Tom Lane [Tue, 21 Aug 2012 19:18:36 +0000 (15:18 -0400)]
Fix dumping of security_barrier views with circular dependencies.

If a view has circular dependencies, pg_dump splits it into a CREATE TABLE
and a CREATE RULE command to break the dependency loop.  However, if the
view has reloptions, those options cannot be applied in the CREATE TABLE
command, because views and tables have different allowed reloptions so
CREATE TABLE would reject them.  Instead apply the reloptions after the
CREATE RULE, using ALTER VIEW SET.

12 years agoImprove C comments in GetSnapshotData.
Robert Haas [Tue, 21 Aug 2012 15:47:10 +0000 (11:47 -0400)]
Improve C comments in GetSnapshotData.

Move discussion of why our algorithm for taking snapshots in recovery
to a more appropriate location in the function, and delete incorrect
mention of taking a lock.

12 years agoAdd a note to the MVCC chapter that some things aren't transactional.
Robert Haas [Tue, 21 Aug 2012 15:08:15 +0000 (11:08 -0400)]
Add a note to the MVCC chapter that some things aren't transactional.

Craig Ringer, slightly edited by me.

12 years agoTeach compiler that ereport(>=ERROR) does not return
Peter Eisentraut [Tue, 21 Aug 2012 04:03:32 +0000 (00:03 -0400)]
Teach compiler that ereport(>=ERROR) does not return

When elevel >= ERROR, we add an abort() call to the ereport() macro to
give the compiler a hint that the ereport() expansion will not return,
but the abort() isn't actually reached because the longjmp happens in
errfinish().

Because the effect of ereport() varies with the elevel, we cannot use
standard compiler attributes such as noreturn for this.

12 years agoRemove external PID file on postmaster exit
Peter Eisentraut [Tue, 21 Aug 2012 03:47:11 +0000 (23:47 -0400)]
Remove external PID file on postmaster exit

12 years agoImproved tab completion for CLUSTER VERBOSE.
Robert Haas [Mon, 20 Aug 2012 20:45:44 +0000 (16:45 -0400)]
Improved tab completion for CLUSTER VERBOSE.

Jeff Janes

12 years agoTab complete "TABLE whatever DROP CONSTRAINT" with a constraint name.
Robert Haas [Mon, 20 Aug 2012 20:30:08 +0000 (16:30 -0400)]
Tab complete "TABLE whatever DROP CONSTRAINT" with a constraint name.

Jeff Janes

12 years agoFix bugs in contrib/pg_trgm's LIKE pattern analysis code.
Tom Lane [Mon, 20 Aug 2012 17:24:52 +0000 (13:24 -0400)]
Fix bugs in contrib/pg_trgm's LIKE pattern analysis code.

Extraction of trigrams did not process LIKE escape sequences properly,
leading to possible misidentification of trigrams near escapes, resulting
in incorrect index search results.

Fujii Masao

12 years agoDon't get confused if a WAL partial record header has xl_tot_len == 0.
Heikki Linnakangas [Mon, 20 Aug 2012 16:51:42 +0000 (19:51 +0300)]
Don't get confused if a WAL partial record header has xl_tot_len == 0.

If a WAL record header was split across pages, but xl_tot_len was 0, we
would get confused and conclude that we had already read the whole record,
and proceed to CRC check it. That can lead to a crash in RecordIsValid(),
which isn't careful to not read beyond end-of-record, as defined by
xl_tot_len.

Add an explicit sanity check for xl_tot_len <= SizeOfXlogRecord. Also,
make RecordIsValid() more robust by checking in each step that it doesn't
try to access memory beyond end of record, even if a length field in the
record's or a backup block's header is bogus.

Per report and analysis by Tom Lane.

12 years agoFix typo in comment.
Tom Lane [Mon, 20 Aug 2012 02:56:17 +0000 (22:56 -0400)]
Fix typo in comment.

12 years agoRemove obsolete comment.
Tom Lane [Sun, 19 Aug 2012 19:25:43 +0000 (15:25 -0400)]
Remove obsolete comment.

12 years agoAllow OLD and NEW in multi-row VALUES within rules.
Tom Lane [Sun, 19 Aug 2012 18:12:16 +0000 (14:12 -0400)]
Allow OLD and NEW in multi-row VALUES within rules.

Now that we have LATERAL, it's fairly painless to allow this case, which
was left as a TODO in the original multi-row VALUES implementation.

12 years agoMake use of LATERAL in information_schema.sequences view.
Tom Lane [Sat, 18 Aug 2012 20:14:57 +0000 (16:14 -0400)]
Make use of LATERAL in information_schema.sequences view.

It said "XXX: The following could be improved if we had LATERAL" ...
so let's do that.

No catversion bump since either version of the view works fine.

12 years agoAnother round of planner fixes for LATERAL.
Tom Lane [Sat, 18 Aug 2012 18:10:17 +0000 (14:10 -0400)]
Another round of planner fixes for LATERAL.

Formerly, subquery pullup had no need to examine other entries in the range
table, since they could not contain any references to the subquery being
pulled up.  That's no longer true with LATERAL, so now we need to be able
to visit rangetable subexpressions to replace Vars referencing the
pulled-up subquery.  Also, this means that extract_lateral_references must
be unsurprised at encountering lateral PlaceHolderVars, since such might be
created when pulling up a subquery that's underneath an outer join with
respect to the lateral reference.

12 years agoCopy-editing for recent window-functions documentation rewrite.
Tom Lane [Fri, 17 Aug 2012 19:40:35 +0000 (15:40 -0400)]
Copy-editing for recent window-functions documentation rewrite.

Fix grammar, put back some removed information, rearrange for clarity.

12 years agoCheck LIBXML_VERSION instead of testing in configure script.
Tom Lane [Fri, 17 Aug 2012 04:05:26 +0000 (00:05 -0400)]
Check LIBXML_VERSION instead of testing in configure script.

We had put a test for libxml2's xmlStructuredErrorContext variable in
configure, but of course that doesn't work on Windows builds.  The next
best alternative seems to be to test the LIBXML_VERSION symbol provided
by xmlversion.h.

Per report from Talha Bin Rizwan, though this fixes it in a different way
than his proposed patch.

12 years agoUpdate 'int' protocol documentation mention to be "signed", per request
Bruce Momjian [Fri, 17 Aug 2012 02:07:14 +0000 (22:07 -0400)]
Update 'int' protocol documentation mention to be "signed", per request
from Dmitriy Igrishin

12 years agoDelete inaccurate C comment about FSM and adding pages, per Robert Haas.
Bruce Momjian [Thu, 16 Aug 2012 23:02:58 +0000 (19:02 -0400)]
Delete inaccurate C comment about FSM and adding pages, per Robert Haas.

12 years agoAdd URL for include file visualization tool.
Bruce Momjian [Thu, 16 Aug 2012 22:52:08 +0000 (18:52 -0400)]
Add URL for include file visualization tool.

12 years agoDocument that tab completation can interfere with some SQL commands.
Bruce Momjian [Thu, 16 Aug 2012 22:41:38 +0000 (18:41 -0400)]
Document that tab completation can interfere with some SQL commands.

12 years agoAdd warning about pg_ctl restart and the use of relative paths on the command-line.
Bruce Momjian [Thu, 16 Aug 2012 22:15:47 +0000 (18:15 -0400)]
Add warning about pg_ctl restart and the use of relative paths on the command-line.

12 years agoAllow create_index_paths() to consider multiple join bitmapscan paths.
Tom Lane [Thu, 16 Aug 2012 17:03:54 +0000 (13:03 -0400)]
Allow create_index_paths() to consider multiple join bitmapscan paths.

In the initial cut at the "parameterized paths" feature, I'd simplified
create_index_paths() to the point where it would only generate a single
parameterized bitmap path per relation.  Experimentation with an example
supplied by Josh Berkus convinces me that that's not good enough: we really
need to consider a bitmap path for each possible outer relation.  Otherwise
we have regressions relative to pre-9.2 versions, in which the planner
picks a plain indexscan where it should have used a bitmap scan in queries
involving three or more tables.  Indeed, after fixing this, several queries
in the regression tests show improved plans as a result of using bitmap not
plain indexscans.

12 years agoSuppress possibly-uninitialized-variable warning.
Tom Lane [Thu, 16 Aug 2012 16:03:37 +0000 (12:03 -0400)]
Suppress possibly-uninitialized-variable warning.

12 years agoAdd possible alternate tool for pgrminclude, from Peter Geoghegan
Bruce Momjian [Thu, 16 Aug 2012 15:56:00 +0000 (11:56 -0400)]
Add possible alternate tool for pgrminclude, from Peter Geoghegan

12 years agoIn docs, clarify that, without ORDER BY, the window frame is all rows in
Bruce Momjian [Thu, 16 Aug 2012 15:32:22 +0000 (11:32 -0400)]
In docs, clarify that, without ORDER BY, the window frame is all rows in
the partition.

12 years agoRevert: In docs, change a few cases of "not important" to
Bruce Momjian [Thu, 16 Aug 2012 15:26:40 +0000 (11:26 -0400)]
Revert:  In docs, change a few cases of "not important" to
"unimportant".

Per request from Heikki

12 years agoRewrite window function reference section to more clearly explain
Bruce Momjian [Thu, 16 Aug 2012 14:42:42 +0000 (10:42 -0400)]
Rewrite window function reference section to more clearly explain
keywords and concepts, based on suggestions by Florian Pflug.

12 years agoIn docs, change a few cases of "not important" to "unimportant".
Bruce Momjian [Thu, 16 Aug 2012 14:36:33 +0000 (10:36 -0400)]
In docs, change a few cases of "not important" to "unimportant".

12 years agoAdd SP-GiST support for range types.
Heikki Linnakangas [Thu, 16 Aug 2012 09:55:37 +0000 (12:55 +0300)]
Add SP-GiST support for range types.

The implementation is a quad-tree, largely copied from the quad-tree
implementation for points. The lower and upper bound of ranges are the 2d
coordinates, with some extra code to handle empty ranges.

I left out the support for adjacent operator, -|-, from the original patch.
Not because there was necessarily anything wrong with it, but it was more
complicated than the other operators, and I only have limited time for
reviewing. That will follow as a separate patch.

Alexander Korotkov, reviewed by Jeff Davis and me.

12 years agoFix GiST buffering build bug, which caused "failed to re-find parent" errors.
Heikki Linnakangas [Thu, 16 Aug 2012 09:42:11 +0000 (12:42 +0300)]
Fix GiST buffering build bug, which caused "failed to re-find parent" errors.

We use a hash table to track the parents of inner pages, but when inserting
to a leaf page, the caller of gistbufferinginserttuples() must pass a
correct block number of the leaf's parent page. Before gistProcessItup()
descends to a child page, it checks if the downlink needs to be adjusted to
accommodate the new tuple, and updates the downlink if necessary. However,
updating the downlink might require splitting the page, which might move the
downlink to a page to the right. gistProcessItup() doesn't realize that, so
when it descends to the leaf page, it might pass an out-of-date parent block
number as a result. Fix that by returning the block a tuple was inserted to
from gistbufferinginserttuples().

This fixes the bug reported by Zdeněk Jílovec.

12 years agoFix SGML markup; missing tag.
Bruce Momjian [Thu, 16 Aug 2012 03:57:19 +0000 (23:57 -0400)]
Fix SGML markup;  missing tag.

12 years agoDocument that PGDATA has to point to the configuration files, rather
Bruce Momjian [Thu, 16 Aug 2012 02:59:37 +0000 (22:59 -0400)]
Document that PGDATA has to point to the configuration files, rather
than the actual data storage directory.

Per suggestion from Thom Brown

12 years agoDocument that pg_ctl -w allows for the entry of an SSL passphase on
Bruce Momjian [Thu, 16 Aug 2012 00:52:12 +0000 (20:52 -0400)]
Document that pg_ctl -w allows for the entry of an SSL passphase on
startup.

Per report from Thom Brown

12 years agoAdd CREATE FOREIGN TABLE doc reference to CREATE SERVER.
Bruce Momjian [Thu, 16 Aug 2012 00:38:01 +0000 (20:38 -0400)]
Add CREATE FOREIGN TABLE doc reference to CREATE SERVER.

Per suggestion from Ray Stell

12 years agoProperly document that NEW is unassigned in plpgsql for DELETE (not
Bruce Momjian [Thu, 16 Aug 2012 00:29:58 +0000 (20:29 -0400)]
Properly document that NEW is unassigned in plpgsql for DELETE (not
NULL), and OLD is unassigned for INSERT, and NEW/OLD are unassigned (not
NULL) for statement-level triggers.

Per report from Pavel Stehule

12 years agoAdd C comment about new \c parameter requirement for crashed connections.
Bruce Momjian [Wed, 15 Aug 2012 23:17:26 +0000 (19:17 -0400)]
Add C comment about new \c parameter requirement for crashed connections.

12 years agoUpdate C comment to NOTICE to reflect previous commit changing the error
Bruce Momjian [Wed, 15 Aug 2012 23:09:37 +0000 (19:09 -0400)]
Update C comment to NOTICE to reflect previous commit changing the error
level, per report from Tom.

12 years agoIn psql, if the is no connection object, e.g. due to a server crash,
Bruce Momjian [Wed, 15 Aug 2012 23:04:52 +0000 (19:04 -0400)]
In psql, if the is no connection object, e.g. due to a server crash,
require all parameters for \c, rather than using the defaults, which
might be wrong.

12 years agoFix rescan logic in nodeCtescan.
Tom Lane [Wed, 15 Aug 2012 23:01:16 +0000 (19:01 -0400)]
Fix rescan logic in nodeCtescan.

The previous coding essentially assumed that nodes would be rescanned in
the same order they were initialized in; or at least that the "leader" of
a group of CTEscans would be rescanned before any others were required to
execute.  Unfortunately, that isn't even a little bit true.  It's possible
to devise queries in which the leader isn't rescanned until other CTEscans
on the same CTE have run to completion, or even in which the leader never
gets a rescan call at all.

The fix makes the leader specially responsible only for initial creation
and final destruction of the tuplestore; rescan resets are now a
symmetrically shared responsibility.  This means that we might reset the
tuplestore multiple times when restarting a plan subtree containing
multiple CTEscans; but resetting an already-empty tuplestore is cheap
enough that that doesn't seem like a problem.

Per report from Adam Mackler; the new regression test cases are based on
his example query.

Back-patch to 8.4 where CTE scans were introduced.

12 years agoOn second thought, explain why date_trunc("week") on interval values is
Bruce Momjian [Wed, 15 Aug 2012 20:48:05 +0000 (16:48 -0400)]
On second thought, explain why date_trunc("week") on interval values is
not supported in the error message, rather than the docs.

12 years agoDocument why you can't use date_trunc("week") on intervals.
Bruce Momjian [Wed, 15 Aug 2012 20:03:58 +0000 (16:03 -0400)]
Document why you can't use date_trunc("week") on intervals.

12 years agoAdd C comment that '=' is not documented for plpgsql assignment.
Bruce Momjian [Wed, 15 Aug 2012 16:00:56 +0000 (12:00 -0400)]
Add C comment that '=' is not documented for plpgsql assignment.

12 years agoDocument that foreign "version" and "type" values are only useful to
Bruce Momjian [Wed, 15 Aug 2012 15:47:02 +0000 (11:47 -0400)]
Document that foreign "version" and "type" values are only useful to
certain foreign data wrappers.

12 years agoDisallow extensions from owning the schema they are assigned to.
Tom Lane [Wed, 15 Aug 2012 15:26:55 +0000 (11:26 -0400)]
Disallow extensions from owning the schema they are assigned to.

This situation creates a dependency loop that confuses pg_dump and probably
other things.  Moreover, since the mental model is that the extension
"contains" schemas it owns, but "is contained in" its extschema (even
though neither is strictly true), having both true at once is confusing for
people too.  So prevent the situation from being set up.

Reported and patched by Thom Brown.  Back-patch to 9.1 where extensions
were added.

12 years agoProperly escape usernames in initdb, so names with single-quotes are
Bruce Momjian [Wed, 15 Aug 2012 15:23:04 +0000 (11:23 -0400)]
Properly escape usernames in initdb, so names with single-quotes are
supported.  Also add assert to catch future breakage.

Also, improve documentation that "double"-quotes must be used in
pg_hba.conf (not single quotes).

12 years agoResurrect the "last ditch" code path in join_search_one_level().
Tom Lane [Wed, 15 Aug 2012 04:07:15 +0000 (00:07 -0400)]
Resurrect the "last ditch" code path in join_search_one_level().

This essentially reverts commit e54b10a62db2991235fe800c629baef4531a6d67,
in which I'd decided that the "last ditch" join logic was useless.  The
folly of that is now exposed by a report from Pavel Stehule: although the
function should always find at least one join in a self-contained join
problem, it can still fail to do so in a sub-problem created by artificial
from_collapse_limit or join_collapse_limit constraints.  Adjust the
comments to describe this, and simplify the code a bit to match the new
coding of the earlier loop in the function.

I'm not terribly happy about this: I still subscribe to the opinion stated
in the previous commit message that the "last ditch" code can obscure logic
bugs elsewhere.  But the alternative seems to be to complicate the earlier
tests for does-this-relation-have-a-join-clause to the point where they can
tell whether the join clauses link outside the current join sub-problem.
And that looks messy, slow, and possibly a source of bugs in itself.
In any case, now is not the time to be inserting experimental code into
9.2, so let's just go back to the time-tested solution.

12 years agoAdd more limited large object trigger example.
Bruce Momjian [Wed, 15 Aug 2012 03:25:20 +0000 (23:25 -0400)]
Add more limited large object trigger example.

12 years agoAdd doc example of restricting large object trigger firing to only
Bruce Momjian [Wed, 15 Aug 2012 03:21:13 +0000 (23:21 -0400)]
Add doc example of restricting large object trigger firing to only
updates of the column of interest.

12 years agoUpdate release notes for 9.1.5, 9.0.9, 8.4.13, 8.3.20.
Tom Lane [Tue, 14 Aug 2012 22:24:00 +0000 (18:24 -0400)]
Update release notes for 9.1.5, 9.0.9, 8.4.13, 8.3.20.

12 years agoPrevent access to external files/URLs via contrib/xml2's xslt_process().
Tom Lane [Tue, 14 Aug 2012 22:28:29 +0000 (18:28 -0400)]
Prevent access to external files/URLs via contrib/xml2's xslt_process().

libxslt offers the ability to read and write both files and URLs through
stylesheet commands, thus allowing unprivileged database users to both read
and write data with the privileges of the database server.  Disable that
through proper use of libxslt's security options.

Also, remove xslt_process()'s ability to fetch documents and stylesheets
from external files/URLs.  While this was a documented "feature", it was
long regarded as a terrible idea.  The fix for CVE-2012-3489 broke that
capability, and rather than expend effort on trying to fix it, we're just
going to summarily remove it.

While the ability to write as well as read makes this security hole
considerably worse than CVE-2012-3489, the problem is mitigated by the fact
that xslt_process() is not available unless contrib/xml2 is installed,
and the longstanding warnings about security risks from that should have
discouraged prudent DBAs from installing it in security-exposed databases.

Reported and fixed by Peter Eisentraut.

Security: CVE-2012-3488

12 years agoPrevent access to external files/URLs via XML entity references.
Tom Lane [Tue, 14 Aug 2012 22:25:29 +0000 (18:25 -0400)]
Prevent access to external files/URLs via XML entity references.

xml_parse() would attempt to fetch external files or URLs as needed to
resolve DTD and entity references in an XML value, thus allowing
unprivileged database users to attempt to fetch data with the privileges
of the database server.  While the external data wouldn't get returned
directly to the user, portions of it could be exposed in error messages
if the data didn't parse as valid XML; and in any case the mere ability
to check existence of a file might be useful to an attacker.

The ideal solution to this would still allow fetching of references that
are listed in the host system's XML catalogs, so that documents can be
validated according to installed DTDs.  However, doing that with the
available libxml2 APIs appears complex and error-prone, so we're not going
to risk it in a security patch that necessarily hasn't gotten wide review.
So this patch merely shuts off all access, causing any external fetch to
silently expand to an empty string.  A future patch may improve this.

In HEAD and 9.2, also suppress warnings about undefined entities, which
would otherwise occur as a result of not loading referenced DTDs.  Previous
branches don't show such warnings anyway, due to different error handling
arrangements.

Credit to Noah Misch for first reporting the problem, and for much work
towards a solution, though this simplistic approach was not his preference.
Also thanks to Daniel Veillard for consultation.

Security: CVE-2012-3489

12 years agoRevert "commit_delay" change; just add comment that we don't have
Bruce Momjian [Tue, 14 Aug 2012 20:26:08 +0000 (16:26 -0400)]
Revert "commit_delay" change; just add comment that we don't have
a microsecond specification.

12 years agoAdd pg_settings units display for "commit_delay" (ms).
Bruce Momjian [Tue, 14 Aug 2012 20:16:45 +0000 (16:16 -0400)]
Add pg_settings units display for "commit_delay" (ms).

Also remove unnecessary units designation in postgresql.conf.sample.

12 years agoIn documentation, change "recommendable" to "recommended", per
Bruce Momjian [Tue, 14 Aug 2012 16:36:35 +0000 (12:36 -0400)]
In documentation, change "recommendable" to "recommended", per
consultation with word definitions.

Backpatch to 9.2.

12 years agoUpdate time zone data files to tzdata release 2012e.
Tom Lane [Tue, 14 Aug 2012 14:54:24 +0000 (10:54 -0400)]
Update time zone data files to tzdata release 2012e.

DST law changes in Morocco; Tokelau has relocated to the other side of
the International Date Line; and apparently Olson had Tokelau's GMT
offset wrong by an hour even before that.

There are also a large number of non-significant changes in this update.
Upstream took the opportunity to remove trailing whitespace, and the
SCCS-style version numbers on the individual files are gone too.

12 years agoAdd runtime checks for number of query parameters passed to libpq functions.
Heikki Linnakangas [Mon, 13 Aug 2012 13:24:18 +0000 (16:24 +0300)]
Add runtime checks for number of query parameters passed to libpq functions.

The maximum number of parameters supported by the FE/BE protocol is 65535,
as it's transmitted as a 16-bit unsigned integer. However, the nParams
arguments to libpq functions are all of type 'int'. We can't change the
signature of libpq functions, but a simple bounds check is in order to make
it more clear what's going wrong if you try to pass more than 65535
parameters.

Per complaint from Jim Vanns.

12 years agoMore fixes for planner's handling of LATERAL.
Tom Lane [Sun, 12 Aug 2012 20:01:26 +0000 (16:01 -0400)]
More fixes for planner's handling of LATERAL.

Re-allow subquery pullup for LATERAL subqueries, except when the subquery
is below an outer join and contains lateral references to relations outside
that outer join.  If we pull up in such a case, we risk introducing lateral
cross-references into outer joins' ON quals, which is something the code is
entirely unprepared to cope with right now; and I'm not sure it'll ever be
worth coping with.

Support lateral refs in VALUES (this seems to be the only additional path
type that needs such support as a consequence of re-allowing subquery
pullup).

Put in a slightly hacky fix for joinpath.c's refusal to consider
parameterized join paths even when there cannot be any unparameterized
ones.  This was causing "could not devise a query plan for the given query"
failures in queries involving more than two FROM items.

Put in an even more hacky fix for distribute_qual_to_rels() being unhappy
with join quals that contain references to rels outside their syntactic
scope; which is to say, disable that test altogether.  Need to think about
how to preserve some sort of debugging cross-check here, while not
expending more cycles than befits a debugging cross-check.

12 years agoFix some issues with LATERAL(SELECT UNION ALL SELECT).
Tom Lane [Sat, 11 Aug 2012 22:42:20 +0000 (18:42 -0400)]
Fix some issues with LATERAL(SELECT UNION ALL SELECT).

The LATERAL marking has to be propagated down to the UNION leaf queries
when we pull them up.  Also, fix the formerly stubbed-off
set_append_rel_pathlist().  It does already have enough smarts to cope with
making a parameterized Append path at need; it just has to not assume that
there *must* be an unparameterized path.

12 years agoAdd link from COPY ref page to psql \copy.
Tom Lane [Sat, 11 Aug 2012 17:51:22 +0000 (13:51 -0400)]
Add link from COPY ref page to psql \copy.

Jeff Janes

12 years agoFix dependencies generated during ALTER TABLE ADD CONSTRAINT USING INDEX.
Tom Lane [Sat, 11 Aug 2012 16:51:24 +0000 (12:51 -0400)]
Fix dependencies generated during ALTER TABLE ADD CONSTRAINT USING INDEX.

This command generated new pg_depend entries linking the index to the
constraint and the constraint to the table, which match the entries made
when a unique or primary key constraint is built de novo.  However, it did
not bother to get rid of the entries linking the index directly to the
table.  We had considered the issue when the ADD CONSTRAINT USING INDEX
patch was written, and concluded that we didn't need to get rid of the
extra entries.  But this is wrong: ALTER COLUMN TYPE wasn't expecting such
redundant dependencies to exist, as reported by Hubert Depesz Lubaczewski.
On reflection it seems rather likely to break other things as well, since
there are many bits of code that crawl pg_depend for one purpose or
another, and most of them are pretty naive about what relationships they're
expecting to find.  Fortunately it's not that hard to get rid of the extra
dependency entries, so let's do that.

Back-patch to 9.1, where ALTER TABLE ADD CONSTRAINT USING INDEX was added.

12 years agoUpdate overlooked comment.
Tom Lane [Fri, 10 Aug 2012 21:36:54 +0000 (17:36 -0400)]
Update overlooked comment.

12 years agoSupport having multiple Unix-domain sockets per postmaster.
Tom Lane [Fri, 10 Aug 2012 21:26:44 +0000 (17:26 -0400)]
Support having multiple Unix-domain sockets per postmaster.

Replace unix_socket_directory with unix_socket_directories, which is a list
of socket directories, and adjust postmaster's code to allow zero or more
Unix-domain sockets to be created.

This is mostly a straightforward change, but since the Unix sockets ought
to be created after the TCP/IP sockets for safety reasons (better chance
of detecting a port number conflict), AddToDataDirLockFile needs to be
fixed to support out-of-order updates of data directory lockfile lines.
That's a change that had been foreseen to be necessary someday anyway.

Honza Horak, reviewed and revised by Tom Lane

12 years agoPrevent pg_upgrade from crashing if it can't write to the current
Bruce Momjian [Fri, 10 Aug 2012 21:14:48 +0000 (17:14 -0400)]
Prevent pg_upgrade from crashing if it can't write to the current
directory.

Backpatch to 9.2.

12 years agoAdjust pgtest coding to be less complex.
Bruce Momjian [Fri, 10 Aug 2012 20:46:02 +0000 (16:46 -0400)]
Adjust pgtest coding to be less complex.

12 years agoFix pgtest to return proper error code based on 'make' return code.
Bruce Momjian [Fri, 10 Aug 2012 18:10:34 +0000 (14:10 -0400)]
Fix pgtest to return proper error code based on 'make' return code.

12 years agoCentralize the logic for detecting misplaced aggregates, window funcs, etc.
Tom Lane [Fri, 10 Aug 2012 15:35:33 +0000 (11:35 -0400)]
Centralize the logic for detecting misplaced aggregates, window funcs, etc.

Formerly we relied on checking after-the-fact to see if an expression
contained aggregates, window functions, or sub-selects when it shouldn't.
This is grotty, easily forgotten (indeed, we had forgotten to teach
DefineIndex about rejecting window functions), and none too efficient
since it requires extra traversals of the parse tree.  To improve matters,
define an enum type that classifies all SQL sub-expressions, store it in
ParseState to show what kind of expression we are currently parsing, and
make transformAggregateCall, transformWindowFuncCall, and transformSubLink
check the expression type and throw error if the type indicates the
construct is disallowed.  This allows removal of a large number of ad-hoc
checks scattered around the code base.  The enum type is sufficiently
fine-grained that we can still produce error messages of at least the
same specificity as before.

Bringing these error checks together revealed that we'd been none too
consistent about phrasing of the error messages, so standardize the wording
a bit.

Also, rewrite checking of aggregate arguments so that it requires only one
traversal of the arguments, rather than up to three as before.

In passing, clean up some more comments left over from add_missing_from
support, and annotate some tests that I think are dead code now that that's
gone.  (I didn't risk actually removing said dead code, though.)

12 years agoFix upper limit of superuser_reserved_connections, add limit for wal_senders
Magnus Hagander [Fri, 10 Aug 2012 12:49:03 +0000 (14:49 +0200)]
Fix upper limit of superuser_reserved_connections, add limit for wal_senders

Should be limited to the maximum number of connections excluding
autovacuum workers, not including.

Add similar check for max_wal_senders, which should never be higher than
max_connections.

12 years agoTurn off WalSender keepalives by default, users can enable if desired
Simon Riggs [Thu, 9 Aug 2012 16:07:03 +0000 (17:07 +0100)]
Turn off WalSender keepalives by default, users can enable if desired

12 years agoEnsure all replication message info is available and correct via WalRcv
Simon Riggs [Thu, 9 Aug 2012 16:03:59 +0000 (17:03 +0100)]
Ensure all replication message info is available and correct via WalRcv

12 years agoMake psql -1 < file behave as expected.
Robert Haas [Thu, 9 Aug 2012 13:59:45 +0000 (09:59 -0400)]
Make psql -1 < file behave as expected.

Previously, the -1 option was silently ignored.

Also, emit an error if -1 is used in a context where it won't be
respected, to avoid user confusion.

Original patch by Fabien COELHO, but this version is quite different
from the original submission.

12 years agoFix typo in comment
Alvaro Herrera [Wed, 8 Aug 2012 21:34:20 +0000 (17:34 -0400)]
Fix typo in comment

12 years agoDoc correction to point out that 9.2+ can overwrite pg_xlog files.
Simon Riggs [Wed, 8 Aug 2012 21:34:46 +0000 (22:34 +0100)]
Doc correction to point out that 9.2+ can overwrite pg_xlog files.

Noted by Noah Misch, patch by Fujii Masao

12 years agoMerge parser's p_relnamespace and p_varnamespace lists into a single list.
Tom Lane [Wed, 8 Aug 2012 20:41:04 +0000 (16:41 -0400)]
Merge parser's p_relnamespace and p_varnamespace lists into a single list.

Now that we are storing structs in these lists, the distinction between
the two lists can be represented with a couple of extra flags while using
only a single list.  This simplifies the code and should save a little
bit of palloc traffic, since the majority of RTEs are represented in both
lists anyway.

12 years agoFix minor bug in XLogFileRead() that accidentally worked.
Simon Riggs [Wed, 8 Aug 2012 20:25:23 +0000 (21:25 +0100)]
Fix minor bug in XLogFileRead() that accidentally worked.
Cascading replication copied the incoming file into pg_xlog but
didn't set path correctly, so the first attempt to open file failed
causing it to loop around and look for file in pg_xlog. So the
earlier coding worked, but accidentally rather than by design.

Spotted by Fujii Masao, fix by Fujii Masao and Simon Riggs

12 years agoFix cache flush hazard in event trigger cache.
Robert Haas [Wed, 8 Aug 2012 20:38:37 +0000 (16:38 -0400)]
Fix cache flush hazard in event trigger cache.

Bug spotted by Jeff Davis using -DCLOBBER_CACHE_ALWAYS.

12 years agoAdd additional C comments for to_date/to_char() fixes.
Bruce Momjian [Wed, 8 Aug 2012 17:26:39 +0000 (13:26 -0400)]
Add additional C comments for to_date/to_char() fixes.

12 years agoUpdate isolation tests' README file.
Tom Lane [Wed, 8 Aug 2012 16:02:07 +0000 (12:02 -0400)]
Update isolation tests' README file.

The directions explaining about running the prepared-transactions test
were not updated in commit ae55d9fbe3871a5e6309d9b91629f1b0ff2b8cba.

12 years agoFix TwoPhaseGetDummyBackendId().
Tom Lane [Wed, 8 Aug 2012 15:52:02 +0000 (11:52 -0400)]
Fix TwoPhaseGetDummyBackendId().

This was broken in commit ed0b409d22346b1b027a4c2099ca66984d94b6dd,
which revised the GlobalTransactionData struct to not include the
associated PGPROC as its first member, but overlooked one place where
a cast was used in reliance on that equivalence.

The most effective way of fixing this seems to be to create a new function
that looks up the GlobalTransactionData struct given the XID, and make
both TwoPhaseGetDummyBackendId and TwoPhaseGetDummyProc rely on that.

Per report from Robert Ross.

12 years agoImplement SQL-standard LATERAL subqueries.
Tom Lane [Tue, 7 Aug 2012 23:02:54 +0000 (19:02 -0400)]
Implement SQL-standard LATERAL subqueries.

This patch implements the standard syntax of LATERAL attached to a
sub-SELECT in FROM, and also allows LATERAL attached to a function in FROM,
since set-returning function calls are expected to be one of the principal
use-cases.

The main change here is a rewrite of the mechanism for keeping track of
which relations are visible for column references while the FROM clause is
being scanned.  The parser "namespace" lists are no longer lists of bare
RTEs, but are lists of ParseNamespaceItem structs, which carry an RTE
pointer as well as some visibility-controlling flags.  Aside from
supporting LATERAL correctly, this lets us get rid of the ancient hacks
that required rechecking subqueries and JOIN/ON and function-in-FROM
expressions for invalid references after they were initially parsed.
Invalid column references are now always correctly detected on sight.

In passing, remove assorted parser error checks that are now dead code by
virtue of our having gotten rid of add_missing_from, as well as some
comments that are obsolete for the same reason.  (It was mainly
add_missing_from that caused so much fudging here in the first place.)

The planner support for this feature is very minimal, and will be improved
in future patches.  It works well enough for testing purposes, though.

catversion bump forced due to new field in RangeTblEntry.

12 years agoTweak new Perl pgindent for compatibility with middle-aged Perls.
Tom Lane [Tue, 7 Aug 2012 21:52:53 +0000 (17:52 -0400)]
Tweak new Perl pgindent for compatibility with middle-aged Perls.

We seem to have a rough policy that our Perl scripts should work with
Perl 5.8, so make this one do so.  Main change is to not use the newfangled
\h character class in regexes; "[ \t]" is a serviceable replacement.

12 years agoFix memory leaks in event trigger code.
Robert Haas [Tue, 7 Aug 2012 20:59:42 +0000 (16:59 -0400)]
Fix memory leaks in event trigger code.

Spotted by Jeff Davis.

12 years agoFix to_char(), to_date(), and to_timestamp() to handle negative/BC
Bruce Momjian [Tue, 7 Aug 2012 17:34:44 +0000 (13:34 -0400)]
Fix to_char(), to_date(), and to_timestamp() to handle negative/BC
century specifications just like positive/AD centuries.  Previously the
behavior was either wrong or inconsistent with positive/AD handling.

Centuries without years now always assume the first year of the century,
which is now documented.

12 years agoFix pg_upgrade file share violation on Windows created by the commit
Bruce Momjian [Tue, 7 Aug 2012 17:10:44 +0000 (13:10 -0400)]
Fix pg_upgrade file share violation on Windows created by the commit
4741e9afb93f0d769655b2d18c2b73b86f281010.  This was done by adding an
optional second log file parameter to exec_prog(), and closing and
reopening the log file between system() calls.

Backpatch to 9.2.

12 years agoFix redundant wording
Alvaro Herrera [Tue, 7 Aug 2012 15:02:53 +0000 (11:02 -0400)]
Fix redundant wording

12 years agofsync backup_label after pg_start_backup()
Simon Riggs [Tue, 7 Aug 2012 15:19:13 +0000 (16:19 +0100)]
fsync backup_label after pg_start_backup()

Dave Kerr

12 years agoTypo fixes for previous commit.
Robert Haas [Mon, 6 Aug 2012 20:12:17 +0000 (16:12 -0400)]
Typo fixes for previous commit.

Noted by Thom Brown.

12 years agoWarn more vigorously about the non-transactional behavior of sequences.
Robert Haas [Mon, 6 Aug 2012 19:18:00 +0000 (15:18 -0400)]
Warn more vigorously about the non-transactional behavior of sequences.

Craig Ringer, edited fairly heavily by me

12 years agoMake strings identical
Alvaro Herrera [Mon, 6 Aug 2012 16:45:08 +0000 (12:45 -0400)]
Make strings identical

12 years agoComplain with proper error message if streaming stops prematurely
Magnus Hagander [Mon, 6 Aug 2012 11:53:46 +0000 (13:53 +0200)]
Complain with proper error message if streaming stops prematurely

In particular, with a controlled shutdown of the master, pg_basebackup
with streaming log could terminate without an error message, even though
the backup is not consistent.

In passing, fix a few cases where walfile wasn't properly set to -1 after
closing.

Fujii Masao

12 years agoPerform conversion from Python unicode to string/bytes object via UTF-8.
Heikki Linnakangas [Mon, 6 Aug 2012 10:02:15 +0000 (13:02 +0300)]
Perform conversion from Python unicode to string/bytes object via UTF-8.

We used to convert the unicode object directly to a string in the server
encoding by calling Python's PyUnicode_AsEncodedString function. In other
words, we used Python's routines to do the encoding. However, that has a
few problems. First of all, it required keeping a mapping table of Python
encoding names and PostgreSQL encodings. But the real killer was that Python
doesn't support EUC_TW and MULE_INTERNAL encodings at all.

Instead, convert the Python unicode object to UTF-8, and use PostgreSQL's
encoding conversion functions to convert from UTF-8 to server encoding. We
were already doing the same in the other direction in PLyUnicode_FromString,
so this is more consistent, too.

Note: This makes SQL_ASCII to behave more leniently. We used to map
SQL_ASCII to Python's 'ascii', which on Python means strict 7-bit ASCII
only, so you got an error if the python string contained anything but pure
ASCII. You no longer get an error; you get the UTF-8 representation of the
string instead.

Backpatch to 9.0, where these conversions were introduced.

Jan Urbański

12 years agoReplace pgindent shell script with Perl script. Update perltidy
Bruce Momjian [Sat, 4 Aug 2012 16:41:21 +0000 (12:41 -0400)]
Replace pgindent shell script with Perl script.  Update perltidy
instructions to perltidy Perl files that lack Perl file extensions.

pgindent Perl coding by Andrew Dunstan, restructured by me.

12 years agoReword documentation for concurrent index rebuilds to be clearer.
Bruce Momjian [Sat, 4 Aug 2012 14:35:37 +0000 (10:35 -0400)]
Reword documentation for concurrent index rebuilds to be clearer.

Backpatch to 9.1 and 9.2.

12 years agoFix bugs with parsing signed hh:mm and hh:mm:ss fields in interval input.
Tom Lane [Fri, 3 Aug 2012 21:39:39 +0000 (17:39 -0400)]
Fix bugs with parsing signed hh:mm and hh:mm:ss fields in interval input.

DecodeInterval() failed to honor the "range" parameter (the special SQL
syntax for indicating which fields appear in the literal string) if the
time was signed.  This seems inappropriate, so make it work like the
not-signed case.  The inconsistency was introduced in my commit
f867339c0148381eb1d01f93ab5c79f9d10211de, which as noted in its log message
was only really focused on making SQL-compliant literals work per spec.
Including a sign here is not per spec, but if we're going to allow it
then it's reasonable to expect it to work like the not-signed case.

Also, remove bogus setting of tmask, which caused subsequent processing to
think that what had been given was a timezone and not an hh:mm(:ss) field,
thus confusing checks for redundant fields.  This seems to be an aboriginal
mistake in Lockhart's commit 2cf1642461536d0d8f3a1cf124ead0eac04eb760.

Add regression test cases to illustrate the changed behaviors.

Back-patch as far as 8.4, where support for spec-compliant interval
literals was added.

Range problem reported and diagnosed by Amit Kapila, tmask problem by me.

12 years agoAdd link to synchronous_commit variables in high availability docs.
Bruce Momjian [Fri, 3 Aug 2012 20:33:10 +0000 (16:33 -0400)]
Add link to synchronous_commit variables in high availability docs.

Backpatch to 9.2

Erik Rijkers

12 years agoImprove underdocumented btree_xlog_delete_get_latestRemovedXid() code.
Tom Lane [Fri, 3 Aug 2012 19:41:18 +0000 (15:41 -0400)]
Improve underdocumented btree_xlog_delete_get_latestRemovedXid() code.

As noted by Noah Misch, btree_xlog_delete_get_latestRemovedXid is
critically dependent on the assumption that it's examining a consistent
state of the database.  This was undocumented though, so the
seemingly-unrelated check for no active HS sessions might be thought to be
merely an optional optimization.  Improve comments, and add an explicit
check of reachedConsistency just to be sure.

This function returns InvalidTransactionId (thereby killing all HS
transactions) in several cases that are not nearly unlikely enough for my
taste.  This commit doesn't attempt to fix those deficiencies, just
document them.

Back-patch to 9.2, not from any real functional need but just to keep the
branches more closely synced to simplify possible future back-patching.