]> granicus.if.org Git - postgresql/log
postgresql
12 years agoAlways treat a standby returning an an invalid flush location as async
Magnus Hagander [Wed, 4 Jul 2012 13:10:46 +0000 (15:10 +0200)]
Always treat a standby returning an an invalid flush location as async

This ensures that a standby such as pg_receivexlog will not be selected
as sync standby - which would cause the master to block waiting for
a location that could never happen.

Fujii Masao

12 years agoRemove reference to default wal_buffers being 8
Magnus Hagander [Wed, 4 Jul 2012 07:22:21 +0000 (09:22 +0200)]
Remove reference to default wal_buffers being 8

This hasn't been true since 9.1, when the default was changed to -1.
Remove the reference completely, keeping the discussion of the parameter
and it's shared memory effects on the config page.

12 years agoFix typo
Magnus Hagander [Wed, 4 Jul 2012 07:06:02 +0000 (09:06 +0200)]
Fix typo

gabrielle

12 years agoRemove references to PostgreSQL bundled on Solaris
Magnus Hagander [Wed, 4 Jul 2012 06:58:31 +0000 (08:58 +0200)]
Remove references to PostgreSQL bundled on Solaris

Also remove special references to downloads off pgfoundry since they are
not correct - downloads are done through the main website.

12 years agoRemove references to pgfoundry as recommended hosting platform
Magnus Hagander [Wed, 4 Jul 2012 06:59:35 +0000 (08:59 +0200)]
Remove references to pgfoundry as recommended hosting platform

pgfoundry is deprectaed and no longer accepting new projects,
so we really shouldn't be directing people there.

12 years agoForgot an #include in the previous patch :-(
Alvaro Herrera [Tue, 3 Jul 2012 20:40:15 +0000 (16:40 -0400)]
Forgot an #include in the previous patch :-(

12 years agoHave REASSIGN OWNED work on extensions, too
Alvaro Herrera [Tue, 3 Jul 2012 19:19:02 +0000 (15:19 -0400)]
Have REASSIGN OWNED work on extensions, too

Per bug #6593, REASSIGN OWNED fails when the affected role has created
an extension.  Even though the user related to the extension is not
nominally the owner, its OID appears on pg_shdepend and thus causes
problems when the user is to be dropped.

This commit adds code to change the "ownership" of the extension itself,
not of the contained objects.  This is fine because it's currently only
called from REASSIGN OWNED, which would also modify the ownership of the
contained objects.  However, this is not sufficient for a working ALTER
OWNER implementation extension.

Back-patch to 9.1, where extensions were introduced.

Bug #6593 reported by Emiliano Leporati.

12 years agoFix race condition in enum value comparisons.
Tom Lane [Sun, 1 Jul 2012 21:12:59 +0000 (17:12 -0400)]
Fix race condition in enum value comparisons.

When (re) loading the typcache comparison cache for an enum type's values,
use an up-to-date MVCC snapshot, not the transaction's existing snapshot.
This avoids problems if we encounter an enum OID that was created since our
transaction started.  Per report from Andres Freund and diagnosis by Robert
Haas.

To ensure this is safe even if enum comparison manages to get invoked
before we've set a transaction snapshot, tweak GetLatestSnapshot to
redirect to GetTransactionSnapshot instead of throwing error when
FirstSnapshotSet is false.  The existing uses of GetLatestSnapshot (in
ri_triggers.c) don't care since they couldn't be invoked except in a
transaction that's already done some work --- but it seems just conceivable
that this might not be true of enums, especially if we ever choose to use
enums in system catalogs.

Note that the comparable coding in enum_endpoint and enum_range_internal
remains GetTransactionSnapshot; this is perhaps debatable, but if we
changed it those functions would have to be marked volatile, which doesn't
seem attractive.

Back-patch to 9.1 where ALTER TYPE ADD VALUE was added.

12 years agoPrevent CREATE TABLE LIKE/INHERITS from (mis) copying whole-row Vars.
Tom Lane [Sat, 30 Jun 2012 20:44:03 +0000 (16:44 -0400)]
Prevent CREATE TABLE LIKE/INHERITS from (mis) copying whole-row Vars.

If a CHECK constraint or index definition contained a whole-row Var (that
is, "table.*"), an attempt to copy that definition via CREATE TABLE LIKE or
table inheritance produced incorrect results: the copied Var still claimed
to have the rowtype of the source table, rather than the created table.

For the LIKE case, it seems reasonable to just throw error for this
situation, since the point of LIKE is that the new table is not permanently
coupled to the old, so there's no reason to assume its rowtype will stay
compatible.  In the inheritance case, we should ideally allow such
constraints, but doing so will require nontrivial refactoring of CREATE
TABLE processing (because we'd need to know the OID of the new table's
rowtype before we adjust inherited CHECK constraints).  In view of the lack
of previous complaints, that doesn't seem worth the risk in a back-patched
bug fix, so just make it throw error for the inheritance case as well.

Along the way, replace change_varattnos_of_a_node() with a more robust
function map_variable_attnos(), which is capable of being extended to
handle insertion of ConvertRowtypeExpr whenever we get around to fixing
the inheritance case nicely, and in the meantime it returns a failure
indication to the caller so that a helpful message with some context can be
thrown.  Also, this code will do the right thing with subselects (if we
ever allow them in CHECK or indexes), and it range-checks varattnos before
using them to index into the map array.

Per report from Sergey Konoplev.  Back-patch to all supported branches.

12 years agoInitialize shared memory copy of ckptXidEpoch correctly when not in recovery.
Heikki Linnakangas [Fri, 29 Jun 2012 16:19:29 +0000 (19:19 +0300)]
Initialize shared memory copy of ckptXidEpoch correctly when not in recovery.

This bug was introduced by commit 20d98ab6e4110087d1816cd105a40fcc8ce0a307,
so backpatch this to 9.0-9.2 like that one.

This fixes bug #6710, reported by Tarvi Pillessaar

12 years agoFix NOTIFY to cope with I/O problems, such as out-of-disk-space.
Tom Lane [Fri, 29 Jun 2012 04:51:44 +0000 (00:51 -0400)]
Fix NOTIFY to cope with I/O problems, such as out-of-disk-space.

The LISTEN/NOTIFY subsystem got confused if SimpleLruZeroPage failed,
which would typically happen as a result of a write() failure while
attempting to dump a dirty pg_notify page out of memory.  Subsequently,
all attempts to send more NOTIFY messages would fail with messages like
"Could not read from file "pg_notify/nnnn" at offset nnnnn: Success".
Only restarting the server would clear this condition.  Per reports from
Kevin Grittner and Christoph Berg.

Back-patch to 9.0, where the problem was introduced during the
LISTEN/NOTIFY rewrite.

12 years agoImprove pg_dump's dependency-sorting logic to enforce section dump order.
Tom Lane [Tue, 26 Jun 2012 01:19:28 +0000 (21:19 -0400)]
Improve pg_dump's dependency-sorting logic to enforce section dump order.

