]> granicus.if.org Git - postgresql/log
postgresql
11 years agoReset master xmin when hot_standby_feedback disabled.
Simon Riggs [Mon, 4 Feb 2013 10:29:22 +0000 (10:29 +0000)]
Reset master xmin when hot_standby_feedback disabled.
If walsender has xmin of standby then ensure we
reset the value to 0 when we change from hot_standby_feedback=on
to hot_standby_feedback=off.

11 years agoPerform line wrapping and indenting by default in ruleutils.c.
Tom Lane [Sun, 3 Feb 2013 20:56:45 +0000 (15:56 -0500)]
Perform line wrapping and indenting by default in ruleutils.c.

This patch changes pg_get_viewdef() and allied functions so that
PRETTY_INDENT processing is always enabled.  Per discussion, only the
PRETTY_PAREN processing (that is, stripping of "unnecessary" parentheses)
poses any real forward-compatibility risk, so we may as well make dump
output look as nice as we safely can.

Also, set the default wrap length to zero (i.e, wrap after each SELECT
or FROM list item), since there's no very principled argument for the
former default of 80-column wrapping, and most people seem to agree this
way looks better.

Marko Tiikkaja, reviewed by Jeevan Chalke, further hacking by Tom Lane

11 years agoPL/Python: Add result object str handler
Peter Eisentraut [Sun, 3 Feb 2013 05:31:01 +0000 (00:31 -0500)]
PL/Python: Add result object str handler

This is intended so that say plpy.debug(rv) prints something useful for
debugging query execution results.

reviewed by Steve Singer

11 years agoCreate a psql command \gset to store query results into psql variables.
Tom Lane [Sat, 2 Feb 2013 22:06:38 +0000 (17:06 -0500)]
Create a psql command \gset to store query results into psql variables.

This eases manipulation of query results in psql scripts.

Pavel Stehule, reviewed by Piyush Newe, Shigeru Hanada, and Tom Lane

11 years agoPrevent "\g filename" from affecting subsequent commands after an error.
Tom Lane [Sat, 2 Feb 2013 19:21:24 +0000 (14:21 -0500)]
Prevent "\g filename" from affecting subsequent commands after an error.

In the previous coding, psql's state variable saying that output should
go to a file was only reset after successful completion of a query
returning tuples.  Thus for example,

regression=# select 1/0
regression-# \g somefile
ERROR:  division by zero
regression=# select 1/2;
regression=#

... huh, I wonder where that output went.  Even more oddly, the state
was not reset even if it's the file that's causing the failure:

regression=# select 1/2 \g /foo
/foo: Permission denied
regression=# select 1/2;
/foo: Permission denied
regression=# select 1/2;
/foo: Permission denied

This seems to me not to satisfy the principle of least surprise.
\g is certainly not documented in a way that suggests its effects are
at all persistent.

To fix, adjust the code so that the flag is reset at exit from SendQuery
no matter what happened.

Noted while reviewing the \gset patch, which had comparable issues.
Arguably this is a bug fix, but I'll refrain from back-patching for now.

11 years agoMark vacuum_defer_cleanup_age as PGC_POSTMASTER.
Simon Riggs [Sat, 2 Feb 2013 18:49:54 +0000 (18:49 +0000)]
Mark vacuum_defer_cleanup_age as PGC_POSTMASTER.

Following bug analysis of #7819 by Tom Lane

11 years agoAdjust COPY FREEZE error message to be more accurate and consistent.
Bruce Momjian [Sat, 2 Feb 2013 17:56:14 +0000 (12:56 -0500)]
Adjust COPY FREEZE error message to be more accurate and consistent.

Per suggestions from Noah and Tom.

11 years agodoc: Tiny whitespace fix
Peter Eisentraut [Sat, 2 Feb 2013 02:44:22 +0000 (21:44 -0500)]
doc: Tiny whitespace fix

11 years agoMove Assert() definitions to c.h
Alvaro Herrera [Fri, 1 Feb 2013 20:50:04 +0000 (17:50 -0300)]
Move Assert() definitions to c.h

This way, they can be used by frontend and backend code.  We already
supported that, but doing it this way allows us to mix true frontend
files with backend files compiled in frontend environment.

Author: Andres Freund

11 years agoFix typo in freeze_table_age implementation
Alvaro Herrera [Fri, 1 Feb 2013 15:00:40 +0000 (12:00 -0300)]
Fix typo in freeze_table_age implementation

The original code used freeze_min_age instead of freeze_table_age.  The
main consequence of this mistake is that lowering freeze_min_age would
cause full-table scans to occur much more frequently, which causes
serious issues because the number of writes required is much larger.
That feature (freeze_min_age) is supposed to affect only how soon tuples
are frozen; some pages should still be skipped due to the visibility
map.

Backpatch to 8.4, where the freeze_table_age feature was introduced.

Report and patch from Andres Freund

11 years agoFill tuple before HeapSatisfiesHOTAndKeyUpdate
Alvaro Herrera [Fri, 1 Feb 2013 13:43:09 +0000 (10:43 -0300)]
Fill tuple before HeapSatisfiesHOTAndKeyUpdate

Failing to do this results in almost all updates to system catalogs
being non-HOT updates, because the OID column would differ (not having
been set for the new tuple), which is an indexed column.

While at it, make sure to set the tableoid early in both old and new
tuples as well.  This isn't of much consequence, since that column is
seldom (never?) indexed.

Report and patch from Andres Freund.

11 years agoAdd CREATE RECURSIVE VIEW syntax
Peter Eisentraut [Fri, 1 Feb 2013 03:31:58 +0000 (22:31 -0500)]
Add CREATE RECURSIVE VIEW syntax

This is specified in the SQL standard.  The CREATE RECURSIVE VIEW
specification is transformed into a normal CREATE VIEW statement with a
WITH RECURSIVE clause.

reviewed by Abhijit Menon-Sen and Stephen Frost

11 years agoPL/Tcl: Fix compiler warnings with Tcl 8.6
Peter Eisentraut [Fri, 1 Feb 2013 03:08:53 +0000 (22:08 -0500)]
PL/Tcl: Fix compiler warnings with Tcl 8.6

Some constification was added in the Tcl APIs, so add the modifiers in
PL/Tcl as well.

11 years agoRestrict infomask bits to set on multixacts
Alvaro Herrera [Thu, 31 Jan 2013 22:12:35 +0000 (19:12 -0300)]
Restrict infomask bits to set on multixacts

We must only set the bit(s) for the strongest lock held in the tuple;
otherwise, a multixact containing members with exclusive lock and
key-share lock will behave as though only a share lock is held.

