]> granicus.if.org Git - postgresql/log
postgresql
13 years agoTag 9.1beta1. REL9_1_BETA1
Tom Lane [Wed, 27 Apr 2011 21:17:22 +0000 (17:17 -0400)]
Tag 9.1beta1.

13 years agoMake a quick copy-editing pass over the 9.1 release notes.
Tom Lane [Wed, 27 Apr 2011 20:51:46 +0000 (16:51 -0400)]
Make a quick copy-editing pass over the 9.1 release notes.

Also remove the material about this being an alpha release.

The notes still need a lot of work, but they're more or less presentable
as a beta version now.

13 years agoFix binary upgrade of altered typed tables
Peter Eisentraut [Wed, 27 Apr 2011 19:08:22 +0000 (22:08 +0300)]
Fix binary upgrade of altered typed tables

Instead of dumping them as CREATE TABLE ... OF, dump them as normal
tables with the usual special processing for dropped columns, and then
attach them to the type afterward, using ALTER TABLE ... OF.  This is
analogous to the existing handling of inherited tables.

13 years agoRevert "Force use of "%I64d" format for 64 bit ints on MinGW."
Andrew Dunstan [Wed, 27 Apr 2011 18:55:18 +0000 (14:55 -0400)]
Revert "Force use of "%I64d" format for 64 bit ints on MinGW."

This reverts commit 52d01c2f52c462d29ae0fdfa44c3cae129148a6d.

the UINT64_FORMAT bit broke the b uildfarm, so I'm reverting the whole thing pending further investigation.

13 years agotimeline is not needed in BaseBackup()
Magnus Hagander [Wed, 27 Apr 2011 18:39:20 +0000 (20:39 +0200)]
timeline is not needed in BaseBackup()

This code was accidentally part of the patch, it's only
needed for the code that's for 9.2. Not needing the timeline
also removes the need to call IDENTIFY_SYSTEM.

Noted by Peter E.

13 years agoAdd comments about the need to avoid uninitialized bits in datatype values.
Tom Lane [Wed, 27 Apr 2011 18:05:58 +0000 (14:05 -0400)]
Add comments about the need to avoid uninitialized bits in datatype values.

There was already one recommendation in the documentation about writing
C functions to ensure padding bytes are zeroes, but make it stronger.

Also fix an example that was still using direct assignment to a varlena
length word, which no longer works since the varvarlena changes.

13 years agoFix array- and path-creating functions to ensure padding bytes are zeroes.
Tom Lane [Wed, 27 Apr 2011 17:58:36 +0000 (13:58 -0400)]
Fix array- and path-creating functions to ensure padding bytes are zeroes.

Per recent discussion, it's important for all computed datums (not only the
results of input functions) to not contain any ill-defined (uninitialized)
bits.  Failing to ensure that can result in equal() reporting that
semantically indistinguishable Consts are not equal, which in turn leads to
bizarre and undesirable planner behavior, such as in a recent example from
David Johnston.  We might eventually try to fix this in a general manner by
allowing datatypes to define identity-testing functions, but for now the
path of least resistance is to expect datatypes to force all unused bits
into consistent states.

Per some testing by Noah Misch, array and path functions seem to be the
only ones presenting risks at the moment, so I looked through all the
functions in adt/array*.c and geo_ops.c and fixed them as necessary.  In
the array functions, the easiest/safest fix is to allocate result arrays
with palloc0 instead of palloc.  Possibly in future someone will want to
look into whether we can just zero the padding bytes, but that looks too
complex for a back-patchable fix.  In the path functions, we already had a
precedent in path_in for just zeroing the one known pad field, so duplicate
that code as needed.

Back-patch to all supported branches.

13 years agoRevert "Remove hard coded formats for INT64 and use configured settings instead."
Andrew Dunstan [Wed, 27 Apr 2011 15:28:14 +0000 (11:28 -0400)]
Revert "Remove hard coded formats for INT64 and use configured settings instead."

This reverts commit 9b1508af8971c1627cda5bb65f5e9eddb9a1a55e.

As requested by Tom.

13 years agoRemove hard coded formats for INT64 and use configured settings instead.
Andrew Dunstan [Wed, 27 Apr 2011 15:07:52 +0000 (11:07 -0400)]
Remove hard coded formats for INT64 and use configured settings instead.

13 years agoForce use of "%I64d" format for 64 bit ints on MinGW.
Andrew Dunstan [Wed, 27 Apr 2011 14:09:23 +0000 (10:09 -0400)]
Force use of "%I64d" format for 64 bit ints on MinGW.

Both this and "%lld" work, but the compiler's format checking doesn't
like "%lld", so we get all sorts of spurious warnings.

13 years agoUse an explicit format string to keep the compiler happy.
Andrew Dunstan [Wed, 27 Apr 2011 14:02:21 +0000 (10:02 -0400)]
Use an explicit format string to keep the compiler happy.

13 years agoDoc wording improvement for NUMERIC limit paragraph.
Bruce Momjian [Wed, 27 Apr 2011 04:06:37 +0000 (00:06 -0400)]
Doc wording improvement for NUMERIC limit paragraph.

13 years agoReword documentation for NUMERIC with no specified precision.
Bruce Momjian [Wed, 27 Apr 2011 03:43:15 +0000 (23:43 -0400)]
Reword documentation for NUMERIC with no specified precision.

13 years agoRephrase some not-supported error messages in pg_hba.conf processing.
Tom Lane [Tue, 26 Apr 2011 19:56:28 +0000 (15:56 -0400)]
Rephrase some not-supported error messages in pg_hba.conf processing.

In a couple of places we said "not supported on this platform" for cases
that aren't really platform-specific, but could depend on configuration
options such as --with-openssl.  Use "not supported by this build" instead,
as that doesn't convey the impression that you can't fix it without moving
to another OS; that's also more consistent with the wording used for an
identical error case in guc.c.

