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

11 years agoMove long_options structures to the top of main() functions, for
Bruce Momjian [Fri, 30 Nov 2012 19:49:55 +0000 (14:49 -0500)]
Move long_options structures to the top of main() functions, for
consistency.

Per suggestion from Tom.

11 years agoAdd missing buffer lock acquisition in GetTupleForTrigger().
Tom Lane [Fri, 30 Nov 2012 18:55:55 +0000 (13:55 -0500)]
Add missing buffer lock acquisition in GetTupleForTrigger().

If we had not been holding buffer pin continuously since the tuple was
initially fetched by the UPDATE or DELETE query, it would be possible for
VACUUM or a page-prune operation to move the tuple while we're trying to
copy it.  This would result in a garbage "old" tuple value being passed to
an AFTER ROW UPDATE or AFTER ROW DELETE trigger.  The preconditions for
this are somewhat improbable, and the timing constraints are very tight;
so it's not so surprising that this hasn't been reported from the field,
even though the bug has been there a long time.

Problem found by Andres Freund.  Back-patch to all active branches.

11 years agoClean environment for pg_upgrade test.
Andrew Dunstan [Fri, 30 Nov 2012 12:54:24 +0000 (07:54 -0500)]
Clean environment for pg_upgrade test.

This removes exisiting PG settings from the environment for
pg_upgrade tests, just like pg_regress does.

11 years agoAdd libpq function PQconninfo()
Magnus Hagander [Fri, 30 Nov 2012 06:09:18 +0000 (15:09 +0900)]
Add libpq function PQconninfo()

This allows a caller to get back the exact conninfo array that was
used to create a connection, including parameters read from the
environment.

In doing this, restructure how options are copied from the conninfo
to the actual connection.

Zoltan Boszormenyi and Magnus Hagander

11 years agoProduce a more useful error message for over-length Unix socket paths.
Tom Lane [Fri, 30 Nov 2012 00:57:01 +0000 (19:57 -0500)]
Produce a more useful error message for over-length Unix socket paths.

The length of a socket path name is constrained by the size of struct
sockaddr_un, and there's not a lot we can do about it since that is a
kernel API.  However, it would be a good thing if we produced an
intelligible error message when the user specifies a socket path that's too
long --- and getaddrinfo's standard API is too impoverished to do this in
the natural way.  So insert explicit tests at the places where we construct
a socket path name.  Now you'll get an error that makes sense and even
tells you what the limit is, rather than something generic like
"Non-recoverable failure in name resolution".

Per trouble report from Jeremy Drake and a fix idea from Andrew Dunstan.

11 years agoCorrectly init fast path fields on PGPROC
Simon Riggs [Thu, 29 Nov 2012 22:15:52 +0000 (22:15 +0000)]
Correctly init fast path fields on PGPROC

11 years agoCleanup VirtualXact at end of Hot Standby.
Simon Riggs [Thu, 29 Nov 2012 21:59:11 +0000 (21:59 +0000)]
Cleanup VirtualXact at end of Hot Standby.

11 years agoBasic binary heap implementation.
Robert Haas [Thu, 29 Nov 2012 16:13:08 +0000 (11:13 -0500)]
Basic binary heap implementation.

There are probably other places where this can be used, but for now,
this just makes MergeAppend use it, so that this code will have test
coverage.  There is other work in the queue that will use this, as
well.

Abhijit Menon-Sen, reviewed by Andres Freund, Robert Haas, Álvaro
Herrera, Tom Lane, and others.

11 years agoWhen processing nested structure pointer variables ecpg always expected an
Michael Meskes [Thu, 29 Nov 2012 16:12:00 +0000 (17:12 +0100)]
When processing nested structure pointer variables ecpg always expected an
array datatype which of course is wrong.

Applied patch by Muhammad Usama <m.usama@gmail.com> to fix this.

11 years agoSuppress parallel build in interfaces/ecpg/preproc/.
Tom Lane [Thu, 29 Nov 2012 03:19:46 +0000 (22:19 -0500)]
Suppress parallel build in interfaces/ecpg/preproc/.

This is to see if it will stop intermittent build failures on buildfarm
member okapi.  We know that gmake 3.82 has some problems with sometimes
not honoring dependencies in parallel builds, and it seems likely that
this is more of the same.  Since the vast bulk of the work in the preproc
directory is associated with creating preproc.c and then preproc.o,
parallelism buys us hardly anything here anyway.

