]> granicus.if.org Git - postgresql/log
postgresql
11 years agoImprove handling of ereport(ERROR) and elog(ERROR).
Tom Lane [Sun, 13 Jan 2013 23:39:20 +0000 (18:39 -0500)]
Improve handling of ereport(ERROR) and elog(ERROR).

In commit 71450d7fd6c7cf7b3e38ac56e363bff6a681973c, we added code to inform
suitably-intelligent compilers that ereport() doesn't return if the elevel
is ERROR or higher.  This patch extends that to elog(), and also fixes a
double-evaluation hazard that the previous commit created in ereport(),
as well as reducing the emitted code size.

The elog() improvement requires the compiler to support __VA_ARGS__, which
should be available in just about anything nowadays since it's required by
C99.  But our minimum language baseline is still C89, so add a configure
test for that.

The previous commit assumed that ereport's elevel could be evaluated twice,
which isn't terribly safe --- there are already counterexamples in xlog.c.
On compilers that have __builtin_constant_p, we can use that to protect the
second test, since there's no possible optimization gain if the compiler
doesn't know the value of elevel.  Otherwise, use a local variable inside
the macros to prevent double evaluation.  The local-variable solution is
inferior because (a) it leads to useless code being emitted when elevel
isn't constant, and (b) it increases the optimization level needed for the
compiler to recognize that subsequent code is unreachable.  But it seems
better than not teaching non-gcc compilers about unreachability at all.

Lastly, if the compiler has __builtin_unreachable(), we can use that
instead of abort(), resulting in a noticeable code savings since no
function call is actually emitted.  However, it seems wise to do this only
in non-assert builds.  In an assert build, continue to use abort(), so that
the behavior will be predictable and debuggable if the "impossible"
happens.

These changes involve making the ereport and elog macros emit do-while
statement blocks not just expressions, which forces small changes in
a few call sites.

Andres Freund, Tom Lane, Heikki Linnakangas

11 years agoExtend and improve use of EXTRA_REGRESS_OPTS.
Andrew Dunstan [Sat, 12 Jan 2013 13:28:58 +0000 (08:28 -0500)]
Extend and improve use of EXTRA_REGRESS_OPTS.

This is now used by ecpg tests, and not clobbered by pg_upgrade
tests. This change won't affect anything that doesn't set this
environment variable, but will enable the buildfarm to control
exactly what port regression test installs will be running on,
and thus to detect possible rogue postmasters more easily.

Backpatch to release 9.2 where EXTRA_REGRESS_OPTS was first used.

11 years agoRedesign the planner's handling of index-descent cost estimation.
Tom Lane [Fri, 11 Jan 2013 17:56:58 +0000 (12:56 -0500)]
Redesign the planner's handling of index-descent cost estimation.

Historically we've used a couple of very ad-hoc fudge factors to try to
get the right results when indexes of different sizes would satisfy a
query with the same number of index leaf tuples being visited.  In
commit 21a39de5809cd3050a37d2554323cc1d0cbeed9d I tweaked one of these
fudge factors, with results that proved disastrous for larger indexes.
Commit bf01e34b556ff37982ba2d882db424aa484c0d07 fudged it some more,
but still with not a lot of principle behind it.

What seems like a better way to address these issues is to explicitly model
index-descent costs, since that's what's really at stake when considering
diferent indexes with similar leaf-page-level costs.  We tried that once
long ago, and found that charging random_page_cost per page descended
through was way too much, because upper btree levels tend to stay in cache
in real-world workloads.  However, there's still CPU costs to think about,
and the previous fudge factors can be seen as a crude attempt to account
for those costs.  So this patch replaces those fudge factors with explicit
charges for the number of tuple comparisons needed to descend the index
tree, plus a small charge per page touched in the descent.  The cost
multipliers are chosen so that the resulting charges are in the vicinity of
the historical (pre-9.2) fudge factors for indexes of up to about a million
tuples, while not ballooning unreasonably beyond that, as the old fudge
factor did (even more so in 9.2).

To make this work accurately for btree indexes, add some code that allows
extraction of the known root-page height from a btree.  There's no
equivalent number readily available for other index types, but we can use
the log of the number of index pages as an approximate substitute.

This seems like too much of a behavioral change to risk back-patching,
but it should improve matters going forward.  In 9.2 I'll just revert
the fudge-factor change.

11 years agoLast-gasp attempt to save libperl.so configure probe.
Tom Lane [Fri, 11 Jan 2013 03:16:22 +0000 (22:16 -0500)]
Last-gasp attempt to save libperl.so configure probe.

I notice that plperl's makefile adds the -I for $perl_archlibexp/CORE
at the end of CPPFLAGS not the beginning.  It seems somewhat unlikely
that the include search order has anything to do with why buildfarm
member okapi is failing, but I'm about out of other ideas.

11 years agoTest linking libperl.so using only Perl's required libraries.
Tom Lane [Thu, 10 Jan 2013 04:46:44 +0000 (23:46 -0500)]
Test linking libperl.so using only Perl's required libraries.

It appears that perl_embed_ldflags should already mention all the libraries
that are required by libperl.so itself.  So let's try the test link with
just those and not the other LIBS we've found up to now.  This should
more nearly reproduce what will happen when plperl is linked, and perhaps
will fix buildfarm member okapi's problem.

11 years agoAdd explicit configure-time checks for perl.h and libperl.so.
Tom Lane [Thu, 10 Jan 2013 00:41:37 +0000 (19:41 -0500)]
Add explicit configure-time checks for perl.h and libperl.so.

Although most platforms seem to package Perl in such a way that these files
are present even in basic Perl installations, Debian does not.  Hence, make
an effort to fail during configure rather than build if --with-perl was
given and these files are lacking.  Per gripe from Josh Berkus.

11 years agoDetect Windows perl linkage parameters in configure script.
Andrew Dunstan [Wed, 9 Jan 2013 22:49:23 +0000 (17:49 -0500)]
Detect Windows perl linkage parameters in configure script.

This means we can now construct a configure test for the library
presence. Previously these parameters were only figured out at
build time in plperl's GnuMakefile.

11 years agoProperly install ecpg_compat and pgtypes libraries on msvc
Magnus Hagander [Wed, 9 Jan 2013 16:29:59 +0000 (17:29 +0100)]
Properly install ecpg_compat and pgtypes libraries on msvc

JiangGuiqing

11 years agoDon't attempt to write recovery.conf when -R is not specified
Magnus Hagander [Wed, 9 Jan 2013 15:57:32 +0000 (16:57 +0100)]
Don't attempt to write recovery.conf when -R is not specified

Fixes segmentation fault during regular use.

Fujii Masao

11 years agoAllow parallel copy/link in pg_upgrade
Bruce Momjian [Wed, 9 Jan 2013 13:57:47 +0000 (08:57 -0500)]
Allow parallel copy/link in pg_upgrade