No back-patch, as the clarity gain is small enough to not be worth
burdening translators with back-branch changes.

13 years agoComplain if pg_hba.conf contains "hostssl" but SSL is disabled.
Tom Lane [Tue, 26 Apr 2011 19:40:11 +0000 (15:40 -0400)]
Complain if pg_hba.conf contains "hostssl" but SSL is disabled.

Most commenters agreed that this is more friendly than silently failing
to match the line during actual connection attempts.  Also, this will
prevent corner cases that might arise when trying to handle such a line
when the SSL code isn't turned on.  An example is that specifying
clientcert=1 in such a line would formerly result in a completely
misleading complaint that root.crt wasn't present, as seen in a recent
report from Marc-Andre Laverdiere.  While we could have instead fixed
that specific behavior, it seems likely that we'd have a continuing stream
of such bizarre behaviors if we keep on allowing hostssl lines when SSL is
disabled.

Back-patch to 8.4, where clientcert was introduced.  Earlier versions don't
have this specific issue, and the code is enough different to make this
patch not applicable without more work than it seems worth.

13 years agoClarify that a non-specified precision NUMERIC has a very high range.
Bruce Momjian [Tue, 26 Apr 2011 15:54:57 +0000 (11:54 -0400)]
Clarify that a non-specified precision NUMERIC has a very high range.

13 years agoNow that pg_upgrade uses -w in pg_ctl, remove loop that retried testing
Bruce Momjian [Tue, 26 Apr 2011 14:15:18 +0000 (10:15 -0400)]
Now that pg_upgrade uses -w in pg_ctl, remove loop that retried testing
the connection;  also restructure the libpq connection code.

This patch also removes the unused variable postmasterPID and fixes a
libpq structure leak that was in the testing loop.

13 years agoIn pg_upgrade, avoid one start/stop of the postmaster; use the -w
Bruce Momjian [Tue, 26 Apr 2011 00:17:48 +0000 (20:17 -0400)]
In pg_upgrade, avoid one start/stop of the postmaster;  use the -w
(wait) flag for pg_ctl start/stop;  remove the unused "quiet" flag in
the functions for starting/stopping the postmaster.

13 years agoRemove incorrect HINT for use of ALTER FOREIGN TABLE on the wrong relkind.
Tom Lane [Tue, 26 Apr 2011 00:13:53 +0000 (20:13 -0400)]
Remove incorrect HINT for use of ALTER FOREIGN TABLE on the wrong relkind.

Per discussion, removing the hint seems better than correcting it because
the adjacent analogous cases in RenameRelation don't have any hints, and
nobody seems to have missed 'em.

Shigeru Hanada

13 years agoRefactor broken CREATE TABLE IF NOT EXISTS support.
Robert Haas [Mon, 25 Apr 2011 20:55:11 +0000 (16:55 -0400)]
Refactor broken CREATE TABLE IF NOT EXISTS support.

Per bug #5988, reported by Marko Tiikkaja, and further analyzed by Tom
Lane, the previous coding was broken in several respects: even if the
target table already existed, a subsequent CREATE TABLE IF NOT EXISTS
might try to add additional constraints or sequences-for-serial
specified in the new CREATE TABLE statement.

In passing, this also fixes a minor information leak: it's no longer
possible to figure out whether a schema to which you don't have CREATE
access contains a sequence named like "x_y_seq" by attempting to create a
table in that schema called "x" with a serial column called "y".

Some more refactoring of this code in the future might be warranted,
but that will need to wait for a later major release.

13 years agoRemove partial and undocumented GRANT .. FOREIGN TABLE support.
Robert Haas [Mon, 25 Apr 2011 20:34:57 +0000 (16:34 -0400)]
Remove partial and undocumented GRANT .. FOREIGN TABLE support.

Instead, foreign tables are treated just like views: permissions can
be granted using GRANT privilege ON [TABLE] foreign_table_name TO role,
and revoked similarly.  GRANT/REVOKE .. FOREIGN TABLE is no longer
supported, just as we don't support GRANT/REVOKE .. VIEW.  The set of
accepted permissions for foreign tables is now identical to the set for
regular tables, and views.

Per report from Thom Brown, and subsequent discussion.

13 years agoFix pg_size_pretty() to avoid overflow for inputs close to INT64_MAX.
Tom Lane [Mon, 25 Apr 2011 20:22:12 +0000 (16:22 -0400)]
Fix pg_size_pretty() to avoid overflow for inputs close to INT64_MAX.

