Tom Lane [Wed, 20 Jul 2011 17:03:12 +0000 (13:03 -0400)]
Rewrite libxml error handling to be more robust.
libxml reports some errors (like invalid xmlns attributes) via the error
handler hook, but still returns a success indicator to the library caller.
This causes us to miss some errors that are important to report. Since the
"generic" error handler hook doesn't know whether the message it's getting
is for an error, warning, or notice, stop using that and instead start
using the "structured" error handler hook, which gets enough information
to be useful.
While at it, arrange to save and restore the error handler hook setting in
each libxml-using function, rather than assuming we can set and forget the
hook. This should improve the odds of working nicely with third-party
libraries that also use libxml.
In passing, volatile-ize some local variables that get modified within
PG_TRY blocks. I noticed this while testing with an older gcc version
than I'd previously tried to compile xml.c with.
Florian Pflug and Tom Lane, with extensive review/testing by Noah Misch
Robert Haas [Wed, 20 Jul 2011 13:22:57 +0000 (09:22 -0400)]
Improve sepgsql and SECURITY LABEL documentation.
KaiGai Kohei, based on feedback from Yeb Havinga, with some
corrections by me.
Robert Haas [Wed, 20 Jul 2011 13:12:42 +0000 (09:12 -0400)]
Minor improvement to pg_seclabel documentation.
This is a bit more consistent with the way pg_description is
documented, and also include a useful cross-link.
Alvaro Herrera [Tue, 19 Jul 2011 18:22:42 +0000 (14:22 -0400)]
Make isolationtester more robust on locked commands
Noah Misch diagnosed the buildfarm problems in the isolation tests
partly as failure to differentiate backends properly; the old code was
using backend IDs, which is not good enough because a new backend might
use an already used ID. Use PIDs instead.
Also, the code was purposely careless about other concurrent activity,
because it isn't expected; and in fact, it doesn't affect the vast
majority of the time. However, it can be observed that autovacuum can
block tables for long enough to cause sporadic failures. The new code
accounts for that by ignoring locks held by processes not explicitly
declared in our spec file.
Author: Noah Misch
Alvaro Herrera [Tue, 19 Jul 2011 17:07:16 +0000 (13:07 -0400)]
Increase deadlock_timeout to 100ms in FK isolation tests
The previous value of 20ms is dangerously close to the time actually
spent just waiting for the deadlock to happen, so on occasion it causes
the test to fail simply because the other session didn't get to run
early enough, not managing to cause the deadlock that needs to be
detected. With this new value, it's expected that most machines on
normal load will be able to pass the test.
Author: Noah Misch
Alvaro Herrera [Tue, 19 Jul 2011 16:43:16 +0000 (12:43 -0400)]
Add expected regress output on stricter isolation levels
These new files allow the new FK tests on isolationtester to pass on the
serializable and repeatable read isolation levels (which are untested
by the buildfarm).
Author: Kevin Grittner
Reviewed by Noah Misch
Simon Riggs [Tue, 19 Jul 2011 16:21:24 +0000 (17:21 +0100)]
Remove O(N^2) performance issue with multiple SAVEPOINTs.
Subtransaction locks now released en masse at main commit, rather than
repeatedly re-scanning for locks as we ascend the nested transaction tree.
Split transaction state TBLOCK_SUBEND into two states, TBLOCK_SUBCOMMIT
and TBLOCK_SUBRELEASE to allow the commit path to be optimised using
the existing code in ResourceOwnerRelease() which appears to have been
intended for this usage, judging from comments therein.
Robert Haas [Tue, 19 Jul 2011 16:10:15 +0000 (12:10 -0400)]
Some refinement for the "fast path" lock patch.
1. In GetLockStatusData, avoid initializing instance before we've ensured
that the array is large enough. Otherwise, if repalloc moves the block
around, we're hosed.
2. Add the word "Relation" to the name of some identifiers, to avoid
assuming that the fast-path mechanism will only ever apply to relations
(though these particular parts certainly will). Some of the macros
could possibly use similar treatment, but the names are getting awfully
long already.
3. Add a missing word to comment in AtPrepare_Locks().
Robert Haas [Tue, 19 Jul 2011 14:30:03 +0000 (10:30 -0400)]
Remove superfluous variable.
Reported by Peter Eisentraut.
Simon Riggs [Tue, 19 Jul 2011 08:07:42 +0000 (09:07 +0100)]
Minor doc additions for cascading replication.
Simon Riggs [Tue, 19 Jul 2011 07:59:55 +0000 (08:59 +0100)]
Introduce sending servers as new category for replication params
Fujii Masao
Peter Eisentraut [Tue, 19 Jul 2011 05:02:34 +0000 (08:02 +0300)]
Fix typo
Peter Eisentraut [Tue, 19 Jul 2011 04:57:38 +0000 (07:57 +0300)]
Put inline declaration before return type
gcc -Wextra complains that the other way around is obsolescent, and
this was the only place where it was written in this order.
Peter Eisentraut [Tue, 19 Jul 2011 04:50:10 +0000 (07:50 +0300)]
Change debug message from ereport to elog
Simon Riggs [Tue, 19 Jul 2011 02:40:03 +0000 (03:40 +0100)]
Cascading replication feature for streaming log-based replication.
Standby servers can now have WALSender processes, which can work with
either WALReceiver or archive_commands to pass data. Fully updated
docs, including new conceptual terms of sending server, upstream and
downstream servers. WALSenders terminated when promote to master.
Fujii Masao, review, rework and doc rewrite by Simon Riggs
Tom Lane [Mon, 18 Jul 2011 18:46:27 +0000 (14:46 -0400)]
Add GET STACKED DIAGNOSTICS plpgsql command to retrieve exception info.
This is more SQL-spec-compliant, more easily extensible, and better
performing than the old method of inventing special variables.
Pavel Stehule, reviewed by Shigeru Hanada and David Wheeler
Michael Meskes [Mon, 18 Jul 2011 16:56:15 +0000 (18:56 +0200)]
Adapted expected result for latest change to ecpglib.
Robert Haas [Mon, 18 Jul 2011 15:02:48 +0000 (11:02 -0400)]
Avoid index rebuild for no-rewrite ALTER TABLE .. ALTER TYPE.
Noah Misch. Review and minor cosmetic changes by me.
Michael Meskes [Mon, 18 Jul 2011 14:25:27 +0000 (16:25 +0200)]
Made ecpglib write double with a precision of 15 digits.
Patch originally by Akira Kurosawa <kurosawa-akira@mxc.nes.nec.co.jp>.
Robert Haas [Sat, 28 May 2011 23:52:00 +0000 (19:52 -0400)]
Create a "fast path" for acquiring weak relation locks.
When an AccessShareLock, RowShareLock, or RowExclusiveLock is requested
on an unshared database relation, and we can verify that no conflicting
locks can possibly be present, record the lock in a per-backend queue,
stored within the PGPROC, rather than in the primary lock table. This
eliminates a great deal of contention on the lock manager LWLocks.
This patch also refactors the interface between GetLockStatusData() and
pg_lock_status() to be a bit more abstract, so that we don't rely so
heavily on the lock manager's internal representation details. The new
fast path lock structures don't have a LOCK or PROCLOCK structure to
return, so we mustn't depend on that for purposes of listing outstanding
locks.
Review by Jeff Davis.
Peter Eisentraut [Mon, 18 Jul 2011 04:30:00 +0000 (07:30 +0300)]
Remove claim that the project is not represented in the SQL working group
We have a few people involved there now.
Peter Eisentraut [Mon, 18 Jul 2011 04:26:30 +0000 (07:26 +0300)]
Note that information_schema.sql_languages was removed in SQL:2008
Robert Haas [Mon, 18 Jul 2011 03:23:55 +0000 (23:23 -0400)]
Add pg_opfamily_is_visible.
We already have similar functions for many other object types, including
operator classes, so it seems like we should have this one, too.
Extracted from a larger patch by Josh Kupershmidt
Tom Lane [Sun, 17 Jul 2011 19:05:44 +0000 (15:05 -0400)]
Further thoughts about temp_file_limit patch.
Move FileClose's decrement of temporary_files_size up, so that it will be
executed even if elog() throws an error. This is reasonable since if the
unlink() fails, the fact the file is still there is not our fault, and we
are going to forget about it anyhow. So we won't count it against
temp_file_limit anymore.
Update fileSize and temporary_files_size correctly in FileTruncate.
We probably don't have any places that truncate temp files, but fd.c
surely should not assume that.
Tom Lane [Sun, 17 Jul 2011 18:19:31 +0000 (14:19 -0400)]
Add temp_file_limit GUC parameter to constrain temporary file space usage.
The limit is enforced against the total amount of temp file space used by
each session.
Mark Kirkwood, reviewed by Cédric Villemain and Tatsuo Ishii
Tom Lane [Sat, 16 Jul 2011 20:46:55 +0000 (16:46 -0400)]
Improve make_subplanTargetList to avoid including Vars unnecessarily.
If a Var was used only in a GROUP BY expression, the previous
implementation would include the Var by itself (as well as the expression)
in the generated targetlist. This wouldn't affect the efficiency of the
scan/join part of the plan at all, but it could result in passing
unnecessarily-wide rows through sorting and grouping steps. It turns out
to take only a little more code, and not noticeably more time, to generate
a tlist without such redundancy, so let's do that. Per a recent gripe from
HarmeekSingh Bedi.
Tom Lane [Sat, 16 Jul 2011 18:21:12 +0000 (14:21 -0400)]
Replace errdetail("%s", ...) with errdetail_internal("%s", ...).
There may be some other places where we should use errdetail_internal,
but they'll have to be evaluated case-by-case. This commit just hits
a bunch of places where invoking gettext is obviously a waste of cycles.
Tom Lane [Sat, 16 Jul 2011 17:49:44 +0000 (13:49 -0400)]
Use errdetail_internal() for SSI transaction cancellation details.
Per discussion, these seem too technical to be worth translating.
Kevin Grittner
Tom Lane [Sat, 16 Jul 2011 17:41:48 +0000 (13:41 -0400)]
Add an errdetail_internal() ereport auxiliary routine.
This function supports untranslated detail messages, in the same way that
errmsg_internal supports untranslated primary messages. We've needed this
for some time IMO, but discussion of some cases in the SSI code provided
the impetus to actually add it.
Kevin Grittner, with minor adjustments by me
Magnus Hagander [Sat, 16 Jul 2011 17:58:53 +0000 (19:58 +0200)]
Fix SSPI login when multiple roundtrips are required
This fixes SSPI login failures showing "The function
requested is not supported", often showing up when connecting
to localhost. The reason was not properly updating the SSPI
handle when multiple roundtrips were required to complete the
authentication sequence.
Report and analysis by Ahmed Shinwari, patch by Magnus Hagander
Alvaro Herrera [Fri, 15 Jul 2011 22:43:33 +0000 (18:43 -0400)]
Set different deadlock_timeout on each session in new isolation tests
This provides deterministic deadlock-detection ordering for new
isolation tests, fixing the sporadic failures in them.
Author: Noah Misch
Peter Eisentraut [Fri, 15 Jul 2011 18:11:14 +0000 (21:11 +0300)]
Set information_schema.tables.commit_action to null
The commit action of temporary tables is currently not cataloged, so
we can't easily show it. The previous value was outdated from before
we had different commit actions.
Bruce Momjian [Fri, 15 Jul 2011 17:12:36 +0000 (13:12 -0400)]
Doc clarification for pg_locks columns.
Florian Pflug
Heikki Linnakangas [Fri, 15 Jul 2011 09:11:17 +0000 (12:11 +0300)]
Change the way the offset of downlink is stored in GISTInsertStack.
GISTInsertStack.childoffnum used to mean "offset of the downlink in this
node, pointing to the child node in the stack". It's now replaced with
downlinkoffnum, which means "offset of the downlink in the parent of this
node". gistFindPath() already used childoffnum with this new meaning, and
had an extra step at the end to pull all the childoffnum values down one
node in the stack, to adjust the stack for the meaning that childoffnum had
elsewhere. That's no longer required.
The reason to do this now is this new representation is more convenient for
the GiST fast build patch that Alexander Korotkov is working on.
While we're at it, replace the linked list used in gistFindPath with a
standard List, and make gistFindPath() static.
Alexander Korotkov, with some changes by me.
Heikki Linnakangas [Fri, 15 Jul 2011 07:54:56 +0000 (10:54 +0300)]
Fix two ancient bugs in GiST code to re-find a parent after page split:
First, when following a right-link, we incorrectly marked the current page
as the parent of the right sibling. In reality, the parent of the right page
is the same as the parent of the current page (or some page to the right of
it, gistFindCorrectParent() will sort that out).
Secondly, when we follow a right-link, we must prepend, not append, the right
page to our list of pages to visit. That's because we assume that once we
hit a leaf page in the list, all the rest are leaf pages too, and give up.
To hit these bugs, you need concurrent actions and several unlucky accidents.
Another backend must split the root page, while you're in process of
splitting a lower-level page. Furthermore, while you scan the internal nodes
to re-find the parent, another backend needs to again split some more internal
pages. Even then, the bugs don't necessarily manifest as user-visible errors
or index corruption.
While we're at it, make the error reporting a bit better if gistFindPath()
fails to re-find the parent. It used to be an assertion, but an elog() seems
more appropriate.
Backpatch to all supported branches.
Bruce Momjian [Thu, 14 Jul 2011 21:59:12 +0000 (17:59 -0400)]
In docs, start window function sentence with "The asterisk (*)" rather
than "*"; it is confusing to start a sentence with a symbol.
Tom Lane [Thu, 14 Jul 2011 21:30:57 +0000 (17:30 -0400)]
In planner, don't assume that empty parent tables aren't really empty.
There's a heuristic in estimate_rel_size() to clamp the minimum size
estimate for a table to 10 pages, unless we can see that vacuum or analyze
has been run (and set relpages to something nonzero, so this will always
happen for a table that's actually empty). However, it would be better
not to do this for inheritance parent tables, which very commonly are
really empty and can be expected to stay that way. Per discussion of a
recent pgsql-performance report from Anish Kejariwal. Also prevent it
from happening for indexes (although this is more in the nature of
documentation, since CREATE INDEX normally initializes relpages to
something nonzero anyway).
Back-patch to 9.0, because the ability to collect statistics across a
whole inheritance tree has improved the planner's estimates to the point
where this relatively small error makes a significant difference. In the
referenced report, merge or hash joins were incorrectly estimated as
cheaper than a nestloop with inner indexscan on the inherited table.
That was less likely before 9.0 because the lack of inherited stats would
have resulted in a default (and rather pessimistic) estimate of the cost
of a merge or hash join.
Alvaro Herrera [Thu, 14 Jul 2011 17:43:01 +0000 (13:43 -0400)]
Fix broken markup
Peter Eisentraut [Thu, 14 Jul 2011 16:18:17 +0000 (19:18 +0300)]
Set information_schema.routines.is_udt_dependent to NO
It previously said YES, but that is incorrect.
Peter Eisentraut [Thu, 14 Jul 2011 16:07:39 +0000 (19:07 +0300)]
Small update on suggested startup file locations
Debian/Ubuntu don't have a /etc/rc.d/ directory, so add some
alternative names as suggestions.
Peter Eisentraut [Thu, 14 Jul 2011 15:28:07 +0000 (18:28 +0300)]
Remove README.mb.big5 and README.mb.jp
They were wildly outdated.
Tom Lane [Thu, 14 Jul 2011 00:23:09 +0000 (20:23 -0400)]
Update some comments to clarify who does what in targetlist creation.
No code changes; just avoid blaming query_planner for things it doesn't
really do.
Peter Eisentraut [Wed, 13 Jul 2011 17:30:40 +0000 (20:30 +0300)]
Implement information schema interval_type columns
Also correct reporting of interval precision when field restrictions
are specified in the typmod.
Bruce Momjian [Wed, 13 Jul 2011 15:41:39 +0000 (11:41 -0400)]
Use clearer woring for pg_locks columns, identifying which items are
related to lock objects.
Alvaro Herrera [Wed, 13 Jul 2011 05:10:26 +0000 (01:10 -0400)]
Blind attempt at fixing isolation_tester on Win32
Tom Lane [Tue, 12 Jul 2011 22:23:55 +0000 (18:23 -0400)]
Avoid listing ungrouped Vars in the targetlist of Agg-underneath-Window.
Regular aggregate functions in combination with, or within the arguments
of, window functions are OK per spec; they have the semantics that the
aggregate output rows are computed and then we run the window functions
over that row set. (Thus, this combination is not really useful unless
there's a GROUP BY so that more than one aggregate output row is possible.)
The case without GROUP BY could fail, as recently reported by Jeff Davis,
because sloppy construction of the Agg node's targetlist resulted in extra
references to possibly-ungrouped Vars appearing outside the aggregate
function calls themselves. See the added regression test case for an
example.
Fixing this requires modifying the API of flatten_tlist and its underlying
function pull_var_clause. I chose to make pull_var_clause's API for
aggregates identical to what it was already doing for placeholders, since
the useful behaviors turn out to be the same (error, report node as-is, or
recurse into it). I also tightened the error checking in this area a bit:
if it was ever valid to see an uplevel Var, Aggref, or PlaceHolderVar here,
that was a long time ago, so complain instead of ignoring them.
Backpatch into 9.1. The failure exists in 8.4 and 9.0 as well, but seeing
that it only occurs in a basically-useless corner case, it doesn't seem
worth the risks of changing a function API in a minor release. There might
be third-party code using pull_var_clause.
Alvaro Herrera [Tue, 12 Jul 2011 20:35:09 +0000 (16:35 -0400)]
Add support for blocked commands in isolationtester
This enables us to test that blocking commands (such as foreign keys
checks that conflict with some other lock) act as intended. The set of
tests that this adds is pretty minimal, but can easily be extended by
adding new specs.
The intention is that this will serve as a basis for ensuring that
further tweaks of locking implementation preserve (or improve) existing
behavior.
Author: Noah Misch
Magnus Hagander [Tue, 12 Jul 2011 14:25:08 +0000 (15:25 +0100)]
perltidy run over msvc build system
Peter Eisentraut [Tue, 12 Jul 2011 04:13:51 +0000 (07:13 +0300)]
Make pg_upgrade output more consistent with project style
Add errno-based output to error messages where appropriate, reformat
blocks to about 72 characters per line, use spaces instead of tabs for
indentation, and other style adjustments.
Bruce Momjian [Tue, 12 Jul 2011 00:32:29 +0000 (20:32 -0400)]
Add C comment that txid_current() assigns an XID if one is not already
assigned.
Peter Eisentraut [Mon, 11 Jul 2011 15:49:44 +0000 (18:49 +0300)]
Fix and clarify information schema interval_precision fields
The fields were previously wrongly typed as character_data; change to
cardinal_number. Update the documentation and the implementation to
show more clearly that this applies to a feature not available in
PostgreSQL, rather than just not yet being implemented in the
information schema.
Andrew Dunstan [Mon, 11 Jul 2011 15:12:34 +0000 (11:12 -0400)]
Improve wording of documentation on default privileges.
Per recent -hackers discussion.
Robert Haas [Sat, 9 Jul 2011 02:19:30 +0000 (22:19 -0400)]
Try to acquire relation locks in RangeVarGetRelid.
In the previous coding, we would look up a relation in RangeVarGetRelid,
lock the resulting OID, and then AcceptInvalidationMessages(). While
this was sufficient to ensure that we noticed any changes to the
relation definition before building the relcache entry, it didn't
handle the possibility that the name we looked up no longer referenced
the same OID. This was particularly problematic in the case where a
table had been dropped and recreated: we'd latch on to the entry for
the old relation and fail later on. Now, we acquire the relation lock
inside RangeVarGetRelid, and retry the name lookup if we notice that
invalidation messages have been processed meanwhile. Many operations
that would previously have failed with an error in the presence of
concurrent DDL will now succeed.
There is a good deal of work remaining to be done here: many callers
of RangeVarGetRelid still pass NoLock for one reason or another. In
addition, nothing in this patch guards against the possibility that
the meaning of an unqualified name might change due to the creation
of a relation in a schema earlier in the user's search path than the
one where it was previously found. Furthermore, there's nothing at
all here to guard against similar race conditions for non-relations.
For all that, it's a start.
Noah Misch and Robert Haas
Tom Lane [Fri, 8 Jul 2011 21:02:58 +0000 (17:02 -0400)]
Fix another oversight in logging of changes in postgresql.conf settings.
We were using GetConfigOption to collect the old value of each setting,
overlooking the possibility that it didn't exist yet. This does happen
in the case of adding a new entry within a custom variable class, as
exhibited in bug #6097 from Maxim Boguk.
To fix, add a missing_ok parameter to GetConfigOption, but only in 9.1
and HEAD --- it seems possible that some third-party code is using that
function, so changing its API in a minor release would cause problems.
In 9.0, create a near-duplicate function instead.
Heikki Linnakangas [Fri, 8 Jul 2011 15:27:49 +0000 (18:27 +0300)]
Introduce a pipe between postmaster and each backend, which can be used to
detect postmaster death. Postmaster keeps the write-end of the pipe open,
so when it dies, children get EOF in the read-end. That can conveniently
be waited for in select(), which allows eliminating some of the polling
loops that check for postmaster death. This patch doesn't yet change all
the loops to use the new mechanism, expect a follow-on patch to do that.
This changes the interface to WaitLatch, so that it takes as argument a
bitmask of events that it waits for. Possible events are latch set, timeout,
postmaster death, and socket becoming readable or writeable.
The pipe method behaves slightly differently from the kill() method
previously used in PostmasterIsAlive() in the case that postmaster has died,
but its parent has not yet read its exit code with waitpid(). The pipe
returns EOF as soon as the process dies, but kill() continues to return
true until waitpid() has been called (IOW while the process is a zombie).
Because of that, change PostmasterIsAlive() to use the pipe too, otherwise
WaitLatch() would return immediately with WL_POSTMASTER_DEATH, while
PostmasterIsAlive() would claim it's still alive. That could easily lead to
busy-waiting while postmaster is in zombie state.
Peter Geoghegan with further changes by me, reviewed by Fujii Masao and
Florian Pflug.
Heikki Linnakangas [Fri, 8 Jul 2011 14:28:27 +0000 (17:28 +0300)]
Fix one overflow and one signedness error, caused by the patch to calculate
OLDSERXID_MAX_PAGE based on BLCKSZ. MSVC compiler warned about these.
Peter Eisentraut [Fri, 8 Jul 2011 14:04:49 +0000 (17:04 +0300)]
Add item about Clang support to 9.1 release notes
Peter Eisentraut [Fri, 8 Jul 2011 04:37:04 +0000 (07:37 +0300)]
Message style improvements
Tom Lane [Thu, 7 Jul 2011 23:34:19 +0000 (19:34 -0400)]
Update examples for string-related functions.
In the example for decode(), show the bytea result in hex format,
since that's now the default. Use an E'' string in the example for
quote_literal(), so that it works regardless of the
standard_conforming_strings setting. On the functions-for-binary-strings
page, leave the examples as-is for readability, but add a note pointing out
that they are shown in escape format. Per comments from Thom Brown.
Also, improve the description for encode() and decode() a tad.
Backpatch to 9.0, where bytea_output was introduced.
Tom Lane [Thu, 7 Jul 2011 21:55:14 +0000 (17:55 -0400)]
Update 9.1 release notes to reflect commits through today.
Heikki Linnakangas [Thu, 7 Jul 2011 21:36:30 +0000 (00:36 +0300)]
There's a small window wherein a transaction is committed but not yet
on the finished list, and we shouldn't flag it as a potential conflict
if so. We can also skip adding a doomed transaction to the list of
possible conflicts because we know it won't commit.
Dan Ports and Kevin Grittner.
Heikki Linnakangas [Thu, 7 Jul 2011 19:35:09 +0000 (22:35 +0300)]
SSI has a race condition, where the order of commit sequence numbers of
transactions might not match the order the work done in those transactions
become visible to others. The logic in SSI, however, assumed that it does.
Fix that by having two sequence numbers for each serializable transaction,
one taken before a transaction becomes visible to others, and one after it.
This is easier than trying to make the the transition totally atomic, which
would require holding ProcArrayLock and SerializableXactHashLock at the same
time. By using prepareSeqNo instead of commitSeqNo in a few places where
commit sequence numbers are compared, we can make those comparisons err on
the safe side when we don't know for sure which committed first.
Per analysis by Kevin Grittner and Dan Ports, but this approach to fix it
is different from the original patch.
Peter Eisentraut [Thu, 7 Jul 2011 18:21:57 +0000 (21:21 +0300)]
Fix use of unportable %m format
Tom Lane [Thu, 7 Jul 2011 19:10:32 +0000 (15:10 -0400)]
Reclassify replication-related GUC variables as "master" and "standby".
Per discussion, this structure seems more understandable than what was
there before. Make config.sgml and postgresql.conf.sample agree.
In passing do a bit of editorial work on the variable descriptions.
Robert Haas [Thu, 7 Jul 2011 19:05:21 +0000 (15:05 -0400)]
Adjust OLDSERXID_MAX_PAGE based on BLCKSZ.
The value when BLCKSZ = 8192 is unchanged, but with larger-than-normal
block sizes we might need to crank things back a bit, as we'll have
more entries per page than normal in that case.
Kevin Grittner
Tom Lane [Thu, 7 Jul 2011 17:14:46 +0000 (13:14 -0400)]
Finish disabling reduced-lock-levels-for-DDL feature.
Previous patch only covered the ALTER TABLE changes, not changes in other
commands; and it neglected to revert the documentation changes.
Heikki Linnakangas [Thu, 7 Jul 2011 15:04:37 +0000 (18:04 +0300)]
Fix a bug with SSI and prepared transactions:
If there's a dangerous structure T0 ---> T1 ---> T2, and T2 commits first,
we need to abort something. If T2 commits before both conflicts appear,
then it should be caught by OnConflict_CheckForSerializationFailure. If
both conflicts appear before T2 commits, it should be caught by
PreCommit_CheckForSerializationFailure. But that is actually run when
T2 *prepares*. Fix that in OnConflict_CheckForSerializationFailure, by
treating a prepared T2 as if it committed already.
This is mostly a problem for prepared transactions, which are in prepared
state for some time, but also for regular transactions because they also go
through the prepared state in the SSI code for a short moment when they're
committed.
Kevin Grittner and Dan Ports
Andrew Dunstan [Thu, 7 Jul 2011 07:53:49 +0000 (03:53 -0400)]
Fix comments over eagerly c&p'd.
Andrew Dunstan [Wed, 6 Jul 2011 22:45:29 +0000 (18:45 -0400)]
Reimplement pgbison and pgflex as perl scripts instead of bat files.
In the process, remove almost all knowledge of individual .y and .l files,
and instead get invocation settings from the relevant make files.
The exception is plpgsql's gram.y, which has a target with a different
name. It is hoped that this will make the scripts more future-proof,
so that they won't require adjustment every time we add a new .l or .y
file.
The logic is also notably less tortured than that forced on us
by the idiosyncrasies of the Windows command processor.
The .bat files are kept as thin wrappers for the perl scripts.
Tom Lane [Wed, 6 Jul 2011 18:53:16 +0000 (14:53 -0400)]
Remove assumptions that not-equals operators cannot be in any opclass.
get_op_btree_interpretation assumed this in order to save some duplication
of code, but it's not true in general anymore because we added <> support
to btree_gist. (We still assume it for btree opclasses, though.)
Also, essentially the same logic was baked into predtest.c. Get rid of
that duplication by generalizing get_op_btree_interpretation so that it
can be used by predtest.c.
Per bug report from Denis de Bernardy and investigation by Jeff Davis,
though I didn't use Jeff's patch exactly as-is.
Back-patch to 9.1; we do not support this usage before that.
Robert Haas [Wed, 6 Jul 2011 15:45:13 +0000 (11:45 -0400)]
Add \ir command to psql.
\ir is short for "include relative"; when used from a script, the
supplied pathname will be interpreted relative to the input file,
rather than to the current working directory.
Gurjeet Singh, reviewed by Josh Kupershmidt, with substantial further
cleanup by me.
Robert Haas [Wed, 6 Jul 2011 14:11:20 +0000 (10:11 -0400)]
Attempt to standardize formatting of psql queries.
Most queries end with a backslash, but not a newline, so try to
standardize on that, for the convenience of people using psql -E to
extract queries.
Josh Kupershmidt, reviewed by Merlin Moncure.
Tom Lane [Tue, 5 Jul 2011 22:46:03 +0000 (18:46 -0400)]
Make the file_fdw validator check that a filename option has been provided.
This was already a runtime failure condition, but it's better to check
at validation time if possible. Lightly modified version of a patch
by Shigeru Hanada.
Tom Lane [Tue, 5 Jul 2011 22:21:12 +0000 (18:21 -0400)]
Call FDW validator functions even when the options list is empty.
This is useful since a validator might want to require certain options
to be provided. The passed array is an empty text array in this case.
Per suggestion by Laurenz Albe, though this is not quite his patch.
Peter Eisentraut [Tue, 5 Jul 2011 19:56:55 +0000 (22:56 +0300)]
Message style improvements of errmsg_internal() calls
Tom Lane [Tue, 5 Jul 2011 19:54:00 +0000 (15:54 -0400)]
Restructure foreign data wrapper chapter so it has more than one section.
As noted by Laurenz Albe, our SGML tools deal rather oddly with chapters
having just one <sect1>. Perhaps the tooling could be fixed, but really
the design of this chapter's introduction is pretty bogus anyhow. Split
it into a true introduction and a <sect1> about the FDW functions, so
that it reads better and dodges the lack-of-a-chapter-TOC problem.
Peter Eisentraut [Tue, 5 Jul 2011 19:32:12 +0000 (22:32 +0300)]
Postgres -> PostgreSQL in error message
Tom Lane [Tue, 5 Jul 2011 19:38:18 +0000 (15:38 -0400)]
Improve documentation about foreign data wrapper validator functions.
Modified version of a patch by Shigeru Hanada.
Tom Lane [Tue, 5 Jul 2011 16:04:40 +0000 (12:04 -0400)]
Fix psql's counting of script file line numbers during COPY.
handleCopyIn incremented pset.lineno for each line of COPY data read from
a file. This is correct when reading from the current script file (i.e.,
we are doing COPY FROM STDIN followed by in-line data), but it's wrong if
the data is coming from some other file. Per bug #6083 from Steve Haslam.
Back-patch to all supported versions.
Magnus Hagander [Tue, 5 Jul 2011 07:45:19 +0000 (09:45 +0200)]
Fix typo in sslmode documentation
Per bug #6089, noted by Sidney Cadot
Peter Eisentraut [Mon, 4 Jul 2011 21:01:35 +0000 (00:01 +0300)]
Message style tweaks
Peter Eisentraut [Mon, 4 Jul 2011 21:00:14 +0000 (00:00 +0300)]
Small documentation tweaks
Peter Eisentraut [Mon, 4 Jul 2011 20:09:42 +0000 (23:09 +0300)]
Set user_defined_types.data_type to null
On re-reading the standard, this field is only used for distinct or
reference types.
Heikki Linnakangas [Mon, 4 Jul 2011 19:30:27 +0000 (22:30 +0300)]
Clarify that you need ActiveState perl 5.8 *or later* to build on Windows.
Alvaro Herrera [Wed, 23 Feb 2011 17:18:09 +0000 (14:18 -0300)]
Move Trigger and TriggerDesc structs out of rel.h into a new reltrigger.h
This lets us stop including rel.h into execnodes.h, which is a widely
used header.
Alvaro Herrera [Mon, 4 Jul 2011 18:28:05 +0000 (14:28 -0400)]
Don't try to use a constraint name as domain name
The bug that caused this to be discovered is that the code was trying to
dereference a NULL or ill-defined pointer, as reported by Michael Mueller;
but what it was doing was wrong anyway, per Heikki.
This patch is Heikki's suggested fix.
Peter Eisentraut [Mon, 4 Jul 2011 15:03:17 +0000 (18:03 +0300)]
Remove unused variable to silence compiler warning
Tom Lane [Mon, 4 Jul 2011 14:35:52 +0000 (10:35 -0400)]
Remove missed reference to SilentMode.
Heikki Linnakangas [Mon, 4 Jul 2011 11:35:44 +0000 (14:35 +0300)]
Remove silent_mode. You get the same functionality with "pg_ctl -l
postmaster.log", or nohup.
There was a small issue with LINUX_OOM_ADJ and silent_mode, namely that with
silent_mode the postmaster process incorrectly used the OOM settings meant
for backend processes. We certainly could've fixed that directly, but since
silent_mode was redundant anyway, we might as well just remove it.
Simon Riggs [Mon, 4 Jul 2011 10:09:51 +0000 (11:09 +0100)]
Alter test results to comply with new ALTER TABLE behaviour.
Simon Riggs [Mon, 4 Jul 2011 08:31:40 +0000 (09:31 +0100)]
Reset ALTER TABLE lock levels to AccessExclusiveLock in all cases.
Locks on inheritance parent remain at lower level, as they were before.
Remove entry from 9.1 release notes.
Tom Lane [Mon, 4 Jul 2011 02:12:14 +0000 (22:12 -0400)]
Fix omissions in documentation of the pg_roles view.
Somehow, column rolconfig got removed from the documentation of the
pg_roles view in the 9.0 cycle, although the column is actually still
there. In 9.1, we'd also forgotten to document the rolreplication column.
Spotted by Sakamoto Masahiko.
Tom Lane [Sun, 3 Jul 2011 23:03:51 +0000 (19:03 -0400)]
Put comments on the installable procedural languages.
Per suggestion from Josh Kupershmidt.
Robert Haas [Sun, 3 Jul 2011 21:34:47 +0000 (17:34 -0400)]
Fix bugs in relpersistence handling during table creation.
Unlike the relistemp field which it replaced, relpersistence must be
set correctly quite early during the table creation process, as we
rely on it quite early on for a number of purposes, including security
checks. Normally, this is set based on whether the user enters CREATE
TABLE, CREATE UNLOGGED TABLE, or CREATE TEMPORARY TABLE, but a
relation may also be made implicitly temporary by creating it in
pg_temp. This patch fixes the handling of that case, and also
disables creation of unlogged tables in temporary tablespace (such
table indeed skip WAL-logging, but we reject an explicit
specification) and creation of relations in the temporary schemas of
other sessions (which is not very sensible, and didn't work right
anyway).
Report by Amit Khandekar.
Tom Lane [Sun, 3 Jul 2011 17:55:02 +0000 (13:55 -0400)]
Make distprep and *clean build targets recurse into all subdirectories.
Certain subdirectories do not get built if corresponding options are not
selected at configure time. However, "make distprep" should visit such
directories anyway, so that constructing derived files to be included in
the tarball happens without requiring all configure options to be given
in the tarball build script. Likewise, it's better if cleanup actions
unconditionally visit all directories (for example, this ensures proper
cleanup if someone has done a manual make in such a subdirectory).
To handle this, set up a convention that subdirectories that are
conditionally included in SUBDIRS should be added to ALWAYS_SUBDIRS
instead when they are excluded.
Back-patch to 9.1, so that plpython's spiexceptions.h will get provided
in 9.1 tarballs. There don't appear to be any instances where distprep
actions got missed in previous releases, and anyway this fix requires
gmake 3.80 so we don't want to apply it before 9.1.
Andrew Dunstan [Sun, 3 Jul 2011 14:36:56 +0000 (10:36 -0400)]
Fix bat file quoting of %ENV.
Magnus Hagander [Sun, 3 Jul 2011 11:15:58 +0000 (13:15 +0200)]
Mark pg_stat_reset_shared as strict
This is the proper fix for bug #6082 about
pg_stat_reset_shared(NULL) causing a crash, and it reverts
commit
79aa44536f3980d324f486504cde643ce23bf5c6 on head.
The workaround of throwing an error from inside the function is
left on backbranches (including 9.1) since this change requires
a new initdb.
Tom Lane [Sat, 2 Jul 2011 00:57:34 +0000 (20:57 -0400)]
Suppress compiler warning about potentially uninitialized variable.
Maybe some compilers are smart enough to not complain about the previous
coding ... but mine isn't.
Bruce Momjian [Fri, 1 Jul 2011 22:36:00 +0000 (18:36 -0400)]
In the pg_upgrade docs, move 50432 port mention to the place where we
talk about client access.
Bruce Momjian [Fri, 1 Jul 2011 22:17:12 +0000 (18:17 -0400)]
Change pg_upgrade to use port 50432 by default to avoid unintended
client connections during the upgrade. Also rename data/bin/port
environment variables to being with 'PG'. Also no longer honor PGPORT.