]> granicus.if.org Git - postgresql/log
postgresql
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.

12 years agoCache the result of makesign() across calls of gtrgm_penalty().
Tom Lane [Sat, 1 Oct 2011 03:54:27 +0000 (23:54 -0400)]
Cache the result of makesign() across calls of gtrgm_penalty().

Since gtrgm_penalty() is usually called many times in a row with the same
"newval" (to determine which item on an index page newval fits into best),
the makesign() calculation is repetitious.  It's expensive enough to make
it worth caching the result, so do so.  On my machine this is good for
more than a 40% savings in the time needed to build a trigram index on
/usr/share/dict/words.  This is all per a suggestion of Heikki's.

In passing, make some mostly-cosmetic improvements in the caching logic in
the other functions in this file that rely on caching info in fn_extra.

12 years agoSupport GiST index support functions that want to cache data across calls.
Tom Lane [Fri, 30 Sep 2011 23:48:57 +0000 (19:48 -0400)]
Support GiST index support functions that want to cache data across calls.

pg_trgm was already doing this unofficially, but the implementation hadn't
been thought through very well and leaked memory.  Restructure the core
GiST code so that it actually works, and document it.  Ordinarily this
would have required an extra memory context creation/destruction for each
GiST index search, but I was able to avoid that in the normal case of a
non-rescanned search by finessing the handling of the RBTree.  It used to
have its own context always, but now shares a context with the
scan-lifespan data structures, unless there is more than one rescan call.
This should make the added overhead unnoticeable in typical cases.

12 years agoFix recursion into previously planned sub-query in examine_simple_variable.
Tom Lane [Thu, 29 Sep 2011 22:12:34 +0000 (18:12 -0400)]
Fix recursion into previously planned sub-query in examine_simple_variable.

This code was looking at the sub-Query tree as seen in the parent query's
RangeTblEntry; but that's the pristine parser output, and what we need to
look at is the tree as it stands at the completion of planning.  Otherwise
we might pick up a Var that references a subquery that got flattened and
hence has no RelOptInfo in the subroot.  Per report from Peter Geoghegan.

12 years agoFix pg_upgrade for EXEC_BACKEND builds (e.g. Windows) by properly
Bruce Momjian [Thu, 29 Sep 2011 21:20:53 +0000 (17:20 -0400)]
Fix pg_upgrade for EXEC_BACKEND builds (e.g. Windows) by properly
passing the -b/binary-upgrade flag.

Backpatch to 9.1.X.

12 years agoFix index matching for operators with mixed collatable/noncollatable inputs.
Tom Lane [Thu, 29 Sep 2011 04:43:42 +0000 (00:43 -0400)]
Fix index matching for operators with mixed collatable/noncollatable inputs.

If an indexable operator for a non-collatable indexed datatype has a
collatable right-hand input type, any OpExpr for it will be marked with a
nonzero inputcollid (since having one collatable input is sufficient to
make that happen).  However, an index on a non-collatable column certainly
doesn't have any collation.  This caused us to fail to match such operators
to their indexes, because indxpath.c required an exact match of index
collation and clause collation.  It seems correct to allow a match when the
index is collation-less regardless of the clause's inputcollid: an operator
with both noncollatable and collatable inputs could perhaps depend on the
collation of the collatable input, but it could hardly expect the index for
the noncollatable input to have that same collation.

Per bug #6232 from Pierre Ducroquet.  His example is specifically about
"hstore ? text" but the problem seems quite generic.

12 years agoIn pg_upgrade, because toast table names can be mismatched with the heap
Bruce Momjian [Thu, 29 Sep 2011 02:30:44 +0000 (22:30 -0400)]
In pg_upgrade, because toast table names can be mismatched with the heap
oid on 8.4, modify the toast name comparison test to only apply to old
9.0+ servers.  (The test was previously 8.4+.)

Backpatch to 9.1.X.

12 years agoUpdate and extend the EXPLAIN-related documentation.
Tom Lane [Wed, 28 Sep 2011 23:39:54 +0000 (19:39 -0400)]
Update and extend the EXPLAIN-related documentation.

I've made a significant effort at filling in the "Using EXPLAIN" section
to be reasonably complete about mentioning everything that EXPLAIN can
output, including the "Rows Removed" outputs that were added by Marko
Tiikkaja's recent documentation-free patch.  I also updated the examples to
be consistent with current behavior; several of them were not close to what
the current code will do.  No doubt there's more that can be done here, but
I'm out of patience for today.

