]> granicus.if.org Git - postgresql/log
postgresql
12 years agoDon't trust deferred-unique indexes for join removal.
Tom Lane [Sun, 23 Oct 2011 04:43:39 +0000 (00:43 -0400)]
Don't trust deferred-unique indexes for join removal.

The uniqueness condition might fail to hold intra-transaction, and assuming
it does can give incorrect query results.  Per report from Marti Raudsepp,
though this is not his proposed patch.

Back-patch to 9.0, where both these features were introduced.  In the
released branches, add the new IndexOptInfo field to the end of the struct,
to try to minimize ABI breakage for third-party code that may be examining
that struct.

12 years agoSupport synchronization of snapshots through an export/import procedure.
Tom Lane [Sat, 22 Oct 2011 22:22:45 +0000 (18:22 -0400)]
Support synchronization of snapshots through an export/import procedure.

A transaction can export a snapshot with pg_export_snapshot(), and then
others can import it with SET TRANSACTION SNAPSHOT.  The data does not
leave the server so there are not security issues.  A snapshot can only
be imported while the exporting transaction is still running, and there
are some other restrictions.

I'm not totally convinced that we've covered all the bases for SSI (true
serializable) mode, but it works fine for lesser isolation modes.

Joachim Wieland, reviewed by Marko Tiikkaja, and rather heavily modified
by Tom Lane

12 years agoFix overly-complicated usage of errcode_for_file_access().
Heikki Linnakangas [Sat, 22 Oct 2011 17:16:05 +0000 (20:16 +0300)]
Fix overly-complicated usage of errcode_for_file_access().

No need to do  "errcode(errcode_for_file_access())", just
"errcode_for_file_access()" is enough. The extra errcode() call is useless
but harmless, so there's no user-visible bug here. Nevertheless, backpatch
to 9.1 where this code were added.

12 years agoCode review for pgstat_get_crashed_backend_activity patch.
Tom Lane [Fri, 21 Oct 2011 20:36:04 +0000 (16:36 -0400)]
Code review for pgstat_get_crashed_backend_activity patch.

Avoid possibly dumping core when pgstat_track_activity_query_size has a
less-than-default value; avoid uselessly searching for the query string
of a successfully-exited backend; don't bother putting out an ERRDETAIL if
we don't have a query to show; some other minor stylistic improvements.

12 years agoMore cleanup after failed reduced-lock-levels-for-DDL feature.
Tom Lane [Fri, 21 Oct 2011 17:49:51 +0000 (13:49 -0400)]
More cleanup after failed reduced-lock-levels-for-DDL feature.

Turns out that use of ShareUpdateExclusiveLock or ShareRowExclusiveLock
to protect DDL changes had gotten copied into several places that were
not touched by either of Simon's original patches for the feature, and
thus neither he nor I thought to revert them.  (Indeed, it appears that
two of these uses were committed *after* the reversion, which just goes
to show that git merging is no panacea.)  Change these places to use
AccessExclusiveLock again.  If we ever manage to resurrect that feature,
we're going to have to think a bit harder about how to keep lock level
usage in sync for DDL operations that aren't within the AlterTable
infrastructure.

Two of these bugs are only in HEAD, but one is in the 9.1 branch too.
Alvaro found one of them, I found the other two.

12 years agoTry to log current the query string when a backend crashes.
Robert Haas [Fri, 21 Oct 2011 17:26:40 +0000 (13:26 -0400)]
Try to log current the query string when a backend crashes.

To avoid minimize risk inside the postmaster, we subject this feature
to a number of significant limitations.  We very much wish to avoid
doing any complex processing inside the postmaster, due to the
posssibility that the crashed backend has completely corrupted shared
memory.  To that end, no encoding conversion is done; instead, we just
replace anything that doesn't look like an ASCII character with a
question mark.  We limit the amount of data copied to 1024 characters,
and carefully sanity check the source of that data.  While these
restrictions would doubtless be unacceptable in a general-purpose
logging facility, even this limited facility seems like an improvement
over the status quo ante.

Marti Raudsepp, reviewed by PDXPUG and myself

12 years agoFix DROP OPERATOR FAMILY IF EXISTS.
Robert Haas [Fri, 21 Oct 2011 13:10:46 +0000 (09:10 -0400)]
Fix DROP OPERATOR FAMILY IF EXISTS.

Essentially, the "IF EXISTS" portion was being ignored, and an error
thrown anyway if the opfamily did not exist.

I broke this in commit fd1843ff8979c0461fb3f1a9eab61140c977e32d; so
backpatch to 9.1.X.

Report and diagnosis by KaiGai Kohei.

12 years agoSimplify and improve ProcessStandbyHSFeedbackMessage logic.
Tom Lane [Thu, 20 Oct 2011 23:43:31 +0000 (19:43 -0400)]
Simplify and improve ProcessStandbyHSFeedbackMessage logic.

There's no need to clamp the standby's xmin to be greater than
GetOldestXmin's result; if there were any such need this logic would be
hopelessly inadequate anyway, because it fails to account for
within-database versus cluster-wide values of GetOldestXmin.  So get rid of
that, and just rely on sanity-checking that the xmin is not wrapped around
relative to the nextXid counter.  Also, don't reset the walsender's xmin if
the current feedback xmin is indeed out of range; that just creates more
problems than we already had.  Lastly, don't bother to take the
ProcArrayLock; there's no need to do that to set xmin.

Also improve the comments about this in GetOldestXmin itself.

12 years agoRewrite tab completion's previous-word fetching for more sanity.
Tom Lane [Thu, 20 Oct 2011 19:38:57 +0000 (15:38 -0400)]
Rewrite tab completion's previous-word fetching for more sanity.

Make it return empty strings when there are no more words to the left of
the current position, instead of sometimes returning NULL and other times
returning copies of the leftmost word.  Also, fetch the words in one scan,
rather than the previous wasteful approach of starting from scratch for
each word.  Make the code a bit harder to break when someone decides we
need more words of context, too.  (There was actually a memory leak here,
because whoever added prev6_wd neglected to free it.)

