]> granicus.if.org Git - postgresql/log
postgresql
12 years agoWhen building with LWLOCK_STATS, initialize the stats in LWLockWaitUntilFree.
Heikki Linnakangas [Tue, 7 Feb 2012 07:38:25 +0000 (09:38 +0200)]
When building with LWLOCK_STATS, initialize the stats in LWLockWaitUntilFree.

If LWLockWaitUntilFree was called before the first LWLockAcquire call, you
would either crash because of access to uninitialized array or account the
acquisition incorrectly. LWLockConditionalAcquire doesn't have this problem
because it doesn't update the lwlock stats.

In practice, this never happens because there is no codepath where you would
call LWLockWaitUntilfree before LWLockAcquire after a new process is
launched. But that's just accidental, there's no guarantee that that's
always going to be true in the future.

Spotted by Jeff Janes.

12 years agoFix postmaster to attempt restart after a hot-standby crash.
Tom Lane [Mon, 6 Feb 2012 20:29:26 +0000 (15:29 -0500)]
Fix postmaster to attempt restart after a hot-standby crash.

The postmaster was coded to treat any unexpected exit of the startup
process (i.e., the WAL replay process) as a catastrophic crash, and not try
to restart it. This was OK so long as the startup process could not have
any sibling postmaster children.  However, if a hot-standby backend
crashes, we SIGQUIT the startup process along with everything else, and the
resulting exit is hardly "unexpected".  Treating it as such meant we failed
to restart a standby server after any child crash at all, not only a crash
of the WAL replay process as intended.  Adjust that.  Back-patch to 9.0
where hot standby was introduced.

12 years agoAllow the connection keyword array to carry all seven items in ecpglib.
Michael Meskes [Mon, 6 Feb 2012 19:46:48 +0000 (20:46 +0100)]
Allow the connection keyword array to carry all seven items in ecpglib.

12 years agoAvoid throwing ERROR during WAL replay of DROP TABLESPACE.
Tom Lane [Mon, 6 Feb 2012 19:43:58 +0000 (14:43 -0500)]
Avoid throwing ERROR during WAL replay of DROP TABLESPACE.

Although we will not even issue an XLOG_TBLSPC_DROP WAL record unless
removal of the tablespace's directories succeeds, that does not guarantee
that the same operation will succeed during WAL replay.  Foreseeable
reasons for it to fail include temp files created in the tablespace by Hot
Standby backends, wrong directory permissions on a standby server, etc etc.
The original coding threw ERROR if replay failed to remove the directories,
but that is a serious overreaction.  Throwing an error aborts recovery,
and worse means that manual intervention will be needed to get the database
to start again, since otherwise the same error will recur on subsequent
attempts to replay the same WAL record.  And the consequence of failing to
remove the directories is only that some probably-small amount of disk
space is wasted, so it hardly seems justified to throw an error.
Accordingly, arrange to report such failures as LOG messages and keep going
when a failure occurs during replay.

Back-patch to 9.0 where Hot Standby was introduced.  In principle such
problems can occur in earlier releases, but Hot Standby increases the odds
of trouble significantly.  Given the lack of field reports of such issues,
I'm satisfied with patching back as far as the patch applies easily.

12 years agopg_dump: Remove global Archive pointer.
Robert Haas [Mon, 6 Feb 2012 19:07:55 +0000 (14:07 -0500)]
pg_dump: Remove global Archive pointer.

Instead, everything that needs the Archive object now gets it as a
parameter.  This is necessary infrastructure for parallel pg_dump,
but is also amply justified by the ugliness of the current code
(though a lot more than this is needed to fix that problem).

12 years agopg_dump: Reduce dependencies on global variables.
Robert Haas [Mon, 6 Feb 2012 17:52:36 +0000 (12:52 -0500)]
pg_dump: Reduce dependencies on global variables.

Change various places in the code that are referencing the global
Archive object g_fout to instead reference the Archive object fout
which is already being passed as a parameter.  For parallel pg_dump to
work, we're going to need multiple Archive(Handle) objects, so the
real solution here is to pass down the Archive object to everywhere
that it needs to go, but we might as well pick the low-hanging fruit
first.

12 years agoAdd locking around WAL-replay modification of shared-memory variables.
Tom Lane [Mon, 6 Feb 2012 17:34:10 +0000 (12:34 -0500)]
Add locking around WAL-replay modification of shared-memory variables.

Originally, most of this code assumed that no Postgres backends could be
running concurrently with it, and so no locking could be needed.  That
assumption fails in Hot Standby.  While it's still true that Hot Standby
backends should never change values like nextXid, they can examine them,
and consistency is important in some cases such as when computing a
snapshot.  Therefore, prudence requires that WAL replay code obtain the
relevant locks when modifying such variables, even though it can examine
them without taking a lock.  We were following that coding rule in some
places but not all.  This commit applies the coding rule uniformly to all
updates of ShmemVariableCache and MultiXactState fields; a search of the
replay routines did not find any other cases that seemed to be at risk.

In addition, this commit fixes a longstanding thinko in replay of NEXTOID
and checkpoint records: we tried to advance nextOid only if it was behind
the value in the WAL record, but the comparison would draw the wrong
conclusion if OID wraparound had occurred since the previous value.
Better to just unconditionally assign the new value, since OID assignment
shouldn't be happening during replay anyway.

The additional locking seems to be more in the nature of future-proofing
than fixing any live bug, so I am not going to back-patch it.  The NEXTOID
fix will be back-patched separately.

12 years agoRemove dead declaration.
Robert Haas [Mon, 6 Feb 2012 17:09:20 +0000 (12:09 -0500)]
Remove dead declaration.

