]> granicus.if.org Git - postgresql/log
postgresql
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.

11 years agoFix assorted bugs in privileges-for-types patch.
Tom Lane [Sun, 9 Dec 2012 05:08:23 +0000 (00:08 -0500)]
Fix assorted bugs in privileges-for-types patch.

Commit 729205571e81b4767efc42ad7beb53663e08d1ff added privileges on data
types, but there were a number of oversights.  The implementation of
default privileges for types missed a few places, and pg_dump was
utterly innocent of the whole concept.  Per bug #7741 from Nathan Alden,
and subsequent wider investigation.

11 years agoSupport automatically-updatable views.
Tom Lane [Sat, 8 Dec 2012 23:25:48 +0000 (18:25 -0500)]
Support automatically-updatable views.

This patch makes "simple" views automatically updatable, without the need
to create either INSTEAD OF triggers or INSTEAD rules.  "Simple" views
are those classified as updatable according to SQL-92 rules.  The rewriter
transforms INSERT/UPDATE/DELETE commands on such views directly into an
equivalent command on the underlying table, which will generally have
noticeably better performance than is possible with either triggers or
user-written rules.  A view that has INSTEAD OF triggers or INSTEAD rules
continues to operate the same as before.

For the moment, security_barrier views are not considered simple.
Also, we do not support WITH CHECK OPTION.  These features may be
added in future.

Dean Rasheed, reviewed by Amit Kapila

11 years agoUpdate iso.org page link
Peter Eisentraut [Sat, 8 Dec 2012 12:36:25 +0000 (07:36 -0500)]
Update iso.org page link

The old one is responding with 404.

11 years agoImprove pg_upgrade's status display
Bruce Momjian [Fri, 7 Dec 2012 17:26:13 +0000 (12:26 -0500)]
Improve pg_upgrade's status display

Pg_upgrade displays file names during copy and database names during
dump/restore.  Andrew Dunstan identified three bugs:

*  long file names were being truncated to 60 _leading_ characters, which
   often do not change for long file names

*  file names were truncated to 60 characters in log files

*  carriage returns were being output to log files

This commit fixes these --- it prints 60 _trailing_ characters to the
status display, and full path names without carriage returns to log
files.  It also suppresses status output to the log file unless verbose
mode is used.

11 years agoCorrect xmax test for COPY FREEZE
Simon Riggs [Fri, 7 Dec 2012 14:18:47 +0000 (14:18 +0000)]
Correct xmax test for COPY FREEZE

11 years agoOptimize COPY FREEZE with CREATE TABLE also.
Simon Riggs [Fri, 7 Dec 2012 13:26:52 +0000 (13:26 +0000)]
Optimize COPY FREEZE with CREATE TABLE also.

Jeff Davis, additional test by me

11 years agoClarify that COPY FREEZE is not a hard rule.
Simon Riggs [Fri, 7 Dec 2012 12:59:05 +0000 (12:59 +0000)]
Clarify that COPY FREEZE is not a hard rule.
Remove message when FREEZE not honoured,
clarify reasons in comments and docs.

11 years agoImprove pl/pgsql to support composite-type expressions in RETURN.
Tom Lane [Fri, 7 Dec 2012 04:09:52 +0000 (23:09 -0500)]
Improve pl/pgsql to support composite-type expressions in RETURN.

For some reason lost in the mists of prehistory, RETURN was only coded to
allow a simple reference to a composite variable when the function's return
type is composite.  Allow an expression instead, while preserving the
efficiency of the original code path in the case where the expression is
indeed just a composite variable's name.  Likewise for RETURN NEXT.

As is true in various other places, the supplied expression must yield
exactly the number and data types of the required columns.  There was some
discussion of relaxing that for pl/pgsql, but no consensus yet, so this
patch doesn't address that.

Asif Rehman, reviewed by Pavel Stehule

11 years agoBackground worker processes
Alvaro Herrera [Thu, 6 Dec 2012 17:57:52 +0000 (14:57 -0300)]
Background worker processes

Background workers are postmaster subprocesses that run arbitrary
user-specified code.  They can request shared memory access as well as
backend database connections; or they can just use plain libpq frontend
database connections.

