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

11 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

11 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().

11 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.

11 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.

11 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.

11 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.

11 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.

11 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.

11 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

11 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

11 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.

11 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.

11 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.

11 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().

11 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.

11 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

11 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.

11 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

11 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.

11 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.

11 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.

11 years agoDon't trash input list structure in does_not_exist_skipping().
Tom Lane [Thu, 8 Nov 2012 16:34:32 +0000 (11:34 -0500)]
Don't trash input list structure in does_not_exist_skipping().

The trigger and rule cases need to split up the input name list, but
they mustn't corrupt the passed-in data structure, since it could be part
of a cached utility-statement parsetree.  Per bug #7641.

11 years agoTeach pg_basebackup and pg_receivexlog to reply to server keepalives.
Heikki Linnakangas [Thu, 8 Nov 2012 08:25:58 +0000 (10:25 +0200)]
Teach pg_basebackup and pg_receivexlog to reply to server keepalives.

Without this, the connection will be killed after timeout if
wal_sender_timeout is set in the server.

Original patch by Amit Kapila, modified by me to fit recent changes in the
code.

11 years agoFix missing inclusions.
Tom Lane [Wed, 7 Nov 2012 23:05:43 +0000 (18:05 -0500)]
Fix missing inclusions.

Some platforms require including <netinet/in.h> and/or <arpa/inet.h> to
use htonl() and ntohl().  Per build failure locally.

11 years agoAdd URLs to document why DLLIMPORT is needed on Windows.
Bruce Momjian [Wed, 7 Nov 2012 20:01:18 +0000 (15:01 -0500)]
Add URLs to document why DLLIMPORT is needed on Windows.

Per email from Craig Ringer

11 years agoDon't try to use a unopened relation
Alvaro Herrera [Wed, 7 Nov 2012 19:23:39 +0000 (16:23 -0300)]
Don't try to use a unopened relation

Commit 4c9d0901 mistakenly introduced a call to
TransferPredicateLocksToHeapRelation() on an index relation that had
been closed a few lines above.  Moving up an index_open() call that's
below is enough to fix the problem.

Discovered by me while testing an unrelated patch.

11 years agoIn pg_upgrade docs, mention using base backup as part of rsync for
Bruce Momjian [Wed, 7 Nov 2012 18:36:08 +0000 (13:36 -0500)]
In pg_upgrade docs, mention using base backup as part of rsync for
logical replication upgrades.

Backpatch to 9.2.

11 years agoMake the streaming replication protocol messages architecture-independent.
Heikki Linnakangas [Wed, 7 Nov 2012 16:59:12 +0000 (18:59 +0200)]
Make the streaming replication protocol messages architecture-independent.

We used to send structs wrapped in CopyData messages, which works as long as
the client and server agree on things like endianess, timestamp format and
alignment. That's good enough for running a standby server, which has to run
on the same platform anyway, but it's useful for tools like pg_receivexlog
to work across platforms.

This breaks protocol compatibility of streaming replication, but we never
promised that to be compatible across versions, anyway.

11 years agoIn pg_upgrade, set synchronous_commit=off for the new cluster, to
Bruce Momjian [Tue, 6 Nov 2012 19:28:48 +0000 (14:28 -0500)]
In pg_upgrade, set synchronous_commit=off for the new cluster, to
improve performance when restoring the schema from the old cluster.

Backpatch to 9.2.

11 years agoFix handling of inherited check constraints in ALTER COLUMN TYPE.
Tom Lane [Mon, 5 Nov 2012 18:36:16 +0000 (13:36 -0500)]
Fix handling of inherited check constraints in ALTER COLUMN TYPE.

This case got broken in 8.4 by the addition of an error check that
complains if ALTER TABLE ONLY is used on a table that has children.
We do use ONLY for this situation, but it's okay because the necessary
recursion occurs at a higher level.  So we need to have a separate
flag to suppress recursion without making the error check.

Reported and patched by Pavan Deolasee, with some editorial adjustments by
me.  Back-patch to 8.4, since this is a regression of functionality that
worked in earlier branches.

11 years agoFix typo
Peter Eisentraut [Fri, 2 Nov 2012 02:58:36 +0000 (22:58 -0400)]
Fix typo

12 years agoFix bogus handling of $(X) (i.e., ".exe") in isolationtester Makefile.
Tom Lane [Thu, 1 Nov 2012 23:48:53 +0000 (19:48 -0400)]
Fix bogus handling of $(X) (i.e., ".exe") in isolationtester Makefile.