12 years agoTake sepgsql regression tests out of the regular regression test mechanism.
Tom Lane [Wed, 28 Sep 2011 00:07:15 +0000 (20:07 -0400)]
Take sepgsql regression tests out of the regular regression test mechanism.

Because these tests require root privileges, not to mention invasive
changes to the security configuration of the host system, it's not
reasonable for them to be invoked by a regular "make check" or "make
installcheck".  Instead, dike out the Makefile's knowledge of the tests,
and change chkselinuxenv (now renamed "test_sepgsql") into a script that
verifies the environment is workable and then runs the tests.  It's
expected that test_sepgsql will only be run manually.

While at it, do some cleanup in the error checking in the script, and
do some wordsmithing in the documentation.

12 years agoRemove dependency on error ordering in isolation tests
Alvaro Herrera [Tue, 27 Sep 2011 19:08:31 +0000 (16:08 -0300)]
Remove dependency on error ordering in isolation tests

We now report errors reported by the just-unblocked and unblocking
transactions identically; this should fix relatively common buildfarm
failures reported by animals that are failing the "wrong" session.

12 years agoFix typo
Alvaro Herrera [Wed, 21 Sep 2011 16:26:19 +0000 (13:26 -0300)]
Fix typo

12 years agoUpdate comments related to the crash-safety of the visibility map.
Robert Haas [Tue, 27 Sep 2011 13:30:23 +0000 (09:30 -0400)]
Update comments related to the crash-safety of the visibility map.

In hio.c, document how we avoid deadlock with respect to visibility map
buffer locks.  In visibilitymap.c, update the LOCKING section of the
file header comment.

Both oversights noted by Heikki Linnakangas.

12 years agosepgsql uavc comment improvements.
Robert Haas [Tue, 27 Sep 2011 12:37:25 +0000 (08:37 -0400)]
sepgsql uavc comment improvements.

Robert Haas and KaiGai Kohei

12 years agoheap_update() must recheck tuple after unlocking and relocking buffer.
Robert Haas [Tue, 27 Sep 2011 12:24:18 +0000 (08:24 -0400)]
heap_update() must recheck tuple after unlocking and relocking buffer.

Bug found by Alvaro Herrera, fix suggested by Heikki Linnakangas
and reviewed by Tom Lane.

12 years agoFix window functions that sort by expressions involving aggregates.
Tom Lane [Tue, 27 Sep 2011 03:48:39 +0000 (23:48 -0400)]
Fix window functions that sort by expressions involving aggregates.

In commit c1d9579dd8bf3c921ca6bc2b62c40da6d25372e5, I changed things so
that the output of the Agg node that feeds the window functions would not
list any ungrouped Vars directly.  Formerly, for example, the Agg tlist
might have included both "x" and "sum(x)", which is not really valid if
"x" isn't a grouping column.  If we then had a window function ordering on
something like "sum(x) + 1", prepare_sort_from_pathkeys would find no exact
match for this in the Agg tlist, and would conclude that it must recompute
the expression.  But it would break the expression down to just the Var
"x", which it would find in the tlist, and then rebuild the ORDER BY
expression using a reference to the subplan's "x" output.  Now, after the
above-referenced changes, "x" isn't in the Agg tlist if it's not a grouping
column, so that prepare_sort_from_pathkeys fails with "could not find
pathkey item to sort", as reported by Bricklen Anderson.

The fix is to not break down Aggrefs into their component parts, but just
treat them as irreducible expressions to be sought in the subplan tlist.
This is definitely OK for the use with respect to window functions in
grouping_planner, since it just built the tlist being used on the same
basis.  AFAICT it is safe for other uses too; most of the other call sites
couldn't encounter Aggrefs anyway.

12 years agoAllow snapshot references to still work during transaction abort.
Tom Lane [Tue, 27 Sep 2011 02:25:28 +0000 (22:25 -0400)]
Allow snapshot references to still work during transaction abort.

In REPEATABLE READ (nee SERIALIZABLE) mode, an attempt to do
GetTransactionSnapshot() between AbortTransaction and CleanupTransaction
failed, because GetTransactionSnapshot would recompute the transaction
snapshot (which is already wrong, given the isolation mode) and then
re-register it in the TopTransactionResourceOwner, leading to an Assert
because the TopTransactionResourceOwner should be empty of resources after
AbortTransaction.  This is the root cause of bug #6218 from Yamamoto
Takashi.  While changing plancache.c to avoid requesting a snapshot when
handling a ROLLBACK masks the problem, I think this is really a snapmgr.c
bug: it's lower-level than the resource manager mechanism and should not be
shutting itself down before we unwind resource manager resources.  However,
just postponing the release of the transaction snapshot until cleanup time
didn't work because of the circular dependency with
TopTransactionResourceOwner.  Fix by managing the internal reference to
that snapshot manually instead of depending on TopTransactionResourceOwner.
This saves a few cycles as well as making the module layering more
straightforward.  predicate.c's dependencies on TopTransactionResourceOwner
go away too.