This bug was introduced in commit 0ac5ad5134, somewhere along
development, when we allowed a singleton FOR SHARE lock to be
implemented without a MultiXact by using a multi-bit pattern.
I overlooked that GetMultiXactIdHintBits() needed to be tweaked as well.
Previously, we could have the bits for FOR KEY SHARE and FOR UPDATE
simultaneously set and it wouldn't cause a problem.

Per report from digoal@126.com

11 years agopgrowlocks: fix bogus lock strength output
Alvaro Herrera [Thu, 31 Jan 2013 22:11:34 +0000 (19:11 -0300)]
pgrowlocks: fix bogus lock strength output

Per report from digoal@126.com

11 years agopg_upgrade docs: mention modification of postgresql.conf in new cluster
Bruce Momjian [Thu, 31 Jan 2013 21:32:35 +0000 (16:32 -0500)]
pg_upgrade docs: mention modification of postgresql.conf in new cluster

Mention it might be necessary to modify postgresql.conf in the new
cluster to match the old cluster.

Backpatch to 9.2.

Suggested by user.

11 years agoSwitch timelines if we crash soon after promotion.
Simon Riggs [Thu, 31 Jan 2013 19:29:32 +0000 (19:29 +0000)]
Switch timelines if we crash soon after promotion.
Previous patch to skip checkpoints at end of recovery didn't
correctly perform crash recovery, fumbling the timeline switch.
Now we record the minRecoveryPointTLI of the newly selected
timeline, so that we crash recover to the correct timeline.

Bug report from Fujii Masao, investigated by me.

11 years agoReject nonzero day fields in AT TIME ZONE INTERVAL functions.
Tom Lane [Thu, 31 Jan 2013 17:12:23 +0000 (12:12 -0500)]
Reject nonzero day fields in AT TIME ZONE INTERVAL functions.

It's not sensible for an interval that's used as a time zone value to be
larger than a day.  When we changed the interval type to contain a separate
day field, check_timezone() was adjusted to reject nonzero day values, but
timetz_izone(), timestamp_izone(), and timestamptz_izone() evidently were
overlooked.

While at it, make the error messages for these three cases consistent.

11 years agoProperly zero-pad the day-of-year part of the win32 build number
Magnus Hagander [Thu, 31 Jan 2013 14:03:24 +0000 (15:03 +0100)]
Properly zero-pad the day-of-year part of the win32 build number

This ensure the version number increases over time. The first three digits
in the version number is still set to the actual PostgreSQL version
number, but the last one is intended to be an ever increasing build number,
which previosly failed when it changed between 1, 2 and 3 digits long values.

Noted by Deepak

11 years agoAdd --aggregate-interval option.
Tatsuo Ishii [Thu, 31 Jan 2013 06:53:58 +0000 (15:53 +0900)]
Add --aggregate-interval option.

The new option specifies length of aggregation interval (in
seconds). May be used only together with -l. With this option, the log
contains per-interval summary (number of transactions, min/max latency
and two additional fields useful for variance estimation).

Patch contributed by Tomas Vondra, reviewed by Pavel Stehule. Slight
change by Tatsuo Ishii, suggested by Robert Hass to emit an error
message indicating that the option is not currently supported on
Windows.

11 years agoDon't use spi_priv.h in plpython.
Tom Lane [Thu, 31 Jan 2013 01:11:58 +0000 (20:11 -0500)]
Don't use spi_priv.h in plpython.

There may once have been a reason to violate modularity like that,
but it doesn't appear that there is anymore.

11 years agoFix plpgsql's reporting of plan-time errors in possibly-simple expressions.
Tom Lane [Thu, 31 Jan 2013 01:02:23 +0000 (20:02 -0500)]
Fix plpgsql's reporting of plan-time errors in possibly-simple expressions.

exec_simple_check_plan and exec_eval_simple_expr attempted to call
GetCachedPlan directly.  This meant that if an error was thrown during
planning, the resulting context traceback would not include the line
normally contributed by _SPI_error_callback.  This is already inconsistent,
but just to be really odd, a re-execution of the very same expression
*would* show the additional context line, because we'd already have cached
the plan and marked the expression as non-simple.

The problem is easy to demonstrate in 9.2 and HEAD because planning of a
cached plan doesn't occur at all until GetCachedPlan is done.  In earlier
versions, it could only be an issue if initial planning had succeeded, then
a replan was forced (already somewhat improbable for a simple expression),
and the replan attempt failed.  Since the issue is mainly cosmetic in older
branches anyway, it doesn't seem worth the risk of trying to fix it there.
It is worth fixing in 9.2 since the instability of the context printout can
affect the results of GET STACKED DIAGNOSTICS, as per a recent discussion
on pgsql-novice.

To fix, introduce a SPI function that wraps GetCachedPlan while installing
the correct callback function.  Use this instead of calling GetCachedPlan
directly from plpgsql.

Also introduce a wrapper function for extracting a SPI plan's
CachedPlanSource list.  This lets us stop including spi_priv.h in
pl_exec.c, which was never a very good idea from a modularity standpoint.

In passing, fix a similar inconsistency that could occur in SPI_cursor_open,
which was also calling GetCachedPlan without setting up a context callback.

11 years agoFix grammar for subscripting or field selection from a sub-SELECT result.
Tom Lane [Wed, 30 Jan 2013 19:16:16 +0000 (14:16 -0500)]
Fix grammar for subscripting or field selection from a sub-SELECT result.

Such cases should work, but the grammar failed to accept them because of
our ancient precedence hacks to convince bison that extra parentheses
around a sub-SELECT in an expression are unambiguous.  (Formally, they
*are* ambiguous, but we don't especially care whether they're treated as
part of the sub-SELECT or part of the expression.  Bison cares, though.)
Fix by adding a redundant-looking production for this case.

This is a fine example of why fixing shift/reduce conflicts via
precedence declarations is more dangerous than it looks: you can easily
cause the parser to reject cases that should work.

This has been wrong since commit 3db4056e22b0c6b2adc92543baf8408d2894fe91
or maybe before, and apparently some people have been working around it
by inserting no-op casts.  That method introduces a dump/reload hazard,
as illustrated in bug #7838 from Jan Mate.  Hence, back-patch to all
active branches.

11 years agopg_regress: Allow overriding diff options
Peter Eisentraut [Wed, 30 Jan 2013 03:58:38 +0000 (22:58 -0500)]
pg_regress: Allow overriding diff options

By setting the environment variable PG_REGRESS_DIFF_OPTS, custom diff
options can be passed.

reviewed by Jeevan Chalke