12 years agofe-misc.c depends on pg_config_paths.h
Alvaro Herrera [Mon, 6 Feb 2012 14:50:01 +0000 (11:50 -0300)]
fe-misc.c depends on pg_config_paths.h

Declare this in Makefile to avoid failures in parallel compiles.

Author: Lionel Elie Mamane

12 years agoFix transient clobbering of shared buffers during WAL replay.
Tom Lane [Sun, 5 Feb 2012 20:49:17 +0000 (15:49 -0500)]
Fix transient clobbering of shared buffers during WAL replay.

RestoreBkpBlocks was in the habit of zeroing and refilling the target
buffer; which was perfectly safe when the code was written, but is unsafe
during Hot Standby operation.  The reason is that we have coding rules
that allow backends to continue accessing a tuple in a heap relation while
holding only a pin on its buffer.  Such a backend could see transiently
zeroed data, if WAL replay had occasion to change other data on the page.
This has been shown to be the cause of bug #6425 from Duncan Rance (who
deserves kudos for developing a sufficiently-reproducible test case) as
well as Bridget Frey's re-report of bug #6200.  It most likely explains the
original report as well, though we don't yet have confirmation of that.

To fix, change the code so that only bytes that are supposed to change will
change, even transiently.  This actually saves cycles in RestoreBkpBlocks,
since it's not writing the same bytes twice.

Also fix seq_redo, which has the same disease, though it has to work a bit
harder to meet the requirement.

So far as I can tell, no other WAL replay routines have this type of bug.
In particular, the index-related replay routines, which would certainly be
broken if they had to meet the same standard, are not at risk because we
do not have coding rules that allow access to an index page when not
holding a buffer lock on it.

Back-patch to 9.0 where Hot Standby was added.

12 years agoImprove comment.
Tom Lane [Sun, 5 Feb 2012 03:37:34 +0000 (22:37 -0500)]
Improve comment.

12 years agoAdd missing Assert and fix inaccurate elog message in standby_redo().
Tom Lane [Sun, 5 Feb 2012 03:32:35 +0000 (22:32 -0500)]
Add missing Assert and fix inaccurate elog message in standby_redo().

All other WAL redo routines either call RestoreBkpBlocks() or Assert that
they haven't been passed any backup blocks.  Make this one do likewise.
Also, fix incorrect routine name in its failure message.

12 years agoAllow SQL-language functions to reference parameters by name.
Tom Lane [Sun, 5 Feb 2012 00:23:49 +0000 (19:23 -0500)]
Allow SQL-language functions to reference parameters by name.

Matthew Draper, reviewed by Hitoshi Harada

12 years agoRevert "Add some regression test cases for denormalized float8 input."
Tom Lane [Sat, 4 Feb 2012 20:52:09 +0000 (15:52 -0500)]
Revert "Add some regression test cases for denormalized float8 input."

This reverts commit 500cf66d5522b39ddfdc26b309f8b5b0e385f42e.  As was
more or less expected, a small minority of platforms won't accept
denormalized input even with the recent changes.  It doesn't seem
especially helpful to test this if we're going to have to provide an
alternate expected-file to allow failure.

12 years agoRemove tabs in SGML file.
Bruce Momjian [Sat, 4 Feb 2012 12:11:13 +0000 (07:11 -0500)]
Remove tabs in SGML file.

12 years agoApplied Peter's patch to PQconnectdbParams in ecpglib instead of the old
Michael Meskes [Fri, 3 Feb 2012 16:46:10 +0000 (17:46 +0100)]
Applied Peter's patch to PQconnectdbParams in ecpglib instead of the old
PQconectdb.

12 years agoAdd array_to_json and row_to_json functions.
Andrew Dunstan [Fri, 3 Feb 2012 17:11:16 +0000 (12:11 -0500)]
Add array_to_json and row_to_json functions.

Also move the escape_json function from explain.c to json.c where it
seems to belong.

Andrew Dunstan, Reviewd by Abhijit Menon-Sen.

12 years agoecpg: Improve test building
Peter Eisentraut [Thu, 2 Feb 2012 18:24:38 +0000 (20:24 +0200)]
ecpg: Improve test building

Further improve on commit c75e1436467f32a06b5ab9d594d2a390e7f4594d.
Instead of building both .o files and binaries in the same make rule,
just rely on the normal .c -> .o rule.  This will ensure that
dependency tracking is used when enabled.  To do this, disable the
implicit direct .c -> binary rule globally, which will also prevent
the original problem (*.dSYM junk) from reappearing elsewhere.

12 years agoAllow spgist's text_ops to handle pattern-matching operators.
Robert Haas [Thu, 2 Feb 2012 18:10:56 +0000 (13:10 -0500)]
Allow spgist's text_ops to handle pattern-matching operators.

This was presumably intended to work this way all along, but a few key
bits of indxpath.c didn't get the memo.

Robert Haas and Tom Lane

12 years agoAvoid re-checking for visibility map extension too frequently.
Robert Haas [Thu, 2 Feb 2012 01:35:42 +0000 (20:35 -0500)]
Avoid re-checking for visibility map extension too frequently.

When testing bits (but not when setting or clearing them), we now
won't check whether the map has been extended.  This significantly
improves performance in the case where the visibility map doesn't
exist yet, by avoiding an extra system call per tuple.  To make
sure backends notice eventually, send an smgr inval on VM extension.

Dean Rasheed, with minor modifications by me.

12 years agoinitdb: Add options --auth-local and --auth-host
Peter Eisentraut [Wed, 1 Feb 2012 19:18:55 +0000 (21:18 +0200)]
initdb: Add options --auth-local and --auth-host

reviewed by Robert Haas and Pavel Stehule