Also, make both this .NOTPARALLEL and the one previously added in
interfaces/ecpg/Makefile be conditional on "ifeq ($(MAKE_VERSION),3.82)".
The known bug in gmake is fixed upstream and should not be present in
3.83 and up, and there's no reason to think it affects older releases.

11 years agoFix assorted bugs in CREATE/DROP INDEX CONCURRENTLY.
Tom Lane [Thu, 29 Nov 2012 02:25:27 +0000 (21:25 -0500)]
Fix assorted bugs in CREATE/DROP INDEX CONCURRENTLY.

Commit 8cb53654dbdb4c386369eb988062d0bbb6de725e, which introduced DROP
INDEX CONCURRENTLY, managed to break CREATE INDEX CONCURRENTLY via a poor
choice of catalog state representation.  The pg_index state for an index
that's reached the final pre-drop stage was the same as the state for an
index just created by CREATE INDEX CONCURRENTLY.  This meant that the
(necessary) change to make RelationGetIndexList ignore about-to-die indexes
also made it ignore freshly-created indexes; which is catastrophic because
the latter do need to be considered in HOT-safety decisions.  Failure to
do so leads to incorrect index entries and subsequently wrong results from
queries depending on the concurrently-created index.

To fix, add an additional boolean column "indislive" to pg_index, so that
the freshly-created and about-to-die states can be distinguished.  (This
change obviously is only possible in HEAD.  This patch will need to be
back-patched, but in 9.2 we'll use a kluge consisting of overloading the
formerly-impossible state of indisvalid = true and indisready = false.)

In addition, change CREATE/DROP INDEX CONCURRENTLY so that the pg_index
flag changes they make without exclusive lock on the index are made via
heap_inplace_update() rather than a normal transactional update.  The
latter is not very safe because moving the pg_index tuple could result in
concurrent SnapshotNow scans finding it twice or not at all, thus possibly
resulting in index corruption.  This is a pre-existing bug in CREATE INDEX
CONCURRENTLY, which was copied into the DROP code.

In addition, fix various places in the code that ought to check to make
sure that the indexes they are manipulating are valid and/or ready as
appropriate.  These represent bugs that have existed since 8.2, since
a failed CREATE INDEX CONCURRENTLY could leave a corrupt or invalid
index behind, and we ought not try to do anything that might fail with
such an index.

Also fix RelationReloadIndexInfo to ensure it copies all the pg_index
columns that are allowed to change after initial creation.  Previously we
could have been left with stale values of some fields in an index relcache
entry.  It's not clear whether this actually had any user-visible
consequences, but it's at least a bug waiting to happen.

In addition, do some code and docs review for DROP INDEX CONCURRENTLY;
some cosmetic code cleanup but mostly addition and revision of comments.

This will need to be back-patched, but in a noticeably different form,
so I'm committing it to HEAD before working on the back-patch.

Problem reported by Amit Kapila, diagnosis by Pavan Deolassee,
fix by Tom Lane and Andres Freund.

11 years agoSplit out rmgr rm_desc functions into their own files
Alvaro Herrera [Wed, 28 Nov 2012 15:35:01 +0000 (12:35 -0300)]
Split out rmgr rm_desc functions into their own files

This is necessary (but not sufficient) to have them compilable outside
of a backend environment.

11 years agoIf we don't have a backup-end-location, don't claim we've reached it.
Heikki Linnakangas [Wed, 28 Nov 2012 09:45:30 +0000 (11:45 +0200)]
If we don't have a backup-end-location, don't claim we've reached it.

This was apparently a typo, which caused recovery to think that it
immediately reached the end of backup, and allowed the database to start
up too early.

Reported by Jeff Janes. Backpatch to 9.2, where this code was introduced.

11 years agoAdd explicit casts in ilist.h's inline functions.
Tom Lane [Tue, 27 Nov 2012 15:58:37 +0000 (10:58 -0500)]
Add explicit casts in ilist.h's inline functions.

Needed to silence C++ errors, per report from Peter Eisentraut.

Andres Freund

11 years agoAdd OpenTransientFile, with automatic cleanup at end-of-xact.
Heikki Linnakangas [Tue, 27 Nov 2012 08:25:50 +0000 (10:25 +0200)]
Add OpenTransientFile, with automatic cleanup at end-of-xact.

Files opened with BasicOpenFile or PathNameOpenFile are not automatically
cleaned up on error. That puts unnecessary burden on callers that only want
to keep the file open for a short time. There is AllocateFile, but that
returns a buffered FILE * stream, which in many cases is not the nicest API
to work with. So add function called OpenTransientFile, which returns a
unbuffered fd that's cleaned up like the FILE* returned by AllocateFile().