Modules listed in shared_preload_libraries can register background
workers in their _PG_init() function; this is early enough that it's not
necessary to provide an extra GUC option, because the necessary extra
resources can be allocated early on.  Modules can install more than one
bgworker, if necessary.

Care is taken that these extra processes do not interfere with other
postmaster tasks: only one such process is started on each ServerLoop
iteration.  This means a large number of them could be waiting to be
started up and postmaster is still able to quickly service external
connection requests.  Also, shutdown sequence should not be impacted by
a worker process that's reasonably well behaved (i.e. promptly responds
to termination signals.)

The current implementation lets worker processes specify their start
time, i.e. at what point in the server startup process they are to be
started: right after postmaster start (in which case they mustn't ask
for shared memory access), when consistent state has been reached
(useful during recovery in a HOT standby server), or when recovery has
terminated (i.e. when normal backends are allowed).

In case of a bgworker crash, actions to take depend on registration
data: if shared memory was requested, then all other connections are
taken down (as well as other bgworkers), just like it were a regular
backend crashing.  The bgworker itself is restarted, too, within a
configurable timeframe (which can be configured to be never).

More features to add to this framework can be imagined without much
effort, and have been discussed, but this seems good enough as a useful
unit already.

An elementary sample module is supplied.

Author: Álvaro Herrera

This patch is loosely based on prior patches submitted by KaiGai Kohei,
and unsubmitted code by Simon Riggs.

Reviewed by: KaiGai Kohei, Markus Wanner, Andres Freund,
Heikki Linnakangas, Simon Riggs, Amit Kapila

11 years agoFix intermittent crash in DROP INDEX CONCURRENTLY.
Tom Lane [Thu, 6 Dec 2012 04:42:51 +0000 (23:42 -0500)]
Fix intermittent crash in DROP INDEX CONCURRENTLY.

When deleteOneObject closes and reopens the pg_depend relation,
we must see to it that the relcache pointer held by the calling function
(typically performMultipleDeletions) is updated.  Usually the relcache
entry is retained so that the pointer value doesn't change, which is why
the problem had escaped notice ... but after a cache flush event there's
no guarantee that the same memory will be reassigned.  To fix, change
the recursive functions' APIs so that we pass around a "Relation *"
not just "Relation".

Per investigation of occasional buildfarm failures.  This is trivial
to reproduce with -DCLOBBER_CACHE_ALWAYS, which points up the sad
lack of any buildfarm member running that way on a regular basis.

11 years agoUpdate comment at top of index_create
Alvaro Herrera [Thu, 6 Dec 2012 02:09:46 +0000 (23:09 -0300)]
Update comment at top of index_create

I neglected to update it in commit f4c4335.

Michael Paquier

11 years agoEnsure recovery pause feature doesn't pause unless users can connect.
Tom Lane [Wed, 5 Dec 2012 23:27:50 +0000 (18:27 -0500)]
Ensure recovery pause feature doesn't pause unless users can connect.

If we're not in hot standby mode, then there's no way for users to connect
to reset the recoveryPause flag, so we shouldn't pause.  The code was aware
of this but the test to see if pausing was safe was seriously inadequate:
it wasn't paying attention to reachedConsistency, and besides what it was
testing was that we could legally enter hot standby, not that we have
done so.  Get rid of that in favor of checking LocalHotStandbyActive,
which because of the coding in CheckRecoveryConsistency is tantamount to
checking that we have told the postmaster to enter hot standby.

Also, move the recoveryPausesHere() call that reacts to asynchronous
recoveryPause requests so that it's not in the middle of application of a
WAL record.  I put it next to the recoveryStopsHere() call --- in future
those are going to need to interact significantly, so this seems like a
good waystation.

Also, don't bother trying to read another WAL record if we've already
decided not to continue recovery.  This was no big deal when the code was
written originally, but now that reading a record might entail actions like
fetching an archive file, it seems a bit silly to do it like that.

Per report from Jeff Janes and subsequent discussion.  The pause feature
needs quite a lot more work, but this gets rid of some indisputable bugs,
and seems safe enough to back-patch.