12 years agopsql: Case preserving completion of SQL key words
Peter Eisentraut [Wed, 1 Feb 2012 18:16:40 +0000 (20:16 +0200)]
psql: Case preserving completion of SQL key words

Instead of always completing SQL key words in upper case, look at the
word being completed and match the case.

reviewed by Fujii Masao

12 years agoAdd some regression test cases for denormalized float8 input.
Tom Lane [Wed, 1 Feb 2012 18:13:54 +0000 (13:13 -0500)]
Add some regression test cases for denormalized float8 input.

This was submitted with the previous patch, but I'm committing it
separately to ease backing it out if these results prove too unportable.

Marti Raudsepp, after a proposal by Jeroen Vermeulen

12 years agoTry to be more consistent about accepting denormalized float8 numbers.
Tom Lane [Wed, 1 Feb 2012 18:11:16 +0000 (13:11 -0500)]
Try to be more consistent about accepting denormalized float8 numbers.

On some platforms, strtod() reports ERANGE for a denormalized value (ie,
one that can be represented as distinct from zero, but is too small to have
full precision).  On others, it doesn't.  It seems better to try to accept
these values consistently, so add a test to see if the result value
indicates a true out-of-range condition.  This should be okay per Single
Unix Spec.  On machines where the underlying math isn't IEEE standard, the
behavior for such small numbers may not be very consistent, but then it
wouldn't be anyway.

Marti Raudsepp, after a proposal by Jeroen Vermeulen

12 years agoImplement dry-run mode for pg_archivecleanup
Alvaro Herrera [Wed, 1 Feb 2012 16:56:59 +0000 (13:56 -0300)]
Implement dry-run mode for pg_archivecleanup

In dry-run mode, just the name of the file to be removed is printed to
stdout; this is so the user can easily plug it into another program
through a pipe.  If debug mode is also specified, a more verbose message
is printed to stderr.

Author: Gabriele Bartolini
Reviewer: Josh Kupershmidt

12 years agoProperly free the sslcompression field in PGconn
Magnus Hagander [Wed, 1 Feb 2012 15:51:35 +0000 (16:51 +0100)]
Properly free the sslcompression field in PGconn

Marko Kreen

12 years agoCode review for plpgsql fn_signature patch.
Tom Lane [Wed, 1 Feb 2012 07:14:37 +0000 (02:14 -0500)]
Code review for plpgsql fn_signature patch.

Don't quote the output of format_procedure(); it's already quoted quite
enough.  Remove the fn_name field, which was now just dead weight.  Fix
remaining expected-output files.

12 years agopsql: Reduce the amount of const lies a bit
Peter Eisentraut [Tue, 31 Jan 2012 19:23:17 +0000 (21:23 +0200)]
psql: Reduce the amount of const lies a bit

12 years agopg_dump: Add GCC noreturn attribute to appropriate functions
Peter Eisentraut [Tue, 31 Jan 2012 18:47:43 +0000 (20:47 +0200)]
pg_dump: Add GCC noreturn attribute to appropriate functions

This is a small help to the compiler and static analyzers.

12 years agoAdjust expected regression test outputs for PL/python.
Robert Haas [Tue, 31 Jan 2012 18:16:38 +0000 (13:16 -0500)]
Adjust expected regression test outputs for PL/python.

This got broken by commit 4c6cedd1b014abf2046886a9a92e10e18f0d658e,
which caused PL/pgsql error messages to print the function
signature, not just the name.

Per buildfarm.

12 years agoCatversion bump for JSON patch.
Robert Haas [Tue, 31 Jan 2012 16:51:51 +0000 (11:51 -0500)]
Catversion bump for JSON patch.

Sigh.

12 years agoBuilt-in JSON data type.
Robert Haas [Tue, 31 Jan 2012 16:48:23 +0000 (11:48 -0500)]
Built-in JSON data type.

Like the XML data type, we simply store JSON data as text, after checking
that it is valid.  More complex operations such as canonicalization and
comparison may come later, but this is enough for not.

There are a few open issues here, such as whether we should attempt to
detect UTF-8 surrogate pairs represented as \uXXXX\uYYYY, but this gets
the basic framework in place.

12 years agoPrint function signature, not just name, in PL/pgSQL error messages.
Heikki Linnakangas [Tue, 31 Jan 2012 08:34:50 +0000 (10:34 +0200)]
Print function signature, not just name, in PL/pgSQL error messages.

This makes it unambiguous which function the message is coming from, if you
have overloaded functions.

Pavel Stehule, reviewed by Abhijit Menon-Sen.

12 years agoFix bug in the new wait-until-lwlock-is-free mechanism.
Heikki Linnakangas [Mon, 30 Jan 2012 18:56:35 +0000 (20:56 +0200)]
Fix bug in the new wait-until-lwlock-is-free mechanism.

If there was a wait-until-free process in the head of the wait queue,
followed by an exclusive locker, the exclusive locker was not be woken up
as it should.

12 years agoAdd sequence USAGE privileges to information schema
Peter Eisentraut [Mon, 30 Jan 2012 19:45:42 +0000 (21:45 +0200)]
Add sequence USAGE privileges to information schema

The sequence USAGE privilege is sufficiently similar to the SQL
standard that it seems reasonable to show in the information schema.
Also add some compatibility notes about it on the GRANT reference
page.

12 years agoPL/Python: Add result metadata functions
Peter Eisentraut [Mon, 30 Jan 2012 19:38:52 +0000 (21:38 +0200)]
PL/Python: Add result metadata functions

Add result object functions .colnames, .coltypes, .coltypmods to
obtain information about the result column names and types, which was
previously not possible in the PL/Python SPI interface.

reviewed by Abhijit Menon-Sen