11 years agoentab: Fix some compiler warnings
Peter Eisentraut [Wed, 30 Jan 2013 03:21:21 +0000 (22:21 -0500)]
entab: Fix some compiler warnings

11 years agoProvide database object names as separate fields in error messages.
Tom Lane [Tue, 29 Jan 2013 22:06:26 +0000 (17:06 -0500)]
Provide database object names as separate fields in error messages.

This patch addresses the problem that applications currently have to
extract object names from possibly-localized textual error messages,
if they want to know for example which index caused a UNIQUE_VIOLATION
failure.  It adds new error message fields to the wire protocol, which
can carry the name of a table, table column, data type, or constraint
associated with the error.  (Since the protocol spec has always instructed
clients to ignore unrecognized field types, this should not create any
compatibility problem.)

Support for providing these new fields has been added to just a limited set
of error reports (mainly, those in the "integrity constraint violation"
SQLSTATE class), but we will doubtless add them to more calls in future.

Pavel Stehule, reviewed and extensively revised by Peter Geoghegan, with
additional hacking by Tom Lane.

11 years agoAllow pgbench to use a scale larger than 21474.
Heikki Linnakangas [Tue, 29 Jan 2013 09:49:40 +0000 (11:49 +0200)]
Allow pgbench to use a scale larger than 21474.

Beyond 21474, the number of accounts exceed the range for int4. Change the
initialization code to use bigint for account id columns when scale is large
enough, and switch to using int64s for the variables in pgbench code. The
threshold where we switch to bigints is set at 20000, because that's easier
to remember and document than 21474, and ensures that there is some headroom
when int4s are used.

Greg Smith, with various changes by Euler Taveira de Oliveira, Gurjeet
Singh and Satoshi Nagayasu.

11 years agoSkip truncating ON COMMIT DELETE ROWS temp tables, if the transaction hasn't
Heikki Linnakangas [Tue, 29 Jan 2013 08:40:22 +0000 (10:40 +0200)]
Skip truncating ON COMMIT DELETE ROWS temp tables, if the transaction hasn't
touched any temporary tables.

We could try harder, and keep track of whether we've inserted to any temp
tables, rather than accessed them, and which temp tables have been inserted
to. But this is dead simple, and already covers many interesting scenarios.

11 years agoFast promote mode skips checkpoint at end of recovery.
Simon Riggs [Tue, 29 Jan 2013 00:06:15 +0000 (00:06 +0000)]
Fast promote mode skips checkpoint at end of recovery.
pg_ctl promote -m fast will skip the checkpoint at end of recovery so that we
can achieve very fast failover when the apply delay is low. Write new WAL record
XLOG_END_OF_RECOVERY to allow us to switch timeline correctly for downstream log
readers. If we skip synchronous end of recovery checkpoint we request a normal
spread checkpoint so that the window of re-recovery is low.

Simon Riggs and Kyotaro Horiguchi, with input from Fujii Masao.
Review by Heikki Linnakangas

11 years agoREASSIGN OWNED: handle shared objects, too
Alvaro Herrera [Mon, 28 Jan 2013 21:03:23 +0000 (18:03 -0300)]
REASSIGN OWNED: handle shared objects, too

Give away ownership of shared objects (databases, tablespaces) along
with local objects, per original code intention.  Try to make the
documentation clearer, too.

Per discussion about DROP OWNED's brokenness, in bug #7748.

This is not backpatched because it'd require some refactoring of the
ALTER/SET OWNER code for databases and tablespaces.

11 years agoDROP OWNED: don't try to drop tablespaces/databases
Alvaro Herrera [Mon, 28 Jan 2013 20:46:47 +0000 (17:46 -0300)]
DROP OWNED: don't try to drop tablespaces/databases

My "fix" for bugs #7578 and #6116 on DROP OWNED at fe3b5eb08a1 not only
misstated that it applied to REASSIGN OWNED (which it did not affect),
but it also failed to fix the problems fully, because I didn't test the
case of owned shared objects.  Thus I created a new bug, reported by
Thomas Kellerer as #7748, which would cause DROP OWNED to fail with a
not-for-user-consumption error message.  The code would attempt to drop
the database, which not only fails to work because the underlying code
does not support that, but is a pretty dangerous and undesirable thing
to be doing as well.

This patch fixes that bug by having DROP OWNED only attempt to process
shared objects when grants on them are found, ignoring ownership.

Backpatch to 8.3, which is as far as the previous bug was backpatched.

11 years agoHandle SPIErrors raised directly in PL/Python code.
Heikki Linnakangas [Mon, 28 Jan 2013 07:40:20 +0000 (09:40 +0200)]
Handle SPIErrors raised directly in PL/Python code.

If a PL/Python function raises an SPIError (or one if its subclasses)
directly with python's raise statement, treat it the same as an SPIError
generated internally. In particular, if the user sets the sqlstate
attribute, preserve that.

Oskari Saarenmaa and Jan Urbański, reviewed by Karl O. Pinc.

11 years agoMade ecpglib use translated messages.
Michael Meskes [Sun, 27 Jan 2013 12:48:12 +0000 (13:48 +0100)]
Made ecpglib use translated messages.

Bug reported and fixed by Chen Huajun <chenhj@cn.fujitsu.com>.

11 years agoMake LATERAL implicit for functions in FROM.
Tom Lane [Sat, 26 Jan 2013 21:18:42 +0000 (16:18 -0500)]
Make LATERAL implicit for functions in FROM.

The SQL standard does not have general functions-in-FROM, but it does
allow UNNEST() there (see the <collection derived table> production),
and the semantics of that are defined to include lateral references.
So spec compliance requires allowing lateral references within UNNEST()
even without an explicit LATERAL keyword.  Rather than making UNNEST()
a special case, it seems best to extend this flexibility to any
function-in-FROM.  We'll still allow LATERAL to be written explicitly
for clarity's sake, but it's now a noise word in this context.

In theory this change could result in a change in behavior of existing
queries, by allowing what had been an outer reference in a function-in-FROM
to be captured by an earlier FROM-item at the same level.  However, all
pre-9.3 PG releases have a bug that causes them to match variable
references to earlier FROM-items in preference to outer references (and
then throw an error).  So no previously-working query could contain the
type of ambiguity that would risk a change of behavior.

Per a suggestion from Andrew Gierth, though I didn't use his patch.

11 years agoUpdate comments in new DROP IF EXISTS code; commit message update
Bruce Momjian [Sat, 26 Jan 2013 19:51:59 +0000 (14:51 -0500)]
Update comments in new DROP IF EXISTS code; commit message update

