]> granicus.if.org Git - postgresql/log
postgresql
13 years agoCreate VXID locks "lazily" in the main lock table.
Robert Haas [Thu, 4 Aug 2011 16:38:33 +0000 (12:38 -0400)]
Create VXID locks "lazily" in the main lock table.

Instead of entering them on transaction startup, we materialize them
only when someone wants to wait, which will occur only during CREATE
INDEX CONCURRENTLY.  In Hot Standby mode, the startup process must also
be able to probe for conflicting VXID locks, but the lock need never be
fully materialized, because the startup process does not use the normal
lock wait mechanism.  Since most VXID locks never need to touch the
lock manager partition locks, this can significantly reduce blocking
contention on read-heavy workloads.

Patch by me.  Review by Jeff Davis.

13 years agoTeach psql to display comments on languages and casts.
Robert Haas [Thu, 4 Aug 2011 16:22:26 +0000 (12:22 -0400)]
Teach psql to display comments on languages and casts.

The output of \dL (list languages) is fairly narrow, so we just always
display the comment.  \dC (list casts) can get fairly wide, so we only
display comments if the new \dC+ option is specified.

Josh Kupershmidt

13 years agoIn documentaiton, clarify which commands have reduced WAL volume for
Bruce Momjian [Thu, 4 Aug 2011 16:06:53 +0000 (12:06 -0400)]
In documentaiton, clarify which commands have reduced WAL volume for
wal_level = minimum.

Backpatch to 9.1 and 9.0.

13 years agoMake pgbench use erand48() rather than random().
Robert Haas [Wed, 3 Aug 2011 20:26:40 +0000 (16:26 -0400)]
Make pgbench use erand48() rather than random().

glibc renders random() thread-safe by wrapping a futex lock around it;
testing reveals that this limits the performance of pgbench on machines
with many CPU cores.  Rather than switching to random_r(), which is
only available on GNU systems and crashes unless you use undocumented
alchemy to initialize the random state properly, switch to our built-in
implementation of erand48(), which is both thread-safe and concurrent.

Since the list of reasons not to use the operating system's erand48()
is getting rather long, rename ours to pg_erand48() (and similarly
for our implementations of lrand48() and srand48()) and just always
use those.  We were already doing this on Cygwin anyway, and the
glibc implementation is not quite thread-safe, so pgbench wouldn't
be able to use that either.

Per discussion with Tom Lane.

13 years agoMove CheckRecoveryConflictDeadlock() call to a safer place.
Tom Lane [Tue, 2 Aug 2011 19:16:29 +0000 (15:16 -0400)]
Move CheckRecoveryConflictDeadlock() call to a safer place.

This kluge was inserted in a spot apparently chosen at random: the lock
manager's state is not yet fully set up for the wait, and in particular
LockWaitCancel hasn't been armed by setting lockAwaited, so the ProcLock
will not get cleaned up if the ereport is thrown.  This seems to not cause
any observable problem in trivial test cases, because LockReleaseAll will
silently clean up the debris; but I was able to cause failures with tests
involving subtransactions.

Fixes breakage induced by commit c85c941470efc44494fd7a5f426ee85fc65c268c.
Back-patch to all affected branches.

13 years agoFix incorrect initialization of ProcGlobal->startupBufferPinWaitBufId.
Tom Lane [Tue, 2 Aug 2011 17:23:52 +0000 (13:23 -0400)]
Fix incorrect initialization of ProcGlobal->startupBufferPinWaitBufId.

It was initialized in the wrong place and to the wrong value.  With bad
luck this could result in incorrect query-cancellation failures in hot
standby sessions, should a HS backend be holding pin on buffer number 1
while trying to acquire a lock.

13 years agoAvoid integer overflow when LIMIT + OFFSET >= 2^63.
Heikki Linnakangas [Tue, 2 Aug 2011 07:47:17 +0000 (10:47 +0300)]
Avoid integer overflow when LIMIT + OFFSET >= 2^63.