12 years agoFix get_object_namespace() not to think extensions are "in" a schema.
Robert Haas [Thu, 20 Oct 2011 04:05:31 +0000 (00:05 -0400)]
Fix get_object_namespace() not to think extensions are "in" a schema.

extnamespace means something altogether different in this context.
Mostly by accident, this coding error (introduced in my commit
82a4a777d94bec965ab2f1d04b6e6a3f0447b377) broke the buildfarm instead
of just silently doing the wrong thing.

12 years agoAdd "skipping" to the NOTICE produced by DROP OPERATOR CLASS IF EXISTS.
Robert Haas [Thu, 20 Oct 2011 03:45:31 +0000 (23:45 -0400)]
Add "skipping" to the NOTICE produced by DROP OPERATOR CLASS IF EXISTS.

This makes this message consistent with all the other similar notices
produced by other DROP IF EXISTS commands.

Noted by KaiGai Kohei

12 years agoRemove a few of the new DROP-IF-EXISTS regression tests.
Robert Haas [Thu, 20 Oct 2011 03:38:06 +0000 (23:38 -0400)]
Remove a few of the new DROP-IF-EXISTS regression tests.

Commit 3301c83536e9da1e573e24ded2e610062dbf9cdc broke the build farm.
Let's try to fix that.

12 years agoConsolidate DROP handling for some object types.
Robert Haas [Thu, 20 Oct 2011 03:25:20 +0000 (23:25 -0400)]
Consolidate DROP handling for some object types.

This gets rid of a significant amount of duplicative code.

KaiGai Kohei, reviewed in earlier versions by Dimitri Fontaine, with
further review and cleanup by me.

12 years agoAdd some more regression tests for DROP IF EXISTS.
Robert Haas [Thu, 20 Oct 2011 00:55:56 +0000 (20:55 -0400)]
Add some more regression tests for DROP IF EXISTS.

KaiGai Kohei

12 years agoDocument that postmaster.opts is excluded from base backups
Robert Haas [Wed, 19 Oct 2011 04:19:43 +0000 (00:19 -0400)]
Document that postmaster.opts is excluded from base backups

Fujii Masao

12 years agoSuppress remaining -Waddress warnings from recent gcc versions.
Tom Lane [Wed, 19 Oct 2011 01:44:23 +0000 (21:44 -0400)]
Suppress remaining -Waddress warnings from recent gcc versions.

Still an exercise in satisfying pedants.

12 years agoSuppress -Wunused-result warnings about write() and fwrite().
Tom Lane [Wed, 19 Oct 2011 01:37:51 +0000 (21:37 -0400)]
Suppress -Wunused-result warnings about write() and fwrite().

This is merely an exercise in satisfying pedants, not a bug fix, because
in every case we were checking for failure later with ferror(), or else
there was nothing useful to be done about a failure anyway.  Document
the latter cases.

12 years agoMake the CHECKPOINT reference page more clear.
Robert Haas [Wed, 19 Oct 2011 00:13:27 +0000 (20:13 -0400)]
Make the CHECKPOINT reference page more clear.

Josh Kupershmidt, reviewed by Fujii Masao

12 years agoReject empty pg_hba.conf files.
Tom Lane [Wed, 19 Oct 2011 00:09:18 +0000 (20:09 -0400)]
Reject empty pg_hba.conf files.

An empty HBA file is surely an error, since it means there is no way to
connect to the server.  We've not heard identifiable reports of people
actually doing that, but this will also close off the case Thom Brown just
complained of, namely pointing hba_file at a directory.  (On at least some
platforms with some directories, it will read as an empty file.)

Perhaps this should be back-patched, but given the lack of previous
complaints, I won't add extra work for the translators.

12 years agoRemove unnecessary AssertMacro() to suppress gcc 4.6 compiler warning.
Tom Lane [Tue, 18 Oct 2011 21:39:14 +0000 (17:39 -0400)]
Remove unnecessary AssertMacro() to suppress gcc 4.6 compiler warning.

There's no particular value in doing AssertMacro((tup) != NULL) in front
of code that's certain to crash anyway if tup is NULL.  And if "tup" is
actually the address of a local variable, gcc 4.6 whinges about it.  That's
arguably pretty broken on gcc's part, but we might as well remove the
useless test to silence the warnings.  This gets rid of all the -Waddress
warnings in the backend; there are some in libpq and psql that are a bit
harder to avoid.

12 years agoFix pg_dump to dump casts between auto-generated types.
Tom Lane [Tue, 18 Oct 2011 21:10:56 +0000 (17:10 -0400)]
Fix pg_dump to dump casts between auto-generated types.

The heuristic for when to dump a cast failed for a cast between table
rowtypes, as reported by Frédéric Rejol.  Fix it by setting
the "dump" flag for such a type the same way as the flag is set for the
underlying table or base type.  This won't result in the auto-generated
type appearing in the output, since setting its objType to DO_DUMMY_TYPE
unconditionally suppresses that.  But it will result in dumpCast doing what
was intended.

Back-patch to 8.3.  The 8.2 code is rather different in this area, and it
doesn't seem worth any risk to fix a corner case that nobody has stumbled
on before.

12 years agoExclude postmaster.opts from base backups
Magnus Hagander [Sun, 16 Oct 2011 15:42:59 +0000 (17:42 +0200)]
Exclude postmaster.opts from base backups

Noted by Fujii Masao

12 years agoAvoid assuming that index-only scan data matches the index's rowtype.
Tom Lane [Sun, 16 Oct 2011 23:15:04 +0000 (19:15 -0400)]
Avoid assuming that index-only scan data matches the index's rowtype.