This plugs a few rare fd leaks in error cases:

1. copy_file() - fixed by by using OpenTransientFile instead of BasicOpenFile
2. XLogFileInit() - fixed by adding close() calls to the error cases. Can't
   use OpenTransientFile here because the fd is supposed to persist over
   transaction boundaries.
3. lo_import/lo_export - fixed by using OpenTransientFile instead of
   PathNameOpenFile.

In addition to plugging those leaks, this replaces many BasicOpenFile() calls
with OpenTransientFile() that were not leaking, because the code meticulously
closed the file on error. That wasn't strictly necessary, but IMHO it's good
for robustness.

The same leaks exist in older versions, but given the rarity of the issues,
I'm not backpatching this. Not yet, anyway - it might be good to backpatch
later, after this mechanism has had some more testing in master branch.

11 years agoRevert patch for taking fewer snapshots.
Tom Lane [Mon, 26 Nov 2012 20:55:43 +0000 (15:55 -0500)]
Revert patch for taking fewer snapshots.

This reverts commit d573e239f03506920938bf0be56c868d9c3416da, "Take fewer
snapshots".  While that seemed like a good idea at the time, it caused
execution to use a snapshot that had been acquired before locking any of
the tables mentioned in the query.  This created user-visible anomalies
that were not present in any prior release of Postgres, as reported by
Tomas Vondra.  While this whole area could do with a redesign (since there
are related cases that have anomalies anyway), it doesn't seem likely that
any future patch would be reasonably back-patchable; and we don't want 9.2
to exhibit a behavior that's subtly unlike either past or future releases.
Hence, revert to prior code while we rethink the problem.

11 years agoFix SELECT DISTINCT with index-optimized MIN/MAX on inheritance trees.
Tom Lane [Mon, 26 Nov 2012 17:57:17 +0000 (12:57 -0500)]
Fix SELECT DISTINCT with index-optimized MIN/MAX on inheritance trees.

In a query such as "SELECT DISTINCT min(x) FROM tab", the DISTINCT is
pretty useless (there being only one output row), but nonetheless it
shouldn't fail.  But it could fail if "tab" is an inheritance parent,
because planagg.c's code for fixing up equivalence classes after making the
index-optimized MIN/MAX transformation wasn't prepared to find child-table
versions of the aggregate expression.  The least ugly fix seems to be
to add an option to mutate_eclass_expressions() to skip child-table
equivalence class members, which aren't used anymore at this stage of
planning so it's not really necessary to fix them.  Since child members
are ignored in many cases already, it seems plausible for
mutate_eclass_expressions() to have an option to ignore them too.

Per bug #7703 from Maxim Boguk.

Back-patch to 9.1.  Although the same code exists before that, it cannot
encounter child-table aggregates AFAICS, because the index optimization
transformation cannot succeed on inheritance trees before 9.1 (for lack
of MergeAppend).

11 years agoIn pg_upgrade, simplify function copy_file() by using pg_malloc() and
Bruce Momjian [Sun, 25 Nov 2012 03:39:03 +0000 (22:39 -0500)]
In pg_upgrade, simplify function copy_file() by using pg_malloc() and
centralizing error/shutdown code.

11 years agoIn pg_upgrade, fix a few place that used maloc/free rather than
Bruce Momjian [Sun, 25 Nov 2012 03:12:39 +0000 (22:12 -0500)]
In pg_upgrade, fix a few place that used maloc/free rather than
pg_malloc/pg_free.

11 years agoRemove -Wlogical-op from standard compiler flags
Peter Eisentraut [Fri, 23 Nov 2012 21:24:24 +0000 (16:24 -0500)]
Remove -Wlogical-op from standard compiler flags

It creates too many warnings with GCC 4.3 and 4.4.

11 years agoApplied patch by Chen Huajun <chenhj@cn.fujitsu.com> to make ecpg able to cope
Michael Meskes [Fri, 23 Nov 2012 13:39:27 +0000 (14:39 +0100)]
Applied patch by Chen Huajun <chenhj@cn.fujitsu.com> to make ecpg able to cope
with very long structs.

11 years agoFix pg_resetxlog to use correct path to postmaster.pid.
Tom Lane [Thu, 22 Nov 2012 16:23:24 +0000 (11:23 -0500)]
Fix pg_resetxlog to use correct path to postmaster.pid.

Since we've already chdir'd into the data directory, the file should
be referenced as just "postmaster.pid", without prefixing the directory
path.  This is harmless in the normal case where an absolute PGDATA path
is used, but quite dangerous if a relative path is specified, since the
program might then fail to notice an active postmaster.

