Commit Graph

32925 Commits

Author SHA1 Message Date
Tom Lane
336c1d7a51 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.
2011-10-16 19:15:04 -04:00
Tom Lane
e661c3dfd3 Fix collate.linux.utf8 expected output for recent error message change.
Noted by Jeff Davis.
2011-10-16 16:07:40 -04:00
Tom Lane
9e8da0f757 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.
2011-10-16 15:39:24 -04:00
Tom Lane
0898d71f66 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.
2011-10-15 13:02:37 -04:00
Bruce Momjian
b4aec388d8 Document that is the psql version number, not the server version number,
that controls .psqlrc.
2011-10-15 11:43:19 -04:00
Bruce Momjian
2deba6d405 Improve doc wording of drop table permission. 2011-10-15 10:08:02 -04:00
Bruce Momjian
2795592e52 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.
2011-10-14 20:27:14 -04:00
Tom Lane
d26e1ebaf5 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).
2011-10-14 20:24:17 -04:00
Tom Lane
e6858e6657 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.
2011-10-14 17:23:46 -04:00
Robert Haas
dea95c7a7b 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.
2011-10-14 14:16:02 -04:00
Robert Haas
393e828e31 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.
2011-10-14 11:35:40 -04:00
Bruce Momjian
ad30d36642 Document actual string that has to be returned by the client for MD5
authentication.

Report and pseudo code by Cyan Ogilvie
2011-10-13 20:48:50 -04:00
Bruce Momjian
0180bd6180 Remove all "traces" of trace_userlocks, because userlocks were removed
in PG 8.2.
2011-10-13 19:59:57 -04:00
Tom Lane
23610daf8a 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
2011-10-13 18:04:40 -04:00
Bruce Momjian
fb4340c5ea Update documentation about ts_rank(). 2011-10-13 14:17:20 -04:00
Bruce Momjian
12ff9fa771 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
2011-10-13 13:02:36 -04:00
Tom Lane
de1bf53a25 Fix typo in dummy_seclabel documentation.
dummy_label -> dummy_seclabel

Thom Brown
2011-10-13 12:16:07 -04:00
Bruce Momjian
cf72528e87 Document who can drop a table (owner and user with permissions). 2011-10-13 10:05:54 -04:00
Bruce Momjian
4c32f81766 Remove tab in sgml file. 2011-10-13 09:33:29 -04:00
Tom Lane
7b96519fe2 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
988cccc620, 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.
2011-10-12 18:41:49 -04:00
Bruce Momjian
e0b268fb82 Document how to accent Alvaro Herrera in the release notes. 2011-10-12 17:20:05 -04:00
Bruce Momjian
f2b36d8e10 Clarify wording of foreign key documentation to mention null entries as
not matching the primary key.

Report from Marek.Balgar@seznam.cz
2011-10-12 16:58:39 -04:00
Bruce Momjian
484af9b376 Modify RelationGetBufferForTuple() to use a typedef, rather than a
struct, to help pgindent.
2011-10-12 16:53:54 -04:00
Bruce Momjian
6e22ba03a9 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.
2011-10-12 15:51:27 -04:00
Tom Lane
458857cc9d 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.
2011-10-12 15:45:03 -04:00
Bruce Momjian
e0d273500a Modify up/home macro to match standard parameter list; fixes doc build. 2011-10-12 14:05:37 -04:00
Tom Lane
80c6409c2b 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.
2011-10-12 13:59:30 -04:00
Bruce Momjian
b8691d838b Add Up/Home link to the top of the HTML doc output.
Backpatch to 9.0.X and 9.1.X.
2011-10-12 11:24:51 -04:00
Tom Lane
8c8ba6d11b 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.
2011-10-11 18:40:53 -04:00
Tom Lane
cb6771fb32 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.
2011-10-11 18:12:57 -04:00
Bruce Momjian
e991930e8a Improve entab's Makefile install entry.
Andrew Dunstan
2011-10-11 18:03:34 -04:00
Bruce Momjian
47cacfc0f1 Document that not backing up postmaster.pid and postmaster.opts might
help prevent pg_ctl from getting confused.

Backpatch to 9.1.
2011-10-11 17:33:20 -04:00
Tom Lane
600d3206d1 Consider index-only scans even when there is no matching qual or ORDER BY.
By popular demand.
2011-10-11 15:00:30 -04:00
Tom Lane
a0185461dd 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).
2011-10-11 14:21:30 -04:00
Robert Haas
fa351d5a0d 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.
2011-10-11 09:14:30 -04:00
Robert Haas
e76bcaba9c Repair breakage in VirtualXactLock.
I broke this in commit 84e3712677.  Report and
fix by Fujii Masao.
2011-10-11 07:39:09 -04:00
Robert Haas
5b9102cef2 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.
2011-10-10 13:38:32 -04:00
Robert Haas
e8bb5f7245 Improve documentation of how to fiddle with SCSI drives on FreeBSD.
Per suggestions from Achilleas Mantzios and Greg Smith.
2011-10-10 13:21:35 -04:00
Robert Haas
322019ed2e Fix typo in docs for libpq keepalives_count option.
Shigehiro Honda
2011-10-10 13:10:47 -04:00
Robert Haas
48a62278ed Add doc index entry for pg_resetxlog.
Fujii Masao
2011-10-10 13:05:25 -04:00
Robert Haas
61dd737c29 Document DELETE/UPDATE command tag behavior when triggers are involved.
Marti Raudsepp
2011-10-10 12:53:04 -04:00
Robert Haas
0ff7ea5d3c Some minor wordsmithing for the cascading replication documentation.
Per report from Thom Brown.
2011-10-10 10:16:28 -04:00
Bruce Momjian
e26d5fcd94 Mark GUC external_pid_file's default as '' in postgresql.conf, rather
than '(none)'.
2011-10-10 08:17:10 -04:00
Robert Haas
3e9a2672d2 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
2011-10-10 08:01:40 -04:00
Bruce Momjian
0dc3f57ba0 In pg_upgrade, add -o/-O options to pass parameters to the servers, and
document its use for config-only directory installs.
2011-10-10 07:44:11 -04:00
Robert Haas
c0f03aae04 Fix ALTER TABLE ONLY .. DROP CONSTRAINT.
When I consolidated two copies of the HOT-chain search logic in commit
4da99ea423, 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.
2011-10-09 23:39:52 -04:00
Robert Haas
c980426c69 Revert accidental change to pg_config_manual.h.
This was broken in commit 53dbc27c62, 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.
2011-10-09 22:20:44 -04:00
Heikki Linnakangas
d50e125194 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.
2011-10-09 18:59:34 +03:00
Tom Lane
cbfa92c23c 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.
2011-10-09 00:21:08 -04:00
Tom Lane
45401c1c25 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 ...
2011-10-08 23:45:58 -04:00