DROP IF EXISTS with a missing schema in commit
7e2322dff30c04d90c0602d2b5ae24b4881db88b applies not only to tables, but
to DROP IF EXISTS with missing schemas for indexes, views, sequences,
and foreign tables.  Yeah!

11 years agoUpdate LookupExplicitNamespace() comments; commit message update
Bruce Momjian [Sat, 26 Jan 2013 18:47:50 +0000 (13:47 -0500)]
Update LookupExplicitNamespace() comments;  commit message update

Also, commit 7e2322dff30c04d90c0602d2b5ae24b4881db88b affected DROP
TABLE IF EXISTS, not CREATE TABLE IF EXISTS.

11 years agoIssue ERROR if FREEZE mode can't be honored by COPY
Bruce Momjian [Sat, 26 Jan 2013 18:33:24 +0000 (13:33 -0500)]
Issue ERROR if FREEZE mode can't be honored by COPY

Previously non-honored FREEZE mode was ignored.  This also issues an
appropriate error message based on the cause of the failure, per
suggestion from Tom.  Additional regression test case added.

11 years agoAllow CREATE TABLE IF EXIST so succeed if the schema is nonexistent
Bruce Momjian [Sat, 26 Jan 2013 18:24:50 +0000 (13:24 -0500)]
Allow CREATE TABLE IF EXIST so succeed if the schema is nonexistent

Previously, CREATE TABLE IF EXIST threw an error if the schema was
nonexistent.  This was done by passing 'missing_ok' to the function that
looks up the schema oid.

11 years agodoc: revert 80c20fcf3df17309b3c131962045825f42e45bc7 and
Bruce Momjian [Sat, 26 Jan 2013 02:01:17 +0000 (21:01 -0500)]
doc:  revert 80c20fcf3df17309b3c131962045825f42e45bc7 and
0e93959a70ac6e7c7858d1d6fb00645e7540a1cc

Revert patch that modified doc index mentions of search_path

Per Peter E.

11 years agoFix plpython's handling of functions used as triggers on multiple tables.
Tom Lane [Fri, 25 Jan 2013 21:58:55 +0000 (16:58 -0500)]
Fix plpython's handling of functions used as triggers on multiple tables.

plpython tried to use a single cache entry for a trigger function, but it
needs a separate cache entry for each table the trigger is applied to,
because there is table-dependent data in there.  This was done correctly
before 9.1, but commit 46211da1b84bc3537e799ee1126098e71c2428e8 broke it
by simplifying the lookup key from "function OID and triggered table OID"
to "function OID and is-trigger boolean".  Go back to using both OIDs
as the lookup key.  Per bug report from Sandro Santilli.

Andres Freund

11 years agodoc: mention commit_delay is only honored if fsync is enabled
Bruce Momjian [Fri, 25 Jan 2013 20:53:59 +0000 (15:53 -0500)]
doc: mention commit_delay is only honored if fsync is enabled

per Tianyin Xu

11 years agoChange plan caching to honor, not resist, changes in search_path.
Tom Lane [Fri, 25 Jan 2013 19:14:41 +0000 (14:14 -0500)]
Change plan caching to honor, not resist, changes in search_path.

In the initial implementation of plan caching, we saved the active
search_path when a plan was first cached, then reinstalled that path
anytime we needed to reparse or replan.  The idea of that was to try to
reselect the same referenced objects, in somewhat the same way that views
continue to refer to the same objects in the face of schema or name
changes.  Of course, that analogy doesn't bear close inspection, since
holding the search_path fixed doesn't cope with object drops or renames.
Moreover sticking with the old path seems to create more surprises than
it avoids.  So instead of doing that, consider that the cached plan depends
on search_path, and force reparse/replan if the active search_path is
different than it was when we last saved the plan.

This gets us fairly close to having "transparency" of plan caching, in the
sense that the cached statement acts the same as if you'd just resubmitted
the original query text for another execution.  There are still some corner
cases where this fails though: a new object added in the search path
schema(s) might capture a reference in the query text, but we'd not realize
that and force a reparse.  We might try to fix that in the future, but for
the moment it looks too expensive and complicated.

11 years agodoc: merge ecpg username/password example into C comment
Bruce Momjian [Fri, 25 Jan 2013 18:46:38 +0000 (13:46 -0500)]
doc:  merge ecpg username/password example into C comment

Backpatch to 9.2

per Tom Lane

11 years agodoc: adjust search_path secondary index mention
Bruce Momjian [Fri, 25 Jan 2013 18:45:09 +0000 (13:45 -0500)]
doc:  adjust search_path secondary index mention

per Tom Lane

11 years agodoc: split search_path index entries into separate secondaries
Bruce Momjian [Fri, 25 Jan 2013 17:48:51 +0000 (12:48 -0500)]
doc:  split search_path index entries into separate secondaries

Karl O. Pinc

11 years agoMake it easy to time out pg_isready, and make the default 3 seconds.
Robert Haas [Fri, 25 Jan 2013 17:01:45 +0000 (12:01 -0500)]
Make it easy to time out pg_isready, and make the default 3 seconds.

Along the way, add a missing line to the help message.

Phil Sorber, reviewed by Fujii Masao

11 years agodocs: In ecpg, clarify how username/password colon parameters are used
Bruce Momjian [Fri, 25 Jan 2013 16:18:44 +0000 (11:18 -0500)]
docs:  In ecpg, clarify how username/password colon parameters are used

Backpatch to 9.2.

Patch from Alan B

11 years agoAdd prosecdef to \df+ output.
Heikki Linnakangas [Fri, 25 Jan 2013 15:19:11 +0000 (17:19 +0200)]
Add prosecdef to \df+ output.

Jon Erdman, reviewed by Phil Sorber and Stephen Frost.

11 years agodoc: improve wording of "foreign data server" in file-fdw docs
Bruce Momjian [Fri, 25 Jan 2013 15:13:41 +0000 (10:13 -0500)]
doc:  improve wording of "foreign data server" in file-fdw docs

Backpatch to 9.2

Shigeru HANADA

11 years agoAdd some randomness to the choice of which GiST page to insert to.
Heikki Linnakangas [Fri, 25 Jan 2013 14:49:13 +0000 (16:49 +0200)]
Add some randomness to the choice of which GiST page to insert to.

When descending the tree for an insert, and there are multiple equally good
pages we could insert to, make the choice in random. Previously, we would
always choose the tuple with lowest offset number. That meant that when two
non-leaf pages overlap - in the extreme case they might have exactly the same
key - all but the first such page went unused. That wasn't optimal for space
usage; if you deleted some tuples from the non-first pages, the space would
never be reused.