I think this is a longstanding bug, but there's no evidence that it's more
than a latent bug, so it doesn't seem worth any risk of back-patching.

12 years agoSpeed up array element assignment in plpgsql by caching type information.
Tom Lane [Mon, 26 Sep 2011 19:38:07 +0000 (15:38 -0400)]
Speed up array element assignment in plpgsql by caching type information.

Cache assorted data in the PLpgSQL_arrayelem struct to avoid repetitive
catalog lookups over multiple executions of the same statement.

Pavel Stehule

12 years agoUpdate obsolete comments.
Robert Haas [Mon, 26 Sep 2011 17:12:22 +0000 (13:12 -0400)]
Update obsolete comments.

This was partially fixed by 57fdb2b0d835fe201434fc28bf5dabf83ada26d1,
back in 2005, but it missed a couple of spots.

YAMAMOTO Takashi

12 years agoUse a fresh copy of query_list when making a second plan in GetCachedPlan.
Tom Lane [Mon, 26 Sep 2011 16:44:17 +0000 (12:44 -0400)]
Use a fresh copy of query_list when making a second plan in GetCachedPlan.

The code path that tried a generic plan, didn't like it, and then made a
custom plan was mistakenly passing the same copy of the query_list to the
planner both times.  This doesn't work too well for nontrivial queries,
since the planner tends to scribble on its input.  Diagnosis and fix by
Yamamoto Takashi.

12 years agoFully const-ify PQconnectdbParams, PQconnectStartParams, and PQpingParams.
Tom Lane [Sun, 25 Sep 2011 22:52:48 +0000 (18:52 -0400)]
Fully const-ify PQconnectdbParams, PQconnectStartParams, and PQpingParams.

The keywords and values arguments of these functions are more properly
declared "const char * const *" than just "const char **".

Lionel Elie Mamane, reviewed by Craig Ringer

12 years agoAvoid unnecessary snapshot-acquisitions in BuildCachedPlan.
Tom Lane [Sun, 25 Sep 2011 21:33:32 +0000 (17:33 -0400)]
Avoid unnecessary snapshot-acquisitions in BuildCachedPlan.

I had copied-and-pasted a claim that we couldn't reach this point when
dealing with utility statements, but that was a leftover from when the
caller was required to supply a plan to start with.  We now will go
through here at least once when handling a utility statement, so it
seems worth a check to see whether a snapshot is actually needed.
(Note that analyze_requires_snapshot is quite a cheap test.)

Per suggestion from Yamamoto Takashi.  I don't think I believe that this
resolves his reported assertion failure; but it's worth changing anyway,
just to save a cycle or two.

12 years agoIn pgrminclude, document requirement to use pgcompinclude, and sort
Bruce Momjian [Sun, 25 Sep 2011 20:57:31 +0000 (16:57 -0400)]
In pgrminclude, document requirement to use pgcompinclude, and sort
files so include removal is more predictable.

12 years agoUn-break compression of plain-text output format in pg_dump.
Tom Lane [Sun, 25 Sep 2011 17:59:17 +0000 (13:59 -0400)]
Un-break compression of plain-text output format in pg_dump.

pg_dump has historically understood -Z with no -F switch to mean that
it should emit a gzip-compressed version of its plain text output.
This got broken through a misunderstanding in the 9.1 patch that added
directory output format.  Restore the former behavior.

Per complaint from Roger Niederland and diagnosis by Adrian Klaver.

12 years agoDocument pgrminclude limitations.
Bruce Momjian [Sat, 24 Sep 2011 23:37:54 +0000 (19:37 -0400)]
Document pgrminclude limitations.

12 years agoRecognize self-contradictory restriction clauses for non-table relations.
Tom Lane [Sat, 24 Sep 2011 23:33:16 +0000 (19:33 -0400)]
Recognize self-contradictory restriction clauses for non-table relations.