I'm not sure why commit 1eb1dde049ccfffc42c80c2bcec14155c58bcc1f seems
to have made this start to fail on Cygwin when it never did before ---
but nonetheless, the coding was pretty bogus, and unlike the way we
handle $(X) anywhere else.  Per buildfarm.

12 years agoLimit the number of rel sets considered in consider_index_join_outer_rels.
Tom Lane [Thu, 1 Nov 2012 18:08:42 +0000 (14:08 -0400)]
Limit the number of rel sets considered in consider_index_join_outer_rels.

In bug #7626, Brian Dunavant exposes a performance problem created by
commit 3b8968f25232ad09001bf35ab4cc59f5a501193e: that commit attempted to
consider *all* possible combinations of indexable join clauses, but if said
clauses join to enough different relations, there's an exponential increase
in the number of outer-relation sets considered.

In Brian's example, all the clauses come from the same equivalence class,
which means it's redundant to use more than one of them in an indexscan
anyway.  So we can prevent the problem in this class of cases (which is
probably the majority of real examples) by rejecting combinations that
would only serve to add a known-redundant clause.

But that still leaves us exposed to exponential growth of planning time
when the query has a lot of non-equivalence join clauses that are usable
with the same index.  I chose to prevent such cases by setting an upper
limit on the number of relation sets considered, equal to ten times the
number of index clauses considered so far.  (This sliding limit still
allows new relsets to be added on as we move to additional index columns,
which is probably more important than considering even more combinations of
clauses for the previous column.)  This should keep the amount of work done
roughly linear rather than exponential in the apparent query complexity.
This part of the fix is pretty ad-hoc; but without a clearer idea of
real-world cases for which this would result in markedly inferior plans,
it's hard to see how to do better.

12 years agoHave make never delete intermediate files automatically
Peter Eisentraut [Thu, 1 Nov 2012 03:33:35 +0000 (23:33 -0400)]
Have make never delete intermediate files automatically

Several hacks in certain modes already thought this was a bad idea, so
just disable it globally.

12 years agoFix erroneous choice of timeline variable, too
Alvaro Herrera [Wed, 31 Oct 2012 19:50:09 +0000 (16:50 -0300)]
Fix erroneous choice of timeline variable, too

12 years agoDocument that TCP keepalive settings read as 0 on Unix-socket connections.
Tom Lane [Wed, 31 Oct 2012 18:26:20 +0000 (14:26 -0400)]
Document that TCP keepalive settings read as 0 on Unix-socket connections.

Per bug #7631 from Rob Johnson.  The code is operating as designed, but the
docs didn't explain it.

12 years agoFix erroneous choices of segNo variables
Alvaro Herrera [Wed, 31 Oct 2012 14:05:28 +0000 (11:05 -0300)]
Fix erroneous choices of segNo variables

Commit dfda6eba (which changed segment numbers to use a single 64 bit
variable instead of log/seg) introduced a couple of bogus choices of
exactly which log segment number variable to use in each case.

This is currently pretty harmless; in one place, the bogus number was
only being used in an error message for a pretty unlikely condition
(failure to fsync a WAL segment file).  In the other, it was using a
global variable instead of the local variable; but all callsites were
passing the value of the global variable anyway.

No need to backpatch because that commit is not on earlier branches.

12 years agoFix ALTER EXTENSION / SET SCHEMA
Alvaro Herrera [Wed, 31 Oct 2012 13:52:55 +0000 (10:52 -0300)]
Fix ALTER EXTENSION / SET SCHEMA

In its original conception, it was leaving some objects into the old
schema, but without their proper pg_depend entries; this meant that the
old schema could be dropped, causing future pg_dump calls to fail on the
affected database.  This was originally reported by Jeff Frost as #6704;
there have been other complaints elsewhere that can probably be traced
to this bug.

To fix, be more consistent about altering a table's subsidiary objects
along the table itself; this requires some restructuring in how tables
are relocated when altering an extension -- hence the new
AlterTableNamespaceInternal routine which encapsulates it for both the
ALTER TABLE and the ALTER EXTENSION cases.

There was another bug lurking here, which was unmasked after fixing the
previous one: certain objects would be reached twice via the dependency
graph, and the second attempt to move them would cause the entire
operation to fail.  Per discussion, it seems the best fix for this is to
do more careful tracking of objects already moved: we now maintain a
list of moved objects, to avoid attempting to do it twice for the same
object.