This fixes bug #6139 reported by Hitoshi Harada.

13 years agoMinor stylistic corrections.
Robert Haas [Mon, 1 Aug 2011 12:24:45 +0000 (08:24 -0400)]
Minor stylistic corrections.

13 years agoAdd host name resolution information to pg_hba.conf error messages
Peter Eisentraut [Sun, 31 Jul 2011 15:03:43 +0000 (18:03 +0300)]
Add host name resolution information to pg_hba.conf error messages

This is to be able to analyze issues with host names in pg_hba.conf.

13 years agoFix pg_update to properly test for the data directory's existence on
Bruce Momjian [Sat, 30 Jul 2011 05:50:18 +0000 (01:50 -0400)]
Fix pg_update to properly test for the data directory's existence on
Win32.

Backpatch to 9.1.

13 years agoReduce sinval synchronization overhead.
Robert Haas [Fri, 29 Jul 2011 20:46:13 +0000 (16:46 -0400)]
Reduce sinval synchronization overhead.

Testing shows that the overhead of acquiring and releasing
SInvalReadLock and msgNumLock on high-core count boxes can waste a lot
of CPU time and hurt performance.  This patch adds a per-backend flag
that allows us to skip all that locking in most cases.  Further
testing shows that this improves performance even when sinval traffic
is very high.

Patch by me.  Review and testing by Noah Misch.

13 years agoMove new pgbench options to correct section of --help output.
Robert Haas [Fri, 29 Jul 2011 20:43:57 +0000 (16:43 -0400)]
Move new pgbench options to correct section of --help output.

13 years agoFix pg_restore's direct-to-database mode for standard_conforming_strings.
Tom Lane [Thu, 28 Jul 2011 18:06:57 +0000 (14:06 -0400)]
Fix pg_restore's direct-to-database mode for standard_conforming_strings.

pg_backup_db.c contained a mini SQL lexer with which it tried to identify
boundaries between SQL commands, but that code was not designed to cope
with standard_conforming_strings, and would get the wrong answer if a
backslash immediately precedes a closing single quote in such a string,
as per report from Julian Mehnle.  The bug only affects direct-to-database
restores from archive files made with standard_conforming_strings = on.

Rather than complicating the code some more to try to fix that, let's just
rip it all out.  The only reason it was needed was to cope with COPY data
embedded into ordinary archive entries, which was a layout that was used
only for about the first three weeks of the archive format's existence,
and never in any production release of pg_dump.  Instead, just rely on the
archive file layout to tell us whether we're printing COPY data or not.

This bug represents a data corruption hazard in all releases in which
standard_conforming_strings can be turned on, ie 8.2 and later, so
back-patch to all supported branches.

13 years agoMinor message style adjustment
Peter Eisentraut [Wed, 27 Jul 2011 20:54:46 +0000 (23:54 +0300)]
Minor message style adjustment

13 years agoFix typo.
Robert Haas [Wed, 27 Jul 2011 15:20:07 +0000 (11:20 -0400)]
Fix typo.

Noted by Josh Kupershmidt.

13 years agoCheck to see whether libxml2 handles error context the way we expect.
Tom Lane [Tue, 26 Jul 2011 20:29:53 +0000 (16:29 -0400)]
Check to see whether libxml2 handles error context the way we expect.

It turns out to be possible to link against a libxml2.so that does this
differently than the version we configured and built against, so we need
a runtime check to avoid bizarre behavior.  Per report from Bernd Helmle.
Patch by Florian Pflug.

13 years agoAdd missing newlines at end of error messages
Peter Eisentraut [Tue, 26 Jul 2011 20:23:18 +0000 (23:23 +0300)]
Add missing newlines at end of error messages

13 years agoReplace printf format %i by %d
Peter Eisentraut [Tue, 26 Jul 2011 19:54:29 +0000 (22:54 +0300)]
Replace printf format %i by %d

They are identical, but the overwhelming majority of the code uses %d,
so standardize on that.