The constraint exclusion feature checks for contradictions among scan
restriction clauses, as well as contradictions between those clauses and a
table's CHECK constraints.  The first aspect of this testing can be useful
for non-table relations (such as subqueries or functions-in-FROM), but the
feature was coded with only the CHECK case in mind so we were applying it
only to plain-table RTEs.  Move the relation_excluded_by_constraints call
so that it is applied to all RTEs not just plain tables.  With the default
setting of constraint_exclusion this results in no extra work, but with
constraint_exclusion = ON we will detect optimizations that we missed
before (at the cost of more planner cycles than we expended before).

Per a gripe from Gunnlaugur Þór Briem.  Experimentation with
his example also showed we were not being very bright about the case where
constraint exclusion is proven within a subquery within UNION ALL, so tweak
the code to allow set_append_rel_pathlist to recognize such cases.

12 years agoExpand pgrminclude to exclude use of macros CppAsString and CppConcat.
Bruce Momjian [Sat, 24 Sep 2011 13:24:14 +0000 (09:24 -0400)]
Expand pgrminclude to exclude use of macros CppAsString and CppConcat.

12 years agoFix typo
Magnus Hagander [Sat, 24 Sep 2011 12:34:32 +0000 (14:34 +0200)]
Fix typo

12 years agoNote that sslmode=require verifies the CA if root cert is present
Magnus Hagander [Sat, 24 Sep 2011 12:25:12 +0000 (14:25 +0200)]
Note that sslmode=require verifies the CA if root cert is present

This mode still exists for backwards compatibility, making
sslmode=require the same as sslmode=verify-ca when the file is present,
but not causing an error when it isn't.

Per bug 6189, reported by Srinivas Aji

12 years agoFix our mapping of Windows timezones for Central America.
Tom Lane [Sat, 24 Sep 2011 02:07:52 +0000 (22:07 -0400)]
Fix our mapping of Windows timezones for Central America.

We were mapping "Central America Standard Time" to "CST6CDT", which seems
entirely wrong, because according to the Olson timezone database noplace
in Central America observes daylight savings time on any regular basis ---
and certainly not according to the USA DST rules that are implied by
"CST6CDT".  (Mexico is an exception, but they can be disregarded since
they have a separate timezone name in Windows.)  So, map this zone name to
plain "CST6", which will provide a fixed UTC offset.

As written, this patch will also result in mapping "Central America
Daylight Time" to CST6.  I considered hacking things so that would still
map to CST6CDT, but it seems it would confuse win32tzlist.pl to put those
two names in separate entries.  Since there's little evidence that any
such zone name is used in the wild, much less that CST6CDT would be a good
match for it, I'm not too worried about what we do with it.

Per complaint from Pratik Chirania.

12 years agoUpdate win32tzlist.pl for the new location of our Windows timezone map.
Tom Lane [Sat, 24 Sep 2011 01:42:24 +0000 (21:42 -0400)]
Update win32tzlist.pl for the new location of our Windows timezone map.

I wasn't aware of this script till Magnus mentioned it just now ...

12 years agoMemory barrier support for PostgreSQL.
Robert Haas [Fri, 23 Sep 2011 21:52:43 +0000 (17:52 -0400)]
Memory barrier support for PostgreSQL.

This is not actually used anywhere yet, but it gets the basic
infrastructure in place.  It is fairly likely that there are bugs, and
support for some important platforms may be missing, so we'll need to
refine this as we go along.

12 years agoTeach sepgsql about database labels.
Robert Haas [Fri, 23 Sep 2011 21:09:34 +0000 (17:09 -0400)]
Teach sepgsql about database labels.

This is still a bit of a hack, but it's better than the old way, for sure.

KaiGai Kohei, with one change by me to make it compile

12 years agoDocument some more apparently-harmless error messages.
Robert Haas [Fri, 23 Sep 2011 21:02:46 +0000 (17:02 -0400)]
Document some more apparently-harmless error messages.

12 years agoAdd missing brackets to chkselinuxenv.
Robert Haas [Fri, 23 Sep 2011 21:02:09 +0000 (17:02 -0400)]
Add missing brackets to chkselinuxenv.

12 years agoAdd --{no-,}replication flags to createuser.
Robert Haas [Fri, 23 Sep 2011 13:25:20 +0000 (09:25 -0400)]
Add --{no-,}replication flags to createuser.

Fujii Masao, reviewed by Cédric Villemain, with some doc changes by me.

12 years agosynchronous_commit is an enum not a boolean.
Simon Riggs [Fri, 23 Sep 2011 07:35:33 +0000 (08:35 +0100)]
synchronous_commit is an enum not a boolean.