Authors: Alvaro Herrera, Dimitri Fontaine
Reviewed by Tom Lane

12 years agoPreserve intermediate .c files in coverage mode
Peter Eisentraut [Sun, 28 Oct 2012 14:35:46 +0000 (10:35 -0400)]
Preserve intermediate .c files in coverage mode

The introduction of the .y -> .c pattern rule causes some .c files such
as bootparse.c to be considered intermediate files in the .y -> .c -> .o
rule chain, which make would automatically delete.  But in coverage
mode, the processing tools such as genhtml need those files, so mark
them as "precious" so that make preserves them.

12 years agoThrow error if expiring tuple is again updated or deleted.
Kevin Grittner [Fri, 26 Oct 2012 19:55:36 +0000 (14:55 -0500)]
Throw error if expiring tuple is again updated or deleted.

This prevents surprising behavior when a FOR EACH ROW trigger
BEFORE UPDATE or BEFORE DELETE directly or indirectly updates or
deletes the the old row.  Prior to this patch the requested action
on the row could be silently ignored while all triggered actions
based on the occurence of the requested action could be committed.
One example of how this could happen is if the BEFORE DELETE
trigger for a "parent" row deleted "children" which had trigger
functions to update summary or status data on the parent.

This also prevents similar surprising problems if the query has a
volatile function which updates a target row while it is already
being updated.

There are related issues present in FOR UPDATE cursors and READ
COMMITTED queries which are not handled by this patch.  These
issues need further evalution to determine what change, if any, is
needed.

Where the new error messages are generated, in most cases the best
fix will be to move code from the BEFORE trigger to an AFTER
trigger.  Where this is not feasible, the trigger can avoid the
error by re-issuing the triggering statement and returning NULL.

Documentation changes will be submitted in a separate patch.

Kevin Grittner and Tom Lane with input from Florian Pflug and
Robert Haas, based on problems encountered during conversion of
Wisconsin Circuit Court trigger logic to plpgsql triggers.

12 years agoPrefer actual constants to pseudo-constants in equivalence class machinery.
Tom Lane [Fri, 26 Oct 2012 18:19:34 +0000 (14:19 -0400)]
Prefer actual constants to pseudo-constants in equivalence class machinery.

generate_base_implied_equalities_const() should prefer plain Consts over
other em_is_const eclass members when choosing the "pivot" value that
all the other members will be equated to.  This makes it more likely that
the generated equalities will be useful in constraint-exclusion proofs.
Per report from Rushabh Lathia.

12 years agoIn pg_dump, dump SEQUENCE SET items in the data not pre-data section.
Tom Lane [Fri, 26 Oct 2012 16:12:42 +0000 (12:12 -0400)]
In pg_dump, dump SEQUENCE SET items in the data not pre-data section.

Represent a sequence's current value as a separate TableDataInfo dumpable
object, so that it can be dumped within the data section of the archive
rather than in pre-data.  This fixes an undesirable inconsistency between
the meanings of "--data-only" and "--section=data", and also fixes dumping
of sequences that are marked as extension configuration tables, as per a
report from Marko Kreen back in July.  The main cost is that we do one more
SQL query per sequence, but that's probably not very meaningful in most
databases.

Back-patch to 9.1, since it has the extension configuration issue even
though not the --section switch.

12 years agoTweak genericcostestimate's fudge factor for index size.
Tom Lane [Wed, 24 Oct 2012 20:25:40 +0000 (16:25 -0400)]
Tweak genericcostestimate's fudge factor for index size.

To provide some bias against using a large index when a small one would do
as well, genericcostestimate adds a "fudge factor", which for a long time
was random_page_cost * index_pages/10000.  However, this can grow to be the
dominant term in indexscan cost estimates when the index involved is large
enough, a behavior that was never intended.  Change to a ln(1 + n/10000)
formulation, which has nearly the same behavior up to a few hundred pages
but tails off significantly thereafter.  (A log curve seems correct on
first principles, since what we're trying to account for here is index
descent costs, which are typically logarithmic.)  Per bug #7619 from Niko
Kiirala.

Possibly this change should get back-patched, but I'm hesitant to mess with
cost estimates in stable branches.

12 years agoWhen converting a table to a view, remove its system columns.
Tom Lane [Wed, 24 Oct 2012 17:39:37 +0000 (13:39 -0400)]
When converting a table to a view, remove its system columns.