12 years agoUse abort() instead of exit() to abort library functions
Peter Eisentraut [Mon, 30 Jan 2012 19:34:00 +0000 (21:34 +0200)]
Use abort() instead of exit() to abort library functions

In some hopeless situations, certain library functions in libpq and
libpgport quit the program.  Use abort() for that instead of exit(),
so we don't interfere with the normal exit codes the program might
use, we clearly signal the abnormal termination, and the caller has a
chance of catching the termination.

This was originally pointed out by Debian's Lintian program.

12 years agoRemove prototype for nonexistent function.
Robert Haas [Mon, 30 Jan 2012 16:59:40 +0000 (11:59 -0500)]
Remove prototype for nonexistent function.

12 years agoMake group commit more effective.
Heikki Linnakangas [Mon, 30 Jan 2012 14:40:58 +0000 (16:40 +0200)]
Make group commit more effective.

When a backend needs to flush the WAL, and someone else is already flushing
the WAL, wait until it releases the WALInsertLock and check if we still need
to do the flush or if the other backend already did the work for us, before
acquiring WALInsertLock. This helps group commit, because when the WAL flush
finishes, all the backends that were waiting for it can be woken up in one
go, and the can all concurrently observe that they're done, rather than
waking them up one by one in a cascading fashion.

This is based on a new LWLock function, LWLockWaitUntilFree(), which has
peculiar semantics. If the lock is immediately free, it grabs the lock and
returns true. If it's not free, it waits until it is released, but then
returns false without grabbing the lock. This is used in XLogFlush(), so
that when the lock is acquired, the backend flushes the WAL, but if it's
not, the backend first checks the current flush location before retrying.

Original patch and benchmarking by Peter Geoghegan and Simon Riggs, although
this patch as committed ended up being very different from that.

12 years agoMinor bug fix and cleanup from self-review of sync rep queues patch.
Simon Riggs [Mon, 30 Jan 2012 14:36:17 +0000 (14:36 +0000)]
Minor bug fix and cleanup from self-review of sync rep queues patch.

12 years agoVarious minor comments changes from bgwriter to checkpointer.
Simon Riggs [Mon, 30 Jan 2012 14:34:25 +0000 (14:34 +0000)]
Various minor comments changes from bgwriter to checkpointer.

12 years agoAccept a non-existent value in "ALTER USER/DATABASE SET ..." command.
Heikki Linnakangas [Mon, 30 Jan 2012 08:32:46 +0000 (10:32 +0200)]
Accept a non-existent value in "ALTER USER/DATABASE SET ..." command.

When default_text_search_config, default_tablespace, or temp_tablespaces
setting is set per-user or per-database, with an "ALTER USER/DATABASE SET
..." statement, don't throw an error if the text search configuration or
tablespace does not exist. In case of text search configuration, even if
it doesn't exist in the current database, it might exist in another
database, where the setting is intended to have its effect. This behavior
is now the same as search_path's.

Tablespaces are cluster-wide, so the same argument doesn't hold for
tablespaces, but there's a problem with pg_dumpall: it dumps "ALTER USER
SET ..." statements before the "CREATE TABLESPACE" statements. Arguably
that's pg_dumpall's fault - it should dump the statements in such an order
that the tablespace is created first and then the "ALTER USER SET
default_tablespace ..." statements after that - but it seems better to be
consistent with search_path and default_text_search_config anyway. Besides,
you could still create a dump that throws an error, by creating the
tablespace, running "ALTER USER SET default_tablespace", then dropping the
tablespace and running pg_dumpall on that.

Backpatch to all supported versions.

12 years agoAssorted comment fixes, mostly just typos, but some obsolete statements.
Tom Lane [Mon, 30 Jan 2012 00:23:56 +0000 (19:23 -0500)]
Assorted comment fixes, mostly just typos, but some obsolete statements.

YAMAMOTO Takashi

12 years agoFix typo in comment.
Tom Lane [Sun, 29 Jan 2012 23:56:35 +0000 (18:56 -0500)]
Fix typo in comment.

Peter Geoghegan

12 years agoTweak index costing for problems with partial indexes.
Tom Lane [Sun, 29 Jan 2012 23:37:14 +0000 (18:37 -0500)]
Tweak index costing for problems with partial indexes.

btcostestimate() makes an estimate of the number of index tuples that will
be visited based on knowledge of which index clauses can actually bound the
scan within nbtree.  However, it forgot to account for partial indexes in
this calculation, with the result that the cost of the index scan could be
significantly overestimated for a partial index.  Fix that by merging the
predicate with the abbreviated indexclause list, in the same way as we do
with the full list to estimate how many heap tuples will be visited.

Also, slightly increase the "fudge factor" that's meant to give preference
to smaller indexes over larger ones.  While this is applied to all indexes,
it's most important for partial indexes since it can be the only factor
that makes a partial index look cheaper than a similar full index.
Experimentation shows that the existing value is so small as to easily get
swamped by noise such as page-boundary-roundoff behavior.  I'm tempted to
kick it up more than this, but will refrain for now.

Per report from Ruben Blanco.  These are long-standing issues, but given
the lack of prior complaints I'm not going to risk changing planner
behavior in back branches by back-patching.

12 years agoFix pushing of index-expression qualifications through UNION ALL.
Tom Lane [Sun, 29 Jan 2012 21:31:23 +0000 (16:31 -0500)]
Fix pushing of index-expression qualifications through UNION ALL.