13 years agoOnly display column comments for relkinds that support them.
Robert Haas [Tue, 26 Jul 2011 13:52:31 +0000 (09:52 -0400)]
Only display column comments for relkinds that support them.

Josh Kupershmidt, with minor modifications by me.

13 years agoClarify which relkinds accept column comments.
Robert Haas [Tue, 26 Jul 2011 13:34:55 +0000 (09:34 -0400)]
Clarify which relkinds accept column comments.

Per discussion with Josh Kupershmidt.

13 years agoDon't build replacement getpeereid function on mingw.
Andrew Dunstan [Tue, 26 Jul 2011 03:48:44 +0000 (23:48 -0400)]
Don't build replacement getpeereid function on mingw.

Windows doesn't have Unix sockets, so it's not needed, and moreover causes compile warnings.

13 years agoSilence compiler warning about uninitialized variable.
Andrew Dunstan [Mon, 25 Jul 2011 23:37:17 +0000 (19:37 -0400)]
Silence compiler warning about uninitialized variable.

It is set correctly on the only path that uses it, but the
compiler can't know that.

13 years agoAdd some environment checks prior to sepgsql regression testing.
Robert Haas [Mon, 25 Jul 2011 14:51:02 +0000 (10:51 -0400)]
Add some environment checks prior to sepgsql regression testing.

This probably needs more work, but it's a start.

KaiGai Kohei

13 years agoImprovements to SQL/MED documentation.
Robert Haas [Mon, 25 Jul 2011 13:37:06 +0000 (09:37 -0400)]
Improvements to SQL/MED documentation.

Laurenz Albe, somewhat modified by me.

13 years agoAdd new pgbench options, --tablespace and --index-tablespace.
Robert Haas [Mon, 25 Jul 2011 13:16:14 +0000 (09:16 -0400)]
Add new pgbench options, --tablespace and --index-tablespace.

Per a request from Greg Smith.

13 years agoAdd new pgbench switch, --unlogged-tables.
Robert Haas [Mon, 25 Jul 2011 10:49:00 +0000 (06:49 -0400)]
Add new pgbench switch, --unlogged-tables.

This entails adjusting pgbench to use getopt_long() rather
than getopt().

13 years agoFix previous patch so it also works if not USE_SSL (mea culpa).
Tom Lane [Mon, 25 Jul 2011 03:29:03 +0000 (23:29 -0400)]
Fix previous patch so it also works if not USE_SSL (mea culpa).

On balance, the need to cover this case changes my mind in favor of pushing
all error-message generation duties into the two fe-secure.c routines.
So do it that way.

13 years agoImprove libpq's error reporting for SSL failures.
Tom Lane [Sun, 24 Jul 2011 20:29:07 +0000 (16:29 -0400)]
Improve libpq's error reporting for SSL failures.

In many cases, pqsecure_read/pqsecure_write set up useful error messages,
which were then overwritten with useless ones by their callers.  Fix this
by defining the responsibility to set an error message to be entirely that
of the lower-level function when using SSL.

Back-patch to 8.3; the code is too different in 8.2 to be worth the
trouble.

13 years agoUse OpenSSL's SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag.
Tom Lane [Sun, 24 Jul 2011 19:17:51 +0000 (15:17 -0400)]
Use OpenSSL's SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag.

This disables an entirely unnecessary "sanity check" that causes failures
in nonblocking mode, because OpenSSL complains if we move or compact the
write buffer.  The only actual requirement is that we not modify pending
data once we've attempted to send it, which we don't.  Per testing and
research by Martin Pihlak, though this fix is a lot simpler than his patch.

I put the same change into the backend, although it's less clear whether
it's necessary there.  We do use nonblock mode in some situations in
streaming replication, so seems best to keep the same behavior in the
backend as in libpq.

Back-patch to all supported releases.

13 years agoIn pg_upgrade on Windows, check if the directory is writable by actually
Bruce Momjian [Sun, 24 Jul 2011 05:42:45 +0000 (01:42 -0400)]
In pg_upgrade on Windows, check if the directory is writable by actually
creating and removing a file because access() doesn't work on that
platform.