This patch implements parallel copying/linking of files by tablespace
using the --jobs option in pg_upgrade.

11 years agoFix potential corruption of lock table in CREATE/DROP INDEX CONCURRENTLY.
Tom Lane [Tue, 8 Jan 2013 23:25:58 +0000 (18:25 -0500)]
Fix potential corruption of lock table in CREATE/DROP INDEX CONCURRENTLY.

If VirtualXactLock() has to wait for a transaction that holds its VXID lock
as a fast-path lock, it must first convert the fast-path lock to a regular
lock.  It failed to take the required "partition" lock on the main
shared-memory lock table while doing so.  This is the direct cause of the
assert failure in GetLockStatusData() recently observed in the buildfarm,
but more worryingly it could result in arbitrary corruption of the shared
lock table if some other process were concurrently engaged in modifying the
same partition of the lock table.  Fortunately, VirtualXactLock() is only
used by CREATE INDEX CONCURRENTLY and DROP INDEX CONCURRENTLY, so the
opportunities for failure are fewer than they might have been.

In passing, improve some comments and be a bit more consistent about
order of operations.

11 years agoFix typo
Peter Eisentraut [Tue, 8 Jan 2013 02:34:30 +0000 (21:34 -0500)]
Fix typo

11 years agoFix a logic bug in pgindent.
Andrew Dunstan [Mon, 7 Jan 2013 17:26:27 +0000 (12:26 -0500)]
Fix a logic bug in pgindent.

11 years agoFix incorrect error message when schema-CREATE permission is absent.
Robert Haas [Mon, 7 Jan 2013 16:54:59 +0000 (11:54 -0500)]
Fix incorrect error message when schema-CREATE permission is absent.

Report by me.  Fix by KaiGai Kohei.

11 years agoAdd new "-q" logging option (quiet mode) while in initialize mode
Tatsuo Ishii [Mon, 7 Jan 2013 02:13:44 +0000 (11:13 +0900)]
Add new "-q" logging option (quiet mode) while in initialize mode
(-i), producing only one progress message per 5 seconds along with
elapsed time and estimated remaining time.  Also add elapsed time and
estimated remaining time to the default logging(prints one message
each 100000 rows).
Patch contributed by Tomas Vondra, reviewed by Jeevan Chalke and
Tatsuo Ishii.

11 years agoFix plpython build on older versions of OS X.
Tom Lane [Sun, 6 Jan 2013 20:49:53 +0000 (15:49 -0500)]
Fix plpython build on older versions of OS X.

Pre-Lion versions of Apple's linker don't allow space between -F and its
argument.  (Snow Leopard is nice enough to tell you that in so many words,
but older versions just fail with very obscure link errors, as seen on
buildfarm member locust for instance.)  Oversight in commit
fc8745070a53469a43ecbf999dc5692a36a649cc.

11 years agoAdd support for generating minimal recovery.conf when doing base backups
Magnus Hagander [Sat, 5 Jan 2013 15:54:06 +0000 (16:54 +0100)]
Add support for generating minimal recovery.conf when doing base backups

Adds commandline option -R to pg_basebackup that creates a recovery.conf which
enables standby mode using the same parameters that pg_basebackup used to
connect to the master, and writes it into the output directory (or injects it
in the tar file when tar format is used).

Zoltan Boszormenyi, modified by Magnus Hagander, reviewed by Amit Kapila & Fujii Masao

11 years agoCentralize single quote escaping in src/port/quotes.c
Magnus Hagander [Sat, 5 Jan 2013 14:40:19 +0000 (15:40 +0100)]
Centralize single quote escaping in src/port/quotes.c

For code-reuse in upcoming functionality in pg_basebackup.

Zoltan Boszormenyi

11 years agoPL/Python: Make build on OS X more flexible
Peter Eisentraut [Sat, 5 Jan 2013 13:56:14 +0000 (08:56 -0500)]
PL/Python: Make build on OS X more flexible

The PL/Python build on OS X was previously hardcoded to use the system
installation of Python, ignoring whatever was specified to configure.
Except that it would use the header files from configure, which could
lead to mismatches.  It was not possible to build against a custom
Python installation.

Now, we check in configure how the specified Python installation was
built and use that, supporting framework and non-framework builds.

11 years agoRevert "PL/Python: Remove workaround for returning booleans in Python <2.3"
Peter Eisentraut [Sat, 5 Jan 2013 13:49:19 +0000 (08:49 -0500)]
Revert "PL/Python: Remove workaround for returning booleans in Python <2.3"

This reverts commit be0dfbad3671ed2503a2a661e70b48c5b364e069.

The previous information that Py_RETURN_TRUE and Py_RETURN_FALSE are
supported in Python 2.3 is wrong.  They require Python 2.4.  Update the
comment about that.

11 years agodoc: Update CREATE FUNCTION compatibility information
Peter Eisentraut [Sat, 5 Jan 2013 13:29:18 +0000 (08:29 -0500)]
doc: Update CREATE FUNCTION compatibility information

Parameter defaults are actually in the SQL standard, while it was
previously claimed they were not.

11 years agoMake some spelling more consistent
Peter Eisentraut [Sat, 5 Jan 2013 13:25:21 +0000 (08:25 -0500)]
Make some spelling more consistent

11 years agoInvent a "one-shot" variant of CachedPlans for better performance.
Tom Lane [Fri, 4 Jan 2013 22:42:19 +0000 (17:42 -0500)]
Invent a "one-shot" variant of CachedPlans for better performance.

SPI_execute() and related functions create a CachedPlan, execute it once,
and immediately discard it, so that the functionality offered by
plancache.c is of no value in this code path.  And performance measurements
show that the extra data copying and invalidation checking done by
plancache.c slows down simple queries by 10% or more compared to 9.1.
However, enough of the SPI code is shared with functions that do need plan
caching that it seems impractical to bypass plancache.c altogether.
Instead, let's invent a variant version of cached plans that preserves
99% of the API but doesn't offer any of the actual functionality, nor the
overhead.  This puts SPI_execute() performance back on par, or maybe even
slightly better, than it was before.  This change should resolve recent
complaints of performance degradation from Dong Ye, Pavel Stehule, and
others.

By avoiding data copying, this change also reduces the amount of memory
needed to execute many-statement SPI_execute() strings, as for instance in
a recent complaint from Tomas Vondra.

An additional benefit of this change is that multi-statement SPI_execute()
query strings are now processed fully serially, that is we complete
execution of earlier statements before running parse analysis and planning
on following ones.  This eliminates a long-standing POLA violation, in that
DDL that affects the behavior of a later statement will now behave as
expected.

Back-patch to 9.2, since this was a performance regression compared to 9.1.
(In 9.2, place the added struct fields so as to avoid changing the offsets
of existing fields.)

Heikki Linnakangas and Tom Lane