In commit 57664ed25e5dea117158a2e663c29e60b3546e1c, I made the planner
wrap non-simple-variable outputs of appendrel children (IOW, child SELECTs
of UNION ALL subqueries) inside PlaceHolderVars, in order to solve some
issues with EquivalenceClass processing.  However, this means that any
upper-level WHERE clauses mentioning such outputs will now contain
PlaceHolderVars after they're pushed down into the appendrel child,
and that prevents indxpath.c from recognizing that they could be matched
to index expressions.  To fix, add explicit stripping of PlaceHolderVars
from index operands, same as we have long done for RelabelType nodes.
Add a regression test covering both this and the plain-UNION case (which
is a totally different code path, but should also be able to do it).

Per bug #6416 from Matteo Beccati.  Back-patch to 9.1, same as the
previous change.

12 years agoAdd caution about multiple unique indexes breaking plpgsql upsert example.
Tom Lane [Sun, 29 Jan 2012 02:06:41 +0000 (21:06 -0500)]
Add caution about multiple unique indexes breaking plpgsql upsert example.

Per Phil Sorber, though I didn't use his wording exactly.

12 years agoUpdate statement about sorting of character-string data.
Tom Lane [Sun, 29 Jan 2012 01:54:56 +0000 (20:54 -0500)]
Update statement about sorting of character-string data.

The sort order is no longer fixed at database creation time, but can be
controlled via COLLATE.  Noted by Thomas Kellerer.

12 years agoFix handling of init_plans list in inheritance_planner().
Tom Lane [Sun, 29 Jan 2012 01:24:42 +0000 (20:24 -0500)]
Fix handling of init_plans list in inheritance_planner().

Formerly we passed an empty list to each per-child-table invocation of
grouping_planner, and then merged the results into the global list.
However, that fails if there's a CTE attached to the statement, because
create_ctescan_plan uses the list to find the plan referenced by a CTE
reference; so it was unable to find any CTEs attached to the outer UPDATE
or DELETE.  But there's no real reason not to use the same list throughout
the process, and doing so is simpler and faster anyway.

Per report from Josh Berkus of "could not find plan for CTE" failures.
Back-patch to 9.1 where we added support for WITH attached to UPDATE or
DELETE.  Add some regression test cases, too.

12 years agoAdd simple tests of EvalPlanQual using the isolationtester infrastructure.
Tom Lane [Sat, 28 Jan 2012 22:55:08 +0000 (17:55 -0500)]
Add simple tests of EvalPlanQual using the isolationtester infrastructure.

Much more could be done here, but at least now we have *some* automated
test coverage of that mechanism.  In particular this tests the writable-CTE
case reported by Phil Sorber.

In passing, remove isolationtester's arbitrary restriction on the number of
steps in a permutation list.  I used this so that a single spec file could
be used to run several related test scenarios, but there are other possible
reasons to want a step series that's not exactly a permutation.  Improve
documentation and fix a couple other nits as well.

12 years agoFix handling of data-modifying CTE subplans in EvalPlanQual.
Tom Lane [Sat, 28 Jan 2012 22:43:57 +0000 (17:43 -0500)]
Fix handling of data-modifying CTE subplans in EvalPlanQual.

We can't just skip initializing such subplans, because the referencing CTE
node will expect to find the subplan available when it initializes.  That
in turn means that ExecInitModifyTable must allow the case (which actually
it needed to do anyway, since there's no guarantee that ModifyTable is
exactly at the top of the CTE plan tree).  So move the complaint about not
being allowed in EvalPlanQual mode to execution instead of initialization.
Testing turned up yet another problem, which is that we'd try to
re-initialize the result relation's index list, leading to leaks and
dangling pointers.

Per report from Phil Sorber.  Back-patch to 9.1 where data-modifying CTEs
were introduced.

12 years agoPrevent logging "failed to stat file: success" for temp files
Magnus Hagander [Sat, 28 Jan 2012 09:01:17 +0000 (10:01 +0100)]
Prevent logging "failed to stat file: success" for temp files

This was broken in commit bc3347484a7bf9eddb98e4352d84599cae9a31c6, the
addition of statistics counters for temp files.

Reported by Thom Brown

12 years agoFix error detection in contrib/pgcrypto's encrypt_iv() and decrypt_iv().
Tom Lane [Sat, 28 Jan 2012 04:09:16 +0000 (23:09 -0500)]
Fix error detection in contrib/pgcrypto's encrypt_iv() and decrypt_iv().

Due to oversights, the encrypt_iv() and decrypt_iv() functions failed to
report certain types of invalid-input errors, and would instead return
random garbage values.

Marko Kreen, per report from Stefan Kaltenbrunner

12 years agoUndo 8.4-era lobotomization of subquery pullup rules.
Tom Lane [Sat, 28 Jan 2012 00:46:41 +0000 (19:46 -0500)]
Undo 8.4-era lobotomization of subquery pullup rules.

After the planner was fixed to convert some IN/EXISTS subqueries into
semijoins or antijoins, we had to prevent it from doing that in some
cases where the plans risked getting much worse.  The reason the plans
got worse was that in the unoptimized implementation, subqueries could
reference parameters from the outer query at any join level, and so
full table scans could be avoided even if they were one or more levels
of join below where the semi/anti join would be.  Now that we have
sufficient mechanism in the planner to handle such cases properly,
it should no longer be necessary to play dumb here.

This reverts commits 07b9936a0f10d746e5076239813a5e938f2f16be and
cd1f0d04bf06938c0ee5728fc8424d62bcf2eef3.  The latter was a stopgap
fix that wasn't really sufficiently analyzed at the time.  Rather
than just restricting ourselves to cases where the new join can be
stacked on the right-hand input, we should also consider whether it
can be stacked on the left-hand input.

12 years agoUse parameterized paths to generate inner indexscans more flexibly.
Tom Lane [Sat, 28 Jan 2012 00:26:38 +0000 (19:26 -0500)]
Use parameterized paths to generate inner indexscans more flexibly.