The expression that tried to round the value to the nearest TB could
overflow, leading to bogus output as reported in bug #5993 from Nicola
Cossu.  This isn't likely to ever happen in the intended usage of the
function (if it could, we'd be needing to use a wider datatype instead);
but it's not hard to give the expected output, so let's do so.

13 years agoSupport "make check" in contrib
Peter Eisentraut [Mon, 25 Apr 2011 19:21:37 +0000 (22:21 +0300)]
Support "make check" in contrib

Added a new option --extra-install to pg_regress to arrange installing
the respective contrib directory into the temporary installation.
This is currently not yet supported for Windows MSVC builds.

Updated the .gitignore files for contrib modules to ignore the
leftovers of a temp-install check run.

Changed the exit status of "make check" in a pgxs build (which still
does nothing) to 0 from 1.

Added "make check" in contrib to top-level "make check-world".

13 years agoUse terse mode to avoid variable order dependency output in foreign data regression...
Andrew Dunstan [Mon, 25 Apr 2011 18:43:26 +0000 (14:43 -0400)]
Use terse mode to avoid variable order dependency output in foreign data regression check.

Per Tom Lane's suggestion about my gripe about occasional errors noticed on the buildfarm.

13 years agoAssorted minor changes to silence Windows compiler warnings.
Andrew Dunstan [Mon, 25 Apr 2011 16:56:53 +0000 (12:56 -0400)]
Assorted minor changes to silence Windows compiler warnings.

Mostly to do with macro redefinitions or object signedness.

13 years agoPrevent perl header overriding our *snprintf macros, and give it a usable PERL_UNUSED...
Andrew Dunstan [Mon, 25 Apr 2011 16:46:59 +0000 (12:46 -0400)]
Prevent perl header overriding our *snprintf macros, and give it a usable PERL_UNUSED_DECL value.

This quiets compiler warnings about redefined macros and unused Perl__unused variables. The
redefinition of snprintf and vsnprintf is something we want to avoid anyway, if we've
gone to the bother of setting up the macros to point to our implementation.

13 years agoGive getopt() a prototype and modern style arg specs.
Andrew Dunstan [Mon, 25 Apr 2011 16:38:10 +0000 (12:38 -0400)]
Give getopt() a prototype and modern style arg specs.

Welcome to the 1990s.

13 years agoAdd postmaster/postgres undocumented -b option for binary upgrades.
Bruce Momjian [Mon, 25 Apr 2011 16:00:21 +0000 (12:00 -0400)]
Add postmaster/postgres undocumented -b option for binary upgrades.
This option turns off autovacuum, prevents non-super-user connections,
and enables oid setting hooks in the backend.  The code continues to use
the old autoavacuum disable settings for servers with earlier catalog
versions.

This includes a catalog version bump to identify servers that support
the -b option.

13 years agoAdd fast paths for cases when no serializable transactions are running.
Robert Haas [Mon, 25 Apr 2011 13:52:01 +0000 (09:52 -0400)]
Add fast paths for cases when no serializable transactions are running.

Dan Ports

13 years agoRegression tests for TOAST.
Robert Haas [Mon, 25 Apr 2011 13:46:53 +0000 (09:46 -0400)]
Regression tests for TOAST.

Kevin Grittner, per discussion of bug #5989

13 years agoFix SSI-related assertion failure.
Robert Haas [Mon, 25 Apr 2011 13:41:56 +0000 (09:41 -0400)]
Fix SSI-related assertion failure.

Bug #5899, reported by Marko Tiikkaja.

Heikki Linnakangas, reviewed by Kevin Grittner and Dan Ports.

13 years agoAdjust yywrap macro for non-reentrant scanners for MSVC.
Andrew Dunstan [Mon, 25 Apr 2011 13:10:59 +0000 (09:10 -0400)]
Adjust yywrap macro for non-reentrant scanners for MSVC.

The MSVC compiler complains if a macro is called with less arguments
than its definition provides for. flex generates a macro with one
argument for yywrap, but only supplies the argument for reentrant
scanners, so we remove the useless argument in the non-reentrant
case to silence the warning.

13 years agoIn libecpg do not set an sqlda field that is 'reserved for future use' unless
Michael Meskes [Mon, 25 Apr 2011 11:43:22 +0000 (13:43 +0200)]
In libecpg do not set an sqlda field that is 'reserved for future use' unless
we know what should be stored in there.

13 years agoNormalize whitespace in the arguments of <indexterm>
Peter Eisentraut [Sun, 24 Apr 2011 22:12:16 +0000 (01:12 +0300)]
Normalize whitespace in the arguments of <indexterm>

Strip leading and trailing whitespace and replace interior whitespace
by a single space.  This avoids problems with the index generator
producing duplicate index entries for terms that differ only in
whitespace.

Commit dca30da3433c40b5f92f1704c496cda052decef9 actually fixed all the
indexterm elements that would cause this problem at the moment, but in
case it sneaks in again, we're set.

13 years agoImprove cost estimation for aggregates and window functions.
Tom Lane [Sun, 24 Apr 2011 20:55:20 +0000 (16:55 -0400)]
Improve cost estimation for aggregates and window functions.

The previous coding failed to account properly for the costs of evaluating
the input expressions of aggregates and window functions, as seen in a
recent gripe from Claudio Freire.  (I said at the time that it wasn't
counting these costs at all; but on closer inspection, it was effectively
charging these costs once per output tuple.  That is completely wrong for
aggregates, and not exactly right for window functions either.)

There was also a hard-wired assumption that aggregates and window functions
had procost 1.0, which is now fixed to respect the actual cataloged costs.

The costing of WindowAgg is still pretty bogus, since it doesn't try to
estimate the effects of spilling data to disk, but that seems like a
separate issue.

13 years agoIn pg_upgrade, only compile copy_file() on non-Win32 systems.
Bruce Momjian [Sun, 24 Apr 2011 00:27:57 +0000 (20:27 -0400)]
In pg_upgrade, only compile copy_file() on non-Win32 systems.

Per report from Andrew Dunstan.

13 years agoImprove findoidjoins to cover more cases.
Tom Lane [Sat, 23 Apr 2011 23:33:04 +0000 (19:33 -0400)]
Improve findoidjoins to cover more cases.

Teach the program and script to deal with OID-array referencing columns,
which we now have several of.  Also, modify the recommended usage process
to specify that the program should be run against the regression database
rather than template1.  This lets it find numerous joins that cannot be
found in template1 because the relevant catalogs are entirely empty.

Together these changes add seventeen formerly-missed cases to the oidjoins
regression test.

13 years agoSilence a few compiler warnings from gcc on MinGW.
Andrew Dunstan [Sat, 23 Apr 2011 22:10:23 +0000 (18:10 -0400)]
Silence a few compiler warnings from gcc on MinGW.

Most of these cast DWORD to int or unsigned int for printf type handling.
This is safe even on 64 bit architectures because a DWORD is always 32 bits.

In one case a variable is initialised to keep the compiler happy.

13 years agoUpdate oidjoins regression test for 9.1 catalog schema additions.
Tom Lane [Sat, 23 Apr 2011 18:49:54 +0000 (14:49 -0400)]
Update oidjoins regression test for 9.1 catalog schema additions.

13 years agoHash indexes had better pass the index collation to support functions, too.
Tom Lane [Sat, 23 Apr 2011 18:13:09 +0000 (14:13 -0400)]
Hash indexes had better pass the index collation to support functions, too.

Per experimentation with contrib/citext, whose hash function assumes that
it'll be passed a collation.

13 years agoAdjust comments about collate.linux.utf8 regression test.
Tom Lane [Sat, 23 Apr 2011 16:51:47 +0000 (12:51 -0400)]
Adjust comments about collate.linux.utf8 regression test.

This test should now work in any database with UTF8 encoding, regardless
of the database's default locale.  The former restriction was really
"doesn't work if default locale is C", and that was because of not handling
mbstowcs/wcstombs correctly.

13 years agoFix char2wchar/wchar2char to support collations properly.
Tom Lane [Sat, 23 Apr 2011 16:35:41 +0000 (12:35 -0400)]
Fix char2wchar/wchar2char to support collations properly.

These functions should take a pg_locale_t, not a collation OID, and should
call mbstowcs_l/wcstombs_l where available.  Where those functions are not
available, temporarily select the correct locale with uselocale().

This change removes the bogus assumption that all locales selectable in
a given database have the same wide-character conversion method; in
particular, the collate.linux.utf8 regression test now passes with
LC_CTYPE=C, so long as the database encoding is UTF8.

I decided to move the char2wchar/wchar2char functions out of mbutils.c and
into pg_locale.c, because they work on wchar_t not pg_wchar_t and thus
don't really belong with the mbutils.c functions.  Keeping them where they
were would have required importing pg_locale_t into pg_wchar.h somehow,
which did not seem like a good plan.

13 years agoFix contrib/btree_gist to handle collations properly.
Tom Lane [Sat, 23 Apr 2011 00:19:58 +0000 (20:19 -0400)]
Fix contrib/btree_gist to handle collations properly.

Make use of the collation attached to the index column, instead of
hard-wiring DEFAULT_COLLATION_OID.  (Note: in theory this could require
reindexing btree_gist indexes on textual columns, but I rather doubt anyone
has one with a non-default declared collation as yet.)

13 years agoMake GIN and GIST pass the index collation to all their support functions.
Tom Lane [Sat, 23 Apr 2011 00:13:12 +0000 (20:13 -0400)]
Make GIN and GIST pass the index collation to all their support functions.

Experimentation with contrib/btree_gist shows that the majority of the GIST
support functions potentially need collation information.  Safest policy
seems to be to pass it to all of them, instead of making assumptions about
which ones could possibly need it.

13 years agoDe-kludge contrib/btree_gin for collations.
Tom Lane [Fri, 22 Apr 2011 22:22:38 +0000 (18:22 -0400)]
De-kludge contrib/btree_gin for collations.

Using DEFAULT_COLLATION_OID in the comparePartial functions was not only
a lame hack, but outright wrong, because the compare functions for
collation-aware types were already responding to the declared index
collation.  So comparePartial would have the wrong expectation about
the index's sort order, possibly leading to missing matches for prefix
searches.

13 years agoSmall update to emacs example configuration
Peter Eisentraut [Fri, 22 Apr 2011 21:44:45 +0000 (00:44 +0300)]
Small update to emacs example configuration

Since both tarballs and git now result in a "postgresql" directory
rather than a "pgsql" directory, adjust the example configuration to
look for the former.

13 years agoAdd fill-column setting to emacs example configurations
Peter Eisentraut [Fri, 22 Apr 2011 21:39:45 +0000 (00:39 +0300)]
Add fill-column setting to emacs example configurations

This matches the maximum line length that pgindent uses.

13 years agoMake a code-cleanup pass over the collations patch.
Tom Lane [Fri, 22 Apr 2011 21:43:18 +0000 (17:43 -0400)]
Make a code-cleanup pass over the collations patch.

This patch is almost entirely cosmetic --- mostly cleaning up a lot of
neglected comments, and fixing code layout problems in places where the
patch made lines too long and then pgindent did weird things with that.
I did find a bug-of-omission in equalTupleDescs().

13 years agoImprove doc wording for SQL syntax of LIMIT/OFFSET.
Bruce Momjian [Fri, 22 Apr 2011 02:25:35 +0000 (22:25 -0400)]
Improve doc wording for SQL syntax of LIMIT/OFFSET.

13 years agoAvoid possible divide-by-zero in gincostestimate.
Tom Lane [Thu, 21 Apr 2011 23:28:36 +0000 (19:28 -0400)]
Avoid possible divide-by-zero in gincostestimate.

Per report from Jeff Janes.

13 years agoAllow ALTER TYPE .. ADD ATTRIBUTE .. CASCADE to recurse to descendants.
Robert Haas [Thu, 21 Apr 2011 02:49:37 +0000 (22:49 -0400)]
Allow ALTER TYPE .. ADD ATTRIBUTE .. CASCADE to recurse to descendants.

Without this, adding an attribute to a typed table with an inheritance
child fails, which is surprising.

Noah Misch, with minor changes by me.

13 years agoFix use of incorrect constant RemoveRoleFromObjectACL.
Robert Haas [Thu, 21 Apr 2011 02:23:58 +0000 (22:23 -0400)]
Fix use of incorrect constant RemoveRoleFromObjectACL.

This could cause failures when DROP OWNED BY attempt to remove default
privileges on sequences.  Back-patching to 9.0.

Shigeru Hanada

13 years agoTypo fix.
Robert Haas [Thu, 21 Apr 2011 02:05:16 +0000 (22:05 -0400)]
Typo fix.

13 years agoAllow ALTER TABLE name {OF type | NOT OF}.
Robert Haas [Thu, 21 Apr 2011 01:35:15 +0000 (21:35 -0400)]
Allow ALTER TABLE name {OF type | NOT OF}.

This syntax allows a standalone table to be made into a typed table,
or a typed table to be made standalone.  This is possibly a mildly
useful feature in its own right, but the real motivation for this
change is that we need it to make pg_upgrade work with typed tables.
This doesn't actually fix that problem, but it's necessary
infrastructure.

Noah Misch

13 years agoFix bugs in indexing of in-doubt HOT-updated tuples.
Tom Lane [Thu, 21 Apr 2011 00:34:11 +0000 (20:34 -0400)]
Fix bugs in indexing of in-doubt HOT-updated tuples.

If we find a DELETE_IN_PROGRESS HOT-updated tuple, it is impossible to know
whether to index it or not except by waiting to see if the deleting
transaction commits.  If it doesn't, the tuple might again be LIVE, meaning
we have to index it.  So wait and recheck in that case.

Also, we must not rely on ii_BrokenHotChain to decide that it's possible to
omit tuples from the index.  That could result in omitting tuples that we
need, particularly in view of yesterday's fixes to not necessarily set
indcheckxmin (but it's broken even without that, as per my analysis today).
Since this is just an extremely marginal performance optimization, dropping
the test shouldn't hurt.

These cases are only expected to happen in system catalogs (they're
possible there due to early release of RowExclusiveLock in most
catalog-update code paths).  Since reindexing of a system catalog isn't a
particularly performance-critical operation anyway, there's no real need to
be concerned about possible performance degradation from these changes.

The worst aspects of this bug were introduced in 9.0 --- 8.x will always
wait out a DELETE_IN_PROGRESS tuple.  But I think dropping index entries
on the strength of ii_BrokenHotChain is dangerous even without that, so
back-patch removal of that optimization to 8.3 and 8.4.

13 years agoSet indcheckxmin true when REINDEX fixes an invalid or not-ready index.
Tom Lane [Wed, 20 Apr 2011 23:01:20 +0000 (19:01 -0400)]
Set indcheckxmin true when REINDEX fixes an invalid or not-ready index.

Per comment from Greg Stark, it's less clear that HOT chains don't conflict
with the index than it would be for a valid index.  So, let's preserve the
former behavior that indcheckxmin does get set when there are
potentially-broken HOT chains in this case.  This change does not cause any
pg_index update that wouldn't have happened anyway, so we're not
re-introducing the previous bug with pg_index updates, and surely the case
is not significant from a performance standpoint; so let's be as
conservative as possible.

13 years agoMake plan_cluster_use_sort cope with no IndexOptInfo for the target index.
Tom Lane [Wed, 20 Apr 2011 21:43:34 +0000 (17:43 -0400)]
Make plan_cluster_use_sort cope with no IndexOptInfo for the target index.

The original coding assumed that such a case represents caller error, but
actually get_relation_info will omit generating an IndexOptInfo for any
index it thinks is unsafe to use.  Therefore, handle this case by returning
"true" to indicate that a seqscan-and-sort is the preferred way to
implement the CLUSTER operation.  New bug in 9.1, no backpatch needed.
Per bug #5985 from Daniel Grace.

13 years agoFix PL/Python traceback for error in separate file
Peter Eisentraut [Wed, 20 Apr 2011 20:19:04 +0000 (23:19 +0300)]
Fix PL/Python traceback for error in separate file

It assumed that the lineno from the traceback always refers to the
PL/Python function.  If you created a PL/Python function that imports
some code, runs it, and that code raises an exception, PLy_traceback
would get utterly confused.

Now we look at the file name reported with the traceback and only
print the source line if it came from the PL/Python function.

Jan UrbaÅ„ski

13 years agoPg_upgrade C comment addition.
Bruce Momjian [Wed, 20 Apr 2011 09:44:45 +0000 (05:44 -0400)]
Pg_upgrade C comment addition.

Document why we do the missing new database check during the check
phase.

13 years agoQuotes in strings injected into bki file need to escaped. In particular,
Heikki Linnakangas [Wed, 20 Apr 2011 06:49:44 +0000 (09:49 +0300)]
Quotes in strings injected into bki file need to escaped. In particular,
"People's Republic of China" locale on Windows was causing initdb to fail.

This fixes bug #5818 reported by yulei. On master, this makes the mapping
of "People's Republic of China" to just "China" obsolete. In 9.0 and 8.4,
just fix the escaping. Earlier versions didn't have locale names in bki
file.

13 years agoThrow error for mismatched pg_upgrade clusters
Bruce Momjian [Wed, 20 Apr 2011 01:00:29 +0000 (21:00 -0400)]
Throw error for mismatched pg_upgrade clusters

If someone removes the 'postgres' database from the old cluster and the
new cluster has a 'postgres' database, the number of databases will not
match.  We actually could upgrade such a setup, but it would violate the
1-to-1 mapping of database counts, so we throw an error instead.

Previously they got an error during the upgrade, and not at the check
stage; PG 9.0.4 does the same.

13 years agoAdd C comment
Bruce Momjian [Tue, 19 Apr 2011 23:14:39 +0000 (19:14 -0400)]
Add C comment

Add C comment about why we throw an error if the pg_upgrade old/new
database counts don't match.

13 years agoAvoid changing an index's indcheckxmin horizon during REINDEX.
Tom Lane [Tue, 19 Apr 2011 22:50:56 +0000 (18:50 -0400)]
Avoid changing an index's indcheckxmin horizon during REINDEX.

There can never be a need to push the indcheckxmin horizon forward, since
any HOT chains that are actually broken with respect to the index must
pre-date its original creation.  So we can just avoid changing pg_index
altogether during a REINDEX operation.

This offers a cleaner solution than my previous patch for the problem
found a few days ago that we mustn't try to update pg_index while we are
reindexing it.  System catalog indexes will always be created with
indcheckxmin = false during initdb, and with this modified code we should
never try to change their pg_index entries.  This avoids special-casing
system catalogs as the former patch did, and should provide a performance
benefit for many cases where REINDEX formerly caused an index to be
considered unusable for a short time.

Back-patch to 8.3 to cover all versions containing HOT.  Note that this
patch changes the API for index_build(), but I believe it is unlikely that
any add-on code is calling that directly.

13 years agoRevert "Prevent incorrect updates of pg_index while reindexing pg_index itself."
Tom Lane [Tue, 19 Apr 2011 20:55:34 +0000 (16:55 -0400)]
Revert "Prevent incorrect updates of pg_index while reindexing pg_index itself."

This reverts commit 4b6106ccfea21e86943f881edcf3cfc03661a415 of 2011-04-15.
There's a better way to do it, which will follow shortly.

13 years agoRefix the unaccent regression test on MSVC properly
Peter Eisentraut [Tue, 19 Apr 2011 19:52:52 +0000 (22:52 +0300)]
Refix the unaccent regression test on MSVC properly

... for some value of "properly".  Instead of overriding REGRESS_OPTS,
set the variables ENCODING and NO_LOCALE, which is more expressive and
allows overriding by the user.  Fix vcregress.pl to handle that.

13 years agoTreat config.pl as optional in vcregress.pl
Peter Eisentraut [Tue, 19 Apr 2011 19:01:15 +0000 (22:01 +0300)]
Treat config.pl as optional in vcregress.pl

This is how build.pl treats it and how it's documented.

13 years agoFix typo
Peter Eisentraut [Tue, 19 Apr 2011 19:00:35 +0000 (22:00 +0300)]
Fix typo

13 years agoAdd gitignore entries for Windows MSVC builds
Peter Eisentraut [Tue, 19 Apr 2011 17:04:41 +0000 (20:04 +0300)]
Add gitignore entries for Windows MSVC builds

13 years agoAvoid unused variable warnings for certain configurations
Peter Eisentraut [Tue, 19 Apr 2011 17:01:51 +0000 (20:01 +0300)]
Avoid unused variable warnings for certain configurations

13 years agoRefrain from canonicalizing a client_encoding setting of "UNICODE".
Tom Lane [Tue, 19 Apr 2011 16:17:13 +0000 (12:17 -0400)]
Refrain from canonicalizing a client_encoding setting of "UNICODE".

While "UTF8" is the correct name for this encoding, existing JDBC drivers
expect that if they send "UNICODE" it will read back the same way; they
fail with an opaque "Protocol error" complaint if not.  This will be fixed
in the 9.1 drivers, but until older drivers are no longer in use in the
wild, we'd better leave "UNICODE" alone.  Continue to canonicalize all
other inputs.  Per report from Steve Singer and subsequent discussion.

13 years agoSilence compiler warning about casting HANDLE to long on WIN64.
Andrew Dunstan [Tue, 19 Apr 2011 15:21:00 +0000 (11:21 -0400)]
Silence compiler warning about casting HANDLE to long on WIN64.

13 years agoSilence compiler warning about unused variable on Windows.
Heikki Linnakangas [Tue, 19 Apr 2011 11:54:48 +0000 (14:54 +0300)]
Silence compiler warning about unused variable on Windows.

13 years agoFix handling of collations in multi-row VALUES constructs.
Tom Lane [Mon, 18 Apr 2011 19:31:52 +0000 (15:31 -0400)]
Fix handling of collations in multi-row VALUES constructs.

Per spec we ought to apply select_common_collation() across the expressions
in each column of the VALUES table.  The original coding was just taking
the first row and assuming it was representative.

This patch adds a field to struct RangeTblEntry to carry the resolved
collations, so initdb is forced for changes in stored rule representation.

13 years agoOnly allow typed tables to hang off composite types, not e.g. tables.
Robert Haas [Mon, 18 Apr 2011 14:13:34 +0000 (10:13 -0400)]
Only allow typed tables to hang off composite types, not e.g. tables.

This also ensures that we take a relation lock on the composite type when
creating a typed table, which is necessary to prevent the composite type
and the typed table from getting out of step in the face of concurrent
DDL.

Noah Misch, with some changes.

13 years agoAttempt to remedy buildfarm breakage caused by commit f536d4194.
Andrew Dunstan [Mon, 18 Apr 2011 13:27:30 +0000 (09:27 -0400)]
Attempt to remedy buildfarm breakage caused by commit f536d4194.

13 years agorecoveryStopsHere() must check the resource manager ID.
Robert Haas [Mon, 18 Apr 2011 12:27:19 +0000 (08:27 -0400)]
recoveryStopsHere() must check the resource manager ID.

Before commit c016ce728139be95bb0dc7c4e5640507334c2339, this wasn't
needed, but now that multiple resource manager IDs can percolate down
through here, we have to make sure we know which one we've got.
Otherwise, we can confuse (for example) an XLOG_XACT_COMMIT record
with an XLOG_CHECKPOINT_SHUTDOWN record.

Review by Jaime Casanova

13 years agoFix assorted infelicities in collation handling in psql's describe.c.
Tom Lane [Sun, 17 Apr 2011 22:09:22 +0000 (18:09 -0400)]
Fix assorted infelicities in collation handling in psql's describe.c.

In \d, be more careful to print collation only if it's not the default for
the column's data type.  Avoid assuming that the name "default" is magic.

Fix \d on a composite type so that it will print per-column collations.
It's no longer the case that a composite type cannot have modifiers.
(In consequence, the expected outputs for composite-type regression tests
change.)

Fix \dD so that it will print collation for a domain, again only if it's
not the same as the base type's collation.

13 years agoDocument COLLATE option in CREATE TYPE reference page.
Tom Lane [Sun, 17 Apr 2011 21:05:51 +0000 (17:05 -0400)]
Document COLLATE option in CREATE TYPE reference page.

Curiously, it was already documented in ALTER TYPE ADD ATTRIBUTE, but
not here.

13 years agoFix pg_dump to handle collations applied to columns of composite types.
Tom Lane [Sun, 17 Apr 2011 20:55:04 +0000 (16:55 -0400)]
Fix pg_dump to handle collations applied to columns of composite types.

CREATE TYPE and ALTER TYPE ADD ATTRIBUTE handle this, so I suppose it's
an intended feature, but pg_dump didn't know about it.

13 years agoAdd check for matching column collations in ALTER TABLE ... INHERIT.
Tom Lane [Sun, 17 Apr 2011 20:22:13 +0000 (16:22 -0400)]
Add check for matching column collations in ALTER TABLE ... INHERIT.

The other DDL operations that create an inheritance relationship were
checking for collation match already, but this one got missed.

Also fix comments that failed to mention collation checks.

13 years agoSupport a COLLATE clause in plpgsql variable declarations.
Tom Lane [Sun, 17 Apr 2011 18:54:19 +0000 (14:54 -0400)]
Support a COLLATE clause in plpgsql variable declarations.

This allows the usual rules for assigning a collation to a local variable
to be overridden.  Per discussion, it seems appropriate to support this
rather than forcing all local variables to have the argument-derived
collation.

13 years agoforeach() and list_delete() don't mix.
Tom Lane [Sun, 17 Apr 2011 17:36:38 +0000 (13:36 -0400)]
foreach() and list_delete() don't mix.

Fix crash when releasing duplicate entries in the encoding conversion cache
list, caused by releasing the current entry of the list being chased by
foreach().  We have a standard idiom for handling such cases, but this
loop wasn't using it.

This got broken in my recent rewrite of GUC assign hooks.  Not sure how
I missed this when testing the modified code, but I did.  Per report from
Peter.

13 years agoAdd an Assert that indexam.c isn't used on an index awaiting reindexing.
Tom Lane [Sat, 16 Apr 2011 23:29:10 +0000 (19:29 -0400)]
Add an Assert that indexam.c isn't used on an index awaiting reindexing.

This might have caught the recent embarrassment over trying to modify
pg_index while its indexes were being rebuilt.

Noah Misch

13 years agoSimplify reindex_relation's API.
Tom Lane [Sat, 16 Apr 2011 21:26:41 +0000 (17:26 -0400)]
Simplify reindex_relation's API.

For what seem entirely historical reasons, a bitmask "flags" argument was
recently added to reindex_relation without subsuming its existing boolean
argument into that bitmask.  This seems a bit bizarre, so fold them
together.

13 years agoClean up collation processing in prepunion.c.
Tom Lane [Sat, 16 Apr 2011 20:39:50 +0000 (16:39 -0400)]
Clean up collation processing in prepunion.c.

This area was a few bricks shy of a load, and badly under-commented too.
We have to ensure that the generated targetlist entries for a set-operation
node expose the correct collation for each entry, since higher-level
processing expects the tlist to reflect the true ordering of the plan's
output.

This hackery wouldn't be necessary if SortGroupClause carried collation
info ... but making it do so would inject more pain in the parser than
would be saved here.  Still, we might want to rethink that sometime.

13 years agoSet client encoding explicitly in plpython_unicode test
Peter Eisentraut [Sat, 16 Apr 2011 18:52:10 +0000 (21:52 +0300)]
Set client encoding explicitly in plpython_unicode test

This will (hopefully) eliminate the need for the
plpython_unicode_0.out expected file.

13 years agoPrevent incorrect updates of pg_index while reindexing pg_index itself.
Tom Lane [Sat, 16 Apr 2011 00:18:57 +0000 (20:18 -0400)]
Prevent incorrect updates of pg_index while reindexing pg_index itself.

The places that attempt to change pg_index.indcheckxmin during a reindexing
operation cannot be executed safely if pg_index itself is the subject of
the operation.  This is the explanation for a couple of recent reports of
VACUUM FULL failing with
ERROR:  duplicate key value violates unique constraint "pg_index_indexrelid_index"
DETAIL:  Key (indexrelid)=(2678) already exists.

However, there isn't any real need to update indcheckxmin in such a
situation, if we assume that pg_index can never contain a truly broken HOT
chain.  This assumption holds if new indexes are never created on it during
concurrent operations, which is something we don't consider safe for any
system catalog, not just pg_index.  Accordingly, modify the code to not
manipulate indcheckxmin when reindexing any system catalog.

Back-patch to 8.3, where HOT was introduced.  The known failure scenarios
involve 9.0-style VACUUM FULL, so there might not be any real risk before
9.0, but let's not assume that.

13 years agoSuppress unused-function warning on non-WIN32 builds.
Tom Lane [Fri, 15 Apr 2011 23:27:48 +0000 (19:27 -0400)]
Suppress unused-function warning on non-WIN32 builds.

13 years agoGuard against incoming rowcount estimate of NaN in cost_mergejoin().
Tom Lane [Fri, 15 Apr 2011 21:45:41 +0000 (17:45 -0400)]
Guard against incoming rowcount estimate of NaN in cost_mergejoin().

Although rowcount estimates really ought not be NaN, a bug elsewhere
could perhaps result in that, and that would cause Assert failure in
cost_mergejoin, which I believe to be the explanation for bug #5977 from
Anton Kuznetsov.  Seems like a good idea to expend a couple more cycles
to prevent that, even though the real bug is elsewhere.  Not back-patching,
though, because we don't encourage running production systems with
Asserts on.

13 years agosetlocale() on Windows doesn't work correctly if the locale name contains
Heikki Linnakangas [Fri, 15 Apr 2011 17:48:10 +0000 (20:48 +0300)]
setlocale() on Windows doesn't work correctly if the locale name contains
apostrophes or dots. There isn't much hope of Microsoft fixing it any time
soon, it's been like that for ages, so we better work around it. So, map a
few common Windows locale names known to cause problems to aliases that work.

13 years agoOn Windows, if the encoding implied by locale is not allowed as a
Heikki Linnakangas [Fri, 15 Apr 2011 17:44:13 +0000 (20:44 +0300)]
On Windows, if the encoding implied by locale is not allowed as a
server-encoding, fall back to UTF-8. It happens at least with the Chinese
locale, which implies BIG5. This is safe, because on Windows all locales
are compatible with UTF-8.

13 years agoNote that Bison on GnuWin32 has trouble with paths with spaces
Magnus Hagander [Fri, 15 Apr 2011 13:27:02 +0000 (15:27 +0200)]
Note that Bison on GnuWin32 has trouble with paths with spaces

Peter Eisentraut

13 years agoSpecify which versions of the Platform SDK are supported
Magnus Hagander [Fri, 15 Apr 2011 13:00:42 +0000 (15:00 +0200)]
Specify which versions of the Platform SDK are supported

Anything including Visual Studio 2010 compilers is not yet
supported for building on Windows.

13 years agoReduce the initial size of local lock hash to 16 entries.
Heikki Linnakangas [Fri, 15 Apr 2011 11:57:51 +0000 (14:57 +0300)]
Reduce the initial size of local lock hash to 16 entries.

The hash table is seq scanned at transaction end, to release all locks,
and making the hash table larger than necessary makes that slower. With
very simple queries, that overhead can amount to a few percent of the total
CPU time used.

At the moment, backend startup needs 6 locks, and a simple query with one
table and index needs 3 locks. 16 is enough for even quite complicated
transactions, and it will grow automatically if it fills up.

13 years agoRename pg_regress option --multibyte to --encoding
Peter Eisentraut [Fri, 15 Apr 2011 05:42:05 +0000 (08:42 +0300)]
Rename pg_regress option --multibyte to --encoding

Also refactor things a little bit so that the same methods for setting
test locale and encoding can be used everywhere.

13 years agoUpdate release notes for releases 9.0.4, 8.4.8, 8.3.15, and 8.2.21.
Tom Lane [Thu, 14 Apr 2011 19:51:37 +0000 (15:51 -0400)]
Update release notes for releases 9.0.4, 8.4.8, 8.3.15, and 8.2.21.

13 years agoAdvise Debian/Ubuntu users to use openjade1.3.
Robert Haas [Thu, 14 Apr 2011 18:35:41 +0000 (11:35 -0700)]
Advise Debian/Ubuntu users to use openjade1.3.

The latest openjade packages for Ubuntu 10.10 seg fault when building
our documentation.

Josh Berkus

13 years agoRemove obsolete comment.
Robert Haas [Thu, 14 Apr 2011 02:20:39 +0000 (19:20 -0700)]
Remove obsolete comment.

The lock level for adding a parent table is now ShareUpdateExclusiveLock;
see commit fbcf4b92aa64d4577bcf25925b055316b978744a.  This comment didn't
get updated to match, but it doesn't seem important to mention this detail
here, so rather than updating it now, just take it out.

13 years agoFix toast table creation.
Robert Haas [Thu, 14 Apr 2011 01:07:14 +0000 (18:07 -0700)]
Fix toast table creation.

Instead of using slightly-too-clever heuristics to decide when we must
create a TOAST table, just check whether one is needed every time the
table is altered.  Checking whether a toast table is needed is cheap
enough that we needn't worry about doing it on every ALTER TABLE command,
and the previous coding is apparently prone to accidental breakage:
commit 04e17bae50a73af524731fa11210d5c3f7d8e1f9 broken ALTER TABLE ..
SET STORAGE, which moved some actions from AT_PASS_COL_ATTRS to
AT_PASS_MISC, and commit 6c5723998594dffa5d47c3cf8c96ccf89c033aae broke
ALTER TABLE .. ADD COLUMN by changing the way that adding columns
recurses into child tables.

Noah Misch, with one comment change by me

13 years agoEnsure mark_dummy_rel doesn't create dangling pointers in RelOptInfos.
Tom Lane [Wed, 13 Apr 2011 22:56:40 +0000 (18:56 -0400)]
Ensure mark_dummy_rel doesn't create dangling pointers in RelOptInfos.

When we are doing GEQO join planning, the current memory context is a
short-lived context that will be reset at the end of geqo_eval().  However,
the RelOptInfos for base relations are set up before that and then re-used
across many GEQO cycles.  Hence, any code that modifies a baserel during
join planning has to be careful not to put pointers to the short-lived
context into the baserel struct.  mark_dummy_rel got this wrong, leading to
easy-to-reproduce-once-you-know-how crashes in 8.4, as reported off-list by
Leo Carson of SDSC.  Some improvements made in 9.0 make it difficult to
demonstrate the crash in 9.0 or HEAD; but there's no doubt that there's
still a risk factor here, so patch all branches that have the function.
(Note: 8.3 has a similar function, but it's only applied to joinrels and
thus is not a hazard.)