11 years agoPrevent creation of postmaster's TCP socket during pg_upgrade testing.
Tom Lane [Thu, 3 Jan 2013 23:34:51 +0000 (18:34 -0500)]
Prevent creation of postmaster's TCP socket during pg_upgrade testing.

On non-Windows machines, we use the Unix socket for connections to test
postmasters, so there is no need to create a TCP socket.  Furthermore,
doing so causes failures due to port conflicts if two builds are carried
out concurrently on one machine.  (If the builds are done in different
chroots, which is standard practice at least in Red Hat distros, there
is no risk of conflict on the Unix socket.)  Suppressing the TCP socket
by setting listen_addresses to empty has long been standard practice
for pg_regress, and pg_upgrade knows about this too ... but pg_upgrade's
test.sh didn't get the memo.

Back-patch to 9.2, and also sync the 9.2 version of the script with HEAD
as much as practical.

11 years agoTolerate timeline switches while "pg_basebackup -X fetch" is running.
Heikki Linnakangas [Thu, 3 Jan 2013 17:51:00 +0000 (19:51 +0200)]
Tolerate timeline switches while "pg_basebackup -X fetch" is running.

If you take a base backup from a standby server with "pg_basebackup -X
fetch", and the timeline switches while the backup is being taken, the
backup used to fail with an error "requested WAL segment %s has already
been removed". This is because the server-side code that sends over the
required WAL files would not construct the WAL filename with the correct
timeline after a switch.

Fix that by using readdir() to scan pg_xlog for all the WAL segments in the
range, regardless of timeline.

Also, include all timeline history files in the backup, if taken with
"-X fetch". That fixes another related bug: If a timeline switch happened
just before the backup was initiated in a standby, the WAL segment
containing the initial checkpoint record contains WAL from the older
timeline too. Recovery will not accept that without a timeline history file
that lists the older timeline.

Backpatch to 9.2. Versions prior to that were not affected as you could not
take a base backup from a standby before 9.2.

11 years agoDelay reading timeline history file until it's fetched from master.
Heikki Linnakangas [Thu, 3 Jan 2013 08:41:58 +0000 (10:41 +0200)]
Delay reading timeline history file until it's fetched from master.

Streaming replication can fetch any missing timeline history files from the
master, but recovery would read the timeline history file for the target
timeline before reading the checkpoint record, and before walreceiver has
had a chance to fetch it from the master. Delay reading it, and the sanity
checks involving timeline history, until after reading the checkpoint
record.

There is at least one scenario where this makes a difference: if you take
a base backup from a standby server right after a timeline switch, the
WAL segment containing the initial checkpoint record will begin with an
older timeline ID. Without the timeline history file, recovering that file
will fail as the older timeline ID is not recognized to be an ancestor of
the target timeline. If you try to recover from such a backup, using only
streaming replication to fetch the WAL, this patch is required for that to
work.

11 years agoAdjust a few pg_upgrade functions to return void.
Bruce Momjian [Thu, 3 Jan 2013 02:20:13 +0000 (21:20 -0500)]
Adjust a few pg_upgrade functions to return void.

Adjust pg_upgrade page conversion functions (which are not used) to
return void so transfer_all_new_dbs can return void.

11 years agoFix IsUnderPostmaster/EXEC_BACKEND confusion
Alvaro Herrera [Wed, 2 Jan 2013 21:39:20 +0000 (18:39 -0300)]
Fix IsUnderPostmaster/EXEC_BACKEND confusion

11 years agoSet MaxBackends only on bootstrap and standalone modes
Alvaro Herrera [Wed, 2 Jan 2013 20:49:06 +0000 (17:49 -0300)]
Set MaxBackends only on bootstrap and standalone modes

... not on auxiliary processes.  I managed to overlook the fact that I
had disabled assertions on my HEAD checkout long ago.

Hopefully this will turn the buildfarm green again, and put an end to
today's silliness.

11 years agoMove tar function headers to pgtar.h
Magnus Hagander [Wed, 2 Jan 2013 19:34:08 +0000 (20:34 +0100)]
Move tar function headers to pgtar.h