This patch fixes the planner so that it can generate nestloop-with-
inner-indexscan plans even with one or more levels of joining between
the indexscan and the nestloop join that is supplying the parameter.
The executor was fixed to handle such cases some time ago, but the
planner was not ready.  This should improve our plans in many situations
where join ordering restrictions formerly forced complete table scans.

There is probably a fair amount of tuning work yet to be done, because
of various heuristics that have been added to limit the number of
parameterized paths considered.  However, we are not going to find out
what needs to be adjusted until the code gets some real-world use, so
it's time to get it in there where it can be tested easily.

Note API change for index AM amcostestimate functions.  I'm not aware of
any non-core index AMs, but if there are any, they will need minor
adjustments.

12 years agoShow default privileges in information schema
Peter Eisentraut [Fri, 27 Jan 2012 19:58:51 +0000 (21:58 +0200)]
Show default privileges in information schema

Hitherto, the information schema only showed explicitly granted
privileges that were visible in the *acl catalog columns.  If no
privileges had been granted, the implicit privileges were not shown.

To fix that, add an SQL-accessible version of the acldefault()
function, and use that inside the aclexplode() calls to substitute the
catalog-specific default privilege set for null values.

reviewed by Abhijit Menon-Sen

12 years agoRevert unfortunate whitespace change
Peter Eisentraut [Fri, 27 Jan 2012 19:39:38 +0000 (21:39 +0200)]
Revert unfortunate whitespace change

In e5e2fc842c418432756d8b5825ff107c6c5fc4c3, blank lines were removed
after a comment block, which now looks as though the comment refers to
the immediately following code, but it actually refers to the
preceding code.  So put the blank lines back.

12 years agoDisallow ALTER DOMAIN on non-domain type everywhere
Peter Eisentraut [Fri, 27 Jan 2012 19:20:34 +0000 (21:20 +0200)]
Disallow ALTER DOMAIN on non-domain type everywhere

This has been the behavior already in most cases, but through
omission, ALTER DOMAIN / OWNER TO and ALTER DOMAIN / SET SCHEMA would
silently work on non-domain types as well.

12 years agoHide most variable-length fields from Form_pg_* structs
Peter Eisentraut [Fri, 27 Jan 2012 18:16:17 +0000 (20:16 +0200)]
Hide most variable-length fields from Form_pg_* structs

Those fields only appear in the structs so that genbki.pl can create
the BKI bootstrap files for the catalogs.  But they are not actually
usable from C.  So hiding them can prevent coding mistakes, saves
stack space, and can help the compiler.

In certain catalogs, the first variable-length field has been kept
visible after manual inspection.  These exceptions are noted in C
comments.

reviewed by Tom Lane

12 years agoDo not access indclass through Form_pg_index
Peter Eisentraut [Fri, 27 Jan 2012 18:08:34 +0000 (20:08 +0200)]
Do not access indclass through Form_pg_index

Normally, accessing variable-length members of catalog structures past
the first one doesn't work at all.  Here, it happened to work because
indnatts was checked to be 1, and so the defined FormData_pg_index
layout, using int2vector[1] and oidvector[1] for variable-length
arrays, happened to match the actual memory layout.  But it's a very
fragile assumption, and it's not in a performance-critical path, so
code it properly using heap_getattr() instead.

bug analysis by Tom Lane

12 years agoDocument that COUNT(*) might not need a seq scan any more.
Robert Haas [Fri, 27 Jan 2012 17:40:37 +0000 (12:40 -0500)]
Document that COUNT(*) might not need a seq scan any more.

Noted by Josh Kupershmidt.

12 years agoDocument that analyzing an empty table doesn't update the statistics.
Robert Haas [Fri, 27 Jan 2012 17:13:49 +0000 (12:13 -0500)]
Document that analyzing an empty table doesn't update the statistics.

Per a suggestion from Sergey Konoplev

12 years agoInitialize the new bgwriterLatch field properly.
Heikki Linnakangas [Fri, 27 Jan 2012 16:24:58 +0000 (18:24 +0200)]
Initialize the new bgwriterLatch field properly.

Peter Geoghegan

12 years agopg_dump: Move connection-setup code to a separate function.
Robert Haas [Fri, 27 Jan 2012 15:59:27 +0000 (10:59 -0500)]
pg_dump: Move connection-setup code to a separate function.

Parallel dump will need to repeat these steps for each new connection,
so it's better to have this logic in its own function.

Extracted (with some changes) from a much larger patch
by Joachim Wieland.

12 years agoFix copy-paste error in docs.
Heikki Linnakangas [Fri, 27 Jan 2012 10:48:42 +0000 (12:48 +0200)]
Fix copy-paste error in docs.

Dean Rasheed

12 years agoFix wording, per Peter Geoghegan
Magnus Hagander [Fri, 27 Jan 2012 09:36:27 +0000 (10:36 +0100)]
Fix wording, per Peter Geoghegan

12 years agoMention in the docs that bgwriter now sleeps longer when it has no work to do.
Heikki Linnakangas [Fri, 27 Jan 2012 07:09:50 +0000 (09:09 +0200)]
Mention in the docs that bgwriter now sleeps longer when it has no work to do.

12 years agoFix pg_upgrade --help text for --user to not use a plural cluster name.
Bruce Momjian [Fri, 27 Jan 2012 03:18:49 +0000 (22:18 -0500)]
Fix pg_upgrade --help text for --user to not use a plural cluster name.

12 years agoAdjust tuplesort.c based on the fact that we never use the OS's qsort().
Robert Haas [Thu, 26 Jan 2012 19:43:28 +0000 (14:43 -0500)]
Adjust tuplesort.c based on the fact that we never use the OS's qsort().