With this patch, the other pages are sometimes chosen too, although there's
still a heavy bias towards low-offset tuples, so that we don't lose cache
locality when doing a lot of inserts with similar keys.

Original idea by Alexander Korotkov, although this patch version was written
by me and copy-edited by Tom Lane.

11 years agoMake pg_dump exclude unlogged table data on hot standby slaves
Magnus Hagander [Fri, 25 Jan 2013 08:44:14 +0000 (09:44 +0100)]
Make pg_dump exclude unlogged table data on hot standby slaves

Noted by Joe Van Dyk

11 years agoFix concat() and format() to handle VARIADIC-labeled arguments correctly.
Tom Lane [Fri, 25 Jan 2013 05:19:18 +0000 (00:19 -0500)]
Fix concat() and format() to handle VARIADIC-labeled arguments correctly.

Previously, the VARIADIC labeling was effectively ignored, but now these
functions act as though the array elements had all been given as separate
arguments.

Pavel Stehule

11 years agodoc: add mention of ssi read anomolies to mvcc docs
Bruce Momjian [Fri, 25 Jan 2013 02:44:54 +0000 (21:44 -0500)]
doc:  add mention of ssi read anomolies to mvcc docs

From Jeff Davis, modified by Kevin Grittner

11 years agodoc: correct sepgsql doc about permission checking of CASCADE
Bruce Momjian [Fri, 25 Jan 2013 02:21:50 +0000 (21:21 -0500)]
doc:  correct sepgsql doc about permission checking of CASCADE

Backpatch to 9.2.

Patch from Kohei KaiGai

11 years agoFix SPI documentation for new handling of ExecutorRun's count parameter.
Tom Lane [Thu, 24 Jan 2013 23:34:00 +0000 (18:34 -0500)]
Fix SPI documentation for new handling of ExecutorRun's count parameter.

Since 9.0, the count parameter has only limited the number of tuples
actually returned by the executor.  It doesn't affect the behavior of
INSERT/UPDATE/DELETE unless RETURNING is specified, because without
RETURNING, the ModifyTable plan node doesn't return control to execMain.c
for each tuple.  And we only check the limit at the top level.

While this behavioral change was unintentional at the time, discussion of
bug #6572 led us to the conclusion that we prefer the new behavior anyway,
and so we should just adjust the docs to match rather than change the code.
Accordingly, do that.  Back-patch as far as 9.0 so that the docs match the
code in each branch.

11 years agoUse correct output device for Windows prompts.
Andrew Dunstan [Thu, 24 Jan 2013 21:01:31 +0000 (16:01 -0500)]
Use correct output device for Windows prompts.

This ensures that mapping of non-ascii prompts
to the correct code page occurs.

Bug report and original patch from Alexander Law,
reviewed and reworked by Noah Misch.

Backpatch to all live branches.

11 years agopg_upgrade: detect stale postmaster.pid lock files
Bruce Momjian [Thu, 24 Jan 2013 20:20:11 +0000 (15:20 -0500)]
pg_upgrade:  detect stale postmaster.pid lock files

If the postmaster.pid lock file exists, try starting/stopping the
cluster to check if the lock file is valid.

Per request from Tom.

11 years agoRedefine HEAP_XMAX_IS_LOCKED_ONLY
Alvaro Herrera [Thu, 24 Jan 2013 19:04:48 +0000 (16:04 -0300)]
Redefine HEAP_XMAX_IS_LOCKED_ONLY

Tuples marked SELECT FOR UPDATE in a cluster that's later processed by
pg_upgrade would have a different infomask bit pattern than those
produced by 9.3dev; that bit pattern was being seen as "dead" by HEAD
(because they would fail the "is this tuple locked" test, and so the
visibility rules would thing they're updated, even though there's no
HEAP_UPDATED version of them).  In other words, some rows could silently
disappear after pg_upgrade.

With this new definition, those tuples become visible again.

This is breakage resulting from my commit 0ac5ad5134.

11 years agoUse the catversion to distinguish old/new clusters
Alvaro Herrera [Thu, 24 Jan 2013 15:25:48 +0000 (12:25 -0300)]
Use the catversion to distinguish old/new clusters

This makes 9.3 -> 9.3 upgrades work when they cross the commit that
added persistent multixacts; early 9.3 pg_controldata did not have the
required oldestMultiXact line, and so would fail to upgrade.

per Bruce Momjian

11 years agoDon't require oldestMultixact if server doesn't have it
Alvaro Herrera [Thu, 24 Jan 2013 14:53:15 +0000 (11:53 -0300)]
Don't require oldestMultixact if server doesn't have it

11 years agoMake output identical to pg_resetxlog's
Alvaro Herrera [Thu, 24 Jan 2013 14:52:53 +0000 (11:52 -0300)]
Make output identical to pg_resetxlog's

11 years agoFix rare missing cancellations in Hot Standby.
Simon Riggs [Thu, 24 Jan 2013 14:19:29 +0000 (14:19 +0000)]
Fix rare missing cancellations in Hot Standby.
The machinery around XLOG_HEAP2_CLEANUP_INFO failed
to correctly pass through the necessary information
on latestRemovedXid, avoiding cancellations in some
infrequent concurrent update/cleanup scenarios.

Backpatchable fix to 9.0

Detailed bug report and fix by Noah Misch,
backpatchable version by me.

11 years agopg_upgrade: report failed cluster name
Bruce Momjian [Thu, 24 Jan 2013 13:35:57 +0000 (08:35 -0500)]
pg_upgrade:  report failed cluster name

When pg_upgrade can't find required pg_controldata information, report
_which_ cluster is failing, with this message:

The %s cluster lacks some required control information:

11 years agoAlso fix rotation of csvlog on Windows.
Heikki Linnakangas [Thu, 24 Jan 2013 09:41:30 +0000 (11:41 +0200)]
Also fix rotation of csvlog on Windows.

Backpatch to 9.2, like the previous fix.

11 years agoDocs shouldn't say HOT Standby.
Simon Riggs [Thu, 24 Jan 2013 08:01:16 +0000 (08:01 +0000)]
Docs shouldn't say HOT Standby.
Not an acronym.

Jeff Janes

11 years agoFix failure to rotate postmaster log file for size reasons on Windows.
Tom Lane [Thu, 24 Jan 2013 03:08:01 +0000 (22:08 -0500)]
Fix failure to rotate postmaster log file for size reasons on Windows.