Jaime Casanova

12 years agoUpdate release notes for 9.1.1, 9.0.5, 8.4.9, 8.3.16, 8.2.22.
Tom Lane [Thu, 22 Sep 2011 21:39:05 +0000 (17:39 -0400)]
Update release notes for 9.1.1, 9.0.5, 8.4.9, 8.3.16, 8.2.22.

Man, we fixed a lotta bugs since April.

12 years agoMake EXPLAIN ANALYZE report the numbers of rows rejected by filter steps.
Tom Lane [Thu, 22 Sep 2011 15:29:18 +0000 (11:29 -0400)]
Make EXPLAIN ANALYZE report the numbers of rows rejected by filter steps.

This provides information about the numbers of tuples that were visited
but not returned by table scans, as well as the numbers of join tuples
that were considered and discarded within a join plan node.

There is still some discussion going on about the best way to report counts
for outer-join situations, but I think most of what's in the patch would
not change if we revise that, so I'm going to go ahead and commit it as-is.

Documentation changes to follow (they weren't in the submitted patch
either).

Marko Tiikkaja, reviewed by Marc Cousin, somewhat revised by Tom

12 years agoFix another bit of unlogged-table-induced breakage.
Robert Haas [Wed, 21 Sep 2011 14:32:30 +0000 (10:32 -0400)]
Fix another bit of unlogged-table-induced breakage.

Per bug #6205, reported by Abel Abraham Camarillo Ojeda.  This isn't a
particularly elegant fix, but I'm trying to minimize the chances of
causing yet another round of breakage.

Adjust regression tests to exercise this case.

12 years agoSuppress "unused function" warning when not HAVE_LOCALE_T.
Tom Lane [Tue, 20 Sep 2011 21:47:21 +0000 (17:47 -0400)]
Suppress "unused function" warning when not HAVE_LOCALE_T.

Forgot to consider this case ...

12 years agoImprove reporting of newlocale() failures in CREATE COLLATION.
Tom Lane [Tue, 20 Sep 2011 17:23:40 +0000 (13:23 -0400)]
Improve reporting of newlocale() failures in CREATE COLLATION.

The standardized errno code for "no such locale" failures is ENOENT, which
we were just reporting at face value, viz "No such file or directory".
Per gripe from Thom Brown, this might confuse users, so add an errdetail
message to clarify what it means.  Also, report newlocale() failures as
ERRCODE_INVALID_PARAMETER_VALUE rather than using
errcode_for_file_access(), since newlocale()'s errno values aren't
necessarily tied directly to file access failures.

12 years agoFix another Assert issue exposed by CLOBBER_CACHE_ALWAYS.
Tom Lane [Mon, 19 Sep 2011 03:46:04 +0000 (23:46 -0400)]
Fix another Assert issue exposed by CLOBBER_CACHE_ALWAYS.

plpgsql's exec_stmt_execsql was Assert'ing that a CachedPlanSource was
is_valid immediately after exec_prepare_plan.  The risk factor in this case
is that after building the prepared statement, exec_prepare_plan calls
exec_simple_check_plan, which might try to generate a generic plan --- and
with CLOBBER_CACHE_ALWAYS or other unusual causes of invalidation, that
could result in an invalidation.  However, that path could only be taken
for a SELECT query, for which we need not set mod_stmt.  So in this case
I think it's best to just remove the Assert; it's okay to look at a
slightly-stale querytree for what we need here.  Per buildfarm testing.

12 years agoFix Assert failure in new plancache code.
Tom Lane [Sat, 17 Sep 2011 05:47:33 +0000 (01:47 -0400)]
Fix Assert failure in new plancache code.

The regression tests were failing with CLOBBER_CACHE_ALWAYS enabled,
as reported by buildfarm member jaguar.  There was an Assert in
BuildCachedPlan that asserted that the CachedPlanSource hadn't been
invalidated since we called RevalidateCachedQuery, which in theory can't
happen because we are holding locks on all the relevant database objects.
However, CLOBBER_CACHE_ALWAYS generates a false positive by making an
invalidation happen anyway; and on reflection, that could also occur as a
result of a badly-timed sinval reset due to queue overflow.  We could just
remove the Assert and forge ahead with the not-really-stale querytree, but
it seems safer to do another RevalidateCachedQuery call just to make real
sure everything's OK.