11 years agoOops, meant to change the comment in writeTimeLineHistory.
Heikki Linnakangas [Wed, 5 Dec 2012 19:00:59 +0000 (21:00 +0200)]
Oops, meant to change the comment in writeTimeLineHistory.

11 years agoMust not reach consistency before XLOG_BACKUP_RECORD
Simon Riggs [Wed, 5 Dec 2012 13:28:03 +0000 (13:28 +0000)]
Must not reach consistency before XLOG_BACKUP_RECORD
When waiting for an XLOG_BACKUP_RECORD the minRecoveryPoint
will be incorrect, so we must not declare recovery as consistent
before we have seen the record. Major bug allowing recovery to end
too early in some cases, allowing people to see inconsistent db.
This patch to HEAD and 9.2, other fix required for 9.1 and 9.0

Simon Riggs and Andres Freund, bug report by Jeff Janes

11 years agoAdd pgstatginindex() function to get the size of the GIN pending list.
Heikki Linnakangas [Wed, 5 Dec 2012 07:58:03 +0000 (09:58 +0200)]
Add pgstatginindex() function to get the size of the GIN pending list.

Fujii Masao, reviewed by Kyotaro Horiguchi.

11 years agoAttempt to un-break Windows builds with USE_LDAP.
Tom Lane [Tue, 4 Dec 2012 22:25:51 +0000 (17:25 -0500)]
Attempt to un-break Windows builds with USE_LDAP.

The buildfarm shows this case is entirely broken, and I'm betting the
reason is lack of any include file.

11 years agoInclude isinf.o in libecpg if isinf() is not available on the system.
Michael Meskes [Tue, 4 Dec 2012 15:35:18 +0000 (16:35 +0100)]
Include isinf.o in libecpg if isinf() is not available on the system.

Patch done by Jiang Guiqing <jianggq@cn.fujitsu.com>.

11 years agoDowngrade a status message from LOG to DEBUG2.
Heikki Linnakangas [Tue, 4 Dec 2012 15:29:44 +0000 (17:29 +0200)]
Downgrade a status message from LOG to DEBUG2.

I never intended this to be anything other than a debugging aid, but forgot
to change the level before committing.

11 years agoWrite exact xlog position of timeline switch in the timeline history file.
Heikki Linnakangas [Tue, 4 Dec 2012 13:28:58 +0000 (15:28 +0200)]
Write exact xlog position of timeline switch in the timeline history file.

This allows us to do some more rigorous sanity checking for various
incorrect point-in-time recovery scenarios, and provides more information
for debugging purposes. It will also come handy in the upcoming patch to
allow timeline switches to be replicated by streaming replication.

11 years agoIn initdb.c, move auth warning code into main() from secondary function.
Bruce Momjian [Tue, 4 Dec 2012 14:52:00 +0000 (09:52 -0500)]
In initdb.c, move auth warning code into main() from secondary function.

11 years agoIn pg_upgrade testing script, turn off command echo at the end so status
Bruce Momjian [Tue, 4 Dec 2012 13:17:45 +0000 (08:17 -0500)]
In pg_upgrade testing script, turn off command echo at the end so status
report is clearer.

11 years agoFix build of LDAP URL feature
Peter Eisentraut [Tue, 4 Dec 2012 11:41:21 +0000 (06:41 -0500)]
Fix build of LDAP URL feature

Some code was not ifdef'ed out for non-LDAP builds.

patch from Bruce Momjian

11 years agoTrack the timeline associated with minRecoveryPoint, for more sanity checks.
Heikki Linnakangas [Tue, 4 Dec 2012 09:24:28 +0000 (11:24 +0200)]
Track the timeline associated with minRecoveryPoint, for more sanity checks.

This allows recovery to notice certain incorrect recovery scenarios.
If a server has recovered to point X on timeline 5, and you restart
recovery, it better be on timeline 5 when it reaches point X again, not on
some timeline with a higher ID. This can happen e.g if you a standby server
is shut down, a new timeline appears in the WAL archive, and the standby
server is restarted. It will try to follow the new timeline, which is wrong
because some WAL on the old timeline was already replayed before shutdown.