When we eliminated "unnecessary" wakeups of the syslogger process, we
broke size-based logfile rotation on Windows, because on that platform
data transfer is done in a separate thread.  While non-Windows platforms
would recheck the output file size after every log message, Windows only
did so when the control thread woke up for some other reason, which might
be quite infrequent.  Per bug #7814 from Tsunezumi.  Back-patch to 9.2
where the problem was introduced.

Jeff Janes

11 years agoisolationtester: add a few fflush(stderr) calls
Alvaro Herrera [Wed, 23 Jan 2013 16:30:14 +0000 (13:30 -0300)]
isolationtester: add a few fflush(stderr) calls

The lack of them is causing failures in some BF members.

Per Andrew Dunstan.

11 years agoClarify that connection parameters aren't totally meaningless for PQping.
Robert Haas [Wed, 23 Jan 2013 16:05:15 +0000 (11:05 -0500)]
Clarify that connection parameters aren't totally meaningless for PQping.

Per discussion with Phil Sorber.

11 years agopg_isready
Robert Haas [Wed, 23 Jan 2013 15:58:04 +0000 (10:58 -0500)]
pg_isready

New command-line utility to test whether a server is ready to
accept connections.

Phil Sorber, reviewed by Michael Paquier and Peter Eisentraut

11 years agoImprove concurrency of foreign key locking
Alvaro Herrera [Wed, 23 Jan 2013 15:04:59 +0000 (12:04 -0300)]
Improve concurrency of foreign key locking

This patch introduces two additional lock modes for tuples: "SELECT FOR
KEY SHARE" and "SELECT FOR NO KEY UPDATE".  These don't block each
other, in contrast with already existing "SELECT FOR SHARE" and "SELECT
FOR UPDATE".  UPDATE commands that do not modify the values stored in
the columns that are part of the key of the tuple now grab a SELECT FOR
NO KEY UPDATE lock on the tuple, allowing them to proceed concurrently
with tuple locks of the FOR KEY SHARE variety.

Foreign key triggers now use FOR KEY SHARE instead of FOR SHARE; this
means the concurrency improvement applies to them, which is the whole
point of this patch.

The added tuple lock semantics require some rejiggering of the multixact
module, so that the locking level that each transaction is holding can
be stored alongside its Xid.  Also, multixacts now need to persist
across server restarts and crashes, because they can now represent not
only tuple locks, but also tuple updates.  This means we need more
careful tracking of lifetime of pg_multixact SLRU files; since they now
persist longer, we require more infrastructure to figure out when they
can be removed.  pg_upgrade also needs to be careful to copy
pg_multixact files over from the old server to the new, or at least part
of multixact.c state, depending on the versions of the old and new
servers.

Tuple time qualification rules (HeapTupleSatisfies routines) need to be
careful not to consider tuples with the "is multi" infomask bit set as
being only locked; they might need to look up MultiXact values (i.e.
possibly do pg_multixact I/O) to find out the Xid that updated a tuple,
whereas they previously were assured to only use information readily
available from the tuple header.  This is considered acceptable, because
the extra I/O would involve cases that would previously cause some
commands to block waiting for concurrent transactions to finish.

Another important change is the fact that locking tuples that have
previously been updated causes the future versions to be marked as
locked, too; this is essential for correctness of foreign key checks.
This causes additional WAL-logging, also (there was previously a single
WAL record for a locked tuple; now there are as many as updated copies
of the tuple there exist.)

With all this in place, contention related to tuples being checked by
foreign key rules should be much reduced.

As a bonus, the old behavior that a subtransaction grabbing a stronger
tuple lock than the parent (sub)transaction held on a given tuple and
later aborting caused the weaker lock to be lost, has been fixed.

Many new spec files were added for isolation tester framework, to ensure
overall behavior is sane.  There's probably room for several more tests.

There were several reviewers of this patch; in particular, Noah Misch
and Andres Freund spent considerable time in it.  Original idea for the
patch came from Simon Riggs, after a problem report by Joel Jacobson.
Most code is from me, with contributions from Marti Raudsepp, Alexander
Shulgin, Noah Misch and Andres Freund.

This patch was discussed in several pgsql-hackers threads; the most
important start at the following message-ids:
AANLkTimo9XVcEzfiBR-ut3KVNDkjm2Vxh+t8kAmWjPuv@mail.gmail.com
1290721684-sup-3951@alvh.no-ip.org
1294953201-sup-2099@alvh.no-ip.org
1320343602-sup-2290@alvh.no-ip.org
1339690386-sup-8927@alvh.no-ip.org
4FE5FF020200002500048A3D@gw.wicourts.gov
4FEAB90A0200002500048B7D@gw.wicourts.gov

11 years agoFurther documentation tweaks for event triggers.
Robert Haas [Wed, 23 Jan 2013 14:17:20 +0000 (09:17 -0500)]
Further documentation tweaks for event triggers.

Per discussion between Dimitri Fontaine, myself, and others.

11 years agoUpdate comments and output for event_trigger regression test.
Robert Haas [Wed, 23 Jan 2013 11:46:27 +0000 (06:46 -0500)]
Update comments and output for event_trigger regression test.

11 years agoImplement pg_unreachable() on MSVC.
Heikki Linnakangas [Wed, 23 Jan 2013 10:47:00 +0000 (12:47 +0200)]
Implement pg_unreachable() on MSVC.

11 years agoGitignore vcxproj files.
Andrew Dunstan [Wed, 23 Jan 2013 08:44:37 +0000 (03:44 -0500)]
Gitignore vcxproj files.

Per request from Craig Ringer.

11 years agoFix more issues with cascading replication and timeline switches.
Heikki Linnakangas [Wed, 23 Jan 2013 08:01:04 +0000 (10:01 +0200)]
Fix more issues with cascading replication and timeline switches.

When a standby server follows the master using WAL archive, and it chooses
a new timeline (recovery_target_timeline='latest'), it only fetches the
timeline history file for the chosen target timeline, not any other history
files that might be missing from pg_xlog. For example, if the current
timeline is 2, and we choose 4 as the new recovery target timeline, the
history file for timeline 3 is not fetched, even if it's part of this
server's history. That's enough for the standby itself - the history file
for timeline 4 includes timeline 3 as well - but if a cascading standby
server wants to recover to timeline 3, it needs the history file. To fix,
when a new recovery target timeline is chosen, try to copy any missing
history files from the archive to pg_xlog between the old and new target
timeline.