In general the data returned by an index-only scan should have the
datatypes originally computed by FormIndexDatum.  If the index opclasses
use "storage" datatypes different from their input datatypes, the scan
tuple will not have the same rowtype attributed to the index; but we had
a hard-wired assumption that that was true in nodeIndexonlyscan.c.  We'd
already hacked around the issue for the one case where the types are
different in btree indexes (btree name_ops), but this would definitely
come back to bite us if we ever implement index-only scans in GiST.

To fix, require the index AM to explicitly provide the tupdesc for the
tuple it is returning.  btree can just pass back the index's tupdesc, but
GiST will have to work harder when and if it supports index-only scans.

I had previously proposed fixing this by allowing the index AM to fill the
scan tuple slot directly; but on reflection that seemed like a module
layering violation, since TupleTableSlots are creatures of the executor.
At least in the btree case, it would also be less efficient, since the
tuple deconstruction work would occur even for rows later found to be
invisible to the scan's snapshot.

12 years agoFix collate.linux.utf8 expected output for recent error message change.
Tom Lane [Sun, 16 Oct 2011 20:07:40 +0000 (16:07 -0400)]
Fix collate.linux.utf8 expected output for recent error message change.

Noted by Jeff Davis.

12 years agoTeach btree to handle ScalarArrayOpExpr quals natively.
Tom Lane [Sun, 16 Oct 2011 19:39:24 +0000 (15:39 -0400)]
Teach btree to handle ScalarArrayOpExpr quals natively.

This allows "indexedcol op ANY(ARRAY[...])" conditions to be used in plain
indexscans, and particularly in index-only scans.

12 years agoMarginal improvements to documentation of plpgsql's OPEN cursor statement.
Tom Lane [Sat, 15 Oct 2011 17:02:37 +0000 (13:02 -0400)]
Marginal improvements to documentation of plpgsql's OPEN cursor statement.

Rearrange text to improve clarity, and add an example of implicit reference
to a plpgsql variable in a bound cursor's query.  Byproduct of some work
I'd done on the "named cursor parameters" patch before giving up on it.

12 years agoDocument that is the psql version number, not the server version number,
Bruce Momjian [Sat, 15 Oct 2011 15:43:19 +0000 (11:43 -0400)]
Document that is the psql version number, not the server version number,
that controls .psqlrc.

12 years agoImprove doc wording of drop table permission.
Bruce Momjian [Sat, 15 Oct 2011 14:08:02 +0000 (10:08 -0400)]
Improve doc wording of drop table permission.

12 years agoAllow a major PG version psql .psqlrc file to be used if a minor
Bruce Momjian [Sat, 15 Oct 2011 00:26:28 +0000 (20:26 -0400)]
Allow a major PG version psql .psqlrc file to be used if a minor
matching version file does not exist.  This avoids needing to rename
.psqlrc files after minor version upgrades.

12 years agoFix bugs in information_schema.referential_constraints view.
Tom Lane [Sat, 15 Oct 2011 00:24:17 +0000 (20:24 -0400)]
Fix bugs in information_schema.referential_constraints view.

This view was being insufficiently careful about matching the FK constraint
to the depended-on primary or unique key constraint.  That could result in
failure to show an FK constraint at all, or showing it multiple times, or
claiming that it depended on a different constraint than the one it really
does.  Fix by joining via pg_depend to ensure that we find only the correct
dependency.

Back-patch, but don't bump catversion because we can't force initdb in back
branches.  The next minor-version release notes should explain that if you
need to fix this in an existing installation, you can drop the
information_schema schema then re-create it by sourcing
$SHAREDIR/information_schema.sql in each database (as a superuser of
course).

12 years agoMeasure the number of all-visible pages for use in index-only scan costing.
Tom Lane [Fri, 14 Oct 2011 21:23:01 +0000 (17:23 -0400)]
Measure the number of all-visible pages for use in index-only scan costing.

Add a column pg_class.relallvisible to remember the number of pages that
were all-visible according to the visibility map as of the last VACUUM
(or ANALYZE, or some other operations that update pg_class.relpages).
Use relallvisible/relpages, instead of an arbitrary constant, to estimate
how many heap page fetches can be avoided during an index-only scan.

This is pretty primitive and will no doubt see refinements once we've
acquired more field experience with the index-only scan mechanism, but
it's way better than using a constant.

Note: I had to adjust an underspecified query in the window.sql regression
test, because it was changing answers when the plan changed to use an
index-only scan.  Some of the adjacent tests perhaps should be adjusted
as well, but I didn't do that here.

12 years agoDump all roles first, then all config settings on roles.
Robert Haas [Fri, 14 Oct 2011 18:16:02 +0000 (14:16 -0400)]
Dump all roles first, then all config settings on roles.

This way, if a role's config setting uses the name of another role,
the validity of the dump isn't dependent on the order in which those
two roles are dumped.

Code by Phil Sorber, comment by me.

12 years agoAvoid potential relcache leak in objectaddress.c.
Robert Haas [Fri, 14 Oct 2011 15:35:40 +0000 (11:35 -0400)]
Avoid potential relcache leak in objectaddress.c.

Nobody using the missing_ok flag yet, but let's speculate that this will
be a better interface for future callers.

KaiGai Kohei, with some adjustments by me.

12 years agoDocument actual string that has to be returned by the client for MD5
Bruce Momjian [Fri, 14 Oct 2011 00:48:50 +0000 (20:48 -0400)]
Document actual string that has to be returned by the client for MD5
authentication.

Report and pseudo code by Cyan Ogilvie

12 years agoRemove all "traces" of trace_userlocks, because userlocks were removed
Bruce Momjian [Thu, 13 Oct 2011 23:59:13 +0000 (19:59 -0400)]
Remove all "traces" of trace_userlocks, because userlocks were removed
in PG 8.2.

12 years agoFix up Perl-to-Postgres datatype conversions in pl/perl.
Tom Lane [Thu, 13 Oct 2011 22:02:43 +0000 (18:02 -0400)]
Fix up Perl-to-Postgres datatype conversions in pl/perl.