Requires an initdb (or at least pg_resetxlog), because this adds a field to
the control file.

11 years agoRestore set -x in pg_upgrade/test.sh, so the user can see what is being
Bruce Momjian [Tue, 4 Dec 2012 04:44:18 +0000 (23:44 -0500)]
Restore set -x in pg_upgrade/test.sh, so the user can see what is being
executed.

11 years agoAdd support for LDAP URLs
Peter Eisentraut [Tue, 4 Dec 2012 04:29:56 +0000 (23:29 -0500)]
Add support for LDAP URLs

Allow specifying LDAP authentication parameters as RFC 4516 LDAP URLs.

11 years agoIn initdb.c, rename some newly created functions, and move the directory
Bruce Momjian [Tue, 4 Dec 2012 04:22:56 +0000 (23:22 -0500)]
In initdb.c, rename some newly created functions, and move the directory
creation and xlog symlink creation to separate functions.

Per suggestions from Andrew Dunstan.

11 years agoAdd initdb --sync-only option to sync the data directory to durable
Bruce Momjian [Tue, 4 Dec 2012 03:47:59 +0000 (22:47 -0500)]
Add initdb --sync-only option to sync the data directory to durable
storage.

Have pg_upgrade use it, and enable server options fsync=off and
full_page_writes=off.

Document that users turning fsync from off to on should run initdb
--sync-only.

[ Previous commit was incorrectly applied as a git merge. ]

11 years agoRevert initdb --sync-only patch that had incorrect commit messages.
Bruce Momjian [Tue, 4 Dec 2012 03:46:51 +0000 (22:46 -0500)]
Revert initdb --sync-only patch that had incorrect commit messages.

11 years agodummy commit
Bruce Momjian [Sat, 1 Dec 2012 14:18:21 +0000 (09:18 -0500)]
dummy commit

11 years agodummy commit
Bruce Momjian [Sat, 1 Dec 2012 03:18:00 +0000 (22:18 -0500)]
dummy commit

11 years agodummy commit
Bruce Momjian [Sat, 1 Dec 2012 03:14:17 +0000 (22:14 -0500)]
dummy commit

11 years agodummy commit
Bruce Momjian [Fri, 30 Nov 2012 22:51:53 +0000 (17:51 -0500)]
dummy commit

11 years agoIn pg_upgrade, fix bug where no users were dumped in pg_dumpall
Bruce Momjian [Tue, 4 Dec 2012 00:43:02 +0000 (19:43 -0500)]
In pg_upgrade, fix bug where no users were dumped in pg_dumpall
binary-upgrade mode;  instead only skip dumping the current user.

This bug was introduced in during the removal of split_old_dump().  Bug
discovered during local testing.

11 years agoUpdate release notes for 9.2.2, 9.1.7, 9.0.11, 8.4.15, 8.3.22.
Tom Lane [Mon, 3 Dec 2012 20:09:59 +0000 (15:09 -0500)]
Update release notes for 9.2.2, 9.1.7, 9.0.11, 8.4.15, 8.3.22.

11 years agoRevert "Add mode where contrib installcheck runs each module in a separately named...
Andrew Dunstan [Mon, 3 Dec 2012 20:00:51 +0000 (15:00 -0500)]
Revert "Add mode where contrib installcheck runs each module in a separately named database."

This reverts commit e2b3c21b05c78c3a726b189242e41d4aa4422bf1.

11 years agoAvoid holding vmbuffer pin after VACUUM.
Simon Riggs [Mon, 3 Dec 2012 18:53:31 +0000 (18:53 +0000)]
Avoid holding vmbuffer pin after VACUUM.
During VACUUM if we pause to perform a cycle
of index cleanup we drop the vmbuffer pin,
so we should do the same thing when heap
scan completes. This avoids holding vmbuffer
pin across the main index cleanup in VACUUM,
which could be minutes or hours longer than
necessary for correctness.

Bug report and suggested fix from Pavan Deolasee

11 years agoFix documentation of path(polygon) function.
Tom Lane [Mon, 3 Dec 2012 16:08:50 +0000 (11:08 -0500)]
Fix documentation of path(polygon) function.