Views should not have any pg_attribute entries for system columns.
However, we forgot to remove such entries when converting a table to a
view.  This could lead to crashes later on, if someone attempted to
reference such a column, as reported by Kohei KaiGai.

Patch in HEAD only.  This bug has been there forever, but in the back
branches we will have to defend against existing mis-converted views,
so it doesn't seem worthwhile to change the conversion code too.

12 years agoAdd context info to OAT_POST_CREATE security hook
Alvaro Herrera [Tue, 23 Oct 2012 21:07:26 +0000 (18:07 -0300)]
Add context info to OAT_POST_CREATE security hook

... and have sepgsql use it to determine whether to check permissions
during certain operations.  Indexes that are being created as a result
of REINDEX, for instance, do not need to have their permissions checked;
they were already checked when the index was created.

Author: KaiGai Kohei, slightly revised by me

12 years agoCorrect predicate locking for DROP INDEX CONCURRENTLY.
Kevin Grittner [Sun, 21 Oct 2012 21:35:42 +0000 (16:35 -0500)]
Correct predicate locking for DROP INDEX CONCURRENTLY.

For the non-concurrent case there is an AccessExclusiveLock lock
on both the index and the heap at a time during which no other
process is using either, before which the index is maintained and
used for scans, and after which the index is no longer used or
maintained.  Predicate locks can safely be moved from the index to
the related heap relation under the protection of these locks.
This was done prior to the introductin of DROP INDEX CONCURRENTLY
and continues to be done for non-concurrent index drops.

For concurrent index drops, the predicate locks must be moved when
there are no index scans in progress on that index and no more can
subsequently start, and before heap inserts stop maintaining the
index.  As long as these conditions are guaranteed when the
TransferPredicateLocksToHeapRelation() function is called,
stronger locks are not needed for correctness.

Kevin Grittner based on questions by Tom Lane in reviewing the
DROP INDEX CONCURRENTLY patch and in cooperation with Andres
Freund and Simon Riggs.

12 years agoFix pg_dump's handling of DROP DATABASE commands in --clean mode.
Tom Lane [Sat, 20 Oct 2012 20:58:32 +0000 (16:58 -0400)]
Fix pg_dump's handling of DROP DATABASE commands in --clean mode.

In commit 4317e0246c645f60c39e6572644cff1cb03b4c65, I accidentally broke
this behavior while rearranging code to ensure that --create wouldn't
affect whether a DATABASE entry gets put into archive-format output.
Thus, 9.2 would issue a DROP DATABASE command in --clean mode, which is
either useless or dangerous depending on the usage scenario.
It should not do that, and no longer does.

A bright spot is that this refactoring makes it easy to allow the
combination of --clean and --create to work sensibly, ie, emit DROP
DATABASE then CREATE DATABASE before reconnecting.  Ordinarily we'd
consider that a feature addition and not back-patch it, but it seems
silly to not include the extra couple of lines required in the 9.2
version of the code.

Per report from Guillaume Lelarge, though this is slightly more extensive
than his proposed patch.

12 years agoPrevent overflow in pgbench's percent-done display.
Tom Lane [Sat, 20 Oct 2012 16:44:18 +0000 (12:44 -0400)]
Prevent overflow in pgbench's percent-done display.

Per Thom Brown.

12 years agoFix UtilityContainsQuery() to handle CREATE TABLE AS EXECUTE correctly.
Tom Lane [Fri, 19 Oct 2012 22:33:45 +0000 (18:33 -0400)]
Fix UtilityContainsQuery() to handle CREATE TABLE AS EXECUTE correctly.

The code seems to have been written to handle the pre-parse-analysis
representation, where an ExecuteStmt would appear directly under
CreateTableAsStmt.  But in reality the function is only run on
already-parse-analyzed statements, so there will be a Query node in
between.  We'd not noticed the bug because the function is generally
not used at all except in extended query protocol.

Per report from Robert Haas and Rushabh Lathia.

12 years agoFix hash_search to avoid corruption of the hash table on out-of-memory.
Tom Lane [Fri, 19 Oct 2012 19:24:03 +0000 (15:24 -0400)]
Fix hash_search to avoid corruption of the hash table on out-of-memory.

An out-of-memory error during expand_table() on a palloc-based hash table
would leave a partially-initialized entry in the table.  This would not be
harmful for transient hash tables, since they'd get thrown away anyway at
transaction abort.  But for long-lived hash tables, such as the relcache
hash, this would effectively corrupt the table, leading to crash or other
misbehavior later.