Reported by Hari Babu.  This got broken in my commit
eb5949d190e80360386113fde0f05854f0c9824d, so patch all active versions.

11 years agoAvoid bogus "out-of-sequence timeline ID" errors in standby-mode.
Heikki Linnakangas [Thu, 22 Nov 2012 09:23:46 +0000 (11:23 +0200)]
Avoid bogus "out-of-sequence timeline ID" errors in standby-mode.

When startup process opens a WAL segment after replaying part of it, it
validates the first page on the WAL segment, even though the page it's
really interested in later in the file. As part of the validation, it checks
that the TLI on the page header is >= the TLI it saw on the last page it
read. If the segment contains a timeline switch, and we have already
replayed it, and then re-open the WAL segment (because of streaming
replication got disconnected and reconnected, for example), the TLI check
will fail when the first page is validated. Fix that by relaxing the TLI
check when re-opening a WAL segment.

Backpatch to 9.0. Earlier versions had the same code, but before standby
mode was introduced in 9.0, recovery never tried to re-read a segment after
partially replaying it.

Reported by Amit Kapila, while testing a new feature.

11 years agoDon't launch new child processes after we've been told to shut down.
Tom Lane [Wed, 21 Nov 2012 20:18:38 +0000 (15:18 -0500)]
Don't launch new child processes after we've been told to shut down.

Once we've received a shutdown signal (SIGINT or SIGTERM), we should not
launch any more child processes, even if we get signals requesting such.
The normal code path for spawning backends has always understood that,
but the postmaster's infrastructure for hot standby and autovacuum didn't
get the memo.  As reported by Hari Babu in bug #7643, this could lead to
failure to shut down at all in some cases, such as when SIGINT is received
just before the startup process sends PMSIGNAL_RECOVERY_STARTED: we'd
launch a bgwriter and checkpointer, and then those processes would have no
idea that they ought to quit.  Similarly, launching a new autovacuum worker
would result in waiting till it finished before shutting down.

Also, switch the order of the code blocks in reaper() that detect startup
process crash versus shutdown termination.  Once we've sent it a signal,
we should not consider that exit(1) is surprising.  This is just a cosmetic
fix since shutdown occurs correctly anyway, but better not to log a phony
complaint about startup process crash.

Back-patch to 9.0.  Some parts of this might be applicable before that,
but given the lack of prior complaints I'm not going to worry too much
about older branches.

11 years agoSpeed up operations on numeric, mostly by avoiding palloc() overhead.
Heikki Linnakangas [Wed, 21 Nov 2012 13:53:35 +0000 (15:53 +0200)]
Speed up operations on numeric, mostly by avoiding palloc() overhead.

In many functions, a NumericVar was initialized from an input Numeric, to be
passed as input to a calculation function. When the NumericVar is not
modified, the digits array of the NumericVar can point directly to the digits
array in the original Numeric, and we can avoid a palloc() and memcpy(). Add
init_var_from_num() function to initialize a var like that.

Remove dscale argument from get_str_from_var(), as all the callers just
passed the dscale of the variable. That means that the rounding it used to
do was not actually necessary, and get_str_from_var() no longer scribbles on
its input. That makes it safer in general, and allows us to use the new
init_var_from_num() function in e.g numeric_out().

Also modified numericvar_to_int8() to no scribble on its input either. It
creates a temporary copy to avoid that. To compensate, the callers no longer
need to create a temporary copy, so the net # of pallocs is the same, but this
is nicer.

In the passing, use a constant for the number 10 in get_str_from_var_sci(),
when calculating 10^exponent. Saves a palloc() and some cycles to convert
integer 10 to numeric.

Original patch by Kyotaro HORIGUCHI, with further changes by me. Reviewed
by Pavel Stehule.

11 years agoIn pg_upgrade, report errno string if file existence check returns an
Bruce Momjian [Mon, 19 Nov 2012 21:41:58 +0000 (16:41 -0500)]
In pg_upgrade, report errno string if file existence check returns an
error and errno != ENOENT.

11 years agoImprove handling of INT_MIN / -1 and related cases.
Tom Lane [Mon, 19 Nov 2012 17:24:25 +0000 (12:24 -0500)]
Improve handling of INT_MIN / -1 and related cases.

Some platforms throw an exception for this division, rather than returning
a necessarily-overflowed result.  Since we were testing for overflow after
the fact, an exception isn't nice.  We can avoid the problem by treating
division by -1 as negation.