This patch restores the pre-9.1 behavior that pl/perl functions returning
VOID ignore the result value of their last Perl statement.  9.1.0
unintentionally threw an error if the last statement returned a reference,
as reported by Amit Khandekar.

Also, make sure it works to return a string value for a composite type,
so long as the string meets the type's input format.  We already allowed
the equivalent behavior for arrays, so it seems inconsistent to not allow
it for composites.

In addition, ensure we throw errors for attempts to return arrays or hashes
when the function's declared result type is not an array or composite type,
respectively.  Pre-9.1 versions rather uselessly returned strings like
ARRAY(0x221a9a0) or HASH(0x221aa90), while 9.1.0 threw an error for the
hash case and returned a garbage value for the array case.

Also, clean up assorted grotty coding in Perl array conversion, including
use of a session-lifespan memory context to accumulate the array value
(resulting in session-lifespan memory leak on error), failure to apply the
declared typmod if any, and failure to detect some cases of non-rectangular
multi-dimensional arrays.

Alex Hunsaker and Tom Lane

12 years agoUpdate documentation about ts_rank().
Bruce Momjian [Thu, 13 Oct 2011 18:17:20 +0000 (14:17 -0400)]
Update documentation about ts_rank().

12 years agoHave pg_ctl return an exit status of 3 if the server is not running, to
Bruce Momjian [Thu, 13 Oct 2011 17:01:56 +0000 (13:01 -0400)]
Have pg_ctl return an exit status of 3 if the server is not running, to
match the Linux Standard Base Core Specification 3.1.

Aaron W. Swenson

12 years agoFix typo in dummy_seclabel documentation.
Tom Lane [Thu, 13 Oct 2011 16:16:07 +0000 (12:16 -0400)]
Fix typo in dummy_seclabel documentation.

dummy_label -> dummy_seclabel

Thom Brown

12 years agoDocument who can drop a table (owner and user with permissions).
Bruce Momjian [Thu, 13 Oct 2011 14:05:54 +0000 (10:05 -0400)]
Document who can drop a table (owner and user with permissions).

12 years agoRemove tab in sgml file.
Bruce Momjian [Thu, 13 Oct 2011 13:32:39 +0000 (09:32 -0400)]
Remove tab in sgml file.

12 years agoDon't mark auto-generated types as extension members.
Tom Lane [Wed, 12 Oct 2011 22:40:09 +0000 (18:40 -0400)]
Don't mark auto-generated types as extension members.

Relation rowtypes and automatically-generated array types do not need to
have their own extension membership dependency entries.  If we create such
then it becomes more difficult to remove items from an extension, and it's
also harder for an extension upgrade script to make sure it duplicates the
dependencies created by the extension's regular installation script.

I changed the code in such a way that this happened in commit
988cccc620dd8c16d77f88ede167b22056176324, I think because of worries about
the shell-type-replacement case; but that cure was worse than the disease.
It would only matter if one extension created a shell type that was
replaced with an auto-generated type in another extension, which seems
pretty far-fetched.  Better to make this work unsurprisingly in normal
cases.

Report and patch by Robert Haas, comment adjustments by me.

12 years agoDocument how to accent Alvaro Herrera in the release notes.
Bruce Momjian [Wed, 12 Oct 2011 21:20:05 +0000 (17:20 -0400)]
Document how to accent Alvaro Herrera in the release notes.

12 years agoClarify wording of foreign key documentation to mention null entries as
Bruce Momjian [Wed, 12 Oct 2011 20:58:39 +0000 (16:58 -0400)]
Clarify wording of foreign key documentation to mention null entries as
not matching the primary key.

Report from Marek.Balgar@seznam.cz

12 years agoModify RelationGetBufferForTuple() to use a typedef, rather than a
Bruce Momjian [Wed, 12 Oct 2011 20:53:54 +0000 (16:53 -0400)]
Modify RelationGetBufferForTuple() to use a typedef, rather than a
struct, to help pgindent.

12 years agoModify pgindent to use a renamed pg_bsd_indent binary. New features
Bruce Momjian [Wed, 12 Oct 2011 19:45:46 +0000 (15:45 -0400)]
Modify pgindent to use a renamed pg_bsd_indent binary.  New features
include the ability to supply a typedef file, rather than list them on
the command line.  Also improve the README.

12 years agoThrow a useful error message if an extension script file is fed to psql.
Tom Lane [Wed, 12 Oct 2011 19:45:03 +0000 (15:45 -0400)]
Throw a useful error message if an extension script file is fed to psql.

We have seen one too many reports of people trying to use 9.1 extension
files in the old-fashioned way of sourcing them in psql.  Not only does
that usually not work (due to failure to substitute for MODULE_PATHNAME
and/or @extschema@), but if it did work they'd get a collection of loose
objects not an extension.  To prevent this, insert an \echo ... \quit
line that prints a suitable error message into each extension script file,
and teach commands/extension.c to ignore lines starting with \echo.
That should not only prevent any adverse consequences of loading a script
file the wrong way, but make it crystal clear to users that they need to
do it differently now.

Tom Lane, following an idea of Andrew Dunstan's.  Back-patch into 9.1
... there is not going to be much value in this if we wait till 9.2.

12 years agoModify up/home macro to match standard parameter list; fixes doc build.
Bruce Momjian [Wed, 12 Oct 2011 18:04:59 +0000 (14:04 -0400)]
Modify up/home macro to match standard parameter list;  fixes doc build.

12 years agoImprove documentation of psql's \q command.
Tom Lane [Wed, 12 Oct 2011 17:59:30 +0000 (13:59 -0400)]
Improve documentation of psql's \q command.

The documentation neglected to explain its behavior in a script file
(it only ends execution of the script, not psql as a whole), and failed
to mention the long form \quit either.

12 years agoAdd Up/Home link to the top of the HTML doc output.
Bruce Momjian [Wed, 12 Oct 2011 15:24:13 +0000 (11:24 -0400)]
Add Up/Home link to the top of the HTML doc output.