As of 9.2, with the --section option, it is very important that the concept
of "pre data", "data", and "post data" sections of the output be honored
strictly; else a dump divided into separate sectional files might be
unrestorable.  However, the dependency-sorting logic knew nothing of
sections and would happily select output orderings that didn't fit that
structure.  Doing so was mostly harmless before 9.2, but now we need to be
sure it doesn't do that.  To fix, create dummy objects representing the
section boundaries and add dependencies between them and all the normal
objects.  (This might sound expensive but it seems to only add a percent or
two to pg_dump's runtime.)

This also fixes a problem introduced in 9.1 by the feature that allows
incomplete GROUP BY lists when a primary key is given in GROUP BY.
That means that views can depend on primary key constraints.  Previously,
pg_dump would deal with that by simply emitting the primary key constraint
before the view definition (and hence before the data section of the
output).  That's bad enough for simple serial restores, where creating an
index before the data is loaded works, but is undesirable for speed
reasons.  But it could lead to outright failure of parallel restores, as
seen in bug #6699 from Joe Van Dyk.  That happened because pg_restore would
switch into parallel mode as soon as it reached the constraint, and then
very possibly would try to emit the view definition before the primary key
was committed (as a consequence of another bug that causes the view not to
be correctly marked as depending on the constraint).  Adding the section
boundary constraints forces the dependency-sorting code to break the view
into separate table and rule declarations, allowing the rule, and hence the
primary key constraint it depends on, to revert to their intended location
in the post-data section.  This also somewhat accidentally works around the
bogus-dependency-marking problem, because the rule will be correctly shown
as depending on the constraint, so parallel pg_restore will now do the
right thing.  (We will fix the bogus-dependency problem for real in a
separate patch, but that patch is not easily back-portable to 9.1, so the
fact that this patch is enough to dodge the only known symptom is
fortunate.)

Back-patch to 9.1, except for the hunk that adds verification that the
finished archive TOC list is in correct section order; the place where
it was convenient to add that doesn't exist in 9.1.

12 years agoFix memory leak in ARRAY(SELECT ...) subqueries.
Tom Lane [Thu, 21 Jun 2012 21:26:19 +0000 (17:26 -0400)]
Fix memory leak in ARRAY(SELECT ...) subqueries.

Repeated execution of an uncorrelated ARRAY_SUBLINK sub-select (which
I think can only happen if the sub-select is embedded in a larger,
correlated subquery) would leak memory for the duration of the query,
due to not reclaiming the array generated in the previous execution.
Per bug #6698 from Armando Miraglia.  Diagnosis and fix idea by Heikki,
patch itself by me.

This has been like this all along, so back-patch to all supported versions.

12 years agopg_dump: Fix verbosity level in LO progress messages
Alvaro Herrera [Mon, 18 Jun 2012 20:37:49 +0000 (16:37 -0400)]
pg_dump: Fix verbosity level in LO progress messages

In passing, reword another instance of the same message that was
gratuitously different.

Author: Josh Kupershmidt
after a bug report by Bosco Rama

12 years agoUpdate copyright year in forgotten places
Peter Eisentraut [Tue, 19 Jun 2012 18:36:08 +0000 (21:36 +0300)]
Update copyright year in forgotten places

found by Stefan Kaltenbrunner

12 years agoAdd missing subtitle for compressed archive logs
Magnus Hagander [Sun, 17 Jun 2012 13:20:32 +0000 (21:20 +0800)]
Add missing subtitle for compressed archive logs

12 years agoIn pg_upgrade, report pre-PG 8.1 plpython helper functions left in the
Bruce Momjian [Wed, 13 Jun 2012 16:34:03 +0000 (12:34 -0400)]
In pg_upgrade, report pre-PG 8.1 plpython helper functions left in the
public schema that no longer point to valid shared object libraries, and
suggest a solution.

Backpatch to 9.1 (already in head)

12 years agoIn pg_upgrade, verify that the install user has the same oid on both
Bruce Momjian [Wed, 13 Jun 2012 16:19:18 +0000 (12:19 -0400)]
In pg_upgrade, verify that the install user has the same oid on both
clusters, and make sure the new cluster has no additional users.

Backpatch to 9.1.

12 years agoPrevent non-streaming replication connections from being selected sync slave
Magnus Hagander [Mon, 11 Jun 2012 13:07:55 +0000 (15:07 +0200)]
Prevent non-streaming replication connections from being selected sync slave

This prevents a pg_basebackup backup session that just does a base
backup (no xlog involved at all) from becoming the synchronous slave
and thus blocking all access while it runs.

Also fixes the problem when a higher priority slave shows up it would
become the sync standby before it has reached the STREAMING state, by
making sure we can only switch to a walsender that's actually STREAMING.

Fujii Masao

12 years agoFix bug in early startup of Hot Standby with subtransactions.
Simon Riggs [Fri, 8 Jun 2012 16:35:22 +0000 (17:35 +0100)]
Fix bug in early startup of Hot Standby with subtransactions.
When HS startup is deferred because of overflowed subtransactions, ensure
that we re-initialize KnownAssignedXids for when both existing and incoming
snapshots have non-zero qualifying xids.

Fixes bug #6661 reported by Valentine Gogichashvili.

Analysis and fix by Andres Freund

12 years agoWake WALSender to reduce data loss at failover for async commit.
Simon Riggs [Thu, 7 Jun 2012 18:24:47 +0000 (19:24 +0100)]
Wake WALSender to reduce data loss at failover for async commit.
WALSender now woken up after each background flush by WALwriter, avoiding
multi-second replication delay for an all-async commit workload.
Replication delay reduced from 7s with default settings to 200ms, allowing
significantly reduced data loss at failover.

Andres Freund and Simon Riggs

12 years agoBackpatch error message fix from 81f6bbe8ade8c90f23f9286ca9ca726d3e0e310f
Magnus Hagander [Tue, 5 Jun 2012 11:13:53 +0000 (13:13 +0200)]
Backpatch error message fix from 81f6bbe8ade8c90f23f9286ca9ca726d3e0e310f

Without this, pg_basebackup doesn't tell you why it failed when for example
there is a file in the data directory that the backend doesn't have
permissions to read.

12 years agoFix some more bugs in contrib/xml2's xslt_process().
Tom Lane [Tue, 5 Jun 2012 00:12:55 +0000 (20:12 -0400)]
Fix some more bugs in contrib/xml2's xslt_process().

It failed to check for error return from xsltApplyStylesheet(), as reported
by Peter Gagarinov.  (So far as I can tell, libxslt provides no convenient
way to get a useful error message in failure cases.  There might be some
inconvenient way, but considering that this code is deprecated it's hard to
get enthusiastic about putting lots of work into it.  So I just made it say
"failed to apply stylesheet", in line with the existing error checks.)

While looking at the code I also noticed that the string returned by
xsltSaveResultToString was never freed, resulting in a session-lifespan
memory leak.

Back-patch to all supported versions.

12 years agoAvoid early reuse of btree pages, causing incorrect query results.
Simon Riggs [Fri, 1 Jun 2012 11:39:08 +0000 (12:39 +0100)]
Avoid early reuse of btree pages, causing incorrect query results.
When we allowed read-only transactions to skip assigning XIDs
we introduced the possibility that a fully deleted btree page
could be reused. This broke the index link sequence which could
then lead to indexscans silently returning fewer rows than would
have been correct. The actual incidence of silent errors from
this is thought to be very low because of the exact workload
required and locking pre-conditions. Fix is to remove pages only
if index page opaque->btpo.xact precedes RecentGlobalXmin.

Noah Misch, reviewed by Simon Riggs

12 years agoStamp 9.1.4. REL9_1_4
Tom Lane [Thu, 31 May 2012 23:07:09 +0000 (19:07 -0400)]
Stamp 9.1.4.

12 years agoUpdate release notes for 9.1.4, 9.0.8, 8.4.12, 8.3.19.
Tom Lane [Thu, 31 May 2012 23:03:39 +0000 (19:03 -0400)]
Update release notes for 9.1.4, 9.0.8, 8.4.12, 8.3.19.

12 years agoTranslation updates
Peter Eisentraut [Thu, 31 May 2012 20:31:41 +0000 (23:31 +0300)]
Translation updates

12 years agoRevert back-branch changes in behavior of age(xid).
Tom Lane [Thu, 31 May 2012 15:12:26 +0000 (11:12 -0400)]
Revert back-branch changes in behavior of age(xid).

Per discussion, it does not seem like a good idea to change the behavior of
age(xid) in a minor release, even though the old definition causes the
function to fail on hot standby slaves.  Therefore, revert commit
5829387381d2e4edf84652bb5a712f6185860670 and follow-on commits in the back
branches only.

12 years agoUpdate time zone data files to tzdata release 2012c.
Tom Lane [Thu, 31 May 2012 04:48:04 +0000 (00:48 -0400)]
Update time zone data files to tzdata release 2012c.

DST law changes in Antarctica, Armenia, Chile, Cuba, Falkland Islands,
Gaza, Haiti, Hebron, Morocco, Syria, Tokelau Islands.
Historical corrections for Canada.

12 years agoIgnore SECURITY DEFINER and SET attributes for a PL's call handler.
Tom Lane [Thu, 31 May 2012 03:28:10 +0000 (23:28 -0400)]
Ignore SECURITY DEFINER and SET attributes for a PL's call handler.

It's not very sensible to set such attributes on a handler function;
but if one were to do so, fmgr.c went into infinite recursion because
it would call fmgr_security_definer instead of the handler function proper.
There is no way for fmgr_security_definer to know that it ought to call the
handler and not the original function referenced by the FmgrInfo's fn_oid,
so it tries to do the latter, causing the whole process to start over
again.

Ordinarily such misconfiguration of a procedural language's handler could
be written off as superuser error.  However, because we allow non-superuser
database owners to create procedural languages and the handler for such a
language becomes owned by the database owner, it is possible for a database
owner to crash the backend, which ideally shouldn't be possible without
superuser privileges.  In 9.2 and up we will adjust things so that the
handler functions are always owned by superusers, but in existing branches
this is a minor security fix.

Problem noted by Noah Misch (after several of us had failed to detect
it :-().  This is CVE-2012-2655.

12 years agoExpand the allowed range of timezone offsets to +/-15:59:59 from Greenwich.
Tom Lane [Wed, 30 May 2012 23:58:41 +0000 (19:58 -0400)]
Expand the allowed range of timezone offsets to +/-15:59:59 from Greenwich.

We used to only allow offsets less than +/-13 hours, then it was +/14,
then it was +/-15.  That's still not good enough though, as per today's bug
report from Patric Bechtel.  This time I actually looked through the Olson
timezone database to find the largest offsets used anywhere.  The winners
are Asia/Manila, at -15:56:00 until 1844, and America/Metlakatla, at
+15:13:42 until 1867.  So we'd better allow offsets less than +/-16 hours.

Given the history, we are way overdue to have some greppable #define
symbols controlling this, so make some ... and also remove an obsolete
comment that didn't get fixed the last time.

Back-patch to all supported branches.

12 years agoFix incorrect password transformation in contrib/pgcrypto's DES crypt().
Tom Lane [Wed, 30 May 2012 14:53:36 +0000 (10:53 -0400)]
Fix incorrect password transformation in contrib/pgcrypto's DES crypt().

Overly tight coding caused the password transformation loop to stop
examining input once it had processed a byte equal to 0x80.  Thus, if the
given password string contained such a byte (which is possible though not
highly likely in UTF8, and perhaps also in other non-ASCII encodings), all
subsequent characters would not contribute to the hash, making the password
much weaker than it appears on the surface.

This would only affect cases where applications used DES crypt() to encode
passwords before storing them in the database.  If a weak password has been
created in this fashion, the hash will stop matching after this update has
been applied, so it will be easy to tell if any passwords were unexpectedly
weak.  Changing to a different password would be a good idea in such a case.
(Since DES has been considered inadequately secure for some time, changing
to a different encryption algorithm can also be recommended.)

This code, and the bug, are shared with at least PHP, FreeBSD, and OpenBSD.
Since the other projects have already published their fixes, there is no
point in trying to keep this commit private.

This bug has been assigned CVE-2012-2143, and credit for its discovery goes
to Rubin Xu and Joseph Bonneau.

12 years agoTeach AbortOutOfAnyTransaction to clean up partially-started transactions.
Tom Lane [Tue, 29 May 2012 03:57:14 +0000 (23:57 -0400)]
Teach AbortOutOfAnyTransaction to clean up partially-started transactions.

AbortOutOfAnyTransaction failed to do anything if the state it saw on
entry corresponded to failing partway through StartTransaction.  I fixed
AbortCurrentTransaction to cope with that case way back in commit
60b2444cc3ba037630c9b940c3c9ef01b954b87b, but evidently overlooked that
AbortOutOfAnyTransaction should do likewise.

Back-patch to all supported branches.  It's not clear that this omission
has any more-than-cosmetic consequences, but it's also not clear that it
doesn't, so back-patching seems the least risky choice.

12 years agoFix handling of pg_stat_statements.stat temporary file
Magnus Hagander [Sun, 27 May 2012 08:54:31 +0000 (10:54 +0200)]
Fix handling of pg_stat_statements.stat temporary file

Write the file to a temporary name and then rename() it into the
permanent name, to ensure it can't end up half-written and corrupt
in case of a crash during shutdown.

Unlink the file after it has been read so it's removed from the data
directory and not included in base backups going to replication slaves.

12 years agoPrevent synchronized scanning when systable_beginscan chooses a heapscan.
Tom Lane [Sat, 26 May 2012 23:09:59 +0000 (19:09 -0400)]
Prevent synchronized scanning when systable_beginscan chooses a heapscan.

The only interesting-for-performance case wherein we force heapscan here
is when we're rebuilding the relcache init file, and the only such case
that is likely to be examining a catalog big enough to be syncscanned is
RelationBuildTupleDesc.  But the early-exit optimization in that code gets
broken if we start the scan at a random place within the catalog, so that
allowing syncscan is actually a big deoptimization if pg_attribute is large
(at least for the normal case where the rows for core system catalogs have
never been changed since initdb).  Hence, prevent syncscan here.  Per my
testing pursuant to complaints from Jeff Frost and Greg Sabino Mullane,
though neither of them seem to have actually hit this specific problem.

Back-patch to 8.3, where syncscan was introduced.

12 years agoFix string truncation to be multibyte-aware in text_name and bpchar_name.
Tom Lane [Fri, 25 May 2012 21:34:58 +0000 (17:34 -0400)]
Fix string truncation to be multibyte-aware in text_name and bpchar_name.

Previously, casts to name could generate invalidly-encoded results.

Also, make these functions match namein() more exactly, by consistently
using palloc0() instead of ad-hoc zeroing code.

Back-patch to all supported branches.

Karl Schnaitter and Tom Lane

12 years agoUse binary search instead of brute-force scan in findNamespace().
Tom Lane [Fri, 25 May 2012 18:35:41 +0000 (14:35 -0400)]
Use binary search instead of brute-force scan in findNamespace().

The previous coding presented a significant bottleneck when dumping
databases containing many thousands of schemas, since the total time
spent searching would increase roughly as O(N^2) in the number of objects.
Noted by Jeff Janes, though I rewrote his proposed patch to use the
existing findObjectByOid infrastructure.

Since this is a longstanding performance bug, backpatch to all supported
versions.

12 years agopg_standby: Remove tabs from string literals
Peter Eisentraut [Wed, 23 May 2012 16:58:17 +0000 (19:58 +0300)]
pg_standby: Remove tabs from string literals

And align a bit better with the rest of the debug output.

12 years agoEnsure that seqscans check for interrupts at least once per page.
Tom Lane [Tue, 22 May 2012 23:42:12 +0000 (19:42 -0400)]
Ensure that seqscans check for interrupts at least once per page.

If a seqscan encounters many consecutive pages containing only dead tuples,
it can remain in the loop in heapgettup for a long time, and there was no
CHECK_FOR_INTERRUPTS anywhere in that loop.  This meant there were
real-world situations where a query would be effectively uncancelable for
long stretches.  Add a check placed to occur once per page, which should be
enough to provide reasonable response time without adding any measurable
overhead.

Report and patch by Merlin Moncure (though I tweaked it a bit).
Back-patch to all supported branches.

12 years agoFix error message for COMMENT/SECURITY LABEL ON COLUMN xxx IS 'yyy'
Robert Haas [Tue, 22 May 2012 15:19:33 +0000 (11:19 -0400)]
Fix error message for COMMENT/SECURITY LABEL ON COLUMN xxx IS 'yyy'

When the column name is an unqualified name, rather than table.column,
the error message complains about too many dotted names, which is
wrong.  Report by Peter Eisentraut based on examination of the
sepgsql regression test output, but the problem also affects COMMENT.
New wording as suggested by Tom Lane.

12 years agoMove postmaster's RemovePgTempFiles call to a less randomly chosen place.
Tom Lane [Tue, 22 May 2012 02:50:35 +0000 (22:50 -0400)]
Move postmaster's RemovePgTempFiles call to a less randomly chosen place.

There is no reason to do this as early as possible in postmaster startup,
and good reason not to do it until we have completely created the
postmaster's lock file, namely that it might contribute to pg_ctl thinking
that postmaster startup has timed out.  (This would require a rather
unusual amount of time to be spent scanning temp file directories, but we
have at least one field report of it happening reproducibly.)

Back-patch to 9.1.  Before that, pg_ctl didn't wait for additional info to
be added to the lock file, so it wasn't a problem.

Note that this is not a complete fix to the slow-start issue in 9.1,
because we still had identify_system_timezone being run during postmaster
start in 9.1.  But that's at least a reasonably well-defined delay, with
an easy workaround if needed, whereas the temp-files scan is not so
predictable and cannot be avoided.

12 years agoFix bug in to_tsquery().
Heikki Linnakangas [Tue, 15 May 2012 16:22:56 +0000 (19:22 +0300)]
Fix bug in to_tsquery().

We were using memcpy() to copy to a possibly overlapping memory region,
which is a no-no. Use memmove() instead.

12 years agoFix DROP TABLESPACE to unlink symlink when directory is not there.
Tom Lane [Sun, 13 May 2012 22:06:57 +0000 (18:06 -0400)]
Fix DROP TABLESPACE to unlink symlink when directory is not there.

If the tablespace directory is missing entirely, we allow DROP TABLESPACE
to go through, on the grounds that it should be possible to clean up the
catalog entry in such a situation.  However, we forgot that the pg_tblspc
symlink might still be there.  We should try to remove the symlink too
(but not fail if it's no longer there), since not doing so can lead to
weird behavior subsequently, as per report from Michael Nolan.

There was some discussion of adding dependency links to prevent DROP
TABLESPACE when the catalogs still contain references to the tablespace.
That might be worth doing too, but it's an orthogonal question, and in
any case wouldn't be back-patchable.

Back-patch to 9.0, which is as far back as the logic looks like this.
We could possibly do something similar in 8.x, but given the lack of
reports I'm not sure it's worth the trouble, and anyway the case could
not arise in the form the logic is meant to cover (namely, a post-DROP
transaction rollback having resurrected the pg_tablespace entry after
some or all of the filesystem infrastructure is gone).

12 years agoEnsure backwards compatibility for GetStableLatestTransactionId()
Simon Riggs [Sat, 12 May 2012 12:25:34 +0000 (13:25 +0100)]
Ensure backwards compatibility for GetStableLatestTransactionId()

12 years agoFix contrib/citext's upgrade script to handle array and domain cases.
Tom Lane [Fri, 11 May 2012 19:22:37 +0000 (15:22 -0400)]
Fix contrib/citext's upgrade script to handle array and domain cases.

We previously recognized that citext wouldn't get marked as collatable
during pg_upgrade from a pre-9.1 installation, and hacked its
create-from-unpackaged script to manually perform the necessary catalog
adjustments.  However, we overlooked the fact that domains over citext,
as well as the citext[] array type, need the same adjustments.  Extend
the script to handle those cases.

Also, the documentation suggested that this was only an issue in pg_upgrade
scenarios, which is quite wrong; loading any dump containing citext from a
pre-9.1 server will also result in the type being wrongly marked.

I approached the documentation problem by changing the 9.1.2 release note
paragraphs about this issue, which is historically inaccurate.  But it
seems better than having the information scattered in multiple places, and
leaving incorrect info in the 9.1.2 notes would be bad anyway.  We'll still
need to mention the issue again in the 9.1.4 notes, but perhaps they can
just reference 9.1.2 for fix instructions.

Per report from Evan Carroll.  Back-patch into 9.1.

12 years agoPrevent loss of init fork when truncating an unlogged table.
Robert Haas [Fri, 11 May 2012 13:46:42 +0000 (09:46 -0400)]
Prevent loss of init fork when truncating an unlogged table.

Fixes bug #6635, reported by Akira Kurosawa.

12 years agoRemove extraneous #include "storage/proc.h"
Simon Riggs [Fri, 11 May 2012 13:46:19 +0000 (14:46 +0100)]
Remove extraneous #include "storage/proc.h"

12 years agoEnsure age() returns a stable value rather than the latest value
Simon Riggs [Fri, 11 May 2012 13:38:11 +0000 (14:38 +0100)]
Ensure age() returns a stable value rather than the latest value

12 years agoOn GiST page split, release the locks on child pages before recursing up.
Heikki Linnakangas [Fri, 11 May 2012 09:35:33 +0000 (12:35 +0300)]
On GiST page split, release the locks on child pages before recursing up.

When inserting the downlinks for a split gist page, we used hold the locks
on the child pages until the insertion into the parent - and recursively its
parent if it had to be split too - were all completed. Change that so that
the locks on child pages are released after the insertion in the immediate
parent is done, before recursing further up the tree.

This reduces the number of lwlocks that are held simultaneously. Holding
many locks is bad for concurrency, and in extreme cases you can even hit
the limit of 100 simultaneously held lwlocks in a backend. If you're really
unlucky, you can hit the limit while in a critical section, which brings
down the whole system.

This fixes bug #6629 reported by Tom Forbes. Backpatch to 9.1. The page
splitting code was rewritten in 9.1, and the old code did not have this
problem.

12 years agoFix Windows implementation of PGSemaphoreLock.
Tom Lane [Thu, 10 May 2012 17:36:18 +0000 (13:36 -0400)]
Fix Windows implementation of PGSemaphoreLock.

The original coding failed to reset ImmediateInterruptOK before returning,
which would potentially allow a subsequent query-cancel interrupt to be
accepted at an unsafe point.  This is a really nasty bug since it's so hard
to predict the consequences, but they could be unpleasant.

Also, ensure that signal handlers are serviced before this function
returns, even if the semaphore is already set.  This should make the
behavior more like Unix.

Back-patch to all supported versions.

12 years agoOnly attempt to show collations on servers >= 9.1.
Magnus Hagander [Thu, 10 May 2012 07:11:38 +0000 (09:11 +0200)]
Only attempt to show collations on servers >= 9.1.

Show a proper error message instead of a SQL error.

Josh Kupershmidt

12 years agoPL/pgSQL RETURN NEXT was leaking converted tuples, causing
Joe Conway [Thu, 10 May 2012 05:53:17 +0000 (22:53 -0700)]
PL/pgSQL RETURN NEXT was leaking converted tuples, causing
out of memory when looping through large numbers of rows.
Flag the converted tuples to be freed. Complaint and patch
by Joe.

12 years agoAvoid xid error from age() function when run on Hot Standby
Simon Riggs [Wed, 9 May 2012 12:59:30 +0000 (13:59 +0100)]
Avoid xid error from age() function when run on Hot Standby

12 years agoOverdue code review for transaction-level advisory locks patch.
Tom Lane [Fri, 4 May 2012 21:43:35 +0000 (17:43 -0400)]
Overdue code review for transaction-level advisory locks patch.

Commit 62c7bd31c8878dd45c9b9b2429ab7a12103f3590 had assorted problems, most
visibly that it broke PREPARE TRANSACTION in the presence of session-level
advisory locks (which should be ignored by PREPARE), as per a recent
complaint from Stephen Rees.  More abstractly, the patch made the
LockMethodData.transactional flag not merely useless but outright
dangerous, because in point of fact that flag no longer tells you anything
at all about whether a lock is held transactionally.  This fix therefore
removes that flag altogether.  We now rely entirely on the convention
already in use in lock.c that transactional lock holds must be owned by
some ResourceOwner, while session holds are never so owned.  Setting the
locallock struct's owner link to NULL thus denotes a session hold, and
there is no redundant marker for that.

PREPARE TRANSACTION now works again when there are session-level advisory
locks, and it is also able to transfer transactional advisory locks to the
prepared transaction, but for implementation reasons it throws an error if
we hold both types of lock on a single lockable object.  Perhaps it will be
worth improving that someday.

Assorted other minor cleanup and documentation editing, as well.

Back-patch to 9.1, except that in the 9.1 branch I did not remove the
LockMethodData.transactional flag for fear of causing an ABI break for
any external code that might be examining those structs.

12 years agoRemove link to ODBCng project from the docs.
Magnus Hagander [Thu, 3 May 2012 11:01:31 +0000 (13:01 +0200)]
Remove link to ODBCng project from the docs.

This backatches Heikki's patch in 140a4fbf1a87891a79a2c61a08416828d39f286a
to make sure the documentation on the website gets updated, since
we're regularly receiving complains about this link.

12 years agoFix printing of whole-row Vars at top level of a SELECT targetlist.
Tom Lane [Fri, 27 Apr 2012 23:49:26 +0000 (19:49 -0400)]
Fix printing of whole-row Vars at top level of a SELECT targetlist.

Normally whole-row Vars are printed as "tabname.*".  However, that does not
work at top level of a targetlist, because per SQL standard the parser will
think that the "*" should result in column-by-column expansion; which is
not at all what a whole-row Var implies.  We used to just print the table
name in such cases, which works most of the time; but it fails if the table
name matches a column name available anywhere in the FROM clause.  This
could lead for instance to a view being interpreted differently after dump
and reload.  Adding parentheses doesn't fix it, but there is a reasonably
simple kluge we can use instead: attach a no-op cast, so that the "*" isn't
syntactically at top level anymore.  This makes the printing of such
whole-row Vars a lot more consistent with other Vars, and may indeed fix
more cases than just the reported one; I'm suspicious that cases involving
schema qualification probably didn't work properly before, either.

Per bug report and fix proposal from Abbas Butt, though this patch is quite
different in detail from his.

Back-patch to all supported versions.

12 years agoFix syslogger's rotation disable/re-enable logic.
Tom Lane [Fri, 27 Apr 2012 04:12:47 +0000 (00:12 -0400)]
Fix syslogger's rotation disable/re-enable logic.

If it fails to open a new log file, the syslogger assumes there's something
wrong with its parameters (such as log_directory), and stops attempting
automatic time-based or size-based log file rotations.  Sending it SIGHUP
is supposed to start that up again.  However, the original coding for that
was really bogus, involving clobbering a couple of GUC variables and hoping
that SIGHUP processing would restore them.  Get rid of that technique in
favor of maintaining a separate flag showing we've turned rotation off.
Per report from Mark Kirkwood.

Also, the syslogger will automatically attempt to create the log_directory
directory if it doesn't exist, but that was only happening at startup.
For consistency and ease of use, it should do the same whenever the value
of log_directory is changed by SIGHUP.

Back-patch to all supported branches.

12 years agoPL/Python: Accept strings in functions returning composite types
Peter Eisentraut [Thu, 26 Apr 2012 18:03:48 +0000 (21:03 +0300)]
PL/Python: Accept strings in functions returning composite types

Before 9.1, PL/Python functions returning composite types could return
a string and it would be parsed using record_in.  The 9.1 changes made
PL/Python only expect dictionaries, tuples, or objects supporting
getattr as output of composite functions, resulting in a regression
and a confusing error message, as the strings were interpreted as
sequences and the code for transforming lists to database tuples was
used.  Fix this by treating strings separately as before, before
checking for the other types.

The reason why it's important to support string to database tuple
conversion is that trigger functions on tables with composite columns
get the composite row passed in as a string (from record_out).
Without supporting converting this back using record_in, this makes it
impossible to implement pass-through behavior for these columns, as
PL/Python no longer accepts strings for composite values.

A better solution would be to fix the code that transforms composite
inputs into Python objects to produce dictionaries that would then be
correctly interpreted by the Python->PostgreSQL counterpart code.  But
that would be too invasive to backpatch to 9.1, and it is too late in
the 9.2 cycle to attempt it.  It should be revisited in the future,
though.

Reported as bug #6559 by Kirill Simonov.

Jan Urbański

12 years agoFix planner's handling of RETURNING lists in writable CTEs.
Tom Lane [Thu, 26 Apr 2012 00:20:43 +0000 (20:20 -0400)]
Fix planner's handling of RETURNING lists in writable CTEs.

setrefs.c failed to do "rtoffset" adjustment of Vars in RETURNING lists,
which meant they were left with the wrong varnos when the RETURNING list
was in a subquery.  That was never possible before writable CTEs, of
course, but now it's broken.  The executor fails to notice any problem
because ExecEvalVar just references the ecxt_scantuple for any normal
varno; but EXPLAIN breaks when the varno is wrong, as illustrated in a
recent complaint from Bartosz Dmytrak.

Since the eventual rtoffset of the subquery is not known at the time
we are preparing its plan node, the previous scheme of executing
set_returning_clause_references() at that time cannot handle this
adjustment.  Fortunately, it turns out that we don't really need to do it
that way, because all the needed information is available during normal
setrefs.c execution; we just have to dig it out of the ModifyTable node.
So, do that, and get rid of the kluge of early setrefs processing of
RETURNING lists.  (This is a little bit of a cheat in the case of inherited
UPDATE/DELETE, because we are not passing a "root" struct that corresponds
exactly to what the subplan was built with.  But that doesn't matter, and
anyway this is less ugly than early setrefs processing was.)

Back-patch to 9.1, where the problem became possible to hit.

12 years agoFix edge-case behavior of pg_next_dst_boundary().
Tom Lane [Wed, 25 Apr 2012 21:25:18 +0000 (17:25 -0400)]
Fix edge-case behavior of pg_next_dst_boundary().

Due to rather sloppy thinking (on my part, I'm afraid) about the
appropriate behavior for boundary conditions, pg_next_dst_boundary() gave
undefined, platform-dependent results when the input time is exactly the
last recorded DST transition time for the specified time zone, as a result
of fetching values one past the end of its data arrays.

Change its specification to be that it always finds the next DST boundary
*after* the input time, and adjust code to match that.  The sole existing
caller, DetermineTimeZoneOffset, doesn't actually care about this
distinction, since it always uses a probe time earlier than the instant
that it does care about.  So it seemed best to me to change the API to make
the result=1 and result=0 cases more consistent, specifically to ensure
that the "before" outputs always describe the state at the given time,
rather than hacking the code to obey the previous API comment exactly.

Per bug #6605 from Sergey Burladyan.  Back-patch to all supported versions.

12 years agoPL/Python: Improve error messages
Peter Eisentraut [Wed, 25 Apr 2012 18:11:59 +0000 (21:11 +0300)]
PL/Python: Improve error messages

12 years agoRevert recent commit re positional arguments.
Andrew Dunstan [Wed, 18 Apr 2012 14:58:24 +0000 (10:58 -0400)]
Revert recent commit re positional arguments.

12 years agoFix copyfuncs/equalfuncs support for ReassignOwnedStmt.
Robert Haas [Wed, 18 Apr 2012 14:45:18 +0000 (10:45 -0400)]
Fix copyfuncs/equalfuncs support for ReassignOwnedStmt.

Noah Misch

12 years agoDon't override arguments set via options with positional arguments.
Andrew Dunstan [Tue, 17 Apr 2012 22:37:42 +0000 (18:37 -0400)]
Don't override arguments set via options with positional arguments.

A number of utility programs were rather careless about paremeters
that can be set via both an option argument and a positional
argument. This leads to results which can violate the Principal
Of Least Astonishment. These changes refuse to use positional
arguments to override settings that have been made via positional
arguments. The changes are backpatched to all live branches.

12 years agoDon't wait for the commit record to be replicated if we wrote no WAL.
Heikki Linnakangas [Tue, 17 Apr 2012 13:28:31 +0000 (16:28 +0300)]
Don't wait for the commit record to be replicated if we wrote no WAL.

When using synchronous replication, we waited for the commit record to be
replicated, but if we our transaction didn't write any other WAL records,
that's not required because we don't even flush the WAL locally to disk in
that case. This lead to long waits when committing a transaction that only
modified a temporary table. Bug spotted by Thom Brown.

12 years agoClamp indexscan filter condition cost estimate to be not less than zero.
Tom Lane [Thu, 12 Apr 2012 00:24:25 +0000 (20:24 -0400)]
Clamp indexscan filter condition cost estimate to be not less than zero.

cost_index tries to estimate the per-tuple costs of evaluating filter
conditions (a/k/a qpquals) by subtracting the estimated cost of the
indexqual conditions from that of the baserestrictinfo conditions.  This is
correct so long as the indexquals list is a subset of the baserestrictinfo
list.  However, in the presence of derived indexable conditions it's
completely wrong, leading to bogus or even negative scan cost estimates,
as seen for example in bug #6579 from Istvan Endredy.  In practice the
problem isn't severe except in the specific case of a LIKE optimization on
a functional index containing a very expensive function.

A proper fix for this might change cost estimates by more than people would
like for stable branches, so in the back branches let's just clamp the cost
difference to be not less than zero.  That will at least prevent completely
insane behavior, while not changing the results normally.

12 years agoIgnore missing schemas during non-interactive assignment of search_path.
Tom Lane [Wed, 11 Apr 2012 16:02:14 +0000 (12:02 -0400)]
Ignore missing schemas during non-interactive assignment of search_path.

This aligns 9.1's behavior with that of older branches.  HEAD is now even
laxer, ignoring missing schemas all the time, but that seems like too big
a change for a released branch.  Per complaint from Robert Haas.

12 years agoFix pg_upgrade to properly upgrade a table that is stored in the cluster
Bruce Momjian [Tue, 10 Apr 2012 23:57:14 +0000 (19:57 -0400)]
Fix pg_upgrade to properly upgrade a table that is stored in the cluster
default tablespace, but part of a database that is in a user-defined
tablespace.  Caused "file not found" error during upgrade.

Per bug report from Ants Aasma.

Backpatch to 9.1 and 9.0.

12 years agoAdjust various references to GEQO being non-deterministic.
Tom Lane [Tue, 10 Apr 2012 00:49:06 +0000 (20:49 -0400)]
Adjust various references to GEQO being non-deterministic.

It's still non-deterministic in some sense ... but given fixed settings
and identical planning problems, it will now always choose the same plan,
so we probably shouldn't tar it with that brush.  Per bug #6565 from
Guillaume Cottenceau.  Back-patch to 9.0 where the behavior was fixed.

12 years agoFix an Assert that turns out to be reachable after all.
Tom Lane [Mon, 9 Apr 2012 15:58:24 +0000 (11:58 -0400)]
Fix an Assert that turns out to be reachable after all.

estimate_num_groups() gets unhappy with
create table empty();
select * from empty except select * from empty e2;
I can't see any actual use-case for such a query (and the table is illegal
per SQL spec), but it seems like a good idea that it not cause an assert
failure.

12 years agoset_stack_base() no longer needs to be called in PostgresMain.
Heikki Linnakangas [Sun, 8 Apr 2012 16:39:12 +0000 (19:39 +0300)]
set_stack_base() no longer needs to be called in PostgresMain.

This was a thinko in previous commit. Now that stack base pointer is now set
in PostmasterMain and SubPostmasterMain, it doesn't need to be set in
PostgresMain anymore.

12 years agoDo stack-depth checking in all postmaster children.
Heikki Linnakangas [Sun, 8 Apr 2012 15:28:12 +0000 (18:28 +0300)]
Do stack-depth checking in all postmaster children.

We used to only initialize the stack base pointer when starting up a regular
backend, not in other processes. In particular, autovacuum workers can run
arbitrary user code, and without stack-depth checking, infinite recursion
in e.g an index expression will bring down the whole cluster.

The comment about PL/Java using set_stack_base() is not yet true. As the
code stands, PL/java still modifies the stack_base_ptr variable directly.
However, it's been discussed in the PL/Java mailing list that it should be
changed to use the function, because PL/Java is currently oblivious to the
register stack used on Itanium. There's another issues with PL/Java, namely
that the stack base pointer it sets is not really the base of the stack, it
could be something close to the bottom of the stack. That's a separate issue
that might need some further changes to this code, but that's a different
story.

Backpatch to all supported releases.

12 years agoUpdate URL for pgtclng project.
Tom Lane [Fri, 6 Apr 2012 23:00:18 +0000 (19:00 -0400)]
Update URL for pgtclng project.

Thom Brown

12 years agoFix misleading output from gin_desc().
Tom Lane [Fri, 6 Apr 2012 22:10:26 +0000 (18:10 -0400)]
Fix misleading output from gin_desc().

XLOG_GIN_UPDATE_META_PAGE and XLOG_GIN_DELETE_LISTPAGE records were printed
with a list link field labeled as "blkno", which was confusing, especially
when the link was empty (InvalidBlockNumber).  Print the metapage block
number instead, since that's what's actually being updated.  We could
include the link values too as a separate field, but not clear it's worth
the trouble.

Back-patch to 8.4 where the dubious code was added.

12 years agoFix syslogger to not lose log coherency under high load.
Tom Lane [Wed, 4 Apr 2012 19:05:16 +0000 (15:05 -0400)]
Fix syslogger to not lose log coherency under high load.

The original coding of the syslogger had an arbitrary limit of 20 large
messages concurrently in progress, after which it would just punt and dump
message fragments to the output file separately.  Our ambitions are a bit
higher than that now, so allow the data structure to expand as necessary.

Reported and patched by Andrew Dunstan; some editing by Tom

12 years agoFix a couple of contrib/dblink bugs.
Tom Lane [Wed, 4 Apr 2012 00:43:20 +0000 (20:43 -0400)]
Fix a couple of contrib/dblink bugs.

dblink_exec leaked temporary database connections if any error occurred
after connection setup, for example
SELECT dblink_exec('...connect string...', 'select 1/0');
Add a PG_TRY block to ensure PQfinish gets done when it is needed.
(dblink_record_internal is on the hairy edge of needing similar treatment,
but seems not to be actively broken at the moment.)

Also, in 9.0 and up, only one of the three functions using tuplestore
return mode was properly checking that the query context would allow
a tuplestore result.

Noted while reviewing dblink patch.  Back-patch to all supported branches.

12 years agoFix O(N^2) behavior in pg_dump when many objects are in dependency loops.
Tom Lane [Sat, 31 Mar 2012 19:51:11 +0000 (15:51 -0400)]
Fix O(N^2) behavior in pg_dump when many objects are in dependency loops.

Combining the loop workspace with the record of already-processed objects
might have been a cute trick, but it behaves horridly if there are many
dependency loops to repair: the time spent in the first step of findLoop()
grows as O(N^2).  Instead use a separate flag array indexed by dump ID,
which we can check in constant time.  The length of the workspace array
is now never more than the actual length of a dependency chain, which
should be reasonably short in all cases of practical interest.  The code
is noticeably easier to understand this way, too.

Per gripe from Mike Roest.  Since this is a longstanding performance bug,
backpatch to all supported versions.

12 years agoFix O(N^2) behavior in pg_dump for large numbers of owned sequences.
Tom Lane [Sat, 31 Mar 2012 18:42:23 +0000 (14:42 -0400)]
Fix O(N^2) behavior in pg_dump for large numbers of owned sequences.

The loop that matched owned sequences to their owning tables required time
proportional to number of owned sequences times number of tables; although
this work was only expended in selective-dump situations, which is probably
why the issue wasn't recognized long since.  Refactor slightly so that we
can perform this work after the index array for findTableByOid has been
set up, reducing the time to O(M log N).

Per gripe from Mike Roest.  Since this is a longstanding performance bug,
backpatch to all supported versions.

12 years agoFix dblink's failure to report correct connection name in error messages.
Tom Lane [Thu, 29 Mar 2012 21:52:33 +0000 (17:52 -0400)]
Fix dblink's failure to report correct connection name in error messages.

The DBLINK_GET_CONN and DBLINK_GET_NAMED_CONN macros did not set the
surrounding function's conname variable, causing errors to be incorrectly
reported as having occurred on the "unnamed" connection in some cases.
This bug was actually visible in two cases in the regression tests,
but apparently whoever added those cases wasn't paying attention.

Noted by Kyotaro Horiguchi, though this is different from his proposed
patch.

Back-patch to 8.4; 8.3 does not have the same type of error reporting
so the patch is not relevant.

12 years agoCorrect epoch of txid_current() when executed on a Hot Standby server.
Simon Riggs [Thu, 29 Mar 2012 13:57:08 +0000 (14:57 +0100)]
Correct epoch of txid_current() when executed on a Hot Standby server.
Initialise ckptXidEpoch from starting checkpoint and maintain the correct
value as we roll forwards. This allows GetNextXidAndEpoch() to return the
correct epoch when executed during recovery. Backpatch to 9.0 when the
problem is first observable by a user.

Bug report from Daniel Farina

12 years agopg_basebackup: Error handling fixes.
Robert Haas [Wed, 28 Mar 2012 16:19:22 +0000 (12:19 -0400)]
pg_basebackup: Error handling fixes.

Thomas Ogrisegg and Fujii Masao

12 years agoFix COPY FROM for null marker strings that correspond to invalid encoding.
Tom Lane [Mon, 26 Mar 2012 03:17:27 +0000 (23:17 -0400)]
Fix COPY FROM for null marker strings that correspond to invalid encoding.

The COPY documentation says "COPY FROM matches the input against the null
string before removing backslashes".  It is therefore reasonable to presume
that null markers like E'\\0' will work ... and they did, until someone put
the tests in the wrong order during microoptimization-driven rewrites.
Since then, we've been failing if the null marker is something that would
de-escape to an invalidly-encoded string.  Since null markers generally
need to be something that can't appear in the data, this represents a
nontrivial loss of functionality; surprising nobody noticed it earlier.

Per report from Jeff Davis.  Backpatch to 8.4 where this got broken.

12 years agoFix planner's handling of outer PlaceHolderVars within subqueries.
Tom Lane [Sat, 24 Mar 2012 20:21:48 +0000 (16:21 -0400)]
Fix planner's handling of outer PlaceHolderVars within subqueries.

For some reason, in the original coding of the PlaceHolderVar mechanism
I had supposed that PlaceHolderVars couldn't propagate into subqueries.
That is of course entirely possible.  When it happens, we need to treat
an outer-level PlaceHolderVar much like an outer Var or Aggref, that is
SS_replace_correlation_vars() needs to replace the PlaceHolderVar with
a Param, and then when building the finished SubPlan we have to provide
the PlaceHolderVar expression as an actual parameter for the SubPlan.
The handling of the contained expression is a bit delicate but it can be
treated exactly like an Aggref's expression.

In addition to the missing logic in subselect.c, prepjointree.c was failing
to search subqueries for PlaceHolderVars that need their relids adjusted
during subquery pullup.  It looks like everyplace else that touches
PlaceHolderVars got it right, though.

Per report from Mark Murawski.  In 9.1 and HEAD, queries affected by this
oversight would fail with "ERROR: Upper-level PlaceHolderVar found where
not expected".  But in 9.0 and 8.4, you'd silently get possibly-wrong
answers, since the value transmitted into the subquery wouldn't go to null
when it should.

12 years agoCast some printf arguments to avoid possibly-nonportable behavior.
Tom Lane [Sat, 24 Mar 2012 00:18:08 +0000 (20:18 -0400)]
Cast some printf arguments to avoid possibly-nonportable behavior.

Per compiler warnings on buildfarm member black_firefly.

12 years agoUpdate docs on numeric storage requirements.
Robert Haas [Thu, 22 Mar 2012 19:40:27 +0000 (15:40 -0400)]
Update docs on numeric storage requirements.

Since 9.1, the minimum overhead is three bytes, not five.

Fujii Masao

12 years agoFix GET DIAGNOSTICS for case of assignment to function's first variable.
Tom Lane [Thu, 22 Mar 2012 18:13:17 +0000 (14:13 -0400)]
Fix GET DIAGNOSTICS for case of assignment to function's first variable.

An incorrect and entirely unnecessary "safety check" in exec_stmt_getdiag()
caused the code to treat an assignment to a variable with dno zero as a
no-op.  Unfortunately, that's a perfectly valid dno.  This has been broken
since GET DIAGNOSTICS was invented.  It's not terribly surprising that the
bug went unnoticed for so long, since in most cases you probably wouldn't
use the function's first-created variable (normally its first parameter)
as a GET DIAGNOSTICS target.  Nonetheless, it's broken.  Per bug #6551
from Adam Buraczewski.

12 years agoBack-patch contrib/vacuumlo's new -l (limit) option into 9.0 and 9.1.
Tom Lane [Wed, 21 Mar 2012 17:04:07 +0000 (13:04 -0400)]
Back-patch contrib/vacuumlo's new -l (limit) option into 9.0 and 9.1.

Since 9.0, removing lots of large objects in a single transaction risks
exceeding max_locks_per_transaction, because we merged large object removal
into the generic object-drop mechanism, which takes out an exclusive lock
on each object to be dropped.  This creates a hazard for contrib/vacuumlo,
which has historically tried to drop all unreferenced large objects in one
transaction.  There doesn't seem to be any correctness requirement to do it
that way, though; we only need to drop enough large objects per transaction
to amortize the commit costs.

To prevent a regression from pre-9.0 releases wherein vacuumlo worked just
fine, back-patch commits b69f2e36402aaa222ed03c1769b3de6d5be5f302 and
64c604898e812aa93c124c666e8709fff1b8dd26, which break vacuumlo's deletions
into multiple transactions with a user-controllable upper limit on the
number of objects dropped per transaction.

Tim Lewis, Robert Haas, Tom Lane

12 years agoDon't allow CREATE TABLE AS to put relations in pg_global.
Robert Haas [Wed, 21 Mar 2012 16:38:34 +0000 (12:38 -0400)]
Don't allow CREATE TABLE AS to put relations in pg_global.

This was never intended to be allowed, and is blocked for an ordinary
CREATE TABLE, but CREATE TABLE AS slipped through the cracks.  This
commit won't do anything to fix existing cases where this has loophole
has been exploited, but it still seems prudent to lock it down going
forward.

Back-branch commit only, as this problem has been refactored away
on the master branch.

Andres Freund

12 years agoFix bug where walsender goes into a busy loop if connection is terminated.
Heikki Linnakangas [Wed, 21 Mar 2012 15:43:53 +0000 (17:43 +0200)]
Fix bug where walsender goes into a busy loop if connection is terminated.

The problem was that ResetLatch was not being called in the walsender loop
if the connection was terminated, so WaitLatch never sleeps until the
terminated connection is detected. In the master-branch, this was already
fixed as a side-effect of some refactoring of the loop. This commit
backports that refactoring to 9.1. 9.0 does not have this bug, because we
didn't use latches back then.

Fujii Masao

12 years agoUpdate struct Trigger in docs
Alvaro Herrera [Tue, 20 Mar 2012 16:14:16 +0000 (13:14 -0300)]
Update struct Trigger in docs

12 years agoplperl: Package-qualify _TD
Alvaro Herrera [Mon, 19 Mar 2012 20:29:05 +0000 (17:29 -0300)]
plperl: Package-qualify _TD

Failing to do so causes trigger invocation to fail when they are nested
within a function invocation that changes the current package.

Backpatch to 9.1; previous releases used a different method to obtain
_TD.  Per bug report from Mark Murawski (bug #6511)

Author: Alex Hunsaker

12 years agoIn pg_upgrade, remove dependency on pg_config, as that might not be in
Bruce Momjian [Mon, 19 Mar 2012 13:31:50 +0000 (09:31 -0400)]
In pg_upgrade, remove dependency on pg_config, as that might not be in
the non-development install.  Instead, use the LOAD mechanism to check
for the pg_upgrade_support shared object, like we do for other shared
object checks.

Backpatch to 9.1.

Report from Àlvaro

12 years agoHonor inputdir and outputdir when converting regression files.
Andrew Dunstan [Sat, 17 Mar 2012 21:30:52 +0000 (17:30 -0400)]
Honor inputdir and outputdir when converting regression files.

When converting source files, pg_regress' inputdir and outputdir options were
ignored when computing the locations of the destination files. In consequence,
these options were effectively unusable when the regression inputs need to
be adjusted by pg_regress. This patch makes pg_regress put the converted files
in the same place that these options specify non-converted input or results
files are to be found. Backpatched to all live branches.

12 years agopg_restore: Fix memory and file descriptor leak with directory format
Peter Eisentraut [Fri, 16 Mar 2012 17:53:31 +0000 (19:53 +0200)]
pg_restore: Fix memory and file descriptor leak with directory format

found by Coverity

12 years agoRevisit handling of UNION ALL subqueries with non-Var output columns.
Tom Lane [Fri, 16 Mar 2012 17:11:20 +0000 (13:11 -0400)]
Revisit handling of UNION ALL subqueries with non-Var output columns.

In commit 57664ed25e5dea117158a2e663c29e60b3546e1c I tried to fix a bug
reported by Teodor Sigaev by making non-simple-Var output columns distinct
(by wrapping their expressions with dummy PlaceHolderVar nodes).  This did
not work too well.  Commit b28ffd0fcc583c1811e5295279e7d4366c3cae6c fixed
some ensuing problems with matching to child indexes, but per a recent
report from Claus Stadler, constraint exclusion of UNION ALL subqueries was
still broken, because constant-simplification didn't handle the injected
PlaceHolderVars well either.  On reflection, the original patch was quite
misguided: there is no reason to expect that EquivalenceClass child members
will be distinct.  So instead of trying to make them so, we should ensure
that we can cope with the situation when they're not.

Accordingly, this patch reverts the code changes in the above-mentioned
commits (though the regression test cases they added stay).  Instead, I've
added assorted defenses to make sure that duplicate EC child members don't
cause any problems.  Teodor's original problem ("MergeAppend child's
targetlist doesn't match MergeAppend") is addressed more directly by
revising prepare_sort_from_pathkeys to let the parent MergeAppend's sort
list guide creation of each child's sort list.

In passing, get rid of add_sort_column; as far as I can tell, testing for
duplicate sort keys at this stage is dead code.  Certainly it doesn't
trigger often enough to be worth expending cycles on in ordinary queries.
And keeping the test would've greatly complicated the new logic in
prepare_sort_from_pathkeys, because comparing pathkey list entries against
a previous output array requires that we not skip any entries in the list.

Back-patch to 9.1, like the previous patches.  The only known issue in
this area that wasn't caused by the ill-advised previous patches was the
MergeAppend planning failure, which of course is not relevant before 9.1.
It's possible that we need some of the new defenses against duplicate child
EC entries in older branches, but until there's some clear evidence of that
I'm going to refrain from back-patching further.

12 years agoPatch some corner-case bugs in pl/python.
Tom Lane [Tue, 13 Mar 2012 19:26:36 +0000 (15:26 -0400)]
Patch some corner-case bugs in pl/python.

Dave Malcolm of Red Hat is working on a static code analysis tool for
Python-related C code.  It reported a number of problems in plpython,
most of which were failures to check for NULL results from object-creation
functions, so would only be an issue in very-low-memory situations.

Patch in HEAD and 9.1.  We could go further back but it's not clear that
these issues are important enough to justify the work.

Jan Urbański

12 years agoRemove tabs in SGML files
Bruce Momjian [Mon, 12 Mar 2012 14:13:39 +0000 (10:13 -0400)]
Remove tabs in SGML files

12 years agoAdd description for --no-locale and --text-search-config.
Tatsuo Ishii [Sun, 11 Mar 2012 10:24:34 +0000 (19:24 +0900)]
Add description for --no-locale and --text-search-config.

12 years agoecpg: Fix off-by-one error in memory copying
Peter Eisentraut [Thu, 8 Mar 2012 20:29:01 +0000 (22:29 +0200)]
ecpg: Fix off-by-one error in memory copying

In a rare case, one byte past the end of memory belonging to the
sqlca_t structure would be written to.

found by Coverity

12 years agoecpg: Fix rare memory leaks
Peter Eisentraut [Thu, 8 Mar 2012 20:21:12 +0000 (22:21 +0200)]
ecpg: Fix rare memory leaks

found by Coverity