A second similar issue was with the WAL files. When a standby recovers from
archive, and it reaches a segment that contains a switch to a new timeline,
recovery fetches only the WAL file labelled with the new timeline's ID. The
file from the new timeline contains a copy of the WAL from the old timeline
up to the point where the switch happened, and recovery recovers it from the
new file. But in streaming replication, walsender only tries to read it
from the old timeline's file. To fix, change walsender to read it from the
new file, so that it behaves the same as recovery in that sense, and doesn't
try to open the possibly nonexistent file with the old timeline's ID.

11 years agopg_upgrade: remove --single-transaction usage
Bruce Momjian [Wed, 23 Jan 2013 03:27:13 +0000 (22:27 -0500)]
pg_upgrade:  remove --single-transaction usage

With AtEOXact applied, --single-transaction makes pg_restore slower, and
has the potential to require lock table configuration, so remove the
argument.

Per suggestion from Tom.

11 years agodoc: Fix declared number of columns in table
Peter Eisentraut [Wed, 23 Jan 2013 02:47:49 +0000 (21:47 -0500)]
doc: Fix declared number of columns in table

This was broken in 841a5150c575ccd89e4b03aec66eeeefb21f3cbe.

11 years agoFix a few small bugs in yesterday's event trigger patch.
Robert Haas [Wed, 23 Jan 2013 02:37:01 +0000 (21:37 -0500)]
Fix a few small bugs in yesterday's event trigger patch.

Dimitri Fontaine

11 years agoFix CREATE EVENT TRIGGER syntax synopsis in documentation.
Robert Haas [Tue, 22 Jan 2013 23:52:26 +0000 (18:52 -0500)]
Fix CREATE EVENT TRIGGER syntax synopsis in documentation.

Dimitri Fontaine, per a report from Thom Brown

11 years agoTypo fixes.
Robert Haas [Tue, 22 Jan 2013 03:35:32 +0000 (22:35 -0500)]
Typo fixes.

Noted by Thom Brown.

11 years agoAdd infrastructure for storing a VARIADIC ANY function's VARIADIC flag.
Tom Lane [Tue, 22 Jan 2013 01:25:26 +0000 (20:25 -0500)]
Add infrastructure for storing a VARIADIC ANY function's VARIADIC flag.

Originally we didn't bother to mark FuncExprs with any indication whether
VARIADIC had been given in the source text, because there didn't seem to be
any need for it at runtime.  However, because we cannot fold a VARIADIC ANY
function's arguments into an array (since they're not necessarily all the
same type), we do actually need that information at runtime if VARIADIC ANY
functions are to respond unsurprisingly to use of the VARIADIC keyword.
Add the missing field, and also fix ruleutils.c so that VARIADIC ANY
function calls are dumped properly.

Extracted from a larger patch that also fixes concat() and format() (the
only two extant VARIADIC ANY functions) to behave properly when VARIADIC is
specified.  This portion seems appropriate to review and commit separately.

Pavel Stehule

11 years agoAdd ddl_command_end support for event triggers.
Robert Haas [Mon, 21 Jan 2013 23:00:24 +0000 (18:00 -0500)]
Add ddl_command_end support for event triggers.

Dimitri Fontaine, with slight changes by me

11 years agoRefactor ALTER some-obj RENAME implementation
Alvaro Herrera [Mon, 21 Jan 2013 15:06:41 +0000 (12:06 -0300)]
Refactor ALTER some-obj RENAME implementation

Remove duplicate implementations of catalog munging and miscellaneous
privilege checks.  Instead rely on already existing data in
objectaddress.c to do the work.

Author: KaiGai Kohei, changes by me
Reviewed by: Robert Haas, Álvaro Herrera, Dimitri Fontaine

11 years agoFix one-byte buffer overrun in PQprintTuples().
Tom Lane [Mon, 21 Jan 2013 04:43:46 +0000 (23:43 -0500)]
Fix one-byte buffer overrun in PQprintTuples().

This bug goes back to the original Postgres95 sources.  Its significance
to modern PG versions is marginal, since we have not used PQprintTuples()
internally in a very long time, and it doesn't seem to have ever been
documented either.  Still, it *is* exposed to client apps, so somebody
out there might possibly be using it.

Xi Wang

11 years agoFix error-checking typo in check_TSCurrentConfig().
Tom Lane [Mon, 21 Jan 2013 04:09:35 +0000 (23:09 -0500)]
Fix error-checking typo in check_TSCurrentConfig().

The code failed to detect an out-of-memory failure.

Xi Wang

11 years agodoc: Fix syntax of a URL
Peter Eisentraut [Mon, 21 Jan 2013 00:36:30 +0000 (19:36 -0500)]
doc: Fix syntax of a URL

Leading white space before the "http:" is apparently treated as a
relative link at least by some browsers.

11 years agoFix an O(N^2) performance issue for sessions modifying many relations.
Tom Lane [Sun, 20 Jan 2013 18:44:49 +0000 (13:44 -0500)]
Fix an O(N^2) performance issue for sessions modifying many relations.

AtEOXact_RelationCache() scanned the entire relation cache at the end of
any transaction that created a new relation or assigned a new relfilenode.
Thus, clients such as pg_restore had an O(N^2) performance problem that
would start to be noticeable after creating 10000 or so tables.  Since
typically only a small number of relcache entries need any cleanup, we
can fix this by keeping a small list of their OIDs and doing hash_searches
for them.  We fall back to the full-table scan if the list overflows.

Ideally, the maximum list length would be set at the point where N
hash_searches would cost just less than the full-table scan.  Some quick
experimentation says that point might be around 50-100; I (tgl)
conservatively set MAX_EOXACT_LIST = 32.  For the case that we're worried
about here, which is short single-statement transactions, it's unlikely
there would ever be more than about a dozen list entries anyway; so it's
probably not worth being too tense about the value.

We could avoid the hash_searches by instead keeping the target relcache
entries linked into a list, but that would be noticeably more complicated
and bug-prone because of the need to maintain such a list in the face of
relcache entry drops.  Since a relcache entry can only need such cleanup
after a somewhat-heavyweight filesystem operation, trying to save a
hash_search per cleanup doesn't seem very useful anyway --- it's the scan
over all the not-needing-cleanup entries that we wish to avoid here.

Jeff Janes, reviewed and tweaked a bit by Tom Lane

11 years agoClarify that streaming replication can be both async and sync
Magnus Hagander [Sun, 20 Jan 2013 15:10:12 +0000 (16:10 +0100)]
Clarify that streaming replication can be both async and sync

Josh Kupershmidt

11 years agoUse SET TRANSACTION READ ONLY in pg_dump, if server supports it.
Tom Lane [Sat, 19 Jan 2013 22:56:40 +0000 (17:56 -0500)]
Use SET TRANSACTION READ ONLY in pg_dump, if server supports it.