Backpatch to 9.0.X and 9.1.X.

12 years agoAdd comment on why pulling data from a "name" index column can't crash.
Tom Lane [Tue, 11 Oct 2011 22:40:53 +0000 (18:40 -0400)]
Add comment on why pulling data from a "name" index column can't crash.

It's been bothering me for several days that pretending that the cstring
data stored in a btree name_ops column is really a "name" Datum could lead
to reading past the end of memory.  However, given the current memory
layout used for index-only scans in the btree code, a crash is in fact not
possible.  Document that so we don't break it.  I have not thought of any
other solutions that aren't fairly ugly too, and most of them lose the
functionality of index-only scans on name columns altogether, so this seems
like the way to go.

12 years agoGenerate index-only scan tuple descriptor from the plan node's indextlist.
Tom Lane [Tue, 11 Oct 2011 22:11:51 +0000 (18:11 -0400)]
Generate index-only scan tuple descriptor from the plan node's indextlist.

Dept. of second thoughts: as long as we've got that tlist hanging around
anyway, we can apply ExecTypeFromTL to it to get a suitable descriptor for
the ScanTupleSlot.  This is a nicer solution than the previous one because
it eliminates some hard-wired knowledge about btree name_ops, and because
it avoids the somewhat shaky assumption that we needn't set up the scan
tuple descriptor in EXPLAIN_ONLY mode.  It doesn't change what actually
happens at run-time though, and I'm still a bit nervous about that.

12 years agoImprove entab's Makefile install entry.
Bruce Momjian [Tue, 11 Oct 2011 22:03:34 +0000 (18:03 -0400)]
Improve entab's Makefile install entry.

Andrew Dunstan

12 years agoDocument that not backing up postmaster.pid and postmaster.opts might
Bruce Momjian [Tue, 11 Oct 2011 21:33:20 +0000 (17:33 -0400)]
Document that not backing up postmaster.pid and postmaster.opts might
help prevent pg_ctl from getting confused.

Backpatch to 9.1.

12 years agoConsider index-only scans even when there is no matching qual or ORDER BY.
Tom Lane [Tue, 11 Oct 2011 19:00:30 +0000 (15:00 -0400)]
Consider index-only scans even when there is no matching qual or ORDER BY.

By popular demand.

12 years agoRearrange the implementation of index-only scans.
Tom Lane [Tue, 11 Oct 2011 18:20:06 +0000 (14:20 -0400)]
Rearrange the implementation of index-only scans.

This commit changes index-only scans so that data is read directly from the
index tuple without first generating a faux heap tuple.  The only immediate
benefit is that indexes on system columns (such as OID) can be used in
index-only scans, but this is necessary infrastructure if we are ever to
support index-only scans on expression indexes.  The executor is now ready
for that, though the planner still needs substantial work to recognize
the possibility.

To do this, Vars in index-only plan nodes have to refer to index columns
not heap columns.  I introduced a new special varno, INDEX_VAR, to mark
such Vars to avoid confusion.  (In passing, this commit renames the two
existing special varnos to OUTER_VAR and INNER_VAR.)  This allows
ruleutils.c to handle them with logic similar to what we use for subplan
reference Vars.

Since index-only scans are now fundamentally different from regular
indexscans so far as their expression subtrees are concerned, I also chose
to change them to have their own plan node type (and hence, their own
executor source file).

12 years agoReplace hardcoded switch in object_exists() with a lookup table.
Robert Haas [Tue, 11 Oct 2011 13:14:30 +0000 (09:14 -0400)]
Replace hardcoded switch in object_exists() with a lookup table.

There's no particular advantage to this change on its face; indeed,
it's possible that this might be slightly slower than the old way.
But it makes this information more easily accessible to other
functions, and therefore paves the way for future code consolidation.
Performance isn't critical here, so there's no need to be smart about
how we do the search.

This is a heavily cut-down version of a patch from KaiGai Kohei,
with several fixes by me.  Additional review from Dimitri Fontaine.

12 years agoRepair breakage in VirtualXactLock.
Robert Haas [Tue, 11 Oct 2011 11:39:09 +0000 (07:39 -0400)]
Repair breakage in VirtualXactLock.

I broke this in commit 84e37126770dd6de903dad88ce150a49b63b5ef9.  Report and
fix by Fujii Masao.

12 years agoMake the reference to "CREATE USER" in the CREATE ROLE page a link.
Robert Haas [Mon, 10 Oct 2011 17:38:32 +0000 (13:38 -0400)]
Make the reference to "CREATE USER" in the CREATE ROLE page a link.

This might help to avoid confusion between the CREATE USER command,
and the deprecated CREATEUSER option to CREATE ROLE, as per a recent
complaint from Ron Adams.  At any rate, having a cross-link here
seems like a good idea; two commands that are so similar should
reference each other.

12 years agoImprove documentation of how to fiddle with SCSI drives on FreeBSD.
Robert Haas [Mon, 10 Oct 2011 17:21:35 +0000 (13:21 -0400)]
Improve documentation of how to fiddle with SCSI drives on FreeBSD.

Per suggestions from Achilleas Mantzios and Greg Smith.

12 years agoFix typo in docs for libpq keepalives_count option.
Robert Haas [Mon, 10 Oct 2011 17:10:47 +0000 (13:10 -0400)]
Fix typo in docs for libpq keepalives_count option.

Shigehiro Honda

12 years agoAdd doc index entry for pg_resetxlog.
Robert Haas [Mon, 10 Oct 2011 17:05:25 +0000 (13:05 -0400)]
Add doc index entry for pg_resetxlog.

Fujii Masao

12 years agoDocument DELETE/UPDATE command tag behavior when triggers are involved.
Robert Haas [Mon, 10 Oct 2011 16:53:04 +0000 (12:53 -0400)]
Document DELETE/UPDATE command tag behavior when triggers are involved.

Marti Raudsepp