To fix, rearrange the order of operations so that table enlargement is
attempted before we insert a new entry, rather than after adding it
to the hash table.

Problem discovered by Hitoshi Harada, though this is a bit different
from his proposed patch.

12 years agoFix ruleutils to print "INSERT INTO foo DEFAULT VALUES" correctly.
Tom Lane [Fri, 19 Oct 2012 17:39:51 +0000 (13:39 -0400)]
Fix ruleutils to print "INSERT INTO foo DEFAULT VALUES" correctly.

Per bug #7615 from Marko Tiikkaja.  Apparently nobody ever tried this
case before ...

12 years agoFix orphan on cancel of drop index concurrently.
Simon Riggs [Fri, 19 Oct 2012 08:56:29 +0000 (09:56 +0100)]
Fix orphan on cancel of drop index concurrently.
Canceling DROP INDEX CONCURRENTLY during
wait could allow an orphaned index to be
left behind which could not be dropped.

Backpatch to 9.2

Andres Freund, tested by Abhijit Menon-Sen

12 years agoFurther cleanup of catcache.c ilist changes.
Tom Lane [Thu, 18 Oct 2012 23:30:43 +0000 (19:30 -0400)]
Further cleanup of catcache.c ilist changes.

Remove useless duplicate initialization of bucket headers, don't use a
dlist_mutable_iter in a performance-critical path that doesn't need it,
make some other cosmetic changes for consistency's sake.

12 years agoRemove unnecessary "head" arguments from some dlist/slist functions.
Tom Lane [Thu, 18 Oct 2012 23:04:20 +0000 (19:04 -0400)]
Remove unnecessary "head" arguments from some dlist/slist functions.

dlist_delete, dlist_insert_after, dlist_insert_before, slist_insert_after
do not need access to the list header, and indeed insisting on that negates
one of the main advantages of a doubly-linked list.

In consequence, revert addition of "cache_bucket" field to CatCTup.

12 years agoCode review for inline-list patch.
Tom Lane [Thu, 18 Oct 2012 20:47:07 +0000 (16:47 -0400)]
Code review for inline-list patch.

Make foreach macros less syntactically dangerous, and fix some typos in
evidently-never-tested ones.  Add missing slist_next_node and
slist_head_node functions.  Fix broken dlist_check code.  Assorted comment
improvements.

12 years agoUse a more portable platform test.
Andrew Dunstan [Thu, 18 Oct 2012 20:14:11 +0000 (16:14 -0400)]
Use a more portable platform test.

12 years agoFurther tweaking of the readfile() function in pg_ctl.
Heikki Linnakangas [Thu, 18 Oct 2012 19:26:26 +0000 (22:26 +0300)]
Further tweaking of the readfile() function in pg_ctl.

Don't leak a file descriptor if the file is empty or we can't read its size.

Expect there to be a newline at the end of the last line, too. If there
isn't, ignore anything after the last newline. This makes it a tiny bit
more robust in case the file is appended to concurrently, so that we don't
return the last line if it hasn't been fully written yet. And this makes
the code a bit less obscure, anyway. Per Tom Lane's suggestion.

Backpatch to all supported branches.

12 years agoIsolation test for DROP INDEX CONCURRENTLY
Simon Riggs [Thu, 18 Oct 2012 18:41:40 +0000 (19:41 +0100)]
Isolation test for DROP INDEX CONCURRENTLY
for recent concurrent changes.

Abhijit Menon-Sen

12 years agoRe-think guts of DROP INDEX CONCURRENTLY.
Simon Riggs [Thu, 18 Oct 2012 17:58:30 +0000 (18:58 +0100)]
Re-think guts of DROP INDEX CONCURRENTLY.
Concurrent behaviour was flawed when using
a two-step process, so add an additional
phase of processing to ensure concurrency
for both SELECTs and INSERT/UPDATE/DELETEs.

Backpatch to 9.2

Andres Freund, tweaked by me

12 years agoFix planning of non-strict equivalence clauses above outer joins.
Tom Lane [Thu, 18 Oct 2012 16:28:45 +0000 (12:28 -0400)]
Fix planning of non-strict equivalence clauses above outer joins.