Obviously, this returns type "path", but somebody made a copy-and-pasteo
long ago.

Dagfinn Ilmari Mannsåker

11 years agoAttempt to unbreak MSVC builds broken by f21bb9cfb5646e1793dcc9c0ea697bab99afa523.
Andrew Dunstan [Mon, 3 Dec 2012 15:23:22 +0000 (10:23 -0500)]
Attempt to unbreak MSVC builds broken by f21bb9cfb5646e1793dcc9c0ea697bab99afa523.

We can't use type uint, so use uint32.

11 years agoRefactor inCommit flag into generic delayChkpt flag.
Simon Riggs [Mon, 3 Dec 2012 13:13:53 +0000 (13:13 +0000)]
Refactor inCommit flag into generic delayChkpt flag.
Rename PGXACT->inCommit flag into delayChkpt flag,
and generalise comments to allow use in other situations,
such as the forthcoming potential use in checksum patch.
Replace wait loop to look for VXIDs with delayChkpt set.
No user visible changes, not behaviour changes at present.

Simon Riggs, reviewed and rebased by Jeff Davis

11 years agoClarify locking for PageGetLSN() in XLogCheckBuffer()
Simon Riggs [Mon, 3 Dec 2012 12:20:31 +0000 (12:20 +0000)]
Clarify locking for PageGetLSN() in XLogCheckBuffer()

11 years agoClarify when to use PageSetLSN/PageGetLSN().
Simon Riggs [Mon, 3 Dec 2012 11:59:25 +0000 (11:59 +0000)]
Clarify when to use PageSetLSN/PageGetLSN().
Update README to explain prerequisites for
correct access to LSN fields of a page.
Independent chunk removed from checksums
patch to reduce size of patch.

11 years agoRefactor the code implementing standby-mode logic.
Heikki Linnakangas [Mon, 3 Dec 2012 10:32:44 +0000 (12:32 +0200)]
Refactor the code implementing standby-mode logic.

It is now easier to see that it's a state machine, making the code easier
to understand overall.

11 years agoAdd mode where contrib installcheck runs each module in a separately named database.
Andrew Dunstan [Sun, 2 Dec 2012 22:20:38 +0000 (17:20 -0500)]
Add mode where contrib installcheck runs each module in a separately named database.

Normally each module is tested in aq database named contrib_regression,
which is dropped and recreated at the beginhning of each pg_regress run.
This 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.

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 agoUpdate time zone data files to tzdata release 2012j.
Tom Lane [Sun, 2 Dec 2012 21:35:23 +0000 (16:35 -0500)]
Update time zone data files to tzdata release 2012j.

DST law changes in Cuba, Israel, Jordan, Libya, Palestine, Western Samoa,
and portions of Brazil.

11 years agoRecommend triggers, not rules, in the CREATE VIEW reference page.
Tom Lane [Sun, 2 Dec 2012 21:17:53 +0000 (16:17 -0500)]
Recommend triggers, not rules, in the CREATE VIEW reference page.

We've generally recommended use of INSTEAD triggers over rules since that
feature was added; but this old text in the CREATE VIEW reference page
didn't get the memo.  Noted by Thomas Kellerer.

11 years agoReduce scope of changes for COPY FREEZE.
Simon Riggs [Sun, 2 Dec 2012 20:52:52 +0000 (20:52 +0000)]
Reduce scope of changes for COPY FREEZE.
Allow support only for freezing tuples by explicit
command. Previous coding mistakenly extended
slightly beyond what was agreed as correct on -hackers.
So essentially a partial revoke of earlier work,
leaving just the COPY FREEZE command.

11 years agoDon't advance checkPoint.nextXid near the end of a checkpoint sequence.
Tom Lane [Sun, 2 Dec 2012 20:19:57 +0000 (15:19 -0500)]
Don't advance checkPoint.nextXid near the end of a checkpoint sequence.