12 years agoRemove debug logging for pgstat wait timeout.
Tom Lane [Fri, 16 Sep 2011 22:25:27 +0000 (18:25 -0400)]
Remove debug logging for pgstat wait timeout.

This reverts commit 79b2ee20c8a041a85dd230c4e787bef22edae57b, which proved
to not be very informative; it looks like the "pgstat wait timeout"
warnings in the buildfarm are just a symptom of running on heavily loaded
machines, and there isn't any weird mechanism causing them to appear.

To try to reduce the frequency of buildfarm failures from this effect,
increase PGSTAT_MAX_WAIT_TIME from 5 seconds to 10.

Also, arrange to not send a fresh inquiry message every single time through
the loop, as that seems more likely to cause problems (by swamping the
collector) than fix them.  We'll now send an inquiry the first time through
the delay loop, and every 640 msec thereafter.

12 years agoAdd FORCE_NOT_NULL support to the file_fdw foreign data wrapper.
Tom Lane [Fri, 16 Sep 2011 20:35:51 +0000 (16:35 -0400)]
Add FORCE_NOT_NULL support to the file_fdw foreign data wrapper.

This is implemented as a per-column boolean option, rather than trying
to match COPY's convention of a single option listing the column names.

Shigeru Hanada, reviewed by KaiGai Kohei

12 years agoAvoid unnecessary page-level SSI lock check in heap_insert().
Tom Lane [Fri, 16 Sep 2011 18:47:20 +0000 (14:47 -0400)]
Avoid unnecessary page-level SSI lock check in heap_insert().

As observed by Heikki, we need not conflict on heap page locks during an
insert; heap page locks are only aggregated tuple locks, they don't imply
locking "gaps" as index page locks do.  So we can avoid some unnecessary
conflicts, and also do the SSI check while not holding exclusive lock on
the target buffer.

Kevin Grittner, reviewed by Jeff Davis.  Back-patch to 9.1.

12 years agoEnsure generic plan gets used for a plpgsql expression with no parameters.
Tom Lane [Fri, 16 Sep 2011 16:31:23 +0000 (12:31 -0400)]
Ensure generic plan gets used for a plpgsql expression with no parameters.

Now that a NULL ParamListInfo pointer causes significantly different
behavior in plancache.c, be sure to pass it that way when the expression
is known not to reference any plpgsql variables.  Saves a few setup
cycles anyway.

12 years agogistendscan() forgot to free so->giststate.
Tom Lane [Fri, 16 Sep 2011 08:27:49 +0000 (04:27 -0400)]
gistendscan() forgot to free so->giststate.

This oversight led to a massive memory leak --- upwards of 10KB per tuple
--- during creation-time verification of an exclusion constraint based on a
GIST index.  In most other scenarios it'd just be a leak of 10KB that would
be recovered at end of query, so not too significant; though perhaps the
leak would be noticeable in a situation where a GIST index was being used
in a nestloop inner indexscan.  In any case, it's a real leak of long
standing, so patch all supported branches.  Per report from Harald Fuchs.

12 years agoRedesign the plancache mechanism for more flexibility and efficiency.
Tom Lane [Fri, 16 Sep 2011 04:42:53 +0000 (00:42 -0400)]
Redesign the plancache mechanism for more flexibility and efficiency.

Rewrite plancache.c so that a "cached plan" (which is rather a misnomer
at this point) can support generation of custom, parameter-value-dependent
plans, and can make an intelligent choice between using custom plans and
the traditional generic-plan approach.  The specific choice algorithm
implemented here can probably be improved in future, but this commit is
all about getting the mechanism in place, not the policy.

In addition, restructure the API to greatly reduce the amount of extraneous
data copying needed.  The main compromise needed to make that possible was
to split the initial creation of a CachedPlanSource into two steps.  It's
worth noting in particular that SPI_saveplan is now deprecated in favor of
SPI_keepplan, which accomplishes the same end result with zero data
copying, and no need to then spend even more cycles throwing away the
original SPIPlan.  The risk of long-term memory leaks while manipulating
SPIPlans has also been greatly reduced.  Most of this improvement is based
on use of the recently-added MemoryContextSetParent primitive.

12 years agoTeach the makefile used to build stand-alone libpq on Windows that libpq
Heikki Linnakangas [Wed, 14 Sep 2011 14:57:32 +0000 (17:57 +0300)]
Teach the makefile used to build stand-alone libpq on Windows that libpq
needs win32setlocale.c now. The cygwin and MSVC build scripts were changed
earlier, but this was neglected. This should fix bug report #6203 by Steve.