12 years agoSome minor wordsmithing for the cascading replication documentation.
Robert Haas [Mon, 10 Oct 2011 14:15:45 +0000 (10:15 -0400)]
Some minor wordsmithing for the cascading replication documentation.

Per report from Thom Brown.

12 years agoMark GUC external_pid_file's default as '' in postgresql.conf, rather
Bruce Momjian [Mon, 10 Oct 2011 12:16:36 +0000 (08:16 -0400)]
Mark GUC external_pid_file's default as '' in postgresql.conf, rather
than '(none)'.

12 years agoAttempt to reduce local dependencies in regression tests.
Robert Haas [Mon, 10 Oct 2011 11:58:17 +0000 (07:58 -0400)]
Attempt to reduce local dependencies in regression tests.

This appears to be another case where the relative sort order of letters
vs. numbers can throw things off.

Pavel Stehule

12 years agoIn pg_upgrade, add -o/-O options to pass parameters to the servers, and
Bruce Momjian [Mon, 10 Oct 2011 11:43:28 +0000 (07:43 -0400)]
In pg_upgrade, add -o/-O options to pass parameters to the servers, and
document its use for config-only directory installs.

12 years agoFix ALTER TABLE ONLY .. DROP CONSTRAINT.
Robert Haas [Mon, 10 Oct 2011 03:39:52 +0000 (23:39 -0400)]
Fix ALTER TABLE ONLY .. DROP CONSTRAINT.

When I consolidated two copies of the HOT-chain search logic in commit
4da99ea4231e3d8bbf28b666748c1028e7b7d665, I introduced a behavior
change: the old code wouldn't necessarily traverse the entire chain,
if the most recently returned tuple were updated while the HOT chain
traversal is in progress.  The new behavior seems more correct, but
unfortunately, the code here relies on a scan with SnapshotNow failing
to see its own updates.  That seems pretty shaky even with the old HOT
chain traversal behavior, since there's no guarantee that these
updates will always be HOT, but it's trivial to broke a failure with
the new HOT search logic.  Fix by updating just the first matching
pg_constraint tuple, rather than all of them, since there should be
only one anyway.  But since nobody has reproduced this failure on older
versions, no back-patch for now.

Report and test case by Alex Hunsaker; tablecmds.c changes by me.

12 years agoRevert accidental change to pg_config_manual.h.
Robert Haas [Mon, 10 Oct 2011 02:20:44 +0000 (22:20 -0400)]
Revert accidental change to pg_config_manual.h.

This was broken in commit 53dbc27c62d8e1b6c5253feba04a5094cb8fe046, which
introduced unlogged tables.  Fortunately, as debugging tools go, this one
is pretty cheap, which is probably why it took nine months for someone to
notice, but it's not intended to be enabled by default, so revert.

Noted by Fujii Masao.

12 years agoClean up a couple of box gist helper functions.
Heikki Linnakangas [Sun, 9 Oct 2011 15:55:27 +0000 (18:55 +0300)]
Clean up a couple of box gist helper functions.

The original idea of this patch was to make box picksplit run faster, by
eliminating unnecessary palloc() overhead, but that was obsoleted by the new
double-sorting split algorithm that doesn't call these functions so heavily
anymore. Nevertheless, the code looks better this way.

Original patch by me, reviewed and tidied up after the double-sorting patch
by Kevin Grittner.

12 years agoImprove index-only scans to avoid repeated access to the index page.
Tom Lane [Sun, 9 Oct 2011 04:21:08 +0000 (00:21 -0400)]
Improve index-only scans to avoid repeated access to the index page.

We copy all the matched tuples off the page during _bt_readpage, instead of
expensively re-locking the page during each subsequent tuple fetch.  This
costs a bit more local storage, but not more than 2*BLCKSZ worth, and the
reduction in LWLock traffic is certainly worth that.  What's more, this
lets us get rid of the API wart in the original patch that said an index AM
could randomly decline to supply an index tuple despite having asserted
pg_am.amcanreturn.  That will be important for future improvements in the
index-only-scan feature, since the executor will now be able to rely on
having the index data available.

12 years agoPrevent index-only scans in stats regression test.
Tom Lane [Sun, 9 Oct 2011 03:45:58 +0000 (23:45 -0400)]
Prevent index-only scans in stats regression test.

This bollixes the test because it's expecting to see the idx_tup_fetch
counter increase, which won't happen if heap fetches were avoided by use
of an index-only scan.  Per buildfarm results.

While at it, let's just make sure that enable_seqscan and enable_indexscan
are ON for this test ...

12 years agoNote that index-only scans can affect idx_tup_fetch.
Tom Lane [Sat, 8 Oct 2011 15:09:18 +0000 (11:09 -0400)]
Note that index-only scans can affect idx_tup_fetch.

An index-only scan that avoids heap fetches will increment idx_tup_read
but not idx_tup_fetch.

12 years agoFix brain fade in cost estimation for index-only scans.
Tom Lane [Sat, 8 Oct 2011 14:41:17 +0000 (10:41 -0400)]
Fix brain fade in cost estimation for index-only scans.

visibility_fraction should not be applied to regular indexscans.
Noted by Cédric Villemain.

12 years agoDon't let transform_null_equals=on affect CASE foo WHEN NULL ... constructs.
Heikki Linnakangas [Sat, 8 Oct 2011 08:17:40 +0000 (11:17 +0300)]
Don't let transform_null_equals=on affect CASE foo WHEN NULL ... constructs.
transform_null_equals is only supposed to affect "foo = NULL" expressions
given directly by the user, not the internal "foo = NULL" expression
generated from CASE-WHEN.

This fixes bug #6242, reported by Sergey. Backpatch to all supported
branches.

12 years agoFix typo.
Heikki Linnakangas [Sat, 8 Oct 2011 08:04:07 +0000 (11:04 +0300)]
Fix typo.

12 years agoAdd missing space.
Robert Haas [Sat, 8 Oct 2011 03:48:38 +0000 (23:48 -0400)]
Add missing space.