This reverts commit c11130690d6dca64267201a169cfb38c1adec5ef in favor of
actually fixing the problem: namely, that we should never have been
modifying the checkpoint record's nextXid at this point to begin with.
The nextXid should match the state as of the checkpoint's logical WAL
position (ie the redo point), not the state as of its physical position.
It's especially bogus to advance it in some wal_levels and not others.
In any case there is no need for the checkpoint record to carry the
same nextXid shown in the XLOG_RUNNING_XACTS record just emitted by
LogStandbySnapshot, as any replay operation will already have adopted
that value as current.

This fixes bug #7710 from Tarvi Pillessaar, and probably also explains bug
#6291 from Daniel Farina, in that if a checkpoint were in progress at the
instant of XID wraparound, the epoch bump would be lost as reported.
(And, of course, these days there's at least a 50-50 chance of a checkpoint
being in progress at any given instant.)

Diagnosed by me and independently by Andres Freund.  Back-patch to all
branches supporting hot standby.

11 years agoRearrange storage of data in xl_running_xacts.
Simon Riggs [Sun, 2 Dec 2012 19:39:37 +0000 (19:39 +0000)]
Rearrange storage of data in xl_running_xacts.
Previously we stored all xids mixed together.
Now we store top-level xids first, followed
by all subxids. Also skip logging any subxids
if the snapshot is suboverflowed, since there
are potentially large numbers of them and they
are not useful in that case anyway. Has value
in the envisaged design for decoding of WAL.
No planned effect on Hot Standby.

Andres Freund, reviewed by me

11 years agoXidEpoch++ if wraparound during checkpoint.
Simon Riggs [Sun, 2 Dec 2012 14:57:44 +0000 (14:57 +0000)]
XidEpoch++ if wraparound during checkpoint.
If wal_level = hot_standby we update the checkpoint nextxid,
though in the case where a wraparound occurred half-way through
a checkpoint we would neglect updating the epoch also. Updating
the nextxid is arguably the wrong thing to do, but changing that
may introduce subtle bugs into hot standby startup, while updating
the value doesn't cause any known bugs yet. Minimal fix now to
HEAD and backbranches, wider fix later in HEAD.

Bug reported in #6291 by Daniel Farina and slightly differently in

Cause analysis and recommended fixes from Tom Lane and Andres Freund.

Applied patch is minimal version of Andres Freund's work.

11 years agoClarify operation of online checkpoints.
Simon Riggs [Sun, 2 Dec 2012 13:09:55 +0000 (13:09 +0000)]
Clarify operation of online checkpoints.
Previous comments left, but were too obscure
for such an important aspect of the system.

11 years agoFix psql crash while parsing SQL file whose encoding is different from
Tatsuo Ishii [Sun, 2 Dec 2012 12:11:15 +0000 (21:11 +0900)]
Fix psql crash while parsing SQL file whose encoding is different from
client encoding and the client encoding is not *safe* one. Such an
example is, file encoding is UTF-8 and client encoding SJIS. Patch
contributed by Jiang Guiqing.

11 years agoPrevent passing gmake's environment variables down through pg_regress.
Tom Lane [Sat, 1 Dec 2012 22:23:49 +0000 (17:23 -0500)]
Prevent passing gmake's environment variables down through pg_regress.

When we do "make install" to create a temp installation, we don't want
that instance of make to try to communicate with any instance of make
that might be calling us.  This is known to cause problems if the
upper make has a -jN flag, and in principle could cause problems even
without that.  Unset the relevant environment variables to prevent such
issues.

Andres Freund

11 years agoMake sure sharedir/extension/ directory is created when needed.
Tom Lane [Sat, 1 Dec 2012 21:04:39 +0000 (16:04 -0500)]
Make sure sharedir/extension/ directory is created when needed.

The previous coding worked as long as MODULEDIR wasn't set explicitly,
because we create sharedir/$(datamoduledir) and the default value of
that is "extension".  But if some other value is specified for MODULEDIR
then the installation directory needed for the control file wasn't made.

Cédric Villemain

11 years agoAllow adding values to an enum type created in the current transaction.
Tom Lane [Sat, 1 Dec 2012 19:27:30 +0000 (14:27 -0500)]
Allow adding values to an enum type created in the current transaction.