Backpatch to 9.1 where this check was added.

13 years agoUnbreak Windows builds broken by EDITOR_LINENUMBER_ARG change.
Andrew Dunstan [Sat, 23 Jul 2011 23:33:17 +0000 (19:33 -0400)]
Unbreak Windows builds broken by EDITOR_LINENUMBER_ARG change.

13 years agoChange EDITOR_LINENUMBER_SWITCH to an environment variable
Peter Eisentraut [Sat, 23 Jul 2011 21:25:29 +0000 (00:25 +0300)]
Change EDITOR_LINENUMBER_SWITCH to an environment variable

Also change "switch" to "arg" because "switch" is a bit of a sloppy
term.  So the environment variable is called
PSQL_EDITOR_LINENUMBER_ARG.  Set "+" as hardcoded default value on
Unix (since "vi" is the hardcoded default editor), so many users won't
have to configure this at all.  Move the documentation around a bit to
centralize the editor configuration under environment variables,
rather than repeating bits of it under every backslash command that
invokes an editor.

13 years agoRethink behavior of CREATE OR REPLACE during CREATE EXTENSION.
Tom Lane [Sat, 23 Jul 2011 20:59:39 +0000 (16:59 -0400)]
Rethink behavior of CREATE OR REPLACE during CREATE EXTENSION.

The original implementation simply did nothing when replacing an existing
object during CREATE EXTENSION.  The folly of this was exposed by a report
from Marc Munro: if the existing object belongs to another extension, we
are left in an inconsistent state.  We should insist that the object does
not belong to another extension, and then add it to the current extension
if not already a member.

13 years agoUnbreak unlogged tables.
Robert Haas [Fri, 22 Jul 2011 20:15:43 +0000 (16:15 -0400)]
Unbreak unlogged tables.

I broke this in commit 5da79169d3e9f0fab47da03318c44075b3f824c5, which
was obviously insufficiently well tested.  Add some regression tests
in the hope of making future slip-ups more likely to be noticed.

13 years agoIn pg_upgrade, add C comment about why we don't try to do shared file
Bruce Momjian [Thu, 21 Jul 2011 21:12:35 +0000 (17:12 -0400)]
In pg_upgrade, add C comment about why we don't try to do shared file
writes for logging.

13 years agoFix PQsetvalue() to avoid possible crash when adding a new tuple.
Tom Lane [Thu, 21 Jul 2011 16:24:14 +0000 (12:24 -0400)]
Fix PQsetvalue() to avoid possible crash when adding a new tuple.

PQsetvalue unnecessarily duplicated the logic in pqAddTuple, and didn't
duplicate it exactly either --- pqAddTuple does not care what is in the
tuple-pointer array positions beyond the last valid entry, whereas the
code in PQsetvalue assumed such positions would contain NULL.  This led
to possible crashes if PQsetvalue was applied to a PGresult that had
previously been enlarged with pqAddTuple, for instance one built from a
server query.  Fix by relying on pqAddTuple instead of duplicating logic,
and not assuming anything about the contents of res->tuples[res->ntups].

Back-patch to 8.4, where PQsetvalue was introduced.

Andrew Chernow

13 years agoMake xpath() do something useful with XPath expressions that return scalars.
Tom Lane [Thu, 21 Jul 2011 15:32:46 +0000 (11:32 -0400)]
Make xpath() do something useful with XPath expressions that return scalars.

Previously, xpath() simply returned an empty array if the expression did
not yield a node set.  This is useless for expressions that return scalars,
such as one with name() at the top level.  Arrange to return the scalar
value as a single-element xml array, instead.  (String values will be
suitably escaped.)

This change will also cause xpath_exists() to return true, not false,
for such expressions.

Florian Pflug, reviewed by Radoslaw Smogura