Our own qsort_arg() implementation doesn't have the defect previously
observed to affect only QNX 4, so it seems sufficiently to assert that
it isn't broken rather than retesting.  Also, update a few comments to
clarify why it's valuable to retain a tie-break rule based on CTID
during index builds.

Peter Geoghegan, with slight tweaks by me.

12 years agoBe more clear when a new column name collides with a system column name.
Robert Haas [Thu, 26 Jan 2012 17:44:30 +0000 (12:44 -0500)]
Be more clear when a new column name collides with a system column name.

We now use the same error message for ALTER TABLE .. ADD COLUMN or
ALTER TABLE .. RENAME COLUMN that we do for CREATE TABLE.  The old
message was accurate, but might be confusing to users not aware of our
system columns.

Vik Reykja, with some changes by me, and further proofreading by Tom Lane

12 years agoFix sentence in docs: checkpoints are not done by bgwriter anymore.
Heikki Linnakangas [Thu, 26 Jan 2012 17:08:20 +0000 (19:08 +0200)]
Fix sentence in docs: checkpoints are not done by bgwriter anymore.

12 years agoMake bgwriter sleep longer when it has no work to do, to save electricity.
Heikki Linnakangas [Thu, 26 Jan 2012 16:19:48 +0000 (18:19 +0200)]
Make bgwriter sleep longer when it has no work to do, to save electricity.

To make it wake up promptly when activity starts again, backends nudge it
by setting a latch in MarkBufferDirty(). The latch is kept set while
bgwriter is active, so there is very little overhead from that when the
system is busy. It is only armed before going into longer sleep.

Peter Geoghegan, with some changes by me.

12 years agoAdd missing #include, to suppress compiler warning.
Robert Haas [Thu, 26 Jan 2012 15:11:51 +0000 (10:11 -0500)]
Add missing #include, to suppress compiler warning.

12 years agoFix a copy/pasted typo in several comments
Magnus Hagander [Thu, 26 Jan 2012 15:02:33 +0000 (16:02 +0100)]
Fix a copy/pasted typo in several comments

12 years agoAdd deadlock counter to pg_stat_database
Magnus Hagander [Thu, 26 Jan 2012 14:58:19 +0000 (15:58 +0100)]
Add deadlock counter to pg_stat_database

Adds a counter that tracks number of deadlocks that occurred in
each database to pg_stat_database.

Magnus Hagander, reviewed by Jaime Casanova

12 years agoClassify DROP operations by whether or not they are user-initiated.
Robert Haas [Thu, 26 Jan 2012 14:24:54 +0000 (09:24 -0500)]
Classify DROP operations by whether or not they are user-initiated.

This doesn't do anything useful just yet, but is intended as supporting
infrastructure for allowing sepgsql to sensibly check DROP permissions.

KaiGai Kohei and Robert Haas

12 years agoTrack temporary file count and size in pg_stat_database
Magnus Hagander [Thu, 26 Jan 2012 13:41:19 +0000 (14:41 +0100)]
Track temporary file count and size in pg_stat_database

Add counters for number and size of temporary files used
for spill-to-disk queries for each database to the
pg_stat_database view.

Tomas Vondra, review by Magnus Hagander

12 years agoDamage control for yesterday's CheckIndexCompatible changes.
Robert Haas [Thu, 26 Jan 2012 13:21:31 +0000 (08:21 -0500)]
Damage control for yesterday's CheckIndexCompatible changes.

Rip out a regression test that doesn't play well with settings put in
place by the build farm, and rewrite the code in CheckIndexCompatible
in a hopefully more transparent style.

12 years agoInstrument index-only scans to count heap fetches performed.
Robert Haas [Thu, 26 Jan 2012 01:40:34 +0000 (20:40 -0500)]
Instrument index-only scans to count heap fetches performed.

Patch by me; review by Tom Lane, Jeff Davis, and Peter Geoghegan.

12 years agoHave \copy go through SendQuery
Alvaro Herrera [Wed, 25 Jan 2012 21:06:00 +0000 (18:06 -0300)]
Have \copy go through SendQuery

This enables a bunch of features, notably ON_ERROR_ROLLBACK.  It also
makes COPY failure (either in the server or psql) as a whole behave more
sanely in psql.