Normally it is unsafe to allow ALTER TYPE ADD VALUE in a transaction block,
because instances of the value could be added to indexes later in the same
transaction, and then they would still be accessible even if the
transaction rolls back.  However, we can allow this if the enum type itself
was created in the current transaction, because then any such indexes would
have to go away entirely on rollback.

The reason for allowing this is to support pg_upgrade's new usage of
pg_restore --single-transaction: in --binary-upgrade mode, pg_dump emits
enum types as a succession of ALTER TYPE ADD VALUE commands so that it can
preserve the values' OIDs.  The support is a bit limited, so we'll leave
it undocumented.

Andres Freund

11 years agoIn pg_upgrade, remove 'set -x' from test script.
Bruce Momjian [Sat, 1 Dec 2012 17:07:14 +0000 (12:07 -0500)]
In pg_upgrade, remove 'set -x' from test script.

11 years agoRevert:
Bruce Momjian [Sat, 1 Dec 2012 15:21:45 +0000 (10:21 -0500)]
Revert:

    In pg_upgrade, remove pg_restore's --single-transaction option,
    as it throws errors in certain cases.

11 years agoRemove pg_restore's --single-transaction option, as it throws errors in
Bruce Momjian [Sat, 1 Dec 2012 14:57:55 +0000 (09:57 -0500)]
Remove pg_restore's --single-transaction option, as it throws errors in
certain cases.

11 years agoSecond tweak of COPY FREEZE
Simon Riggs [Sat, 1 Dec 2012 14:55:35 +0000 (14:55 +0000)]
Second tweak of COPY FREEZE

11 years agoTweak tests in COPY FREEZE
Simon Riggs [Sat, 1 Dec 2012 13:46:41 +0000 (13:46 +0000)]
Tweak tests in COPY FREEZE

11 years agoCOPY FREEZE and mark committed on fresh tables.
Simon Riggs [Sat, 1 Dec 2012 12:54:20 +0000 (12:54 +0000)]
COPY FREEZE and mark committed on fresh tables.
When a relfilenode is created in this subtransaction or
a committed child transaction and it cannot otherwise
be seen by our own process, mark tuples committed ahead
of transaction commit for all COPY commands in same
transaction. If FREEZE specified on COPY
and pre-conditions met then rows will also be frozen.
Both options designed to avoid revisiting rows after commit,
increasing performance of subsequent commands after
data load and upgrade. pg_restore changes later.

Simon Riggs, review comments from Heikki Linnakangas, Noah Misch and design
input from Tom Lane, Robert Haas and Kevin Grittner

11 years agodoc: Fix broken links to DocBook wiki
Peter Eisentraut [Sat, 1 Dec 2012 06:52:23 +0000 (01:52 -0500)]
doc: Fix broken links to DocBook wiki

11 years agoIn pg_upgrade, improve status wording now that we have per-database
Bruce Momjian [Sat, 1 Dec 2012 03:32:19 +0000 (22:32 -0500)]
In pg_upgrade, improve status wording now that we have per-database
status output for dump/restore.

11 years agoChange test ExceptionalCondition to return void
Alvaro Herrera [Fri, 30 Nov 2012 22:20:15 +0000 (19:20 -0300)]
Change test ExceptionalCondition to return void

Commit 81107282a changed it in assert.c, but overlooked this other file.

11 years agoTake buffer lock while inspecting btree index pages in contrib/pageinspect.
Tom Lane [Fri, 30 Nov 2012 22:02:29 +0000 (17:02 -0500)]
Take buffer lock while inspecting btree index pages in contrib/pageinspect.

It's not safe to examine a shared buffer without any lock.

11 years agoSplit initdb.c main() code into multiple functions, for easier
Bruce Momjian [Fri, 30 Nov 2012 21:45:08 +0000 (16:45 -0500)]
Split initdb.c main() code into multiple functions, for easier
maintenance.

11 years agoIn pg_upgrade, dump each database separately and use
Bruce Momjian [Fri, 30 Nov 2012 21:30:13 +0000 (16:30 -0500)]
In pg_upgrade, dump each database separately and use
--single-transaction to restore each database schema.  This yields
performance improvements for databases with many tables.  Also, remove
split_old_dump() as it is no longer needed.