Add some regression tests so that we'll find out if any compilers try to
optimize away the overflow check conditions.

This ought to be back-patched, but I'm going to see what the buildfarm
reports about the regression tests first.

Per discussion with Xi Wang, though this is different from the patch he
submitted.

11 years agoFix archive_cleanup_command.
Heikki Linnakangas [Mon, 19 Nov 2012 08:02:25 +0000 (10:02 +0200)]
Fix archive_cleanup_command.

When I moved ExecuteRecoveryCommand() from xlog.c to xlogarchive.c, I didn't
realize that it's called from the checkpoint process, not the startup
process. I tried to use InRedo variable to decide whether or not to attempt
cleaning up the archive (must not do so before we have read the initial
checkpoint record), but that variable is only valid within the startup
process.

Instead, let ExecuteRecoveryCommand() always clean up the archive, and add
an explicit argument to RestoreArchivedFile() to say whether that's allowed
or not. The caller knows better.

Reported by Erik Rijkers, diagnosis by Fujii Masao. Only 9.3devel is
affected.

11 years agoLimit values of archive_timeout, post_auth_delay, auth_delay.milliseconds.
Tom Lane [Sun, 18 Nov 2012 22:15:06 +0000 (17:15 -0500)]
Limit values of archive_timeout, post_auth_delay, auth_delay.milliseconds.

The previous definitions of these GUC variables allowed them to range
up to INT_MAX, but in point of fact the underlying code would suffer
overflows or other errors with large values.  Reduce the maximum values
to something that won't misbehave.  There's no apparent value in working
harder than this, since very large delays aren't sensible for any of
these.  (Note: the risk with archive_timeout is that if we're late
checking the state, the timestamp difference it's being compared to
might overflow.  So we need some amount of slop; the choice of INT_MAX/2
is arbitrary.)

Per followup investigation of bug #7670.  Although this isn't a very
significant fix, might as well back-patch.

11 years agoFix syslogger to not fail when log_rotation_age exceeds 2^31 milliseconds.
Tom Lane [Sun, 18 Nov 2012 21:16:39 +0000 (16:16 -0500)]
Fix syslogger to not fail when log_rotation_age exceeds 2^31 milliseconds.

We need to avoid calling WaitLatch with timeouts exceeding INT_MAX.
Fortunately a simple clamp will do the trick, since no harm is done if
the wait times out before it's really time to rotate the log file.
Per bug #7670 (probably bug #7545 is the same thing, too).

In passing, fix bogus definition of log_rotation_age's maximum value in
guc.c --- it was numerically right, but only because MINS_PER_HOUR and
SECS_PER_MINUTE have the same value.

Back-patch to 9.2.  Before that, syslogger wasn't using WaitLatch.

11 years agoAssert that WaitLatch's timeout is not more than INT_MAX milliseconds.
Tom Lane [Sun, 18 Nov 2012 20:39:51 +0000 (15:39 -0500)]
Assert that WaitLatch's timeout is not more than INT_MAX milliseconds.

The behavior with larger values is unspecified by the Single Unix Spec.
It appears that BSD-derived kernels report EINVAL, although Linux does not.
If waiting for longer intervals is desired, the calling code has to do
something to limit the delay; we can't portably fix it here since "long"
may not be any wider than "int" in the first place.

Part of response to bug #7670, though this change doesn't fix that
(in fact, it converts the problem from an ERROR into an Assert failure).
No back-patch since it's just an assertion addition.

11 years agodoc: Put pg_temp into documentation index
Peter Eisentraut [Sat, 17 Nov 2012 23:08:13 +0000 (18:08 -0500)]
doc: Put pg_temp into documentation index

Karl O. Pinc

11 years agoAdd -Wlogical-op to standard compiler flags, if supported
Peter Eisentraut [Fri, 16 Nov 2012 05:35:06 +0000 (00:35 -0500)]
Add -Wlogical-op to standard compiler flags, if supported

11 years agoImprove check_partial_indexes() to consider join clauses in proof attempts.
Tom Lane [Fri, 16 Nov 2012 00:29:05 +0000 (19:29 -0500)]
Improve check_partial_indexes() to consider join clauses in proof attempts.