This makes it possible to include them only where they are used, so
we can avoid the conflict of the uid_t and gid_t datatypes that happened
in plperl (since plperl doesn't need the tar functions)

11 years agoMake sure MaxBackends is always set
Alvaro Herrera [Wed, 2 Jan 2013 17:39:11 +0000 (14:39 -0300)]
Make sure MaxBackends is always set

Auxiliary and bootstrap processes weren't getting it, causing initdb to
fail completely.

11 years agoFix background workers for EXEC_BACKEND
Alvaro Herrera [Wed, 2 Jan 2013 15:01:14 +0000 (12:01 -0300)]
Fix background workers for EXEC_BACKEND

Commit da07a1e8 was broken for EXEC_BACKEND because I failed to realize
that the MaxBackends recomputation needed to be duplicated by
subprocesses in SubPostmasterMain.  However, instead of having the value
be recomputed at all, it's better to assign the correct value at
postmaster initialization time, and have it be propagated to exec'ed
backends via BackendParameters.

MaxBackends stays as zero until after modules in
shared_preload_libraries have had a chance to register bgworkers, since
the value is going to be untrustworthy till that's finished.

Heikki Linnakangas and Álvaro Herrera

11 years agoFix bug in streaming replication over multiple tli switches.
Heikki Linnakangas [Wed, 2 Jan 2013 12:35:15 +0000 (14:35 +0200)]
Fix bug in streaming replication over multiple tli switches.

After receiving some WAL over streaming replication, try to open the file
from the timeline we're currently recieving, not recoveryTargetTLI. They
are usually the same, which is why wasn't noticed before, but you'd get
an error if there have been more than one timeline switch between the
current point in WAL and the recovery target.

11 years agoFix silly typo in code, which broke the check for reaching consistency.
Heikki Linnakangas [Wed, 2 Jan 2013 11:42:15 +0000 (13:42 +0200)]
Fix silly typo in code, which broke the check for reaching consistency.

11 years agoUpdate copyrights for 2013
Bruce Momjian [Tue, 1 Jan 2013 22:15:01 +0000 (17:15 -0500)]
Update copyrights for 2013

Fully update git head, and update back branches in ./COPYRIGHT and
legal.sgml files.

11 years agoAdd new file to MSVC build system as well
Magnus Hagander [Tue, 1 Jan 2013 17:29:48 +0000 (18:29 +0100)]
Add new file to MSVC build system as well

11 years agoUnify some tar functionality across different parts
Magnus Hagander [Tue, 1 Jan 2013 17:15:57 +0000 (18:15 +0100)]
Unify some tar functionality across different parts

Move some of the tar functionality that existed mostly duplicated
in both pg_dump and the walsender basebackup functionality into
port/tar.c instead, so it can be used from both. It will also be
used by pg_basebackup in the future, which would've caused a third
copy of it around.

Zoltan Boszormenyi and Magnus Hagander

11 years agoWinflex binary on FTP site doesn't work on 64-bit Windows, update docs.
Heikki Linnakangas [Tue, 1 Jan 2013 16:09:31 +0000 (18:09 +0200)]
Winflex binary on FTP site doesn't work on 64-bit Windows, update docs.

Plus some other minor clarifications to Windows build instructions.

Craig Ringer, with minor editorialization by me.

11 years agoFix descrition of pg_resetxlog -l parameter
Magnus Hagander [Tue, 1 Jan 2013 15:16:20 +0000 (16:16 +0100)]
Fix descrition of pg_resetxlog -l parameter

This was changed in commit 038f3a05092365eca070bdc588554520dfd5ffb9, including
the description in the docs, but the reference was missed.

Fujii Masao

11 years agoFix ruleutils to cope with conflicts from adding/dropping/renaming columns.
Tom Lane [Mon, 31 Dec 2012 20:13:26 +0000 (15:13 -0500)]
Fix ruleutils to cope with conflicts from adding/dropping/renaming columns.

In commit 11e131854f8231a21613f834c40fe9d046926387, we improved the
rule/view dumping code so that it would produce valid query representations
even if some of the tables involved in a query had been renamed since the
query was parsed.  This patch extends that idea to fix problems that occur
when individual columns are renamed, or added or dropped.  As before, the
core of the fix is to assign unique new aliases when a name conflict has
been created.  This is complicated by the JOIN USING feature, which
requires the same column alias to be used in both input relations, but we
can handle that with a sufficiently complex approach to assigning aliases.

A fortiori, this patch takes care of situations where the query didn't have
unique column names to begin with, such as in a recent complaint from Bryan
Nuse.  (Because of expansion of "SELECT *", re-parsing a dumped query can
require column name uniqueness even though the original text did not.)

11 years agodoc: Correct description of ldapurl
Peter Eisentraut [Mon, 31 Dec 2012 05:24:16 +0000 (00:24 -0500)]
doc: Correct description of ldapurl

The ldapurl option doesn't actually support specifying a user name and
password.

Albe Laurenz

11 years agoFix compiler warning about uninitialized variable
Peter Eisentraut [Mon, 31 Dec 2012 05:13:40 +0000 (00:13 -0500)]
Fix compiler warning about uninitialized variable

11 years agoKeep timeline history files restored from archive in pg_xlog.
Heikki Linnakangas [Sun, 30 Dec 2012 12:26:47 +0000 (14:26 +0200)]
Keep timeline history files restored from archive in pg_xlog.

The cascading standby patch in 9.2 changed the way WAL files are treated
when restored from the archive. Before, they were restored under a temporary
filename, and not kept in pg_xlog, but after the patch, they were copied
under pg_xlog. This is necessary for a cascading standby to find them, but
it also means that if the archive goes offline and a standby is restarted,
it can recover back to where it was using the files in pg_xlog. It also
means that if you take an offline backup from a standby server, it includes
all the required WAL files in pg_xlog.

However, the same change was not made to timeline history files, so if the
WAL segment containing the checkpoint record contains a timeline switch, you
will still get an error if you try to restart recovery without the archive,
or recover from an offline backup taken from the standby.

With this patch, timeline history files restored from archive are copied
into pg_xlog like WAL files are, so that pg_xlog contains all the files
required to recover. This is a corner-case pre-existing issue in 9.2, but
even more important in master where it's possible for a standby to follow a
timeline switch through streaming replication. To make that possible, the
timeline history files must be present in pg_xlog.

11 years agodoc: Correct description of LDAP authentication
Peter Eisentraut [Sun, 30 Dec 2012 03:58:07 +0000 (22:58 -0500)]
doc: Correct description of LDAP authentication

Parts of the description had claimed incorrect pg_hba.conf option names
for LDAP authentication.

Albe Laurenz

11 years agoAdjust more backend functions to return OID rather than void.
Robert Haas [Sat, 29 Dec 2012 12:55:37 +0000 (07:55 -0500)]
Adjust more backend functions to return OID rather than void.

This is again intended to support extensions to the event trigger
functionality.  This may go a bit further than we need for that
purpose, but there's some value in being consistent, and the OID
may be useful for other purposes also.

Dimitri Fontaine

11 years agoRemove obsolete XLogRecPtr macros
Alvaro Herrera [Fri, 28 Dec 2012 16:06:15 +0000 (13:06 -0300)]
Remove obsolete XLogRecPtr macros

This gets rid of XLByteLT, XLByteLE, XLByteEQ and XLByteAdvance.
These were useful for brevity when XLogRecPtrs were split in
xlogid/xrecoff; but now that they are simple uint64's, they are just
clutter.  The only downside to making this change would be ease of
backporting patches, but that has been negated by other substantive
changes to the involved code anyway.  The clarity of simpler expressions
makes the change worthwhile.

Most of the changes are mechanical, but in a couple of places, the patch
author chose to invert the operator sense, making the code flow more
logical (and more in line with preceding comments).

Author: Andres Freund
Eyeballed by Dimitri Fontaine and Alvaro Herrera

11 years agoAssign InvalidXLogRecPtr instead of MemSet(0)
Alvaro Herrera [Thu, 27 Dec 2012 21:33:03 +0000 (18:33 -0300)]
Assign InvalidXLogRecPtr instead of MemSet(0)

For consistency.

Author: Andres Freund

11 years agoRemove unused NextLogPage macro
Alvaro Herrera [Thu, 27 Dec 2012 21:23:23 +0000 (18:23 -0300)]
Remove unused NextLogPage macro

Commit 061e7efb1b did away with its last caller, but neglected to remove
the actual definition.

Author: Andres Freund

11 years agodoc: Replace "NOTE" with proper markup
Peter Eisentraut [Thu, 27 Dec 2012 04:48:35 +0000 (23:48 -0500)]
doc: Replace "NOTE" with proper markup

11 years agoAdd pg_upgrade --jobs parameter
Bruce Momjian [Thu, 27 Dec 2012 00:26:30 +0000 (19:26 -0500)]
Add pg_upgrade --jobs parameter

Add pg_upgrade --jobs, which allows parallel dump/restore of databases,
which improves performance.

11 years agoFix some minor issues in view pretty-printing.
Tom Lane [Mon, 24 Dec 2012 22:52:19 +0000 (17:52 -0500)]
Fix some minor issues in view pretty-printing.

Code review for commit 2f582f76b1945929ff07116cd4639747ce9bb8a1: don't use
a static variable for what ought to be a deparse_context field, fix
non-multibyte-safe test for spaces, avoid useless and potentially O(N^2)
(though admittedly with a very small constant) calculations of wrap
positions when we aren't going to wrap.

11 years agoUpdate comments on rd_newRelfilenodeSubid.
Simon Riggs [Mon, 24 Dec 2012 17:07:06 +0000 (17:07 +0000)]
Update comments on rd_newRelfilenodeSubid.
Ensure comments accurately reflect state of code
given new understanding, and recent changes.
Include example code from Noah Misch to
illustrate how rd_newRelfilenodeSubid can be
reset deterministically. No code changes.

11 years agoKeep rd_newRelfilenodeSubid across overflow.
Simon Riggs [Mon, 24 Dec 2012 16:43:22 +0000 (16:43 +0000)]
Keep rd_newRelfilenodeSubid across overflow.
Teach RelationCacheInvalidate() to keep rd_newRelfilenodeSubid across rel cache
message overflows, so that behaviour is now fully deterministic.

Noah Misch

11 years agoFix more weird compiler messages caused
Simon Riggs [Mon, 24 Dec 2012 16:25:26 +0000 (16:25 +0000)]
Fix more weird compiler messages caused
by unmatched function prototypes.

Andres Freund

11 years agoAdd function prototype from previous commit.
Simon Riggs [Mon, 24 Dec 2012 09:18:42 +0000 (09:18 +0000)]
Add function prototype from previous commit.

11 years agoAdjust many backend functions to return OID rather than void.
Robert Haas [Sun, 23 Dec 2012 23:25:03 +0000 (18:25 -0500)]
Adjust many backend functions to return OID rather than void.

Extracted from a larger patch by Dimitri Fontaine.  It is hoped that
this will provide infrastructure for enriching the new event trigger
functionality, but it seems possibly useful for other purposes as
well.

11 years agoPrevent failure when RowExpr or XmlExpr is parse-analyzed twice.
Tom Lane [Sun, 23 Dec 2012 19:07:24 +0000 (14:07 -0500)]
Prevent failure when RowExpr or XmlExpr is parse-analyzed twice.

transformExpr() is required to cope with already-transformed expression
trees, for various ugly-but-not-quite-worth-cleaning-up reasons.  However,
some of its newer subroutines hadn't gotten the memo.  This accounts for
bug #7763 from Norbert Buchmuller: transformRowExpr() was overwriting the
previously determined type of a RowExpr during CREATE TABLE LIKE INCLUDING
INDEXES.  Additional investigation showed that transformXmlExpr had the
same kind of problem, but all the other cases seem to be safe.

Andres Freund and Tom Lane

11 years agoFix documentation typo.
Tom Lane [Sat, 22 Dec 2012 20:01:29 +0000 (15:01 -0500)]
Fix documentation typo.

"GetForeignTableColumnOptions" should be "GetForeignColumnOptions".
Noted by Metin Döşlü.

11 years agoFix sloppiness in the timeline switch over streaming replication patch.
Heikki Linnakangas [Fri, 21 Dec 2012 18:04:11 +0000 (20:04 +0200)]
Fix sloppiness in the timeline switch over streaming replication patch.

Here's another attempt at fixing the logic that decides how far the WAL can
be streamed, which was still broken if the timeline changed while streaming.
You would get an assertion failure. The way the logic is now written is more
readable, too.

Thom Brown reported the assertion failure.

11 years agoFix race condition if a file is removed while pg_basebackup is running.
Heikki Linnakangas [Fri, 21 Dec 2012 13:29:49 +0000 (15:29 +0200)]
Fix race condition if a file is removed while pg_basebackup is running.

If a relation file was removed when the server-side counterpart of
pg_basebackup was just about to open it to send it to the client, you'd
get a "could not open file" error. Fix that.

Backpatch to 9.1, this goes back to when pg_basebackup was introduced.

11 years agoForgot to remove extern declaration of GetRecoveryTargetTLI()
Heikki Linnakangas [Fri, 21 Dec 2012 07:27:37 +0000 (09:27 +0200)]
Forgot to remove extern declaration of GetRecoveryTargetTLI()

Fujii Masao

11 years agoMake some messages more consistent in style
Peter Eisentraut [Fri, 21 Dec 2012 04:39:33 +0000 (23:39 -0500)]
Make some messages more consistent in style

11 years agoFix grammatical mistake in error message
Peter Eisentraut [Fri, 21 Dec 2012 04:36:13 +0000 (23:36 -0500)]
Fix grammatical mistake in error message

11 years agoFix pg_extension_config_dump() to handle update cases more sanely.
Tom Lane [Thu, 20 Dec 2012 21:30:59 +0000 (16:30 -0500)]
Fix pg_extension_config_dump() to handle update cases more sanely.

If pg_extension_config_dump() is executed again for a table already listed
in the extension's extconfig, the code was blindly making a new array entry.
This does not seem useful.  Fix it to replace the existing array entry
instead, so that it's possible for extension update scripts to alter the
filter conditions for configuration tables.

In addition, teach ALTER EXTENSION DROP TABLE to check for an extconfig
entry for the target table, and remove it if present.  This is not a 100%
solution because it's allowed for an extension update script to just
summarily DROP a member table, and that code path doesn't go through
ExecAlterExtensionContentsStmt.  We could probably make that case clean
things up if we had to, but it would involve sticking a very ugly wart
somewhere in the guts of dependency.c.  Since on the whole it seems quite
unlikely that extension updates would want to remove pre-existing
configuration tables, making the case possible with an explicit command
seems sufficient.

Per bug #7756 from Regina Obe.  Back-patch to 9.1 where extensions were
introduced.

11 years agoFix recycling of WAL segments after switching timeline during recovery.
Heikki Linnakangas [Thu, 20 Dec 2012 20:00:34 +0000 (22:00 +0200)]
Fix recycling of WAL segments after switching timeline during recovery.

This was broken before, we would recycle old WAL segments on wrong timeline
after the recovery target timeline had changed, but my recent commit to
not initialize ThisTimeLineID at all in a standby's checkpointer process
broke this completely.

The problem is that when installing a recycled WAL segment as a future one,
ThisTimeLineID is used to construct the filename. To fix, always update
ThisTimeLineID to the current timeline being recovered, before recycling
WAL segments at a restartpoint.

This still leaves a small window where we might install WAL segments under
wrong timeline ID, if the timeline is changed just as we're about to start
recycling. Also, even if we're replaying timeline X at the momnent, there's
no guarantee that we'll need as many WAL segments on that timeline as we
recycle. We might be just about to reach the point where we switch to next
timeline, so might only need one more WAL segment on the current timeline.
We'll live with the waste in that situation.

Bug pointed out by Fujii Masao. 9.1 and 9.2 had the same issue, when
recovery target timeline was changed, but I committed a slightly different
version of this patch on those branches.

11 years agoAvoid using NAMEDATALEN in pg_upgrade
Bruce Momjian [Thu, 20 Dec 2012 18:56:24 +0000 (13:56 -0500)]
Avoid using NAMEDATALEN in pg_upgrade

Because the client encoding might not match the server encoding,
pg_upgrade can't allocate NAMEDATALEN bytes for storage of database,
relation, and namespace identifiers.  Instead pg_strdup() the memory and
free it.

Also add C comment in initdb.c about safe NAMEDATALEN usage.

11 years agoFollow TLI of last replayed record, not recovery target TLI, in walsenders.
Heikki Linnakangas [Thu, 20 Dec 2012 12:23:31 +0000 (14:23 +0200)]
Follow TLI of last replayed record, not recovery target TLI, in walsenders.

Most of the time, the last replayed record comes from the recovery target
timeline, but there is a corner case where it makes a difference. When
the startup process scans for a new timeline, and decides to change recovery
target timeline, there is a window where the recovery target TLI has already
been bumped, but there are no WAL segments from the new timeline in pg_xlog
yet. For example, if we have just replayed up to point 0/30002D8, on
timeline 1, there is a WAL file called 000000010000000000000003 in pg_xlog
that contains the WAL up to that point. When recovery switches recovery
target timeline to 2, a walsender can immediately try to read WAL from
0/30002D8, from timeline 2, so it will try to open WAL file
000000020000000000000003. However, that doesn't exist yet - the startup
process hasn't copied that file from the archive yet nor has the walreceiver
streamed it yet, so walsender fails with error "requested WAL segment
000000020000000000000003 has already been removed". That's harmless, in that
the standby will try to reconnect later and by that time the segment is
already created, but error messages that should be ignored are not good.

To fix that, have walsender track the TLI of the last replayed record,
instead of the recovery target timeline. That way walsender will not try to
read anything from timeline 2, until the WAL segment has been created and at
least one record has been replayed from it. The recovery target timeline is
now xlog.c's internal affair, it doesn't need to be exposed in shared memory
anymore.

This fixes the error reported by Thom Brown. depesz the same error message,
but I'm not sure if this fixes his scenario.

11 years agoDon't set ThisTimeLineID in checkpointer & bgwriter during recovery.
Heikki Linnakangas [Thu, 20 Dec 2012 12:01:50 +0000 (14:01 +0200)]
Don't set ThisTimeLineID in checkpointer & bgwriter during recovery.

We used to set it to the current recovery target timeline, but the recovery
target timeline can change during recovery, leaving ThisTimeLineID at an
old value. That seems worse than always leaving it at zero to begin with.

AFAICS there was no good reason to set it in the first place. ThisTimeLineID
is not needed in checkpointer or bgwriter process, until it's time to write
the end-of-recovery checkpoint, and at that point ThisTimeLineID is updated
anyway.

11 years agoAdd pg_upgrade comment about mismatch error
Bruce Momjian [Thu, 20 Dec 2012 12:37:27 +0000 (07:37 -0500)]
Add pg_upgrade comment about mismatch error

Add comment stating that constraint and index names must match.

11 years agoCheck if we've reached end-of-backup point also if no redo is required.
Heikki Linnakangas [Wed, 19 Dec 2012 12:13:23 +0000 (14:13 +0200)]
Check if we've reached end-of-backup point also if no redo is required.

If you restored from a backup taken from a standby, and the last record in
the backup is the checkpoint record, ie. there is no redo required except
for the checkpoint record, we would fail to notice that we've reached the
end-of-backup point, and the database is consistent. The result was an
error "WAL ends before end of online backup". To fix, move the
have-we-reached-end-of-backup check into CheckRecoveryConsistency(), which
is already responsible for similar checks with minRecoveryPoint, and is
called in the right places.

Backpatch to 9.2, this check and bug did not exist before that.

11 years agoRename SQL feature S403 to ARRAY_MAX_CARDINALITY
Peter Eisentraut [Wed, 19 Dec 2012 12:14:27 +0000 (07:14 -0500)]
Rename SQL feature S403 to ARRAY_MAX_CARDINALITY

In an earlier version of the standard, this was called just
"MAX_CARDINALITY".

11 years agopg_basebackup: Small message punctuation improvements
Peter Eisentraut [Wed, 19 Dec 2012 12:01:11 +0000 (07:01 -0500)]
pg_basebackup: Small message punctuation improvements

11 years agoDon't include postgres.h in postgres_fe.h for cpluspluscheck.
Andrew Dunstan [Tue, 18 Dec 2012 21:30:14 +0000 (16:30 -0500)]
Don't include postgres.h in postgres_fe.h for cpluspluscheck.

Error exposed by recent Assert changes.

Complaint from Peter Eisentraut.

11 years agoIgnore libedit/libreadline while probing for standard functions.
Tom Lane [Tue, 18 Dec 2012 21:22:13 +0000 (16:22 -0500)]
Ignore libedit/libreadline while probing for standard functions.

Some versions of libedit expose bogus definitions of setproctitle(),
optreset, and perhaps other symbols that we don't want configure to pick up
on.  There was a previous report of similar problems with strlcpy(), which
we addressed in commit 59cf88da91bc88978b05275ebd94ac2d980c4047, but the
problem has evidently grown in scope since then.  In hopes of not having to
deal with it again in future, rearrange configure's tests for supplied
functions so that we ignore libedit/libreadline except when probing
specifically for functions we expect them to provide.

Per report from Christoph Berg, though this is slightly more aggressive
than his proposed patch.

11 years agoRemove allow_nonpic_in_shlib
Peter Eisentraut [Tue, 18 Dec 2012 06:13:59 +0000 (01:13 -0500)]
Remove allow_nonpic_in_shlib

This was used in a time when a shared libperl or libpython was difficult
to come by.  That is obsolete, and the idea behind the flag was never
fully portable anyway and will likely fail on more modern CPU
architectures.

11 years agodoc: Put PL/pgSQL RAISE USING keywords into a list
Peter Eisentraut [Tue, 18 Dec 2012 03:45:20 +0000 (22:45 -0500)]
doc: Put PL/pgSQL RAISE USING keywords into a list

Karl O. Pinc

11 years agoFix failure to ignore leftover temp tables after a server crash.
Tom Lane [Tue, 18 Dec 2012 01:15:32 +0000 (20:15 -0500)]
Fix failure to ignore leftover temp tables after a server crash.

During crash recovery, we remove disk files belonging to temporary tables,
but the system catalog entries for such tables are intentionally not
cleaned up right away.  Instead, the first backend that uses a temp schema
is expected to clean out any leftover objects therein.  This approach
requires that we be careful to ignore leftover temp tables (since any
actual access attempt would fail), *even if their BackendId matches our
session*, if we have not yet established use of the session's corresponding
temp schema.  That worked fine in the past, but was broken by commit
debcec7dc31a992703911a9953e299c8d730c778 which incorrectly removed the
rd_islocaltemp relcache flag.  Put it back, and undo various changes
that substituted tests like "rel->rd_backend == MyBackendId" for use
of a state-aware flag.  Per trouble report from Heikki Linnakangas.

Back-patch to 9.1 where the erroneous change was made.  In the back
branches, be careful to add rd_islocaltemp in a spot in the struct that
was alignment padding before, so as not to break existing add-on code.

11 years agoFix filling of postmaster.pid in bootstrap/standalone mode.
Tom Lane [Sun, 16 Dec 2012 20:01:55 +0000 (15:01 -0500)]
Fix filling of postmaster.pid in bootstrap/standalone mode.

We failed to ever fill the sixth line (LISTEN_ADDR), which caused the
attempt to fill the seventh line (SHMEM_KEY) to fail, so that the shared
memory key never got added to the file in standalone mode.  This has been
broken since we added more content to our lock files in 9.1.

To fix, tweak the logic in CreateLockFile to add an empty LISTEN_ADDR
line in standalone mode.  This is a tad grotty, but since that function
already knows almost everything there is to know about the contents of
lock files, it doesn't seem that it's any better to hack it elsewhere.

It's not clear how significant this bug really is, since a standalone
backend should never have any children and thus it seems not critical
to be able to check the nattch count of the shmem segment externally.
But I'm going to back-patch the fix anyway.

This problem had escaped notice because of an ancient (and in hindsight
pretty dubious) decision to suppress LOG-level messages by default in
standalone mode; so that the elog(LOG) complaint in AddToDataDirLockFile
that should have warned of the problem didn't do anything.  Fixing that
is material for a separate patch though.

11 years agoTidy up from frontend Assert change.
Andrew Dunstan [Sun, 16 Dec 2012 17:22:57 +0000 (12:22 -0500)]
Tidy up from frontend Assert change.

Quiet compiler warnings noted by Peter Eisentraut.

11 years agoProperly copy fmgroids.h after clean on Win32
Magnus Hagander [Sun, 16 Dec 2012 13:56:51 +0000 (14:56 +0100)]
Properly copy fmgroids.h after clean on Win32

Craig Ringer

11 years agodoc: Remove extra table column
Peter Eisentraut [Sun, 16 Dec 2012 08:51:05 +0000 (03:51 -0500)]
doc: Remove extra table column

Not all system catalog description tables have the same number of
columns, and the patch to add oid columns did one bit too much
copy-and-pasting.

11 years agodoc: Add oid columns to system catalog documentation
Peter Eisentraut [Sat, 15 Dec 2012 05:42:47 +0000 (00:42 -0500)]
doc: Add oid columns to system catalog documentation

Karl O. Pinc and Jeff Davis

11 years agodoc: Add pg_stat_reset and related functions to index
Peter Eisentraut [Sat, 15 Dec 2012 05:30:53 +0000 (00:30 -0500)]
doc: Add pg_stat_reset and related functions to index

11 years agoProvide Assert() for frontend code.
Andrew Dunstan [Fri, 14 Dec 2012 23:03:07 +0000 (18:03 -0500)]
Provide Assert() for frontend code.

Per discussion on-hackers. psql is converted to use the new code.

Follows a suggestion from Heikki Linnakangas.

11 years agoUpdate comment in heapgetpage() regarding PD_ALL_VISIBLE vs. Hot Standby.
Robert Haas [Fri, 14 Dec 2012 20:44:38 +0000 (15:44 -0500)]
Update comment in heapgetpage() regarding PD_ALL_VISIBLE vs. Hot Standby.

Pavan Deolasee, slightly modified by me

11 years agoNLS: Use msgmerge --previous option
Peter Eisentraut [Fri, 14 Dec 2012 04:12:12 +0000 (23:12 -0500)]
NLS: Use msgmerge --previous option

It provides some additional help to translators.

11 years agodoc: Improve search_path mentions in index
Peter Eisentraut [Fri, 14 Dec 2012 04:00:42 +0000 (23:00 -0500)]
doc: Improve search_path mentions in index

Karl O. Pinc

11 years agoAllow a streaming replication standby to follow a timeline switch.
Heikki Linnakangas [Thu, 13 Dec 2012 17:00:00 +0000 (19:00 +0200)]
Allow a streaming replication standby to follow a timeline switch.

Before this patch, streaming replication would refuse to start replicating
if the timeline in the primary doesn't exactly match the standby. The
situation where it doesn't match is when you have a master, and two
standbys, and you promote one of the standbys to become new master.
Promoting bumps up the timeline ID, and after that bump, the other standby
would refuse to continue.

There's significantly more timeline related logic in streaming replication
now. First of all, when a standby connects to primary, it will ask the
primary for any timeline history files that are missing from the standby.
The missing files are sent using a new replication command TIMELINE_HISTORY,
and stored in standby's pg_xlog directory. Using the timeline history files,
the standby can follow the latest timeline present in the primary
(recovery_target_timeline='latest'), just as it can follow new timelines
appearing in an archive directory.

START_REPLICATION now takes a TIMELINE parameter, to specify exactly which
timeline to stream WAL from. This allows the standby to request the primary
to send over WAL that precedes the promotion. The replication protocol is
changed slightly (in a backwards-compatible way although there's little hope
of streaming replication working across major versions anyway), to allow
replication to stop when the end of timeline reached, putting the walsender
back into accepting a replication command.

Many thanks to Amit Kapila for testing and reviewing various versions of
this patch.

11 years agoMake xlog_internal.h includable in frontend context.
Heikki Linnakangas [Thu, 13 Dec 2012 12:59:13 +0000 (14:59 +0200)]
Make xlog_internal.h includable in frontend context.

This makes unnecessary the ugly hack used to #include postgres.h in
pg_basebackup.

Based on Alvaro Herrera's patch

11 years agoIn multi-insert, don't go into infinite loop on a huge tuple and fillfactor.
Heikki Linnakangas [Wed, 12 Dec 2012 11:34:03 +0000 (13:34 +0200)]
In multi-insert, don't go into infinite loop on a huge tuple and fillfactor.

If a tuple is larger than page size minus space reserved for fillfactor,
heap_multi_insert would never find a page that it fits in and repeatedly ask
for a new page from RelationGetBufferForTuple. If a tuple is too large to
fit on any page, taking fillfactor into account, RelationGetBufferForTuple
will always expand the relation. In a normal insert, heap_insert will accept
that and put the tuple on the new page. heap_multi_insert, however, does a
fillfactor check of its own, and doesn't accept the newly-extended page
RelationGetBufferForTuple returns, even though there is no other choice to
make the tuple fit.

Fix that by making the logic in heap_multi_insert more like the heap_insert
logic. The first tuple is always put on the page RelationGetBufferForTuple
gives us, and the fillfactor check is only applied to the subsequent tuples.

Report from David Gould, although I didn't use his patch.

11 years agoAdd defenses against integer overflow in dynahash numbuckets calculations.
Tom Lane [Wed, 12 Dec 2012 03:09:05 +0000 (22:09 -0500)]
Add defenses against integer overflow in dynahash numbuckets calculations.

The dynahash code requires the number of buckets in a hash table to fit
in an int; but since we calculate the desired hash table size dynamically,
there are various scenarios where we might calculate too large a value.
The resulting overflow can lead to infinite loops, division-by-zero
crashes, etc.  I (tgl) had previously installed some defenses against that
in commit 299d1716525c659f0e02840e31fbe4dea3, but that covered only one
call path.  Moreover it worked by limiting the request size to work_mem,
but in a 64-bit machine it's possible to set work_mem high enough that the
problem appears anyway.  So let's fix the problem at the root by installing
limits in the dynahash.c functions themselves.

Trouble report and patch by Jeff Davis.

11 years agoDisable event triggers in standalone mode.
Tom Lane [Wed, 12 Dec 2012 00:28:31 +0000 (19:28 -0500)]
Disable event triggers in standalone mode.

Per discussion, this seems necessary to allow recovery from broken event
triggers, or broken indexes on pg_event_trigger.

Dimitri Fontaine

11 years agoFix performance problems with autovacuum truncation in busy workloads.
Kevin Grittner [Tue, 11 Dec 2012 20:33:08 +0000 (14:33 -0600)]
Fix performance problems with autovacuum truncation in busy workloads.

In situations where there are over 8MB of empty pages at the end of
a table, the truncation work for trailing empty pages takes longer
than deadlock_timeout, and there is frequent access to the table by
processes other than autovacuum, there was a problem with the
autovacuum worker process being canceled by the deadlock checking
code. The truncation work done by autovacuum up that point was
lost, and the attempt tried again by a later autovacuum worker. The
attempts could continue indefinitely without making progress,
consuming resources and blocking other processes for up to
deadlock_timeout each time.

This patch has the autovacuum worker checking whether it is
blocking any other thread at 20ms intervals. If such a condition
develops, the autovacuum worker will persist the work it has done
so far, release its lock on the table, and sleep in 50ms intervals
for up to 5 seconds, hoping to be able to re-acquire the lock and
try again. If it is unable to get the lock in that time, it moves
on and a worker will try to continue later from the point this one
left off.

While this patch doesn't change the rules about when and what to
truncate, it does cause the truncation to occur sooner, with less
blocking, and with the consumption of fewer resources when there is
contention for the table's lock.

The only user-visible change other than improved performance is
that the table size during truncation may change incrementally
instead of just once.

This problem exists in all supported versions but is infrequently
reported, although some reports of performance problems when
autovacuum runs might be caused by this. Initial commit is just the
master branch, but this should probably be backpatched once the
build farm and general developer usage confirm that there are no
surprising effects.

Jan Wieck

11 years agoFix pg_upgrade for invalid indexes
Bruce Momjian [Tue, 11 Dec 2012 20:09:22 +0000 (15:09 -0500)]
Fix pg_upgrade for invalid indexes

All versions of pg_upgrade upgraded invalid indexes caused by CREATE
INDEX CONCURRENTLY failures and marked them as valid.  The patch adds a
check to all pg_upgrade versions and throws an error during upgrade or
--check.

Backpatch to 9.2, 9.1, 9.0.  Patch slightly adjusted.

11 years agoConsistency check should compare last record replayed, not last record read.
Heikki Linnakangas [Tue, 11 Dec 2012 13:57:24 +0000 (15:57 +0200)]
Consistency check should compare last record replayed, not last record read.

EndRecPtr is the last record that we've read, but not necessarily yet
replayed. CheckRecoveryConsistency should compare minRecoveryPoint with the
last replayed record instead. This caused recovery to think it's reached
consistency too early.

Now that we do the check in CheckRecoveryConsistency correctly, we have to
move the call of that function to after redoing a record. The current place,
after reading a record but before replaying it, is wrong. In particular, if
there are no more records after the one ending at minRecoveryPoint, we don't
enter hot standby until one extra record is generated and read by the
standby, and CheckRecoveryConsistency is called. These two bugs conspired
to make the code appear to work correctly, except for the small window
between reading the last record that reaches minRecoveryPoint, and
replaying it.

In the passing, rename recoveryLastRecPtr, which is the last record
replayed, to lastReplayedEndRecPtr. This makes it slightly less confusing
with replayEndRecPtr, which is the last record read that we're about to
replay.

Original report from Kyotaro HORIGUCHI, further diagnosis by Fujii Masao.
Backpatch to 9.0, where Hot Standby subtly changed the test from
"minRecoveryPoint < EndRecPtr" to "minRecoveryPoint <= EndRecPtr". The
former works because where the test is performed, we have always read one
more record than we've replayed.

11 years agoAdd mode where contrib installcheck runs each module in a separately named database.
Andrew Dunstan [Tue, 11 Dec 2012 16:52:45 +0000 (11:52 -0500)]
Add mode where contrib installcheck runs each module in a separately named database.

Normally each module is tested in a database named contrib_regression,
which is dropped and recreated at the beginhning of each pg_regress run.
This new mode, enabled by adding USE_MODULE_DB=1 to the make command
line, runs most modules in a database with the module name embedded in
it.

This will make testing pg_upgrade on clusters with the contrib modules
a lot easier.

Second attempt at this, this time accomodating make versions older
than 3.82.

Still to be done: adapt to the MSVC build system.

Backpatch to 9.0, which is the earliest version it is reasonably
possible to test upgrading from.

11 years agoFix pg_upgrade -O/-o options
Bruce Momjian [Tue, 11 Dec 2012 04:03:17 +0000 (23:03 -0500)]
Fix pg_upgrade -O/-o options

Fix previous commit that added synchronous_commit=off, but broke -O/-o
due to missing space in argument passing.

Backpatch to 9.2.

11 years agodoc: Remove blastwave.org link
Peter Eisentraut [Tue, 11 Dec 2012 03:37:19 +0000 (22:37 -0500)]
doc: Remove blastwave.org link

Apparently, this service has been dead since 2008.

11 years agoUpdate minimum recovery point on truncation.
Heikki Linnakangas [Mon, 10 Dec 2012 13:54:42 +0000 (15:54 +0200)]
Update minimum recovery point on truncation.

If a file is truncated, we must update minRecoveryPoint. Once a file is
truncated, there's no going back; it would not be safe to stop recovery
at a point earlier than that anymore.

Per report from Kyotaro HORIGUCHI. Backpatch to 8.4. Before that,
minRecoveryPoint was not updated during recovery at all.

11 years agoFix the tracking of min recovery point timeline.
Heikki Linnakangas [Fri, 7 Dec 2012 14:29:39 +0000 (16:29 +0200)]
Fix the tracking of min recovery point timeline.

Forgot to update it at the right place. Also, consider checkpoint record
that switches to new timelne to be on the new timeline.

This fixes erroneous "requested timeline 2 does not contain minimum recovery
point" errors, pointed out by Amit Kapila while testing another patch.