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

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

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

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

11 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

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

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

11 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

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

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

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

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

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

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

11 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

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

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

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

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

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

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

11 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

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

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

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

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

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

11 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

11 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

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

11 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

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

11 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

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

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

11 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

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

11 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

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

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

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

Fujii Masao

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

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

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

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

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

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

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

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

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

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

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

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

11 years agoRemove _FORTIFY_SOURCE
Peter Eisentraut [Thu, 11 Oct 2012 01:42:38 +0000 (21:42 -0400)]
Remove _FORTIFY_SOURCE

Apparently, on some glibc versions this causes warnings when
optimization is not enabled.

Altogether, there appear to be too many incompatibilities surrounding
this.

11 years agoRemove configure-option-dependent test cases from dblink tests.
Tom Lane [Thu, 11 Oct 2012 00:14:26 +0000 (20:14 -0400)]
Remove configure-option-dependent test cases from dblink tests.

The HINTs generated for these error cases vary across builds.  We
could try to work around that, but the test cases aren't really useful
enough to justify taking any trouble.

Per buildfarm.

11 years agoUpdate obsolete comment.
Tom Lane [Wed, 10 Oct 2012 21:04:37 +0000 (17:04 -0400)]
Update obsolete comment.

We no longer use GetNewOidWithIndex on pg_largeobject; rather,
pg_largeobject_metadata's regular OID column is considered the repository
of OIDs for large objects.  The special functionality is still needed for
TOAST tables however.

11 years agoCreate an improved FDW option validator function for contrib/dblink.
Tom Lane [Wed, 10 Oct 2012 20:53:08 +0000 (16:53 -0400)]
Create an improved FDW option validator function for contrib/dblink.

dblink now has its own validator function dblink_fdw_validator(), which is
better than the core function postgresql_fdw_validator() because it gets
the list of legal options from libpq instead of having a hard-wired list.

Make the dblink extension module provide a standard foreign data wrapper
dblink_fdw that encapsulates use of this validator, and recommend use of
that wrapper instead of making up wrappers on the fly.

Unfortunately, because ad-hoc wrappers *were* recommended practice
previously, it's not clear when we can get rid of postgresql_fdw_validator
without causing upgrade problems.  But this is a step in the right
direction.

Shigeru Hanada, reviewed by KaiGai Kohei

11 years agoUpdate obsolete text in fdwhandler.sgml.
Tom Lane [Wed, 10 Oct 2012 17:54:38 +0000 (13:54 -0400)]
Update obsolete text in fdwhandler.sgml.

Etsuro Fujita, with some wording adjustment by me.

11 years agoIn pg_upgrade, issue proper error message when we can't open PG_VERSION.
Bruce Momjian [Wed, 10 Oct 2012 17:53:00 +0000 (13:53 -0400)]
In pg_upgrade, issue proper error message when we can't open PG_VERSION.

Backpatch to 9.2.

11 years agoSet procost to 10 for each of the pg_foo_is_visible() functions.
Tom Lane [Wed, 10 Oct 2012 16:19:25 +0000 (12:19 -0400)]
Set procost to 10 for each of the pg_foo_is_visible() functions.

The idea here is to make sure the planner will evaluate these functions
last not first among the filter conditions in psql pattern search and
tab-completion queries.  We've discussed this several times, and there
was consensus to do it back in August, but we didn't want to do it just
before a release.  Now seems like a safer time.

No catversion bump, since this catalog change doesn't create a backend
incompatibility nor any regression test result changes.

11 years agoFix PGXS support for building loadable modules on AIX.
Tom Lane [Wed, 10 Oct 2012 01:04:06 +0000 (21:04 -0400)]
Fix PGXS support for building loadable modules on AIX.

Building a shlib on AIX requires use of the mkldexport.sh script, but we
failed to install that, preventing its use from non-source-tree contexts.
Also, Makefile.aix had the wrong idea about where to find the installed
copy of the postgres.imp symbol file used by AIX.

Per report from John Pierce.  Patch all the way back, since this has been
broken since the beginning of PGXS.

11 years agoRemove unnecessary overhead in backend's large-object operations.
Tom Lane [Tue, 9 Oct 2012 20:38:00 +0000 (16:38 -0400)]
Remove unnecessary overhead in backend's large-object operations.

Do read/write permissions checks at most once per large object descriptor,
not once per lo_read or lo_write call as before.  The repeated tests were
quite useless in the read case since the snapshot-based tests were
guaranteed to produce the same answer every time.  In the write case,
the extra tests could in principle detect revocation of write privileges
after a series of writes has started --- but there's a race condition there
anyway, since we'd check privileges before performing and certainly before
committing the write.  So there's no real advantage to checking every
single time, and we might as well redefine it as "only check the first
time".

On the same reasoning, remove the LargeObjectExists checks in inv_write
and inv_truncate.  We already checked existence when the descriptor was
opened, and checking again doesn't provide any real increment of safety
that would justify the cost.

11 years agoFix silly bug in previous refactoring.
Heikki Linnakangas [Tue, 9 Oct 2012 16:33:12 +0000 (19:33 +0300)]
Fix silly bug in previous refactoring.

I extracted the refactoring patch from a larger patch that contained other
changes too, but missed one unintentional change and didn't test enough...

11 years agoPut the logic to wait for WAL in standby mode to a separate function.
Heikki Linnakangas [Tue, 9 Oct 2012 16:20:17 +0000 (19:20 +0300)]
Put the logic to wait for WAL in standby mode to a separate function.

This is just refactoring with no user-visible effect, to make the code more
readable.

11 years agorestore permission bits
Alvaro Herrera [Tue, 9 Oct 2012 15:08:13 +0000 (12:08 -0300)]
restore permission bits

11 years agoRename USE_INLINE to PG_USE_INLINE
Alvaro Herrera [Tue, 9 Oct 2012 14:10:10 +0000 (11:10 -0300)]
Rename USE_INLINE to PG_USE_INLINE

The former name was too likely to conflict with symbols from external
headers; and, as seen in recent buildfarm failures in member spoonbill,
it has now happened at least in plpython.

11 years agoRemove stray newline in comment.
Heikki Linnakangas [Tue, 9 Oct 2012 10:05:59 +0000 (13:05 +0300)]
Remove stray newline in comment.

11 years agoUse tablespace_option consistently on doc page
Simon Riggs [Tue, 9 Oct 2012 07:29:37 +0000 (08:29 +0100)]
Use tablespace_option consistently on doc page

Fujii Masao

11 years agoAdd microsecs/op display to pg_test_fsync utility
Simon Riggs [Tue, 9 Oct 2012 07:15:23 +0000 (08:15 +0100)]
Add microsecs/op display to pg_test_fsync utility

e.g. fsync  2103.613 ops/sec (   475 microsecs/op)

Peter Geoghegan