Traditionally check_partial_indexes() has only looked at restriction
clauses while trying to prove partial indexes usable in queries.  However,
join clauses can also be used in some cases; mainly, that a strict operator
on "x" proves an "x IS NOT NULL" index predicate, even if the operator is
in a join clause rather than a restriction clause.  Adding this code fixes
a regression in 9.2, because previously we would take join clauses into
account when considering whether a partial index could be used in a
nestloop inner indexscan path.  9.2 doesn't handle nestloop inner
indexscans in the same way, and this consideration was overlooked in the
rewrite.  Moving the work to check_partial_indexes() is a better solution
anyway, since the proof applies whether or not we actually use the index
in that particular way, and we don't have to do it over again for each
possible outer relation.  Per report from Dave Cramer.

12 years agodoc: Put commas in the right place on pg_restore reference page
Peter Eisentraut [Thu, 15 Nov 2012 05:04:23 +0000 (00:04 -0500)]
doc: Put commas in the right place on pg_restore reference page

Karl O. Pinc

12 years agoIn pg_upgrade, add third meaningless parameter to open().
Bruce Momjian [Thu, 15 Nov 2012 00:01:29 +0000 (19:01 -0500)]
In pg_upgrade, add third meaningless parameter to open().

12 years agoIn pg_upgrade, copy fsm, vm, and extent files by checking for file
Bruce Momjian [Wed, 14 Nov 2012 22:32:04 +0000 (17:32 -0500)]
In pg_upgrade, copy fsm, vm, and extent files by checking for file
existence via open(), rather than collecting a directory listing and
looking up matching relfilenode files with sequential scans of the
array.  This speeds up pg_upgrade by 2x for a large number of tables,
e.g. 16k.

Per observation by Ants Aasma.

12 years agoFix the int8 and int2 cases of (minimum possible integer) % (-1).
Tom Lane [Wed, 14 Nov 2012 22:30:00 +0000 (17:30 -0500)]
Fix the int8 and int2 cases of (minimum possible integer) % (-1).

The correct answer for this (or any other case with arg2 = -1) is zero,
but some machines throw a floating-point exception instead of behaving
sanely.  Commit f9ac414c35ea084ff70c564ab2c32adb06d5296f dealt with this
in int4mod, but overlooked the fact that it also happens in int8mod
(at least on my Linux x86_64 machine).  Protect int2mod as well; it's
not clear whether any machines fail there (mine does not) but since the
test is so cheap it seems better safe than sorry.  While at it, simplify
the original guard in int4mod: we need only check for arg2 == -1, we
don't need to check arg1 explicitly.

Xi Wang, with some editing by me.

12 years agoMark pg_upgrade's free_db_and_rel_infos() as a static function.
Bruce Momjian [Wed, 14 Nov 2012 02:10:40 +0000 (21:10 -0500)]
Mark pg_upgrade's free_db_and_rel_infos() as a static function.

12 years agoAdjust find_status for newer Linux 'nm' output format.
Bruce Momjian [Wed, 14 Nov 2012 02:08:07 +0000 (21:08 -0500)]
Adjust find_status for newer Linux 'nm' output format.

12 years agoFix memory leaks in record_out() and record_send().
Tom Lane [Tue, 13 Nov 2012 19:44:28 +0000 (14:44 -0500)]
Fix memory leaks in record_out() and record_send().

record_out() leaks memory: it fails to free the strings returned by the
per-column output functions, and also is careless about detoasted values.
This results in a query-lifespan memory leakage when returning composite
values to the client, because printtup() runs the output functions in the
query-lifespan memory context.  Fix it to handle these issues the same way
printtup() does.  Also fix a similar leakage in record_send().