Additionally, having more commands in the same command line as COPY
works better (though since psql splits lines at semicolons, this doesn't
matter much unless you're using -c).

Also tighten a couple of switches on PQresultStatus() to add
PGRES_COPY_BOTH support and stop assuming that unknown statuses received
are errors; have those print diagnostics where warranted.

Author: Noah Misch

12 years agoMake CheckIndexCompatible simpler and more bullet-proof.
Robert Haas [Wed, 25 Jan 2012 20:28:07 +0000 (15:28 -0500)]
Make CheckIndexCompatible simpler and more bullet-proof.

This gives up the "don't rewrite the index" behavior in a couple of
relatively unimportant cases, such as changing between an array type
and an unconstrained domain over that array type, in return for
making this code more future-proof.

Noah Misch

12 years agoAllow pg_basebackup from standby node with safety checking.
Simon Riggs [Wed, 25 Jan 2012 18:02:04 +0000 (18:02 +0000)]
Allow pg_basebackup from standby node with safety checking.
Base backup follows recommended procedure, plus goes to great
lengths to ensure that partial page writes are avoided.

Jun Ishizuka and Fujii Masao, with minor modifications

12 years agoAdd pg_trigger_depth() function
Alvaro Herrera [Wed, 25 Jan 2012 16:15:29 +0000 (13:15 -0300)]
Add pg_trigger_depth() function

This reports the depth level of triggers currently in execution, or zero
if not called from inside a trigger.

No catversion bump in this patch, but you have to initdb if you want
access to the new function.

Author: Kevin Grittner

12 years agoNow that the shared library name can be adjusted in the library test,
Bruce Momjian [Wed, 25 Jan 2012 14:35:17 +0000 (09:35 -0500)]
Now that the shared library name can be adjusted in the library test,
have pg_upgrade allocate a maximum fixed size buffer for testing the
library file name, rather than base the allocation on the library name.

Backpatch to 9.1.

12 years agoImprove plpython fix comment in pg_upgrade.
Bruce Momjian [Wed, 25 Jan 2012 03:49:55 +0000 (22:49 -0500)]
Improve plpython fix comment in pg_upgrade.

12 years agoIn pg_upgrade, when checking for the plpython library, we must check for
Bruce Momjian [Wed, 25 Jan 2012 03:42:37 +0000 (22:42 -0500)]
In pg_upgrade, when checking for the plpython library, we must check for
"plpython2" when upgrading from pre-PG 9.1.  Patch to head and 9.1.

Per report from Peter.

12 years agoFix new SQL tablespace location function usage in pg_upgrade to properly
Bruce Momjian [Wed, 25 Jan 2012 02:51:10 +0000 (21:51 -0500)]
Fix new SQL tablespace location function usage in pg_upgrade to properly
check cluster version numbers, and fix missing table alias.

12 years agoAdd new replication mode synchronous_commit = 'write'.
Simon Riggs [Tue, 24 Jan 2012 20:22:37 +0000 (20:22 +0000)]
Add new replication mode synchronous_commit = 'write'.
Replication occurs only to memory on standby, not to disk,
so provides additional performance if user wishes to
reduce durability level slightly. Adds concept of multiple
independent sync rep queues.

Fujii Masao and Simon Riggs

12 years agoRemove quotes around format_type_be() output
Peter Eisentraut [Tue, 24 Jan 2012 19:49:27 +0000 (21:49 +0200)]
Remove quotes around format_type_be() output

format_type_be() takes care of any needed quoting itself.

12 years agoSuppress variable-clobbered-by-longjmp warning seen with older gcc versions.
Tom Lane [Tue, 24 Jan 2012 18:44:07 +0000 (13:44 -0500)]
Suppress variable-clobbered-by-longjmp warning seen with older gcc versions.

12 years agoSuppress possibly-uninitialized-variable warning seen with older gcc versions.
Tom Lane [Tue, 24 Jan 2012 18:40:26 +0000 (13:40 -0500)]
Suppress possibly-uninitialized-variable warning seen with older gcc versions.

12 years agoReduce tab outdent of "error handling" GUC comments in postgresql.conf,
Bruce Momjian [Tue, 24 Jan 2012 15:40:47 +0000 (10:40 -0500)]
Reduce tab outdent of "error handling" GUC comments in postgresql.conf,
to match surrounding outdenting.

12 years agoAdjustments to regression tests for security_barrier views.
Robert Haas [Tue, 24 Jan 2012 13:38:20 +0000 (08:38 -0500)]
Adjustments to regression tests for security_barrier views.

Drop the role we create, so regression tests pass even when run more
than once against the same cluster, a problem noted by Tom Lane and
Jeff Janes.  Also, rename the temporary role so that it starts with
"regress_", to make it unlikely that we'll collide with an existing
role name while running "make installcheck", per further gripe from
Tom Lane.

12 years agoResolve timing issue with logging locks for Hot Standby.
Simon Riggs [Mon, 23 Jan 2012 23:37:32 +0000 (23:37 +0000)]
Resolve timing issue with logging locks for Hot Standby.
We log AccessExclusiveLocks for replay onto standby nodes,
but because of timing issues on ProcArray it is possible to
log a lock that is still held by a just committed transaction
that is very soon to be removed. To avoid any timing issue we
avoid applying locks made by transactions with InvalidXid.

Simon Riggs, bug report Tom Lane, diagnosis Pavan Deolasee

12 years agoALTER <thing> [IF EXISTS] ... allows silent DDL if required,
Simon Riggs [Mon, 23 Jan 2012 23:25:04 +0000 (23:25 +0000)]
ALTER <thing> [IF EXISTS] ... allows silent DDL if required,
e.g. ALTER FOREIGN TABLE IF EXISTS foo RENAME TO bar

Pavel Stehule

12 years agoTypo fix
Magnus Hagander [Sun, 22 Jan 2012 21:34:28 +0000 (22:34 +0100)]
Typo fix

Guillaume Lelarge

12 years agopsql: Add support for tab completion of GRANT/REVOKE role
Peter Eisentraut [Sat, 21 Jan 2012 17:46:55 +0000 (19:46 +0200)]
psql: Add support for tab completion of GRANT/REVOKE role

Previously, only GRANT/REVOKE privilege was supported.

reviewed by Pavel Stehule

12 years agoCheck number of fields in IDENTIFY_SYSTEM response
Magnus Hagander [Fri, 20 Jan 2012 12:57:02 +0000 (13:57 +0100)]
Check number of fields in IDENTIFY_SYSTEM response

Jaime Casanova

12 years agoGet rid of itemizedlist inside table
Magnus Hagander [Fri, 20 Jan 2012 11:30:19 +0000 (12:30 +0100)]
Get rid of itemizedlist inside table

This renders badly on the website, and in this particular case also
doesn't actually add anything to the readability...

12 years agoFurther doc cleanups from the pg_stat_activity changes
Magnus Hagander [Fri, 20 Jan 2012 11:23:26 +0000 (12:23 +0100)]
Further doc cleanups from the pg_stat_activity changes

Fujii Masao