]> granicus.if.org Git - postgresql/log
postgresql
12 years agoTry to get pg_test_thread to compile on Windows by using a sleeper
Bruce Momjian [Wed, 15 Feb 2012 02:53:17 +0000 (21:53 -0500)]
Try to get pg_test_thread to compile on Windows by using a sleeper
thread.

12 years agoImprove fsync documentation by stating that -W _0_ turns of write
Bruce Momjian [Tue, 14 Feb 2012 22:41:57 +0000 (17:41 -0500)]
Improve fsync documentation by stating that -W _0_ turns of write
caching.

12 years agoPreserve column names in the execution-time tupledesc for a RowExpr.
Tom Lane [Tue, 14 Feb 2012 22:34:19 +0000 (17:34 -0500)]
Preserve column names in the execution-time tupledesc for a RowExpr.

The hstore and json datatypes both have record-conversion functions that
pay attention to column names in the composite values they're handed.
We used to not worry about inserting correct field names into tuple
descriptors generated at runtime, but given these examples it seems
useful to do so.  Observe the nicer-looking results in the regression
tests whose results changed.

catversion bump because there is a subtle change in requirements for stored
rule parsetrees: RowExprs from ROW() constructs now have to include field
names.

Andrew Dunstan and Tom Lane

12 years agoDocument random page cost is only 4x seqeuntial, and not 40x.
Bruce Momjian [Tue, 14 Feb 2012 21:54:54 +0000 (16:54 -0500)]
Document random page cost is only 4x seqeuntial, and not 40x.

12 years agoDocument that the pg_test_fsync defaults allow the program to complete
Bruce Momjian [Tue, 14 Feb 2012 16:14:15 +0000 (11:14 -0500)]
Document that the pg_test_fsync defaults allow the program to complete
in about 30 seconds.

12 years agoChange contrib/pg_test_fsync to control tests in terms of seconds per
Bruce Momjian [Tue, 14 Feb 2012 16:09:49 +0000 (11:09 -0500)]
Change contrib/pg_test_fsync to control tests in terms of seconds per
test, rather than a number of test cycles.  Changes -o/cycles option to
-s/seconds.

12 years agoRemove new, intermittently failing regression test.
Robert Haas [Tue, 14 Feb 2012 04:43:24 +0000 (23:43 -0500)]
Remove new, intermittently failing regression test.

Per buildfarm.

12 years agoFix new create_function_3 regression tests not to rely on tuple order.
Robert Haas [Tue, 14 Feb 2012 03:49:07 +0000 (22:49 -0500)]
Fix new create_function_3 regression tests not to rely on tuple order.

Per buildfarm.

12 years agoAllow LEAKPROOF functions for better performance of security views.
Robert Haas [Tue, 14 Feb 2012 03:20:27 +0000 (22:20 -0500)]
Allow LEAKPROOF functions for better performance of security views.

We don't normally allow quals to be pushed down into a view created
with the security_barrier option, but functions without side effects
are an exception: they're OK.  This allows much better performance in
common cases, such as when using an equality operator (that might
even be indexable).

There is an outstanding issue here with the CREATE FUNCTION / ALTER
FUNCTION syntax: there's no way to use ALTER FUNCTION to unset the
leakproof flag.  But I'm committing this as-is so that it doesn't
have to be rebased again; we can fix up the grammar in a future
commit.

KaiGai Kohei, with some wordsmithing by me.

12 years agoImprove labeling of pg_test_fsync open_sync test output.
Bruce Momjian [Tue, 14 Feb 2012 02:48:33 +0000 (21:48 -0500)]
Improve labeling of pg_test_fsync open_sync test output.

12 years agoDo not use the variable name when defining a varchar structure in ecpg.
Michael Meskes [Fri, 10 Feb 2012 02:58:57 +0000 (03:58 +0100)]
Do not use the variable name when defining a varchar structure in ecpg.