Dickson S. Guedes

12 years agoTry to fix memory barriers on x86_64.
Robert Haas [Sat, 8 Oct 2011 03:32:30 +0000 (23:32 -0400)]
Try to fix memory barriers on x86_64.

%esp is no good; must use %rsp there.

12 years agoSupport index-only scans using the visibility map to avoid heap fetches.
Tom Lane [Sat, 8 Oct 2011 00:13:02 +0000 (20:13 -0400)]
Support index-only scans using the visibility map to avoid heap fetches.

When a btree index contains all columns required by the query, and the
visibility map shows that all tuples on a target heap page are
visible-to-all, we don't need to fetch that heap page.  This patch depends
on the previous patches that made the visibility map reliable.

There's a fair amount left to do here, notably trying to figure out a less
chintzy way of estimating the cost of an index-only scan, but the core
functionality seems ready to commit.

Robert Haas and Ibrar Ahmed, with some previous work by Heikki Linnakangas.

12 years agoIn pg_upgrade, use the new postmaster -C option to get the real data
Bruce Momjian [Fri, 7 Oct 2011 18:40:23 +0000 (14:40 -0400)]
In pg_upgrade, use the new postmaster -C option to get the real data
directory, for config-only directory installs.  Only works for PG 9.2+
servers.

12 years agoIn pg_upgrade, improve popen() failure detection by checking for fgets()
Bruce Momjian [Thu, 6 Oct 2011 23:37:29 +0000 (19:37 -0400)]
In pg_upgrade, improve popen() failure detection by checking for fgets()
failures.

12 years agoMove pg_upgrade doc mention of the port numbers to the same place.
Bruce Momjian [Thu, 6 Oct 2011 23:31:20 +0000 (19:31 -0400)]
Move pg_upgrade doc mention of the port numbers to the same place.

12 years agoEnsure walsenders can be SIGTERMed while in non-walsender code
Magnus Hagander [Thu, 6 Oct 2011 19:43:14 +0000 (21:43 +0200)]
Ensure walsenders can be SIGTERMed while in non-walsender code

In oder to exit on SIGTERM when in non-walsender code,
such as do_pg_stop_backup(), we need to set the interrupt
variables that are used there, and not just the walsender
local ones.

12 years agoMake pgstatindex respond to cancel interrupts.
Robert Haas [Thu, 6 Oct 2011 16:08:59 +0000 (12:08 -0400)]
Make pgstatindex respond to cancel interrupts.

A similar problem for pgstattuple() was fixed in April of 2010 by commit
33065ef8bc52253ae855bc959576e52d8a28ba06, but pgstatindex() seems to have
been overlooked.

Back-patch all the way, as with that commit, though not to 7.4 through
8.1, since those are now EOL.

12 years agoSimplify new pg_ctl newline termination code.
Bruce Momjian [Thu, 6 Oct 2011 14:59:50 +0000 (10:59 -0400)]
Simplify new pg_ctl newline termination code.

12 years agoAdd postmaster -C option to query configuration parameters, and have
Bruce Momjian [Thu, 6 Oct 2011 13:38:39 +0000 (09:38 -0400)]
Add postmaster -C option to query configuration parameters, and have
pg_ctl use that to query the data directory for config-only installs.
This fixes awkward or impossible pg_ctl operation for config-only
installs.

12 years agoReplace the "New Linear" GiST split algorithm for boxes and points with a
Heikki Linnakangas [Thu, 6 Oct 2011 07:03:46 +0000 (10:03 +0300)]
Replace the "New Linear" GiST split algorithm for boxes and points with a
new double-sorting algorithm. The new algorithm produces better quality
trees, making searches faster.

Alexander Korotkov

12 years agoImprove and simplify CREATE EXTENSION's management of GUC variables.
Tom Lane [Thu, 6 Oct 2011 00:44:16 +0000 (20:44 -0400)]
Improve and simplify CREATE EXTENSION's management of GUC variables.

CREATE EXTENSION needs to transiently set search_path, as well as
client_min_messages and log_min_messages.  We were doing this by the
expedient of saving the current string value of each variable, doing a
SET LOCAL, and then doing another SET LOCAL with the previous value at
the end of the command.  This is a bit expensive though, and it also fails
badly if there is anything funny about the existing search_path value,
as seen in a recent report from Roger Niederland.  Fortunately, there's a
much better way, which is to piggyback on the GUC infrastructure previously
developed for functions with SET options.  We just open a new GUC nesting
level, do our assignments with GUC_ACTION_SAVE, and then close the nesting
level when done.  This automatically restores the prior settings without a
re-parsing pass, so (in principle anyway) there can't be an error.  And
guc.c still takes care of cleanup in event of an error abort.

The CREATE EXTENSION code for this was modeled on some much older code in
ri_triggers.c, which I also changed to use the better method, even though
there wasn't really much risk of failure there.  Also improve the comments
in guc.c to reflect this additional usage.

12 years agoChange wording for COALESCE docs to use "otherwise".
Bruce Momjian [Wed, 5 Oct 2011 02:39:29 +0000 (22:39 -0400)]
Change wording for COALESCE docs to use "otherwise".

Per Tom

12 years agoExplain COALESCE example in the docs.
Bruce Momjian [Wed, 5 Oct 2011 01:47:07 +0000 (21:47 -0400)]
Explain COALESCE example in the docs.

12 years agoImprove define_custom_variable's handling of pre-existing settings.
Tom Lane [Tue, 4 Oct 2011 23:57:21 +0000 (19:57 -0400)]
Improve define_custom_variable's handling of pre-existing settings.

Arrange for any problems with pre-existing settings to be reported as
WARNING not ERROR, so that we don't undesirably abort the loading of the
incoming add-on module.  The bad setting is just discarded, as though it
had never been applied at all.  (This requires a change in the API of
set_config_option.  After some thought I decided the most potentially
useful addition was to allow callers to just pass in a desired elevel.)