This currently does little except serve as documentation.  (The one case
where it has a performance benefit, SERIALIZABLE mode in 9.1 and up, was
already using READ ONLY mode.)  However, it's possible that it might have
performance benefits in future, and in any case it seems like good
practice since it would catch any accidentally non-read-only operations.

Pavan Deolasee

11 years agoModernize string literal syntax in tutorial example.
Tom Lane [Sat, 19 Jan 2013 22:20:32 +0000 (17:20 -0500)]
Modernize string literal syntax in tutorial example.

Un-double the backslashes in the LIKE patterns, since
standard_conforming_strings is now the default.  Just to be sure, include
a command to set standard_conforming_strings to ON in the example.

Back-patch to 9.1, where standard_conforming_strings became the default.

Josh Kupershmidt, reviewed by Jeff Janes

11 years agoMake pgxs build executables with the right suffix.
Andrew Dunstan [Sat, 19 Jan 2013 19:54:29 +0000 (14:54 -0500)]
Make pgxs build executables with the right suffix.

Complaint and patch from Zoltán Böszörményi.

When cross-compiling, the native make doesn't know
about the Windows .exe suffix, so it only builds with
it when explicitly told to do so.

The native make will not see the link between the target
name and the built executable, and might this do unnecesary
work, but that's a bigger problem than this one, if in fact
we consider it a problem at all.

Back-patch to all live branches.

11 years agolibpq doc: Clarify what commands return PGRES_TUPLES_OK
Peter Eisentraut [Sat, 19 Jan 2013 03:36:54 +0000 (22:36 -0500)]
libpq doc: Clarify what commands return PGRES_TUPLES_OK

The old text claimed that INSERT and UPDATE always return
PGRES_COMMAND_OK, but INSERT/UPDATE with RETURNING return
PGRES_TUPLES_OK.

Josh Kupershmidt

11 years agoProtect against SnapshotNow race conditions in pg_tablespace scans.
Tom Lane [Fri, 18 Jan 2013 23:06:20 +0000 (18:06 -0500)]
Protect against SnapshotNow race conditions in pg_tablespace scans.

Use of SnapshotNow is known to expose us to race conditions if the tuple(s)
being sought could be updated by concurrently-committing transactions.
CREATE DATABASE and DROP DATABASE are particularly exposed because they do
heavyweight filesystem operations during their scans of pg_tablespace,
so that the scans run for a very long time compared to most.  Furthermore,
the potential consequences of a missed or twice-visited row are nastier
than average:

* createdb() could fail with a bogus "file already exists" error, or
  silently fail to copy one or more tablespace's worth of files into the
  new database.

* remove_dbtablespaces() could miss one or more tablespaces, thus failing
  to free filesystem space for the dropped database.

* check_db_file_conflict() could likewise miss a tablespace, leading to an
  OID conflict that could result in data loss either immediately or in
  future operations.  (This seems of very low probability, though, since a
  duplicate database OID would be unlikely to start with.)

Hence, it seems worth fixing these three places to use MVCC snapshots, even
though this will someday be superseded by a generic solution to SnapshotNow
race conditions.

Back-patch to all active branches.

Stephen Frost and Tom Lane

11 years agoRename new latex longtable function name, for consistency
Bruce Momjian [Fri, 18 Jan 2013 19:02:53 +0000 (14:02 -0500)]
Rename new latex longtable function name, for consistency

11 years agoUnbreak lock conflict detection for Hot Standby.
Robert Haas [Fri, 18 Jan 2013 16:49:52 +0000 (11:49 -0500)]
Unbreak lock conflict detection for Hot Standby.

This got broken in the original fast-path locking patch, because
I failed to account for the fact that Hot Standby startup process
might take a strong relation lock on a relation in a database to
which it is not bound, and confused MyDatabaseId with the database
ID of the relation being locked.

Report and diagnosis by Andres Freund.  Final form of patch by me.

11 years agoImprove pg_upgrade error report
Bruce Momjian [Fri, 18 Jan 2013 14:26:18 +0000 (09:26 -0500)]
Improve pg_upgrade error report

If the cluster alignments don't match, output this suggestion:

Likely one cluster is a 32-bit install, the other 64-bit

11 years agoFix off-by-one bug in xlog reading logic
Alvaro Herrera [Fri, 18 Jan 2013 14:17:18 +0000 (11:17 -0300)]
Fix off-by-one bug in xlog reading logic

Bug reported by Michael Paquier

Author: Andres Freund

11 years agopsql latex fixes
Bruce Momjian [Fri, 18 Jan 2013 13:30:31 +0000 (08:30 -0500)]
psql latex fixes

Remove extra line at bottom of table for new 'latex' mode border=3.
Also update 'latex'-longtable 'tableattr' docs to say
'whitespace-separated' instead of 'space'.

11 years agoNow that START_REPLICATION returns the next timeline's ID after reaching end
Heikki Linnakangas [Fri, 18 Jan 2013 09:48:29 +0000 (11:48 +0200)]
Now that START_REPLICATION returns the next timeline's ID after reaching end
of timeline, take advantage of that in walreceiver.

Startup process is still in control of choosign the target timeline, by
scanning the timeline history files present in pg_xlog, but walreceiver now
uses the next timeline's ID to fetch its history file immediately after it
has finished streaming the old timeline. Before, the standby would first try
to restart streaming on the old timeline, which fetches the missing timeline
history file as a side-effect, and only then restart from the new timeline.
This patch eliminates the extra iteration, which speeds up the timeline
switch and reduces the noise in the log caused by the extra restart on the
old timeline.

11 years agoUse the right timeline when beginning to stream from master.
Heikki Linnakangas [Fri, 18 Jan 2013 09:41:36 +0000 (11:41 +0200)]
Use the right timeline when beginning to stream from master.

The xlogreader refactoring broke the logic to decide which timeline to start
streaming from. XLogPageRead() uses the timeline history to check which
timeline the requested WAL position falls into. However, after the
refactoring, XLogPageRead() is always first called with the first page in
the segment, to verify the segment header, and only then with the actual WAL
position we're interested in. That first read of the segment's header made
XLogPageRead() to always start streaming from the old timeline containing
the segment header, not the timeline containing the actual record, if there
was a timeline switch within the segment.

I thought I fixed this yesterday, but that fix was too narrow and only fixed
this for the corner-case that the timeline switch happened in the first page
of the segment. To fix this more robustly, pass explicitly the position of
the record we're actually interested in to XLogPageRead, and use that to
decide which timeline to read from, rather than deduce it from the page and
offset.

Per report from Fujii Masao.