(At some point we might want to try to run output functions in
shorter-lived memory contexts, so that we don't need a zero-leakage policy
for them.  But that would be a significantly more invasive patch, which
doesn't seem like material for back-patching.)

In passing, use appendStringInfoCharMacro instead of appendStringInfoChar
in the innermost data-copying loop of record_out, to try to shave a few
cycles from this function's runtime.

Per trouble report from Carlos Henrique Reimer.  Back-patch to all
supported versions.

12 years agoSkip searching for subxact locks at commit.
Simon Riggs [Tue, 13 Nov 2012 19:00:19 +0000 (16:00 -0300)]
Skip searching for subxact locks at commit.
At commit all standby locks are released
for the top-level transaction, so searching
for locks for each subtransaction is both
pointless and costly (N^2) in the presence
of many AccessExclusiveLocks.

12 years agoClarify docs on hot standby lock release
Simon Riggs [Tue, 13 Nov 2012 18:54:01 +0000 (15:54 -0300)]
Clarify docs on hot standby lock release

Andres Freund and Simon Riggs

12 years agodoc: Add link to CREATE TABLE AS on CREATE TABLE reference page
Peter Eisentraut [Tue, 13 Nov 2012 03:22:47 +0000 (22:22 -0500)]
doc: Add link to CREATE TABLE AS on CREATE TABLE reference page

Karl O. Pinc

12 years agoFix multiple problems in WAL replay.
Tom Lane [Tue, 13 Nov 2012 03:05:08 +0000 (22:05 -0500)]
Fix multiple problems in WAL replay.

Most of the replay functions for WAL record types that modify more than
one page failed to ensure that those pages were locked correctly to ensure
that concurrent queries could not see inconsistent page states.  This is
a hangover from coding decisions made long before Hot Standby was added,
when it was hardly necessary to acquire buffer locks during WAL replay
at all, let alone hold them for carefully-chosen periods.

The key problem was that RestoreBkpBlocks was written to hold lock on each
page restored from a full-page image for only as long as it took to update
that page.  This was guaranteed to break any WAL replay function in which
there was any update-ordering constraint between pages, because even if the
nominal order of the pages is the right one, any mixture of full-page and
non-full-page updates in the same record would result in out-of-order
updates.  Moreover, it wouldn't work for situations where there's a
requirement to maintain lock on one page while updating another.  Failure
to honor an update ordering constraint in this way is thought to be the
cause of bug #7648 from Daniel Farina: what seems to have happened there
is that a btree page being split was rewritten from a full-page image
before the new right sibling page was written, and because lock on the
original page was not maintained it was possible for hot standby queries to
try to traverse the page's right-link to the not-yet-existing sibling page.

To fix, get rid of RestoreBkpBlocks as such, and instead create a new
function RestoreBackupBlock that restores just one full-page image at a
time.  This function can be invoked by WAL replay functions at the points
where they would otherwise perform non-full-page updates; in this way, the
physical order of page updates remains the same no matter which pages are
replaced by full-page images.  We can then further adjust the logic in
individual replay functions if it is necessary to hold buffer locks
for overlapping periods.  A side benefit is that we can simplify the
handling of concurrency conflict resolution by moving that code into the
record-type-specfic functions; there's no more need to contort the code
layout to keep conflict resolution in front of the RestoreBkpBlocks call.

In connection with that, standardize on zero-based numbering rather than
one-based numbering for referencing the full-page images.  In HEAD, I
removed the macros XLR_BKP_BLOCK_1 through XLR_BKP_BLOCK_4.  They are
still there in the header files in previous branches, but are no longer
used by the code.

In addition, fix some other bugs identified in the course of making these
changes:

spgRedoAddNode could fail to update the parent downlink at all, if the
parent tuple is in the same page as either the old or new split tuple and
we're not doing a full-page image: it would get fooled by the LSN having
been advanced already.  This would result in permanent index corruption,
not just transient failure of concurrent queries.

Also, ginHeapTupleFastInsert's "merge lists" case failed to mark the old
tail page as a candidate for a full-page image; in the worst case this
could result in torn-page corruption.

heap_xlog_freeze() was inconsistent about using a cleanup lock or plain
exclusive lock: it did the former in the normal path but the latter for a
full-page image.  A plain exclusive lock seems sufficient, so change to
that.

Also, remove gistRedoPageDeleteRecord(), which has been dead code since
VACUUM FULL was rewritten.

Back-patch to 9.0, where hot standby was introduced.  Note however that 9.0
had a significantly different WAL-logging scheme for GIST index updates,
and it doesn't appear possible to make that scheme safe for concurrent hot
standby queries, because it can leave inconsistent states in the index even
between WAL records.  Given the lack of complaints from the field, we won't
work too hard on fixing that branch.

12 years agoUse a stamp file for the XSLT HTML doc build
Peter Eisentraut [Tue, 13 Nov 2012 02:42:25 +0000 (21:42 -0500)]
Use a stamp file for the XSLT HTML doc build

This way it works more like the DSSSL build, and dependencies are
tracked better by make.

Also copy the CSS stylesheet to the html directory.  This was forgotten
when the output directory was changed.

12 years agoOops, have to rename local variables called 'errcontext' in contrib, too.
Heikki Linnakangas [Mon, 12 Nov 2012 16:30:51 +0000 (18:30 +0200)]
Oops, have to rename local variables called 'errcontext' in contrib, too.

As pointed out by Alvaro.

12 years agoUse correct text domain for translating errcontext() messages.
Heikki Linnakangas [Mon, 12 Nov 2012 13:10:24 +0000 (15:10 +0200)]
Use correct text domain for translating errcontext() messages.

errcontext() is typically used in an error context callback function, not
within an ereport() invocation like e.g errmsg and errdetail are. That means
that the message domain that the TEXTDOMAIN magic in ereport() determines
is not the right one for the errcontext() calls. The message domain needs to
be determined by the C file containing the errcontext() call, not the file
containing the ereport() call.

Fix by turning errcontext() into a macro that passes the TEXTDOMAIN to use
for the errcontext message. "errcontext" was used in a few places as a
variable or struct field name, I had to rename those out of the way, now
that errcontext is a macro.

We've had this problem all along, but this isn't doesn't seem worth
backporting. It's a fairly minor issue, and turning errcontext from a
function to a macro requires at least a recompile of any external code that
calls errcontext().

12 years agoSilence "expression result unused" warnings in AssertVariableIsOfTypeMacro
Heikki Linnakangas [Mon, 12 Nov 2012 13:02:40 +0000 (15:02 +0200)]
Silence "expression result unused" warnings in AssertVariableIsOfTypeMacro

At least clang 3.1 generates those warnings. Prepend (void) to avoid them,
like we have in AssertMacro.

12 years agodoc: "only relevant" -> "relevant only"
Peter Eisentraut [Mon, 12 Nov 2012 03:50:24 +0000 (22:50 -0500)]
doc: "only relevant" -> "relevant only"

Karl O. Pinc

12 years agoCheck for stack overflow in transformSetOperationTree().
Tom Lane [Mon, 12 Nov 2012 00:56:10 +0000 (19:56 -0500)]
Check for stack overflow in transformSetOperationTree().

Since transformSetOperationTree() recurses, it can be driven to stack
overflow with enough UNION/INTERSECT/EXCEPT clauses in a query.  Add a
check to ensure it fails cleanly instead of crashing.  Per report from
Matthew Gerber (though it's not clear whether this is the only thing
going wrong for him).

Historical note: I think the reasoning behind not putting a check here in
the beginning was that the check in transformExpr() ought to be sufficient
to guard the whole parser.  However, because transformSetOperationTree()
recurses all the way to the bottom of the set-operation tree before doing
any analysis of the statement's expressions, that check doesn't save it.

12 years agoRemove leftover LWLockRelease() call
Alvaro Herrera [Fri, 9 Nov 2012 13:12:09 +0000 (10:12 -0300)]
Remove leftover LWLockRelease() call

This code was refactored in d5497b95 but an extra LWLockRelease call was
left behind.

Per report from Erik Rijkers

12 years agoXSLT stylesheet: Add slash to directory name
Peter Eisentraut [Fri, 9 Nov 2012 04:55:36 +0000 (23:55 -0500)]
XSLT stylesheet: Add slash to directory name

Some versions of the XSLT stylesheets don't handle the missing slash
correctly (they concatenate directory and file name without the slash).
This might never have worked correctly.

12 years agoFix WaitLatch() to return promptly when the requested timeout expires.
Tom Lane [Fri, 9 Nov 2012 01:04:48 +0000 (20:04 -0500)]
Fix WaitLatch() to return promptly when the requested timeout expires.

If the sleep is interrupted by a signal, we must recompute the remaining
time to wait; otherwise, a steady stream of non-wait-terminating interrupts
could delay return from WaitLatch indefinitely.  This has been shown to be
a problem for the autovacuum launcher, and there may well be other places
now or in the future with similar issues.  So we'd better make the function
robust, even though this'll add at least one gettimeofday call per wait.

Back-patch to 9.2.  We might eventually need to fix 9.1 as well, but the
code is quite different there, and the usage of WaitLatch in 9.1 is so
limited that it's not clearly important to do so.

Reported and diagnosed by Jeff Janes, though I rewrote his patch rather
heavily.

12 years agoRename ResolveNew() to ReplaceVarsFromTargetList(), and tweak its API.
Tom Lane [Thu, 8 Nov 2012 21:52:49 +0000 (16:52 -0500)]
Rename ResolveNew() to ReplaceVarsFromTargetList(), and tweak its API.

This function currently lacks the option to throw error if the provided
targetlist doesn't have any matching entry for a Var to be replaced.
Two of the four existing call sites would be better off with an error,
as would the usage in the pending auto-updatable-views patch, so it seems
past time to extend the API to support that.  To do so, replace the "event"
parameter (historically of type CmdType, though it was declared plain int)
with a special-purpose enum type.

It's unclear whether this function might be called by third-party code.
Since many C compilers wouldn't warn about a call site continuing to use
the old calling convention, rename the function to forcibly break any
such code that hasn't been updated.  The old name was none too well chosen
anyhow.