13 years agoEnsure that xpath() escapes special characters in string values.
Tom Lane [Wed, 20 Jul 2011 22:44:09 +0000 (18:44 -0400)]
Ensure that xpath() escapes special characters in string values.

Without this it's possible for the output to not be legal XML, as
illustrated by the added regression test cases.

NB: this change will need to be called out as an incompatibility in the
9.2 release notes, since it's possible somebody was relying on the old
behavior, even though it's clearly wrong.

Florian Pflug, reviewed by Radoslaw Smogura

13 years agoIn pg_upgrade, fix the -l/log option to work on Windows.
Bruce Momjian [Wed, 20 Jul 2011 22:31:03 +0000 (18:31 -0400)]
In pg_upgrade, fix the -l/log option to work on Windows.

Also, double-quote the log file name in all places, to allow (on all
platforms) log file names with spaces.

Back patch to 9.0 and 9.1.

13 years agoIn pg_upgrade, use pg_strudup(), for consistency.
Bruce Momjian [Wed, 20 Jul 2011 20:37:17 +0000 (16:37 -0400)]
In pg_upgrade, use pg_strudup(), for consistency.

13 years agoSupport SECURITY LABEL on databases, tablespaces, and roles.
Robert Haas [Wed, 20 Jul 2011 17:18:24 +0000 (13:18 -0400)]
Support SECURITY LABEL on databases, tablespaces, and roles.

This requires a new shared catalog, pg_shseclabel.

Along the way, fix the security_label regression tests so that they
don't monkey with the labels of any pre-existing objects.  This is
unlikely to matter in practice, since only the label for the "dummy"
provider was being manipulated.  But this way still seems cleaner.

KaiGai Kohei, with fairly extensive hacking by me.

13 years agoRewrite libxml error handling to be more robust.
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

13 years agoImprove sepgsql and SECURITY LABEL documentation.
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.

13 years agoMinor improvement to pg_seclabel documentation.
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.

13 years agoMake isolationtester more robust on locked commands
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

13 years agoIncrease deadlock_timeout to 100ms in FK isolation tests
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

13 years agoAdd expected regress output on stricter isolation levels
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

13 years agoRemove O(N^2) performance issue with multiple SAVEPOINTs.
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.

13 years agoSome refinement for the "fast path" lock patch.
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().

13 years agoRemove superfluous variable.
Robert Haas [Tue, 19 Jul 2011 14:30:03 +0000 (10:30 -0400)]
Remove superfluous variable.

Reported by Peter Eisentraut.

13 years agoMinor doc additions for cascading replication.
Simon Riggs [Tue, 19 Jul 2011 08:07:42 +0000 (09:07 +0100)]
Minor doc additions for cascading replication.

13 years agoIntroduce sending servers as new category for replication params
Simon Riggs [Tue, 19 Jul 2011 07:59:55 +0000 (08:59 +0100)]
Introduce sending servers as new category for replication params

Fujii Masao

13 years agoFix typo
Peter Eisentraut [Tue, 19 Jul 2011 05:02:34 +0000 (08:02 +0300)]
Fix typo

13 years agoPut inline declaration before return type
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.

13 years agoChange debug message from ereport to elog
Peter Eisentraut [Tue, 19 Jul 2011 04:50:10 +0000 (07:50 +0300)]
Change debug message from ereport to elog

13 years agoCascading replication feature for streaming log-based replication.
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

13 years agoAdd GET STACKED DIAGNOSTICS plpgsql command to retrieve exception info.
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

13 years agoAdapted expected result for latest change to ecpglib.
Michael Meskes [Mon, 18 Jul 2011 16:56:15 +0000 (18:56 +0200)]
Adapted expected result for latest change to ecpglib.

13 years agoAvoid index rebuild for no-rewrite ALTER TABLE .. ALTER TYPE.
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.

13 years agoMade ecpglib write double with a precision of 15 digits.
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>.

13 years agoCreate a "fast path" for acquiring weak relation locks.
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.

13 years agoRemove claim that the project is not represented in the SQL working group
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.