Arrange to restore the complete stacked state of the variable, rather than
cheesily reinstalling only the active value.  This ensures that custom GUCs
will behave unsurprisingly even when the module loading operation occurs
within nested subtransactions that have changed the active value.  Since a
module load could occur as a result of, eg, a PL function call, this is not
an unlikely scenario.

12 years agoFix uninitialized-variable bug.
Tom Lane [Tue, 4 Oct 2011 21:08:18 +0000 (17:08 -0400)]
Fix uninitialized-variable bug.

12 years agoAdd sourcefile/sourceline data to EXEC_BACKEND GUC transmission files.
Tom Lane [Tue, 4 Oct 2011 20:47:48 +0000 (16:47 -0400)]
Add sourcefile/sourceline data to EXEC_BACKEND GUC transmission files.

This oversight meant that on Windows, the pg_settings view would not
display source file or line number information for values coming from
postgresql.conf, unless the backend had received a SIGHUP since starting.

In passing, also make the error detection in read_nondefault_variables a
tad more thorough, and fix it to not lose precision on float GUCs (these
changes are already in HEAD as of my previous commit).

12 years agoRemember the source GucContext for each GUC parameter.
Tom Lane [Tue, 4 Oct 2011 20:13:16 +0000 (16:13 -0400)]
Remember the source GucContext for each GUC parameter.

We used to just remember the GucSource, but saving GucContext too provides
a little more information --- notably, whether a SET was done by a
superuser or regular user.  This allows us to rip out the fairly dodgy code
that define_custom_variable used to use to try to infer the context to
re-install a pre-existing setting with.  In particular, it now works for
a superuser to SET a extension's SUSET custom variable before loading the
associated extension, because GUC can remember whether the SET was done as
a superuser or not.  The plperl regression tests contain an example where
this is useful.

12 years agoUse callbacks in SlruScanDirectory for the actual action
Alvaro Herrera [Wed, 28 Sep 2011 14:32:38 +0000 (11:32 -0300)]
Use callbacks in SlruScanDirectory for the actual action

Previously, the code assumed that the only possible action to take was
to delete files behind a certain cutoff point.  The async notify code
was already a crock: it used a different "pagePrecedes" function for
truncation than for regular operation.  By allowing it to pass a
callback to SlruScanDirectory it can do cleanly exactly what it needs to
do.

The clog.c code also had its own use for SlruScanDirectory, which is
made a bit simpler with this.

12 years agoRemove the custom_variable_classes parameter.
Tom Lane [Tue, 4 Oct 2011 16:36:18 +0000 (12:36 -0400)]
Remove the custom_variable_classes parameter.

This variable provides only marginal error-prevention capability (since
it can only check the prefix of a qualified GUC name), and the consensus
is that that isn't worth the amount of hassle that maintaining the setting
creates for DBAs.  So, let's just remove it.

With this commit, the system will silently accept a value for any qualified
GUC name at all, whether it has anything to do with any known extension or
not.  (Unqualified names still have to match known built-in settings,
though; and you will get a WARNING at extension load time if there's an
unrecognized setting with that extension's prefix.)

There's still some discussion ongoing about whether to tighten that up and
if so how; but if we do come up with a solution, it's not likely to look
anything like custom_variable_classes.

12 years agoProcedureCreate neglected to record dependencies on default expressions.
Tom Lane [Mon, 3 Oct 2011 16:13:15 +0000 (12:13 -0400)]
ProcedureCreate neglected to record dependencies on default expressions.

Thus, an object referenced in a default expression could be dropped while
the function remained present.  This was unaccountably missed in the
original patch to add default parameters for functions.  Reported by
Pavel Stehule.

12 years agoRestructure error handling in reading of postgresql.conf.
Tom Lane [Sun, 2 Oct 2011 20:50:04 +0000 (16:50 -0400)]
Restructure error handling in reading of postgresql.conf.

This patch has two distinct purposes: to report multiple problems in
postgresql.conf rather than always bailing out after the first one,
and to change the policy for whether changes are applied when there are
unrelated errors in postgresql.conf.

Formerly the policy was to apply no changes if any errors could be
detected, but that had a significant consistency problem, because in some
cases specific values might be seen as valid by some processes but invalid
by others.  This meant that the latter processes would fail to adopt
changes in other parameters even though the former processes had done so.

The new policy is that during SIGHUP, the file is rejected as a whole
if there are any errors in the "name = value" syntax, or if any lines
attempt to set nonexistent built-in parameters, or if any lines attempt
to set custom parameters whose prefix is not listed in (the new value of)
custom_variable_classes.  These tests should always give the same results
in all processes, and provide what seems a reasonably robust defense
against loading values from badly corrupted config files.  If these tests
pass, all processes will apply all settings that they individually see as
good, ignoring (but logging) any they don't.

In addition, the postmaster does not abandon reading a configuration file
after the first syntax error, but continues to read the file and report
syntax errors (up to a maximum of 100 syntax errors per file).

The postmaster will still refuse to start up if the configuration file
contains any errors at startup time, but these changes allow multiple
errors to be detected and reported before quitting.

Alexey Klyukin, reviewed by Andy Colson and av (Alexander ?)
with some additional hacking by Tom Lane

12 years agoImprove generated column names for cases involving sub-SELECTs.
Tom Lane [Sat, 1 Oct 2011 18:01:46 +0000 (14:01 -0400)]
Improve generated column names for cases involving sub-SELECTs.

We'll now use "exists" for EXISTS(SELECT ...), "array" for ARRAY(SELECT
...), or the sub-select's own result column name for a simple expression
sub-select.  Previously, you usually got "?column?" in such cases.

Marti Raudsepp, reviewed by Kyotaro Horiugchi

12 years agoIn pg_upgrade, remove unnecessary local variable.
Bruce Momjian [Sat, 1 Oct 2011 13:59:27 +0000 (09:59 -0400)]
In pg_upgrade, remove unnecessary local variable.