If a potential equivalence clause references a variable from the nullable
side of an outer join, the planner needs to take care that derived clauses
are not pushed to below the outer join; else they may use the wrong value
for the variable.  (The problem arises only with non-strict clauses, since
if an upper clause can be proven strict then the outer join will get
simplified to a plain join.)  The planner attempted to prevent this type
of error by checking that potential equivalence clauses aren't
outerjoin-delayed as a whole, but actually we have to check each side
separately, since the two sides of the clause will get moved around
separately if it's treated as an equivalence.  Bugs of this type can be
demonstrated as far back as 7.4, even though releases before 8.3 had only
a very ad-hoc notion of equivalence clauses.

In addition, we neglected to account for the possibility that such clauses
might have nonempty nullable_relids even when not outerjoin-delayed; so the
equivalence-class machinery lacked logic to compute correct nullable_relids
values for clauses it constructs.  This oversight was harmless before 9.2
because we were only using RestrictInfo.nullable_relids for OR clauses;
but as of 9.2 it could result in pushing constructed equivalence clauses
to incorrect places.  (This accounts for bug #7604 from Bill MacArthur.)

Fix the first problem by adding a new test check_equivalence_delay() in
distribute_qual_to_rels, and fix the second one by adding code in
equivclass.c and called functions to set correct nullable_relids for
generated clauses.  Although I believe the second part of this is not
currently necessary before 9.2, I chose to back-patch it anyway, partly to
keep the logic similar across branches and partly because it seems possible
we might find other reasons why we need valid values of nullable_relids in
the older branches.

Add regression tests illustrating these problems.  In 9.0 and up, also
add test cases checking that we can push constants through outer joins,
since we've broken that optimization before and I nearly broke it again
with an overly simplistic patch for this problem.

12 years agopg_dump: Output functions deterministically sorted
Alvaro Herrera [Wed, 17 Oct 2012 21:31:42 +0000 (18:31 -0300)]
pg_dump: Output functions deterministically sorted

Implementation idea from Tom Lane

Author: Joel Jacobson
Reviewed by Joachim Wieland

12 years agoRevert tests for drop index concurrently.
Simon Riggs [Thu, 18 Oct 2012 14:27:12 +0000 (15:27 +0100)]
Revert tests for drop index concurrently.

12 years agoAdd isolation tests for DROP INDEX CONCURRENTLY.
Simon Riggs [Thu, 18 Oct 2012 12:37:09 +0000 (13:37 +0100)]
Add isolation tests for DROP INDEX CONCURRENTLY.
Backpatch to 9.2 to ensure bugs are fixed.

Abhijit Menon-Sen

12 years agoClose un-owned SMgrRelations at transaction end.
Tom Lane [Wed, 17 Oct 2012 16:38:21 +0000 (12:38 -0400)]
Close un-owned SMgrRelations at transaction end.

If an SMgrRelation is not "owned" by a relcache entry, don't allow it to
live past transaction end.  This design allows the same SMgrRelation to be
used for blind writes of multiple blocks during a transaction, but ensures
that we don't hold onto such an SMgrRelation indefinitely.  Because an
SMgrRelation typically corresponds to open file descriptors at the fd.c
level, leaving it open when there's no corresponding relcache entry can
mean that we prevent the kernel from reclaiming deleted disk space.
(While CacheInvalidateSmgr messages usually fix that, there are cases
where they're not issued, such as DROP DATABASE.  We might want to add
some more sinval messaging for that, but I'd be inclined to keep this
type of logic anyway, since allowing VFDs to accumulate indefinitely
for blind-written relations doesn't seem like a good idea.)

This code replaces a previous attempt towards the same goal that proved
to be unreliable.  Back-patch to 9.1 where the previous patch was added.

12 years agoRevert "Use "transient" files for blind writes, take 2".
Tom Lane [Wed, 17 Oct 2012 16:37:08 +0000 (12:37 -0400)]
Revert "Use "transient" files for blind writes, take 2".

This reverts commit fba105b1099f4f5fa7283bb17cba6fed2baa8d0c.
That approach had problems with the smgr-level state not tracking what
we really want to happen, and with the VFD-level state not tracking the
smgr-level state very well either.  In consequence, it was still possible
to hold kernel file descriptors open for long-gone tables (as in recent
report from Tore Halset), and yet there were also cases of FDs being closed
undesirably soon.  A replacement implementation will follow.

12 years agoEmbedded list interface
Alvaro Herrera [Tue, 16 Oct 2012 20:36:30 +0000 (17:36 -0300)]
Embedded list interface

Provide a common implementation of embedded singly-linked and
doubly-linked lists.  "Embedded" in the sense that the nodes'
next/previous pointers exist within some larger struct; this design
choice reduces memory allocation overhead.

Most of the implementation uses inlineable functions (where supported),
for performance.

Some existing uses of both types of lists have been converted to the new
code, for demonstration purposes.  Other uses can (and probably will) be
converted in the future.  Since dllist.c is unused after this conversion,
it has been removed.

Author: Andres Freund
Some tweaks by me
Reviewed by Tom Lane, Peter Geoghegan

12 years agoFix typo in previous commit
Simon Riggs [Wed, 17 Oct 2012 09:29:30 +0000 (10:29 +0100)]
Fix typo in previous commit

12 years agoClarify hash index caution and copy to CREATE INDEX docs
Simon Riggs [Wed, 17 Oct 2012 07:14:29 +0000 (08:14 +0100)]
Clarify hash index caution and copy to CREATE INDEX docs

12 years agoWhen outputting the session id in log_line_prefix (%c) or in CSV log
Bruce Momjian [Tue, 16 Oct 2012 16:37:59 +0000 (12:37 -0400)]
When outputting the session id in log_line_prefix (%c) or in CSV log
output mode, cause the hex digits after the period to always be at least
four hex digits, with zero-padding.

12 years agoalter_generic regression test cannot run concurrently with privileges test.
Tom Lane [Mon, 15 Oct 2012 16:18:52 +0000 (12:18 -0400)]
alter_generic regression test cannot run concurrently with privileges test.

... because the latter plays games with the privileges for language SQL.
It looks like running alter_generic in parallel with "misc" is OK though.

Also, adjust serial_schedule to maintain the same test ordering (up to
parallelism) as parallel_schedule.

12 years agoFix typo in comment.
Heikki Linnakangas [Mon, 15 Oct 2012 10:01:31 +0000 (13:01 +0300)]
Fix typo in comment.

Fujii Masao

12 years agoRemove comment that is no longer true.
Heikki Linnakangas [Mon, 15 Oct 2012 08:02:02 +0000 (11:02 +0300)]
Remove comment that is no longer true.

AddToDataDirLockFile() supports out-of-order updates of the lockfile
nowadays.

12 years agoFix race condition in pg_ctl reading postmaster.pid.
Heikki Linnakangas [Sat, 13 Oct 2012 09:48:14 +0000 (12:48 +0300)]
Fix race condition in pg_ctl reading postmaster.pid.

If postmaster changed postmaster.pid while pg_ctl was reading it, pg_ctl
could overrun the buffer it allocated for the file. Fix by reading the
whole file to memory with one read() call.

initdb contains an identical copy of the readfile() function, but the files
that initdb reads are static, not modified concurrently. Nevertheless, add
a simple bounds-check there, if only to silence static analysis tools.

Per report from Dave Vitek. Backpatch to all supported branches.

12 years agoSplit up process latch initialization for more-fail-soft behavior.
Tom Lane [Mon, 15 Oct 2012 02:59:56 +0000 (22:59 -0400)]
Split up process latch initialization for more-fail-soft behavior.

In the previous coding, new backend processes would attempt to create their
self-pipe during the OwnLatch call in InitProcess.  However, pipe creation
could fail if the kernel is short of resources; and the system does not
recover gracefully from a FATAL error right there, since we have armed the
dead-man switch for this process and not yet set up the on_shmem_exit
callback that would disarm it.  The postmaster then forces an unnecessary
database-wide crash and restart, as reported by Sean Chittenden.

There are various ways we could rearrange the code to fix this, but the
simplest and sanest seems to be to split out creation of the self-pipe into
a new function InitializeLatchSupport, which must be called from a place
where failure is allowed.  For most processes that gets called in
InitProcess or InitAuxiliaryProcess, but processes that don't call either
but still use latches need their own calls.

Back-patch to 9.1, which has only a part of the latch logic that 9.2 and
HEAD have, but nonetheless includes this bug.

12 years agoFix oversight in new code for printing rangetable aliases.
Tom Lane [Fri, 12 Oct 2012 20:14:11 +0000 (16:14 -0400)]
Fix oversight in new code for printing rangetable aliases.

In commit 11e131854f8231a21613f834c40fe9d046926387, I missed the case of
a CTE RTE that doesn't have a user-defined alias, but does have an
alias assigned by set_rtable_names().  Per report from Peter Eisentraut.

While at it, refactor slightly to reduce code duplication.

12 years agoIn our source code, make a copy of getopt's 'optarg' string arguments,
Bruce Momjian [Fri, 12 Oct 2012 17:35:40 +0000 (13:35 -0400)]
In our source code, make a copy of getopt's 'optarg' string arguments,
rather than just storing a pointer.

12 years agoGet rid of COERCE_DONTCARE.
Tom Lane [Fri, 12 Oct 2012 17:35:00 +0000 (13:35 -0400)]
Get rid of COERCE_DONTCARE.

We don't need this hack any more.

12 years agoFix unportable format string.
Tom Lane [Fri, 12 Oct 2012 17:22:11 +0000 (13:22 -0400)]
Fix unportable format string.

Per compiler warning.

12 years agoMake equal() ignore CoercionForm fields for better planning with casts.
Tom Lane [Fri, 12 Oct 2012 16:10:49 +0000 (12:10 -0400)]
Make equal() ignore CoercionForm fields for better planning with casts.

This change ensures that the planner will see implicit and explicit casts
as equivalent for all purposes, except in the minority of cases where
there's actually a semantic difference (as reflected by having a 3-argument
cast function).  In particular, this fixes cases where the EquivalenceClass
machinery failed to consider two references to a varchar column as
equivalent if one was implicitly cast to text but the other was explicitly
cast to text, as seen in bug #7598 from Vaclav Juza.  We have had similar
bugs before in other parts of the planner, so I think it's time to fix this
problem at the core instead of continuing to band-aid around it.

Remove set_coercionform_dontcare(), which represents the band-aid
previously in use for allowing matching of index and constraint expressions
with inconsistent cast labeling.  (We can probably get rid of
COERCE_DONTCARE altogether, but I don't think removing that enum value in
back branches would be wise; it's possible there's third party code
referring to it.)

Back-patch to 9.2.  We could go back further, and might want to once this
has been tested more; but for the moment I won't risk destabilizing plan
choices in long-since-stable branches.

12 years agoUnbreak MSVC builds after recent Makefile refactoring.
Andrew Dunstan [Thu, 11 Oct 2012 16:36:42 +0000 (12:36 -0400)]
Unbreak MSVC builds after recent Makefile refactoring.

Based on a suggestion by Peter Eisentraut.

12 years agoFix cross-type case in partial row matching for hashed subplans.
Tom Lane [Thu, 11 Oct 2012 16:20:56 +0000 (12:20 -0400)]
Fix cross-type case in partial row matching for hashed subplans.

When hashing a subplan like "WHERE (a, b) NOT IN (SELECT x, y FROM ...)",
findPartialMatch() attempted to match rows using the hashtable's internal
equality operators, which of course are for x and y's datatypes.  What we
need to use are the potentially cross-type operators for a=x, b=y, etc.
Failure to do that leads to wrong answers or even crashes.  The scope for
problems is limited to cases where we have different types with compatible
hash functions (else we'd not be using a hashed subplan), but for example
int4 vs int8 can cause the problem.

Per bug #7597 from Bo Jensen.  This has been wrong since the hashed-subplan
code was written, so patch all the way back.

12 years agoImprove replication connection timeouts.
Heikki Linnakangas [Thu, 11 Oct 2012 14:39:52 +0000 (17:39 +0300)]
Improve replication connection timeouts.

Rename replication_timeout to wal_sender_timeout, and add a new setting
called wal_receiver_timeout that does the same at the walreceiver side.
There was previously no timeout in walreceiver, so if the network went down,
for example, the walreceiver could take a long time to notice that the
connection was lost. Now with the two settings, both sides of a replication
connection will detect a broken connection similarly.

It is no longer necessary to manually set wal_receiver_status_interval to
a value smaller than the timeout. Both wal sender and receiver now
automatically send a "ping" message if more than 1/2 of the configured
timeout has elapsed, and it hasn't received any messages from the other end.

Amit Kapila, heavily edited by me.

12 years agoRefactor flex and bison make rules
Peter Eisentraut [Thu, 11 Oct 2012 10:57:04 +0000 (06:57 -0400)]
Refactor flex and bison make rules

Numerous flex and bison make rules have appeared in the source tree
over time, and they are all virtually identical, so we can replace
them by pattern rules with some variables for customization.

Users of pgxs will also be able to benefit from this.