With a unique counter being added anyway, there is no need anymore to have the variable name listed, too.

12 years agoFix auto-explain JSON output to be valid JSON.
Andrew Dunstan [Mon, 13 Feb 2012 13:22:15 +0000 (08:22 -0500)]
Fix auto-explain JSON output to be valid JSON.

Problem reported by Peter Eisentraut.

Backpatched to release 9.0.

12 years agoFix heap_multi_insert to set t_self field in the caller's tuples.
Heikki Linnakangas [Mon, 13 Feb 2012 08:14:49 +0000 (10:14 +0200)]
Fix heap_multi_insert to set t_self field in the caller's tuples.

If tuples were toasted, heap_multi_insert didn't update the ctid on the
original tuples. This caused a failure if there was an after trigger
(including a foreign key), on the table, and a tuple got toasted.

Per off-list report and test case from Ted Phelps

12 years agoSilence warning about deprecated assignment to $[ in check_keywords.pl
Heikki Linnakangas [Mon, 13 Feb 2012 07:15:08 +0000 (09:15 +0200)]
Silence warning about deprecated assignment to $[ in check_keywords.pl

Alex Hunsaker

12 years agoFix I/O-conversion-related memory leaks in plpgsql.
Tom Lane [Sat, 11 Feb 2012 23:06:24 +0000 (18:06 -0500)]
Fix I/O-conversion-related memory leaks in plpgsql.

Datatype I/O functions are allowed to leak memory in CurrentMemoryContext,
since they are generally called in short-lived contexts.  However, plpgsql
calls such functions for purposes of type conversion, and was calling them
in its procedure context.  Therefore, any leaked memory would not be
recovered until the end of the plpgsql function.  If such a conversion
was done within a loop, quite a bit of memory could get consumed.  Fix by
calling such functions in the transient "eval_econtext", and adjust other
logic to match.  Back-patch to all supported versions.

Andres Freund, Jan UrbaƄski, Tom Lane

12 years agoFix oversight in pg_dump's handling of extension configuration tables.
Tom Lane [Fri, 10 Feb 2012 20:22:14 +0000 (15:22 -0500)]
Fix oversight in pg_dump's handling of extension configuration tables.

If an extension has not been selected to be dumped (perhaps because of
a --schema or --table switch), the contents of its configuration tables
surely should not get dumped either.  Per gripe from
Hubert Depesz Lubaczewski.

12 years agoFix brain fade in previous pg_dump patch.
Tom Lane [Fri, 10 Feb 2012 19:09:21 +0000 (14:09 -0500)]
Fix brain fade in previous pg_dump patch.

In pre-7.3 databases, pg_attribute.attislocal doesn't exist.  The easiest
way to make sure the new inheritance logic behaves sanely is to assume it's
TRUE, not FALSE.  This will result in printing child columns even when
they're not really needed.  We could work harder at trying to reconstruct a
value for attislocal, but there is little evidence that anyone still cares
about dumping from such old versions, so just do the minimum necessary to
have a valid dump.

I had this correct in the original draft of the patch, but for some
unaccountable reason decided it wasn't necessary to change the value.
Testing against an old server shows otherwise...

12 years agoFix pg_dump for better handling of inherited columns.
Tom Lane [Fri, 10 Feb 2012 18:28:05 +0000 (13:28 -0500)]
Fix pg_dump for better handling of inherited columns.

Revise pg_dump's handling of inherited columns, which was last looked at
seriously in 2001, to eliminate several misbehaviors associated with
inherited default expressions and NOT NULL flags.  In particular make sure
that a column is printed in a child table's CREATE TABLE command if and
only if it has attislocal = true; the former behavior would sometimes cause
a column to become marked attislocal when it was not so marked in the
source database.  Also, stop relying on textual comparison of default
expressions to decide if they're inherited; instead, don't use
default-expression inheritance at all, but just install the default
explicitly at each level of the hierarchy.  This fixes the
search-path-related misbehavior recently exhibited by Chester Young, and
also removes some dubious assumptions about the order in which ALTER TABLE
SET DEFAULT commands would be executed.

Back-patch to all supported branches.

12 years agoAdd ORDER BY to a query to prevent occasional regression test failures.
Tom Lane [Fri, 10 Feb 2012 07:33:00 +0000 (02:33 -0500)]
Add ORDER BY to a query to prevent occasional regression test failures.

Per buildfarm, we sometimes get row-ordering variations in the output.
This also makes this query look more like numerous other ones in the same
test file.

12 years agopsql: Support zero byte field and record separators
Peter Eisentraut [Thu, 9 Feb 2012 18:15:48 +0000 (20:15 +0200)]
psql: Support zero byte field and record separators

Add new psql settings and command-line options to support setting the
field and record separators for unaligned output to a zero byte, for
easier interfacing with other shell tools.

reviewed by Abhijit Menon-Sen

12 years agoAttempt to fix MSVC builds and other fls-related breakage.
Robert Haas [Thu, 9 Feb 2012 17:39:33 +0000 (12:39 -0500)]
Attempt to fix MSVC builds and other fls-related breakage.

Thanks to Andrew Dunstan for bringing this to my attention.

12 years agoAdd a comment to AdjustIntervalForTypmod to reduce chance of future bugs.
Robert Haas [Thu, 9 Feb 2012 17:22:21 +0000 (12:22 -0500)]
Add a comment to AdjustIntervalForTypmod to reduce chance of future bugs.

It's not entirely evident how the logic here relates to the
interval_transform function, so let's clue people in that they need to
check that if the rules change.

12 years agoImprove interval_transform function to detect a few more cases.
Robert Haas [Thu, 9 Feb 2012 17:21:57 +0000 (12:21 -0500)]
Improve interval_transform function to detect a few more cases.

Noah Misch, per a review comment from me.

12 years agoHave pg_receivexlog always send an invalid log position in status messages
Magnus Hagander [Thu, 9 Feb 2012 13:12:49 +0000 (14:12 +0100)]
Have pg_receivexlog always send an invalid log position in status messages

This prevents pg_basebackup and pg_receivexlog from becoming a synchronous
standby in case 'write' is used for synchronous_commit.

Fujii Masao

12 years agoAdd new keywords SNAPSHOT and TYPES to the keyword list in gram.y
Heikki Linnakangas [Thu, 9 Feb 2012 09:37:54 +0000 (11:37 +0200)]
Add new keywords SNAPSHOT and TYPES to the keyword list in gram.y

These were added to kwlist.h as unreserved keywords in separate patches,
but authors forgot to add them to the corresponding list in gram.y.
Because of that, even though they were supposed to be unreserved keywords,
they could not be used as identifiers. src/tools/check_keywords.pl is your
friend.

12 years agoThrow error sooner for unlogged GiST indexes.
Tom Lane [Wed, 8 Feb 2012 21:19:27 +0000 (16:19 -0500)]
Throw error sooner for unlogged GiST indexes.

Throwing an error only after we've built the main index fork is pretty
unfriendly when the table already contains data.  Per gripe from Jay
Levitt.

12 years agoFix up dumping conditions for extension configuration tables.
Tom Lane [Wed, 8 Feb 2012 20:23:00 +0000 (15:23 -0500)]
Fix up dumping conditions for extension configuration tables.

Various filters that were meant to prevent dumping of table data were not
being applied to extension config tables, notably --exclude-table-data and
--no-unlogged-table-data.  We also would bogusly try to dump data from
views, sequences, or foreign tables, should an extension try to claim they
were config tables.  Fix all that, and refactor/redocument to try to make
this a bit less fragile.  This reverts the implementation, though not the
feature, of commit 7b070e896ca835318c90b02c830a5c4844413b64, which had
broken config-table dumping altogether :-(.

It is still the case that the code will dump config-table data even if
--schema is specified.  That behavior was intentional, as per the comments
in getExtensionMembership, so I think it requires some more discussion
before we change it.

12 years agoCheck misplaced window functions before checking aggregate/group by sanity.
Tom Lane [Wed, 8 Feb 2012 18:15:02 +0000 (13:15 -0500)]
Check misplaced window functions before checking aggregate/group by sanity.

If somebody puts a window function in WHERE, we should complain about that
in so many words.  The previous coding tended to complain about the window
function's arguments instead, which is likely to be misleading to users who
are unclear on the semantics of window functions; as seen for example in
bug #6440 from Matyas Novak.

Just another example of how "add new code at the end" is frequently a bad
heuristic.

12 years agoSupport min/max index optimizations on boolean columns.
Tom Lane [Wed, 8 Feb 2012 17:41:48 +0000 (12:41 -0500)]
Support min/max index optimizations on boolean columns.

Since bool_and() is equivalent to min(), and bool_or() to max(), we might
as well let them be index-optimized in the same way.  The practical value
of this is debatable at best, but it seems nearly cost-free to enable it.
Code-wise, we need only adjust the entries in pg_aggregate.  There is a
measurable planning speed penalty for a query involving one of these
aggregates, but it is only a few percent in simple cases, so that seems
acceptable.

Marti Raudsepp, reviewed by Abhijit Menon-Sen

12 years agoMark some more I/O-conversion-invoking functions as stable not volatile.
Tom Lane [Wed, 8 Feb 2012 16:29:29 +0000 (11:29 -0500)]
Mark some more I/O-conversion-invoking functions as stable not volatile.

When written, textanycat, anytextcat, quote_literal, and quote_nullable
were marked volatile, because they could invoke arbitrary type-specific
output functions as part of casting their anyelement arguments to text.
Since then, we have defined a project policy that I/O functions must not
be volatile, as per commit aab353a60b95aadc00f81da0c6d99bde696c4b75.
So these functions can safely be downgraded to stable.  Most of the time
this makes no difference since they'll get inlined anyway, but as noted
by Andrew Dunstan, there are cases where the volatile marking prevents
optimizations that the planner does before function inlining.  (I think
I might have overlooked these functions in the earlier commit on the
grounds that inlining would make it moot, but not so --- tgl)

This change results in a change in the expected output of the json
regression tests, because the planner can now flatten a sub-select
that it failed to before.  The old output is preferable, but getting
that back will require some as-yet-unfinished work on RowExpr handling.

Marti Raudsepp

12 years agoAdd transform functions for various temporal typmod coercisions.
Robert Haas [Wed, 8 Feb 2012 14:33:02 +0000 (09:33 -0500)]
Add transform functions for various temporal typmod coercisions.

This enables ALTER TABLE to skip table and index rebuilds in some cases.

Noah Misch, with trivial changes by me.

12 years agoRename LWLockWaitUntilFree to LWLockAcquireOrWait.
Heikki Linnakangas [Wed, 8 Feb 2012 07:17:13 +0000 (09:17 +0200)]
Rename LWLockWaitUntilFree to LWLockAcquireOrWait.

LWLockAcquireOrWait makes it more clear that the lock is acquired if it's
free.

12 years agoFix typos pointed out by Noah Misch.
Robert Haas [Wed, 8 Feb 2012 02:40:36 +0000 (21:40 -0500)]
Fix typos pointed out by Noah Misch.

12 years agoAdd opensp as a requirement for building the docs on Debian --- tested
Bruce Momjian [Wed, 8 Feb 2012 01:30:11 +0000 (20:30 -0500)]
Add opensp as a requirement for building the docs on Debian --- tested
on Debian Squeeze.

12 years agopg_dump: Add some const qualifiers
Peter Eisentraut [Tue, 7 Feb 2012 21:20:29 +0000 (23:20 +0200)]
pg_dump: Add some const qualifiers

12 years agopg_regress: Use target-specific variable instead of overriding make rule
Peter Eisentraut [Tue, 7 Feb 2012 20:42:19 +0000 (22:42 +0200)]
pg_regress: Use target-specific variable instead of overriding make rule

Use a target-specific variable to add to CPPFLAGS instead of writing a
custom .c -> .o rule.  This will ensure that dependency tracking is
used when enabled.

12 years agoFix typo in comment.
Heikki Linnakangas [Tue, 7 Feb 2012 19:21:50 +0000 (21:21 +0200)]
Fix typo in comment.

12 years agoSupport fls().
Robert Haas [Tue, 7 Feb 2012 18:45:46 +0000 (13:45 -0500)]
Support fls().

The immediate impetus for this is that Noah Misch's patch to elide
unnecessary table and index rebuilds when changing typmod for temporal
types uses it; and this is extracted from that patch, with some
further commentary by me.  But it seems logically separate from the
remainder of the patch, so I'm committing it separately; this is not
the first time someone has wanted fls() in the backend and probably
won't be the last.

If we end up using this in more performance-critical spots it may be
worthwhile to add some architecture-specific optimizations to our
src/port version of fls() - e.g. any x86 platform can implement this
using the assembly instruction BSRL.  But performance won't matter
a bit for assessing typmod changes, so I'm not worried about that
right now.

12 years agoAdd a transform function for varbit typmod coercisions.
Robert Haas [Tue, 7 Feb 2012 17:41:42 +0000 (12:41 -0500)]
Add a transform function for varbit typmod coercisions.

This enables ALTER TABLE to skip table and index rebuilds when the
new type is unconstraint varbit, or when the allowable number of bits
is not decreasing.

Noah Misch, with review and a fix for an OID collision by me.

12 years agoAdd a transform function for numeric typmod coercisions.
Robert Haas [Tue, 7 Feb 2012 17:08:26 +0000 (12:08 -0500)]
Add a transform function for numeric typmod coercisions.

This enables ALTER TABLE to skip table and index rebuilds when a column
is changed to an unconstrained numeric, or when the scale is unchanged
and the precision does not decrease.

Noah Misch, with a few stylistic changes and a fix for an OID
collision by me.

12 years agoAdd TIMING option to EXPLAIN, to allow eliminating of timing overhead.
Robert Haas [Tue, 7 Feb 2012 16:23:04 +0000 (11:23 -0500)]
Add TIMING option to EXPLAIN, to allow eliminating of timing overhead.

Sometimes it may be useful to get actual row counts out of EXPLAIN
(ANALYZE) without paying the cost of timing every node entry/exit.
With this patch, you can say EXPLAIN (ANALYZE, TIMING OFF) to get that.

Tomas Vondra, reviewed by Eric Theise, with minor doc changes by me.

12 years agopg_dump: Further reduce reliance on global variables.
Robert Haas [Tue, 7 Feb 2012 15:07:02 +0000 (10:07 -0500)]
pg_dump: Further reduce reliance on global variables.

This is another round of refactoring to make things simpler for parallel
pg_dump.  pg_dump.c now issues SQL queries through the relevant Archive
object, rather than relying on the global variable g_conn.  This commit
isn't quite enough to get rid of g_conn entirely, but it makes a big
dent in its utilization and, along the way, manages to be slightly less
code than before.

12 years agocreateuser: Disable prompting by default
Peter Eisentraut [Tue, 7 Feb 2012 12:55:34 +0000 (14:55 +0200)]
createuser: Disable prompting by default

Do not prompt when options were not specified.  Assume --no-createdb,
--no-createrole, --no-superuser by default.

Also disable prompting for user name in dropdb, unless --interactive
was specified.

reviewed by Josh Kupershmidt

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.