13 years agoNote that information_schema.sql_languages was removed in SQL:2008
Peter Eisentraut [Mon, 18 Jul 2011 04:26:30 +0000 (07:26 +0300)]
Note that information_schema.sql_languages was removed in SQL:2008

13 years agoAdd pg_opfamily_is_visible.
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

13 years agoFurther thoughts about temp_file_limit patch.
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.

13 years agoAdd temp_file_limit GUC parameter to constrain temporary file space usage.
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

13 years agoImprove make_subplanTargetList to avoid including Vars unnecessarily.
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.

13 years agoReplace errdetail("%s", ...) with errdetail_internal("%s", ...).
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.

13 years agoUse errdetail_internal() for SSI transaction cancellation details.
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

13 years agoAdd an errdetail_internal() ereport auxiliary routine.
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

13 years agoFix SSPI login when multiple roundtrips are required
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

13 years agoSet different deadlock_timeout on each session in new isolation tests
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

13 years agoSet information_schema.tables.commit_action to null
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.

13 years agoDoc clarification for pg_locks columns.
Bruce Momjian [Fri, 15 Jul 2011 17:12:36 +0000 (13:12 -0400)]
Doc clarification for pg_locks columns.

Florian Pflug

13 years agoChange the way the offset of downlink is stored in GISTInsertStack.
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.

13 years agoFix two ancient bugs in GiST code to re-find a parent after page split:
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.

13 years agoIn docs, start window function sentence with "The asterisk (*)" rather
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.

13 years agoIn planner, don't assume that empty parent tables aren't really empty.
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.

13 years agoFix broken markup
Alvaro Herrera [Thu, 14 Jul 2011 17:43:01 +0000 (13:43 -0400)]
Fix broken markup

13 years agoSet information_schema.routines.is_udt_dependent to NO
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.

13 years agoSmall update on suggested startup file locations
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.

13 years agoRemove README.mb.big5 and README.mb.jp
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.

13 years agoUpdate some comments to clarify who does what in targetlist creation.
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.

13 years agoImplement information schema interval_type columns
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.

13 years agoUse clearer woring for pg_locks columns, identifying which items are
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.

13 years agoBlind attempt at fixing isolation_tester on Win32
Alvaro Herrera [Wed, 13 Jul 2011 05:10:26 +0000 (01:10 -0400)]
Blind attempt at fixing isolation_tester on Win32

13 years agoAvoid listing ungrouped Vars in the targetlist of Agg-underneath-Window.
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.

13 years agoAdd support for blocked commands in isolationtester
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

13 years agoperltidy run over msvc build system
Magnus Hagander [Tue, 12 Jul 2011 14:25:08 +0000 (15:25 +0100)]
perltidy run over msvc build system

13 years agoMake pg_upgrade output more consistent with project style
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.

13 years agoAdd C comment that txid_current() assigns an XID if one is not already
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.

13 years agoFix and clarify information schema interval_precision fields
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.

13 years agoImprove wording of documentation on default privileges.
Andrew Dunstan [Mon, 11 Jul 2011 15:12:34 +0000 (11:12 -0400)]
Improve wording of documentation on default privileges.

Per recent -hackers discussion.

13 years agoTry to acquire relation locks in RangeVarGetRelid.
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

13 years agoFix another oversight in logging of changes in postgresql.conf settings.
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.

13 years agoIntroduce a pipe between postmaster and each backend, which can be used to
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.

13 years agoFix one overflow and one signedness error, caused by the patch to calculate
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.

13 years agoAdd item about Clang support to 9.1 release notes
Peter Eisentraut [Fri, 8 Jul 2011 14:04:49 +0000 (17:04 +0300)]
Add item about Clang support to 9.1 release notes

13 years agoMessage style improvements
Peter Eisentraut [Fri, 8 Jul 2011 04:37:04 +0000 (07:37 +0300)]
Message style improvements

13 years agoUpdate examples for string-related functions.
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.