]> granicus.if.org Git - postgresql/log
postgresql
11 years agoFix thinko in comment.
Tom Lane [Sun, 18 Aug 2013 00:36:29 +0000 (20:36 -0400)]
Fix thinko in comment.

11 years agoFix planner problems with LATERAL references in PlaceHolderVars.
Tom Lane [Sun, 18 Aug 2013 00:22:37 +0000 (20:22 -0400)]
Fix planner problems with LATERAL references in PlaceHolderVars.

The planner largely failed to consider the possibility that a
PlaceHolderVar's expression might contain a lateral reference to a Var
coming from somewhere outside the PHV's syntactic scope.  We had a previous
report of a problem in this area, which I tried to fix in a quick-hack way
in commit 4da6439bd8553059766011e2a42c6e39df08717f, but Antonin Houska
pointed out that there were still some problems, and investigation turned
up other issues.  This patch largely reverts that commit in favor of a more
thoroughly thought-through solution.  The new theory is that a PHV's
ph_eval_at level cannot be higher than its original syntactic level.  If it
contains lateral references, those don't change the ph_eval_at level, but
rather they create a lateral-reference requirement for the ph_eval_at join
relation.  The code in joinpath.c needs to handle that.

Another issue is that createplan.c wasn't handling nested PlaceHolderVars
properly.

In passing, push knowledge of lateral-reference checks for join clauses
into join_clause_is_movable_to.  This is mainly so that FDWs don't need
to deal with it.

This patch doesn't fix the original join-qual-placement problem reported by
Jeremy Evans (and indeed, one of the new regression test cases shows the
wrong answer because of that).  But the PlaceHolderVar problems need to be
fixed before that issue can be addressed, so committing this separately
seems reasonable.

11 years agorelease notes: update 9.3 major feature list
Bruce Momjian [Fri, 16 Aug 2013 22:01:05 +0000 (18:01 -0400)]
release notes: update 9.3 major feature list

Backpatch to 9.3.

11 years agorelease notes: Update to 9.3 git current
Bruce Momjian [Fri, 16 Aug 2013 20:54:18 +0000 (16:54 -0400)]
release notes: Update to 9.3 git current

Backpatch to 9.3, of course.

11 years agoMove more bgworker code to bgworker.c; also, some renaming.
Robert Haas [Fri, 16 Aug 2013 19:14:54 +0000 (15:14 -0400)]
Move more bgworker code to bgworker.c; also, some renaming.

Per discussion on pgsql-hackers.

Michael Paquier, slightly modified by me.  Original suggestion
from Amit Kapila.

11 years agopg_upgrade: shut down server after auth failure
Bruce Momjian [Fri, 16 Aug 2013 15:09:09 +0000 (11:09 -0400)]
pg_upgrade: shut down server after auth failure

Register atexit() server shutdown if pg_ctl successfully started the
server, but we can't connect to it.

Backpatch to 9.3.

Pavel Raiskup

11 years agoFix typo in comment.
Heikki Linnakangas [Fri, 16 Aug 2013 13:25:52 +0000 (16:25 +0300)]
Fix typo in comment.

11 years agoDon't allow ALTER MATERIALIZED VIEW ADD UNIQUE.
Kevin Grittner [Thu, 15 Aug 2013 18:14:48 +0000 (13:14 -0500)]
Don't allow ALTER MATERIALIZED VIEW ADD UNIQUE.

Was accidentally allowed, but not documented and lacked support
for rename or drop once created.

Per report from Noah Misch.

11 years agoAdd tab completion for \dx in psql
Magnus Hagander [Thu, 15 Aug 2013 16:24:25 +0000 (18:24 +0200)]
Add tab completion for \dx in psql

11 years agoTreat timeline IDs as unsigned in replication parser
Peter Eisentraut [Thu, 15 Aug 2013 03:18:49 +0000 (23:18 -0400)]
Treat timeline IDs as unsigned in replication parser

Timeline IDs are unsigned ints everywhere, except the replication parser
treated them as signed ints.

11 years agoImprove error message when view is not updatable
Peter Eisentraut [Thu, 15 Aug 2013 03:00:34 +0000 (23:00 -0400)]
Improve error message when view is not updatable

Avoid using the term "updatable" in confusing ways.  Suggest a trigger
first, before a rule.

11 years agoRemove ph_may_need from PlaceHolderInfo, with attendant simplifications.
Tom Lane [Wed, 14 Aug 2013 22:38:32 +0000 (18:38 -0400)]
Remove ph_may_need from PlaceHolderInfo, with attendant simplifications.

The planner logic that attempted to make a preliminary estimate of the
ph_needed levels for PlaceHolderVars seems to be completely broken by
lateral references.  Fortunately, the potential join order optimization
that this code supported seems to be of relatively little value in
practice; so let's just get rid of it rather than trying to fix it.

Getting rid of this allows fairly substantial simplifications in
placeholder.c, too, so planning in such cases should be a bit faster.

Issue noted while pursuing bugs reported by Jeremy Evans and Antonin
Houska, though this doesn't in itself fix either of their reported cases.
What this does do is prevent an Assert crash in the kind of query
illustrated by the added regression test.  (I'm not sure that the plan for
that query is stable enough across platforms to be usable as a regression
test output ... but we'll soon find out from the buildfarm.)

Back-patch to 9.3.  The problem case can't arise without LATERAL, so
no need to touch older branches.

11 years agodocs: document TRIM "comma" syntax
Bruce Momjian [Wed, 14 Aug 2013 21:26:36 +0000 (17:26 -0400)]
docs:  document TRIM "comma" syntax

This syntax is supported by the parser, but is non-standard.

_Not_ backpatched to 9.3 in case we change our minds.

11 years agoRemove Assert that matview is not in system schema from REFRESH.
Kevin Grittner [Wed, 14 Aug 2013 17:36:55 +0000 (12:36 -0500)]
Remove Assert that matview is not in system schema from REFRESH.

We don't want to prevent an extension which creates a matview from
being installed in pg_catalog.

Issue was raised by Hitoshi Harada.
Backpatched to 9.3.

11 years agoUpdate Emacs configuration
Peter Eisentraut [Wed, 14 Aug 2013 00:08:44 +0000 (20:08 -0400)]
Update Emacs configuration

Update emacs.samples with new configuration snippets that match pgindent
et al. formatting more accurately and follow Emacs Lisp best practices
better.

Add .dir-locals.el with a subset of that configuration for casual
editing and viewing.

Reviewed-by: Dimitri Fontaine <dimitri@2ndQuadrant.fr>
Reviewed-by: Noah Misch <noah@leadboat.com>
11 years agoEmit a log message if output is about to be redirected away from stderr.
Tom Lane [Tue, 13 Aug 2013 19:24:52 +0000 (15:24 -0400)]
Emit a log message if output is about to be redirected away from stderr.

We've seen multiple cases of people looking at the postmaster's original
stderr output to try to diagnose problems, not realizing/remembering that
their logging configuration is set up to send log messages somewhere else.
This seems particularly likely to happen in prepackaged distributions,
since many packagers patch the code to change the factory-standard logging
configuration to something more in line with their platform conventions.

In hopes of reducing confusion, emit a LOG message about this at the point
in startup where we are about to switch log output away from the original
stderr, providing a pointer to where to look instead.  This message will
appear as the last thing in the original stderr output.  (We might later
also try to emit such link messages when logging parameters are changed
on-the-fly; but that case seems to be both noticeably harder to do nicely,
and much less frequently a problem in practice.)

Per discussion, back-patch to 9.3 but not further.

11 years ago9.3 release notes: move foreign table item
Bruce Momjian [Tue, 13 Aug 2013 16:49:24 +0000 (12:49 -0400)]
9.3 release notes:  move foreign table item

Move item about foreign data wrappers supporting inserts/updates/deletes
to object manipulation.

From Etsuro Fujita

11 years agopg_dump: avoid schema qualification for ALTER ... OWNER
Bruce Momjian [Tue, 13 Aug 2013 15:45:56 +0000 (11:45 -0400)]
pg_dump:  avoid schema qualification for ALTER ... OWNER

We already use search_path to specify the schema, so there is no need
for pg_dump to schema-qualify the name.  Also remove dead code.

11 years agoPL/Python: Adjust the regression tests for Python 3.3
Peter Eisentraut [Sun, 11 Aug 2013 13:17:04 +0000 (09:17 -0400)]
PL/Python: Adjust the regression tests for Python 3.3

Similar to 2cfb1c6f77734db81b6e74bcae630f93b94f69be, the order in which
dictionary elements are printed is not reliable.  This reappeared in the
tests of the string representation of result objects.  Reduce the test
case to one result set column so that there is no question of order.

11 years agodocs: mention Julian is midnight _UTC_
Bruce Momjian [Sat, 10 Aug 2013 01:46:13 +0000 (21:46 -0400)]
docs:  mention Julian is midnight _UTC_
(Yes, there was no UTC back then, but we compute it that way.)
Backpatch to 9.3.

11 years agoDocs: Document to_*() Julian values are integers
Bruce Momjian [Fri, 9 Aug 2013 23:25:51 +0000 (19:25 -0400)]
Docs:  Document to_*() Julian values are integers
Backpatch to 9.3.
Per request from Marc Dahn

11 years agoDocument how auto_explain.log_timing can be changed.
Fujii Masao [Fri, 9 Aug 2013 13:13:28 +0000 (22:13 +0900)]
Document how auto_explain.log_timing can be changed.

11 years agoMessage punctuation and pluralization fixes
Peter Eisentraut [Fri, 9 Aug 2013 11:59:53 +0000 (07:59 -0400)]
Message punctuation and pluralization fixes

11 years agoMessage style improvements
Peter Eisentraut [Thu, 8 Aug 2013 02:48:40 +0000 (22:48 -0400)]
Message style improvements

11 years agoFix assertion failure by an immediate shutdown.
Fujii Masao [Wed, 7 Aug 2013 17:48:53 +0000 (02:48 +0900)]
Fix assertion failure by an immediate shutdown.

In PM_WAIT_DEAD_END state, checkpointer process must be dead already.
But an immediate shutdown could make postmaster's state machine
transition to PM_WAIT_DEAD_END state even if checkpointer process is
still running,  and which caused assertion failure. This bug was introduced
in commit 457d6cf049c57cabe9b46ea13f26138040a214ec.

This patch ensures that postmaster's state machine doesn't transition to
PM_WAIT_DEAD_END state in an immediate shutdown while checkpointer
process is running.

11 years agopgtest: allow passing parameters, e.g. -s/--silent
Bruce Momjian [Mon, 5 Aug 2013 23:59:52 +0000 (19:59 -0400)]
pgtest:  allow passing parameters, e.g. -s/--silent
Previously only -n was recognized.

11 years agoSimplify query_planner's API by having it return the top-level RelOptInfo.
Tom Lane [Mon, 5 Aug 2013 19:00:57 +0000 (15:00 -0400)]
Simplify query_planner's API by having it return the top-level RelOptInfo.

Formerly, query_planner returned one or possibly two Paths for the topmost
join relation, so that grouping_planner didn't see the join RelOptInfo
(at least not directly; it didn't have any hesitation about examining
cheapest_path->parent, though).  However, correct selection of the Paths
involved a significant amount of coupling between query_planner and
grouping_planner, a problem which has gotten worse over time.  It seems
best to give up on this API choice and instead return the topmost
RelOptInfo explicitly.  Then grouping_planner can pull out the Paths it
wants from the rel's path list.  In this way we can remove all knowledge
of grouping behaviors from query_planner.

The only real benefit of the old way is that in the case of an empty
FROM clause, we never made any RelOptInfos at all, just a Path.  Now
we have to gin up a dummy RelOptInfo to represent the empty FROM clause.
That's not a very big deal though.

While at it, simplify query_planner's API a bit more by having the caller
set up root->tuple_fraction and root->limit_tuples, rather than passing
those values as separate parameters.  Since query_planner no longer does
anything with either value, requiring it to fill the PlannerInfo fields
seemed pretty arbitrary.

This patch just rearranges code; it doesn't (intentionally) change any
behaviors.  Followup patches will do more interesting things.

11 years agoVarious cleanups for REFRESH MATERIALIZED VIEW CONCURRENTLY.
Kevin Grittner [Mon, 5 Aug 2013 14:57:56 +0000 (09:57 -0500)]
Various cleanups for REFRESH MATERIALIZED VIEW CONCURRENTLY.

Open and lock each index before checking definition in RMVC.  The
ExclusiveLock on the related table is not viewed as sufficient to
ensure that no changes are made to the index definition, and
invalidation messages from other backends might have been missed.
Additionally, use RelationGetIndexExpressions() and check for NIL
rather than doing our own loop.

Protect against redefinition of tid and rowvar operators in RMVC.
While working on this, noticed that the fixes for bugs found during
the CF made the UPDATE statement useless, since no rows could
qualify for that treatment any more.  Ripping out code to support
the UPDATE statement simplified the operator cleanups.

Change slightly confusing local field name.

Use meaningful alias names on queries in refresh_by_match_merge().

Per concerns of raised by Andres Freund and comments and
suggestions from Noah Misch.  Some additional issues remain, which
will be addressed separately.

11 years agoMake sure float4in/float8in accept all standard spellings of "infinity".
Tom Lane [Sat, 3 Aug 2013 16:39:47 +0000 (12:39 -0400)]
Make sure float4in/float8in accept all standard spellings of "infinity".

The C99 and POSIX standards require strtod() to accept all these spellings
(case-insensitively): "inf", "+inf", "-inf", "infinity", "+infinity",
"-infinity".  However, pre-C99 systems might accept only some or none of
these, and apparently Windows still doesn't accept "inf".  To avoid
surprising cross-platform behavioral differences, manually check for each
of these spellings if strtod() fails.  We were previously handling just
"infinity" and "-infinity" that way, but since C99 is most of the world
now, it seems likely that applications are expecting all these spellings
to work.

Per bug #8355 from Basil Peace.  It turns out this fix won't actually
resolve his problem, because Python isn't being this careful; but that
doesn't mean we shouldn't be.

11 years agoFix old visibility bug in HeapTupleSatisfiesDirty
Alvaro Herrera [Fri, 2 Aug 2013 18:34:56 +0000 (14:34 -0400)]
Fix old visibility bug in HeapTupleSatisfiesDirty

If a tuple is locked but not updated by a concurrent transaction,
HeapTupleSatisfiesDirty would return that transaction's Xid in xmax,
causing callers to wait on it, when it is not necessary (in fact, if the
other transaction had used a multixact instead of a plain Xid to mark
the tuple, HeapTupleSatisfiesDirty would have behave differently and
*not* returned the Xmax).

This bug was introduced in commit 3f7fbf85dc5b42, dated December 1998,
so it's almost 15 years old now.  However, it's hard to see this
misbehave, because before we had NOWAIT the only consequence of this is
that transactions would wait for slightly more time than necessary; so
it's not surprising that this hasn't been reported yet.

Craig Ringer and Andres Freund

11 years agoFix crash in error report of invalid tuple lock
Alvaro Herrera [Fri, 2 Aug 2013 16:49:03 +0000 (12:49 -0400)]
Fix crash in error report of invalid tuple lock

My tweak of these error messages in commit c359a1b082 contained the
thinko that a query would always have rowMarks set for a query
containing a locking clause.  Not so: when declaring a cursor, for
instance, rowMarks isn't set at the point we're checking, so we'd be
dereferencing a NULL pointer.

The fix is to pass the lock strength to the function raising the error,
instead of trying to reverse-engineer it.  The result not only is more
robust, but it also seems cleaner overall.

Per report from Robert Haas.

11 years agoFix typo in comment.
Robert Haas [Fri, 2 Aug 2013 13:15:42 +0000 (09:15 -0400)]
Fix typo in comment.

Etsuro Fujita

11 years agopg_test_fsync: expand ops/sec display
Bruce Momjian [Fri, 2 Aug 2013 04:45:19 +0000 (00:45 -0400)]
pg_test_fsync: expand ops/sec display
Expand ops/sec by two digits to maintain alignment on servers with fast
I/O subsystems, e.g. can now display < 10M ops/sec with consistent
alignment.

11 years agoImprove handling of pthread_mutex_lock error case
Stephen Frost [Thu, 1 Aug 2013 19:42:07 +0000 (15:42 -0400)]
Improve handling of pthread_mutex_lock error case

We should really be reporting a useful error along with returning
a valid return code if pthread_mutex_lock() throws an error for
some reason.  Add that and back-patch to 9.0 as the prior patch.

Pointed out by Alvaro Herrera

11 years agoImprove comments for IncrementalMaintenance DML enabling functions.
Kevin Grittner [Thu, 1 Aug 2013 19:31:09 +0000 (14:31 -0500)]
Improve comments for IncrementalMaintenance DML enabling functions.

Move the static functions after the comment and expand the comment.

Per complaint from Andres Freund, although using different comment
text.

11 years agoAssorted bgworker-related comment fixes.
Robert Haas [Thu, 1 Aug 2013 16:20:31 +0000 (12:20 -0400)]
Assorted bgworker-related comment fixes.

Per gripes by Amit Kapila.

11 years agoRemove SnapshotNow and HeapTupleSatisfiesNow.
Robert Haas [Thu, 1 Aug 2013 14:46:19 +0000 (10:46 -0400)]
Remove SnapshotNow and HeapTupleSatisfiesNow.

We now use MVCC catalog scans, and, per discussion, have eliminated
all other remaining uses of SnapshotNow, so that we can now get rid of
it.  This will break third-party code which is still using it, which
is intentional, as we want such code to be updated to do things the
new way.

11 years agoAdd locking around SSL_context usage in libpq
Stephen Frost [Thu, 1 Aug 2013 05:15:45 +0000 (01:15 -0400)]
Add locking around SSL_context usage in libpq

I've been working with Nick Phillips on an issue he ran into when
trying to use threads with SSL client certificates.  As it turns out,
the call in initialize_SSL() to SSL_CTX_use_certificate_chain_file()
will modify our SSL_context without any protection from other threads
also calling that function or being at some other point and trying to
read from SSL_context.

To protect against this, I've written up the attached (based on an
initial patch from Nick and much subsequent discussion) which puts
locks around SSL_CTX_use_certificate_chain_file() and all of the other
users of SSL_context which weren't already protected.

Nick Phillips, much reworked by Stephen Frost

Back-patch to 9.0 where we started loading the cert directly instead of
using a callback.

11 years agoAllow a context to be passed in for error handling
Stephen Frost [Thu, 1 Aug 2013 05:07:20 +0000 (01:07 -0400)]
Allow a context to be passed in for error handling

As pointed out by Tom Lane, we can allow other users of the error
handler callbacks to provide their own memory context by adding
the context to use to ErrorData and using that instead of explicitly
using ErrorContext.

This then allows GetErrorContextStack() to be called from inside
exception handlers, so modify plpgsql to take advantage of that and
add an associated regression test for it.

11 years agoFix mis-indented lines
Alvaro Herrera [Wed, 31 Jul 2013 21:57:15 +0000 (17:57 -0400)]
Fix mis-indented lines

Per Coverity

11 years agoFix a couple of inconsequential typos in new header
Alvaro Herrera [Wed, 31 Jul 2013 21:57:00 +0000 (17:57 -0400)]
Fix a couple of inconsequential typos in new header

11 years agopg_dump/pg_dumpall: remove unnecessary SQL trailing semicolons
Bruce Momjian [Wed, 31 Jul 2013 15:37:17 +0000 (11:37 -0400)]
pg_dump/pg_dumpall:  remove unnecessary SQL trailing semicolons
Patch by Ian Lawrence Barwick

11 years agoFix regexp_matches() handling of zero-length matches.
Tom Lane [Wed, 31 Jul 2013 15:31:22 +0000 (11:31 -0400)]
Fix regexp_matches() handling of zero-length matches.

We'd find the same match twice if it was of zero length and not immediately
adjacent to the previous match.  replace_text_regexp() got similar cases
right, so adjust this search logic to match that.  Note that even though
the regexp_split_to_xxx() functions share this code, they did not display
equivalent misbehavior, because the second match would be considered
degenerate and ignored.

Jeevan Chalke, with some cosmetic changes by me.

11 years agoFix typo in comment.
Fujii Masao [Wed, 31 Jul 2013 13:53:20 +0000 (22:53 +0900)]
Fix typo in comment.

Hitoshi Harada

11 years agoFix inaccurate description of tablespace.
Fujii Masao [Wed, 31 Jul 2013 13:35:12 +0000 (22:35 +0900)]
Fix inaccurate description of tablespace.

Currently we don't need to update the pg_tablespace catalog
after redefining the symbolic links to the tablespaces
because pg_tablespace.spclocation column was removed in
PostgreSQL 9.2.

Back patch to 9.2 where pg_tablespace.spclocation was removed.

Ian Barwick, with minor change by me.

11 years agoRestore REINDEX constraint validation.
Noah Misch [Tue, 30 Jul 2013 22:36:52 +0000 (18:36 -0400)]
Restore REINDEX constraint validation.

Refactoring as part of commit 8ceb24568054232696dddc1166a8563bc78c900a
had the unintended effect of making REINDEX TABLE and REINDEX DATABASE
no longer validate constraints enforced by the indexes in question;
REINDEX INDEX still did so.  Indexes marked invalid remained so, and
constraint violations arising from data corruption went undetected.
Back-patch to 9.0, like the causative commit.

11 years agopg_upgrade: clarify C comment about Windows thread struct pointers
Bruce Momjian [Tue, 30 Jul 2013 13:23:31 +0000 (09:23 -0400)]
pg_upgrade: clarify C comment about Windows thread struct pointers
Backpatch to 9.3 to keep source trees consistent.

11 years agoSync ECPG with WITH ORDINALITY changes
Greg Stark [Mon, 29 Jul 2013 22:43:44 +0000 (23:43 +0100)]
Sync ECPG with WITH ORDINALITY changes

11 years agoAdd SQL Standard WITH ORDINALITY support for UNNEST (and any other SRF)
Greg Stark [Mon, 29 Jul 2013 15:38:01 +0000 (16:38 +0100)]
Add SQL Standard WITH ORDINALITY support for UNNEST (and any other SRF)

Author: Andrew Gierth, David Fetter
Reviewers: Dean Rasheed, Jeevan Chalke, Stephen Frost

11 years agoFix contrib/cube and contrib/seg to build with bison 3.0.
Tom Lane [Mon, 29 Jul 2013 14:42:37 +0000 (10:42 -0400)]
Fix contrib/cube and contrib/seg to build with bison 3.0.

These modules used the YYPARSE_PARAM macro, which has been deprecated
by the bison folk since 1.875, and which they finally removed in 3.0.
Adjust the code to use the replacement facility, %parse-param, which
is a much better solution anyway since it allows specification of the
type of the extra parser parameter.  We can thus get rid of a lot of
unsightly casting.

Back-patch to all active branches, since somebody might try to build
a back branch with up-to-date tools.

11 years agoMessage style improvements
Peter Eisentraut [Sun, 28 Jul 2013 10:59:09 +0000 (06:59 -0400)]
Message style improvements

11 years agopg_upgrade: fix -j race condition on Windows
Bruce Momjian [Sat, 27 Jul 2013 19:00:58 +0000 (15:00 -0400)]
pg_upgrade: fix -j race condition on Windows
Pg_Upgrade cannot write the command string to the log file and then call
system() to write to the same file without causing occasional file-share
errors on Windows.  So instead, write the command string to the log file
after system(), in those cases.
Backpatch to 9.3.

11 years agopg_upgrade docs: don't use cluster for binary/lib
Bruce Momjian [Fri, 26 Jul 2013 17:52:01 +0000 (13:52 -0400)]
pg_upgrade docs: don't use cluster for binary/lib
In a few cases, pg_upgrade said old/new cluster location when it meant
old/new Postgres install location, so fix those.
Per private email report

11 years agoPrevent leakage of SPI tuple tables during subtransaction abort.
Tom Lane [Thu, 25 Jul 2013 20:45:43 +0000 (16:45 -0400)]
Prevent leakage of SPI tuple tables during subtransaction abort.

plpgsql often just remembers SPI-result tuple tables in local variables,
and has no mechanism for freeing them if an ereport(ERROR) causes an escape
out of the execution function whose local variable it is.  In the original
coding, that wasn't a problem because the tuple table would be cleaned up
when the function's SPI context went away during transaction abort.
However, once plpgsql grew the ability to trap exceptions, repeated
trapping of errors within a function could result in significant
intra-function-call memory leakage, as illustrated in bug #8279 from
Chad Wagner.

We could fix this locally in plpgsql with a bunch of PG_TRY/PG_CATCH
coding, but that would be tedious, probably slow, and prone to bugs of
omission; moreover it would do nothing for similar risks elsewhere.
What seems like a better plan is to make SPI itself responsible for
freeing tuple tables at subtransaction abort.  This patch attacks the
problem that way, keeping a list of live tuple tables within each SPI
function context.  Currently, such freeing is automatic for tuple tables
made within the failed subtransaction.  We might later add a SPI call to
mark a tuple table as not to be freed this way, allowing callers to opt
out; but until someone exhibits a clear use-case for such behavior, it
doesn't seem worth bothering.

A very useful side-effect of this change is that SPI_freetuptable() can
now defend itself against bad calls, such as duplicate free requests;
this should make things more robust in many places.  (In particular,
this reduces the risks involved if a third-party extension contains
now-redundant SPI_freetuptable() calls in error cleanup code.)

Even though the leakage problem is of long standing, it seems imprudent
to back-patch this into stable branches, since it does represent an API
semantics change for SPI users.  We'll patch this in 9.3, but live with
the leakage in older branches.

11 years agopgstattuple: Doc update for previous commit.
Robert Haas [Thu, 25 Jul 2013 20:36:49 +0000 (16:36 -0400)]
pgstattuple: Doc update for previous commit.

In my previous change to make pgstattuple use SnapshotDirty rather
than SnapshotNow, I failed to notice that the documenation also
needed to be updated to match.  Fix.

11 years agoChange currtid functions to use an MVCC snapshot, not SnapshotNow.
Robert Haas [Thu, 25 Jul 2013 20:32:02 +0000 (16:32 -0400)]
Change currtid functions to use an MVCC snapshot, not SnapshotNow.

This has a slight performance cost, but the only known consumers
of these functions, known at the SQL level as currtid and currtid2,
is pgsql-odbc; whose usage, we hope, is not sufficiently intensive
to make this a problem.

Per discussion.

11 years agopgstattuple: Use SnapshotDirty, not SnapshotNow.
Robert Haas [Thu, 25 Jul 2013 20:16:42 +0000 (16:16 -0400)]
pgstattuple: Use SnapshotDirty, not SnapshotNow.

Tuples belonging to uncommitted transactions should not be
counted as dead.

This is arguably a bug fix that should be back-patched, but
as no one ever noticed until it came time to try to get rid
of SnapshotNow, I'm only doing this in master for now.

11 years agoDon't use SnapshotNow in get_actual_variable_range.
Robert Haas [Thu, 25 Jul 2013 18:30:00 +0000 (14:30 -0400)]
Don't use SnapshotNow in get_actual_variable_range.

Instead, use the active snapshot.  Per Tom Lane, this function is
most interested in knowing the range of tuples our scan will actually
see.

This is another step towards full removal of SnapshotNow.

11 years agoFix configure probe for sys/ucred.h.
Tom Lane [Thu, 25 Jul 2013 15:39:08 +0000 (11:39 -0400)]
Fix configure probe for sys/ucred.h.

The configure script's test for <sys/ucred.h> did not work on OpenBSD,
because on that platform <sys/param.h> has to be included first.
As a result, socket peer authentication was disabled on that platform.
Problem introduced in commit be4585b1c27ac5dbdd0d61740d18f7ad9a00e268.

Andres Freund, slightly simplified by me.

11 years agopg_upgrade: adjust umask() calls
Bruce Momjian [Thu, 25 Jul 2013 15:33:15 +0000 (11:33 -0400)]
pg_upgrade:  adjust umask() calls
Since pg_upgrade -j on Windows uses threads, calling umask()
before/after opening a file via fopen_priv() is no longer possible, so
set umask() as we enter the thread-creating loop, and reset it on exit.
Also adjust internal fopen_priv() calls to just use fopen().
Backpatch to 9.3beta.

11 years agoImprovements to GetErrorContextStack()
Stephen Frost [Thu, 25 Jul 2013 13:41:55 +0000 (09:41 -0400)]
Improvements to GetErrorContextStack()

As GetErrorContextStack() borrowed setup and tear-down code from other
places, it was less than clear that it must only be called as a
top-level entry point into the error system and can't be called by an
exception handler (unlike the rest of the error system, which is set up
to be reentrant-safe).

Being called from an exception handler is outside the charter of
GetErrorContextStack(), so add a bit more protection against it,
improve the comments addressing why we have to set up an errordata
stack for this function at all, and add a few more regression tests.

Lack of clarity pointed out by Tom Lane; all bugs are mine.

11 years agopg_upgrade: fix initialization of thread argument
Bruce Momjian [Thu, 25 Jul 2013 02:01:14 +0000 (22:01 -0400)]
pg_upgrade: fix initialization of thread argument
Reorder initialization of thread argument marker to it happens before
reap_child() is called.
Backpatch to 9.3.

11 years agoAdd GET DIAGNOSTICS ... PG_CONTEXT in PL/PgSQL
Stephen Frost [Wed, 24 Jul 2013 22:53:27 +0000 (18:53 -0400)]
Add GET DIAGNOSTICS ... PG_CONTEXT in PL/PgSQL

This adds the ability to get the call stack as a string from within a
PL/PgSQL function, which can be handy for logging to a table, or to
include in a useful message to an end-user.

Pavel Stehule, reviewed by Rushabh Lathia and rather heavily whacked
around by Stephen Frost.

11 years agoImprove ilist.h's support for deletion of slist elements during iteration.
Tom Lane [Wed, 24 Jul 2013 21:41:55 +0000 (17:41 -0400)]
Improve ilist.h's support for deletion of slist elements during iteration.

Previously one had to use slist_delete(), implying an additional scan of
the list, making this infrastructure considerably less efficient than
traditional Lists when deletion of element(s) in a long list is needed.
Modify the slist_foreach_modify() macro to support deleting the current
element in O(1) time, by keeping a "prev" pointer in addition to "cur"
and "next".  Although this makes iteration with this macro a bit slower,
no real harm is done, since in any scenario where you're not going to
delete the current list element you might as well just use slist_foreach
instead.  Improve the comments about when to use each macro.

Back-patch to 9.3 so that we'll have consistent semantics in all branches
that provide ilist.h.  Note this is an ABI break for callers of
slist_foreach_modify().

Andres Freund and Tom Lane

11 years agopg_upgrade: more Windows parallel/-j fixes
Bruce Momjian [Wed, 24 Jul 2013 17:15:47 +0000 (13:15 -0400)]
pg_upgrade:  more Windows parallel/-j fixes
More fixes to handle Windows thread parameter passing.
Backpatch to 9.3 beta.
Patch originally from Andrew Dunstan

11 years agopg_upgrade: fix parallel/-j crash on Windows
Bruce Momjian [Wed, 24 Jul 2013 14:00:37 +0000 (10:00 -0400)]
pg_upgrade: fix parallel/-j crash on Windows
This fixes the problem of passing the wrong function pointer when doing
parallel copy/link operations on Windows.
Backpatched to 9.3beta.
Found and patch supplied by Andrew Dunstan

11 years agoFix booltestsel() for case where we have NULL stats but not MCV stats.
Tom Lane [Wed, 24 Jul 2013 04:44:09 +0000 (00:44 -0400)]
Fix booltestsel() for case where we have NULL stats but not MCV stats.

In a boolean column that contains mostly nulls, ANALYZE might not find
enough non-null values to populate the most-common-values stats,
but it would still create a pg_statistic entry with stanullfrac set.
The logic in booltestsel() for this situation did the wrong thing for
"col IS NOT TRUE" and "col IS NOT FALSE" tests, forgetting that null
values would satisfy these tests (so that the true selectivity would
be close to one, not close to zero).  Per bug #8274.

Fix by Andrew Gierth, some comment-smithing by me.

11 years agoMove strip_implicit_coercions() from optimizer to nodeFuncs.c.
Tom Lane [Tue, 23 Jul 2013 22:21:19 +0000 (18:21 -0400)]
Move strip_implicit_coercions() from optimizer to nodeFuncs.c.

Use of this function has spread into the parser and rewriter, so it seems
like time to pull it out of the optimizer and put it into the more central
nodeFuncs module.  This eliminates the need to #include optimizer/clauses.h
in most of the calling files, demonstrating that this function was indeed a
bit outside the normal code reference patterns.

11 years agoFurther hacking on ruleutils' new column-alias-assignment code.
Tom Lane [Tue, 23 Jul 2013 21:54:18 +0000 (17:54 -0400)]
Further hacking on ruleutils' new column-alias-assignment code.

After further thought about implicit coercions appearing in a joinaliasvars
list, I realized that they represent an additional reason why we might need
to reference the join output column directly instead of referencing an
underlying column.  Consider SELECT x FROM t1 LEFT JOIN t2 USING (x) where
t1.x is of type date while t2.x is of type timestamptz.  The merged output
variable is of type timestamptz, but it won't go to null when t2 does,
therefore neither t1.x nor t2.x is a valid substitute reference.

The code in get_variable() actually gets this case right, since it knows
it shouldn't look through a coercion, but we failed to ensure that the
unqualified output column name would be globally unique.  To fix, modify
the code that trawls for a dangerous situation so that it actually scans
through an unnamed join's joinaliasvars list to see if there are any
non-simple-Var entries.

11 years agoCheck for NULL result from strdup
Alvaro Herrera [Tue, 23 Jul 2013 21:23:28 +0000 (17:23 -0400)]
Check for NULL result from strdup

Per Coverity Scan

11 years agoChange post-rewriter representation of dropped columns in joinaliasvars.
Tom Lane [Tue, 23 Jul 2013 20:23:01 +0000 (16:23 -0400)]
Change post-rewriter representation of dropped columns in joinaliasvars.

It's possible to drop a column from an input table of a JOIN clause in a
view, if that column is nowhere actually referenced in the view.  But it
will still be there in the JOIN clause's joinaliasvars list.  We used to
replace such entries with NULL Const nodes, which is handy for generation
of RowExpr expansion of a whole-row reference to the view.  The trouble
with that is that it can't be distinguished from the situation after
subquery pull-up of a constant subquery output expression below the JOIN.
Instead, replace such joinaliasvars with null pointers (empty expression
trees), which can't be confused with pulled-up expressions.  expandRTE()
still emits the old convention, though, for convenience of RowExpr
generation and to reduce the risk of breaking extension code.

In HEAD and 9.3, this patch also fixes a problem with some new code in
ruleutils.c that was failing to cope with implicitly-casted joinaliasvars
entries, as per recent report from Feike Steenbergen.  That oversight was
because of an inadequate description of the data structure in parsenodes.h,
which I've now corrected.  There were some pre-existing oversights of the
same ilk elsewhere, which I believe are now all fixed.

11 years agoTweak FOR UPDATE/SHARE error message wording (again)
Alvaro Herrera [Tue, 23 Jul 2013 18:03:09 +0000 (14:03 -0400)]
Tweak FOR UPDATE/SHARE error message wording (again)

In commit 0ac5ad5134 I changed some error messages from "FOR
UPDATE/SHARE" to a rather long gobbledygook which nobody liked.  Then,
in commit cb9b66d31 I changed them again, but the alternative chosen
there was deemed suboptimal by Peter Eisentraut, who in message
1373937980.20441.8.camel@vanquo.pezone.net proposed an alternative
involving a dynamically-constructed string based on the actual locking
strength specified in the SQL command.  This patch implements that
suggestion.

11 years agoUse InvalidSnapshot, now SnapshotNow, as the default snapshot.
Robert Haas [Tue, 23 Jul 2013 14:58:32 +0000 (10:58 -0400)]
Use InvalidSnapshot, now SnapshotNow, as the default snapshot.

As far as I can determine, there's no code in the core distribution
that fails to explicitly set the snapshot of a scan or executor
state.  If there is any such code, this will probably cause it to
seg fault; friendlier suggestions were discussed on pgsql-hackers,
but there was no consensus that anything more than this was
needed.

This is another step towards the hoped-for complete removal of
SnapshotNow.

11 years agoAdditional regression tests for ALTER OPERATOR FAMILY.
Robert Haas [Tue, 23 Jul 2013 12:53:21 +0000 (08:53 -0400)]
Additional regression tests for ALTER OPERATOR FAMILY.

Robins Tharakan, reviewed by Szymon Guz

11 years agoecpg: Move function prototype into header file
Peter Eisentraut [Tue, 23 Jul 2013 01:02:56 +0000 (21:02 -0400)]
ecpg: Move function prototype into header file

PGTYPEStimestamp_defmt_scan() was declared twice inside different .c
files, with slightly different prototypes.  Move it into a header file
and correct the prototype.

11 years agodoc: Remove tab from SGML file
Peter Eisentraut [Tue, 23 Jul 2013 01:02:12 +0000 (21:02 -0400)]
doc: Remove tab from SGML file

11 years agoAdd --rate option.
Tatsuo Ishii [Mon, 22 Jul 2013 23:40:22 +0000 (08:40 +0900)]
Add --rate option.

This controls the target transaction rate to certain tps, rather than
maximum. Patch contributed by Fabien COELHO, reviewed by Greg Smith,
and slight editing by me.

11 years agoFix cache flush hazard in ExecRefreshMatView.
Robert Haas [Mon, 22 Jul 2013 22:10:05 +0000 (18:10 -0400)]
Fix cache flush hazard in ExecRefreshMatView.

Andres Freund

11 years agopgrowlocks: Use GetActiveSnapshot() rather than SnapshotNow.
Robert Haas [Mon, 22 Jul 2013 20:01:17 +0000 (16:01 -0400)]
pgrowlocks: Use GetActiveSnapshot() rather than SnapshotNow.

Per discussion, it's desirable to eliminate all remaining uses of
SnapshotNow, because it has unpleasant semantics: race conditions
can result in seeing multiple versions of a concurrently updated
row, or none at all.  By using GetActiveSnapshot() here, callers
will see exactly those rows that would have been visible if the
invoking query had scanned the table using, for example, a SELECT
statement.

This is slightly different from the old behavior, because commits
that happen concurrently with the scan will not affect the results.
In REPEATABLE READ or SERIALIZABLE modes, where transaction
snapshots are used, commits that have happened since the start of
the transaction will also not affect the results.  It is hoped
that this minor incompatibility will be thought an improvement,
or at least no worse than what we did before.

11 years agoRemove bgw_sighup and bgw_sigterm.
Robert Haas [Mon, 22 Jul 2013 18:13:00 +0000 (14:13 -0400)]
Remove bgw_sighup and bgw_sigterm.

Per discussion on pgsql-hackers, these aren't really needed.  Interim
versions of the background worker patch had the worker starting with
signals already unblocked, which would have made this necessary.
But the final version does not, so we don't really need it; and it
doesn't work well with the new facility for starting dynamic background
workers, so just rip it out.

Also per discussion on pgsql-hackers, back-patch this change to 9.3.
It's best to get the API break out of the way before we do an
official release of this facility, to avoid more pain for extension
authors later.

11 years agoAdjust HeapTupleSatisfies* routines to take a HeapTuple.
Robert Haas [Mon, 22 Jul 2013 17:26:33 +0000 (13:26 -0400)]
Adjust HeapTupleSatisfies* routines to take a HeapTuple.

Previously, these functions took a HeapTupleHeader, but upcoming
patches for logical replication will introduce new a new snapshot
type under which the tuple's TID will be used to lookup (CMIN, CMAX)
for visibility determination purposes.  This makes that information
available.  Code churn is minimal since HeapTupleSatisfiesVisibility
took the HeapTuple anyway, and deferenced it before calling the
satisfies function.

Independently of logical replication, this allows t_tableOid and
t_self to be cross-checked via assertions in tqual.c.  This seems
like a useful way to make sure that all callers are setting these
values properly, which has been previously put forward as
desirable.

Andres Freund, reviewed by Álvaro Herrera

11 years agoSilence compiler warning on an unused variable
Alvaro Herrera [Mon, 22 Jul 2013 17:15:13 +0000 (13:15 -0400)]
Silence compiler warning on an unused variable

Also, tweak wording in comments (per Andres) and documentation (myself)
to point out that it's the database's default tablespace that can be
passed as 0, not DEFAULTTABLESPACE_OID.  Robert Haas noticed the bug in
the code, but didn't update the accompanying prose.

11 years agoAdd infrastructure for mapping relfilenodes to relation OIDs.
Robert Haas [Mon, 22 Jul 2013 14:34:34 +0000 (10:34 -0400)]
Add infrastructure for mapping relfilenodes to relation OIDs.

Future patches are expected to introduce logical replication that
works by decoding WAL.  WAL contains relfilenodes rather than relation
OIDs, so this infrastructure will be needed to find the relation OID
based on WAL contents.

If logical replication does not make it into this release, we probably
should consider reverting this, since it will add some overhead to DDL
operations that create new relations.  One additional index insert per
pg_class row is not a large overhead, but it's more than zero.
Another way of meeting the needs of logical replication would be to
the relation OID to WAL, but that would burden DML operations, not
only DDL.

Andres Freund, with some changes by me.  Design review, in earlier
versions, by Álvaro Herrera.

11 years agoFix error handling in PLy_spi_execute_fetch_result().
Tom Lane [Sat, 20 Jul 2013 16:44:37 +0000 (12:44 -0400)]
Fix error handling in PLy_spi_execute_fetch_result().

If an error is thrown out of the datatype I/O functions called by this
function, we need to do subtransaction cleanup, which the previous coding
entirely failed to do.  Fortunately, both existing callers of this function
already have proper cleanup logic, so re-throwing the exception is enough.

Also, postpone creation of the resultset tupdesc until after the I/O
conversions are complete, so that we won't leak memory in TopMemoryContext
when such an error happens.

11 years agoClean up new JSON API typedefs
Peter Eisentraut [Sat, 20 Jul 2013 10:38:31 +0000 (06:38 -0400)]
Clean up new JSON API typedefs

The new JSON API uses a bit of an unusual typedef scheme, where for
example OkeysState is a pointer to okeysState.  And that's not applied
consistently either.  Change that to the more usual PostgreSQL style
where struct typedefs are upper case, and use pointers explicitly.

11 years agoFix HeapTupleSatisfiesVacuum on aborted updater xacts
Alvaro Herrera [Fri, 19 Jul 2013 22:35:07 +0000 (18:35 -0400)]
Fix HeapTupleSatisfiesVacuum on aborted updater xacts

By using only the macro that checks infomask bits
HEAP_XMAX_IS_LOCKED_ONLY to verify whether a multixact is not an
updater, and not the full HeapTupleHeaderIsOnlyLocked, it would come to
the wrong result in case of a multixact containing an aborted update;
therefore returning the wrong result code.  This would cause predicate.c
to break completely (as in bug report #8273 from David Leverton), and
certain index builds would misbehave.  As far as I can tell, other
callers of the bogus routine would make harmless mistakes or not be
affected by the difference at all; so this was a pretty narrow case.

Also, no other user of the HEAP_XMAX_IS_LOCKED_ONLY macro is as
careless; they all check specifically for the HEAP_XMAX_IS_MULTI case,
and they all verify whether the updater is InvalidXid before concluding
that it's a valid updater.  So there doesn't seem to be any similar bug.

11 years agodoc: Fix typos in conversion names.
Robert Haas [Fri, 19 Jul 2013 14:23:12 +0000 (10:23 -0400)]
doc: Fix typos in conversion names.

David Christensen

11 years agoInitialize day of year value.
Michael Meskes [Fri, 19 Jul 2013 06:59:20 +0000 (08:59 +0200)]
Initialize day of year value.

There are cases where the day of year value in struct tm is used, but it never
got calculated. Problem found by Coverity scan.

11 years agoAdd checks for valid multibyte character length in UtfToLocal, LocalToUtf.
Tom Lane [Fri, 19 Jul 2013 01:55:38 +0000 (21:55 -0400)]
Add checks for valid multibyte character length in UtfToLocal, LocalToUtf.

This is mainly to suppress "uninitialized variable" warnings from very
recent versions of gcc.  But it seems like a good robustness thing anyway,
not to mention that we might someday decide to support 6-byte UTF8.

Per report from Karol Trzcionka.  No back-patch since there's no reason
at the moment to think this is more than cosmetic.

11 years agoFix regex match failures for backrefs combined with non-greedy quantifiers.
Tom Lane [Fri, 19 Jul 2013 01:22:37 +0000 (21:22 -0400)]
Fix regex match failures for backrefs combined with non-greedy quantifiers.

An ancient logic error in cfindloop() could cause the regex engine to fail
to find matches that begin later than the start of the string.  This
function is only used when the regex pattern contains a back reference,
and so far as we can tell the error is only reachable if the pattern is
non-greedy (i.e. its first quantifier uses the ? modifier).  Furthermore,
the actual match must begin after some potential match that satisfies the
DFA but then fails the back-reference's match test.

Reported and fixed by Jeevan Chalke, with cosmetic adjustments by me.

11 years agoWITH CHECK OPTION support for auto-updatable VIEWs
Stephen Frost [Thu, 18 Jul 2013 21:10:16 +0000 (17:10 -0400)]
WITH CHECK OPTION support for auto-updatable VIEWs

For simple views which are automatically updatable, this patch allows
the user to specify what level of checking should be done on records
being inserted or updated.  For 'LOCAL CHECK', new tuples are validated
against the conditionals of the view they are being inserted into, while
for 'CASCADED CHECK' the new tuples are validated against the
conditionals for all views involved (from the top down).

This option is part of the SQL specification.

Dean Rasheed, reviewed by Pavel Stehule

11 years agoFix typo in update scripts for some contrib modules.
Fujii Masao [Thu, 18 Jul 2013 19:13:01 +0000 (04:13 +0900)]
Fix typo in update scripts for some contrib modules.

11 years agoFix pgstattuple functions to use regclass-type as the argument.
Fujii Masao [Thu, 18 Jul 2013 18:50:20 +0000 (03:50 +0900)]
Fix pgstattuple functions to use regclass-type as the argument.

This allows us to specify the target relation with several expressions,
'relname', 'schemaname.relname' and OID in all pgstattuple functions.
pgstatindex() and pg_relpages() could not accept OID as the argument
so far.

Per discussion on -hackers, we decided to keep two types of interfaces,
with regclass-type and TEXT-type argument, for each pgstattuple
function because of the backward-compatibility issue. The functions
which have TEXT-type argument will be deprecated in the future release.

Patch by Satoshi Nagayasu, reviewed by Rushabh Lathia and Fujii Masao.

11 years agoMove checking an explicit VARIADIC "any" argument into the parser.
Andrew Dunstan [Thu, 18 Jul 2013 15:52:12 +0000 (11:52 -0400)]
Move checking an explicit VARIADIC "any" argument into the parser.

This is more efficient and simpler . It does mean that an untyped NULL
can no longer be used in such cases, which should be mentioned in
Release Notes, but doesn't seem a terrible loss. The workaround is to
cast the NULL to some array type.

Pavel Stehule, reviewed by Jeevan Chalke.

11 years agoFix direct access to Relation->rd_indpred.
Tom Lane [Thu, 18 Jul 2013 05:01:53 +0000 (01:01 -0400)]
Fix direct access to Relation->rd_indpred.

Should use RelationGetIndexPredicate(), since rd_indpred is just a cache
that is not computed until/unless demanded.  Per buildfarm failure on
CLOBBER_CACHE_ALWAYS animals; diagnosis and fix by Hitoshi Harada.

11 years agodoc: Remove tab from SGML file
Peter Eisentraut [Wed, 17 Jul 2013 23:41:45 +0000 (19:41 -0400)]
doc: Remove tab from SGML file

11 years agoFix a few problems in barrier.h.
Tom Lane [Wed, 17 Jul 2013 22:37:39 +0000 (18:37 -0400)]
Fix a few problems in barrier.h.

On HPPA, implement pg_memory_barrier() as pg_compiler_barrier(), which
should be correct since this arch doesn't do memory access reordering,
and is anyway better than the completely-nonfunctional-on-this-arch
dummy_spinlock code.  (But note this patch only fixes things for gcc,
not for builds with HP's compiler.)

Also, fix incorrect default definition of pg_memory_barrier as a macro
requiring an argument.

Also, fix incorrect spelling of "#elif" as "#else if" in icc code path
(spotted by pgindent).

This doesn't come close to fixing all of the functional and stylistic
deficiencies in barrier.h, but at least it un-breaks my personal build.
Now that we're actually using barriers in the code, this file is going
to need some serious attention.

11 years agoFix variable names mentioned in comment to match the code.
Heikki Linnakangas [Wed, 17 Jul 2013 20:27:15 +0000 (23:27 +0300)]
Fix variable names mentioned in comment to match the code.

Also, in another comment, explain why holding an insertion slot is a
critical section.

Per review by Amit Kapila.

11 years agoFix assert failure at end of recovery, broken by XLogInsert scaling patch.
Heikki Linnakangas [Wed, 17 Jul 2013 19:57:48 +0000 (22:57 +0300)]
Fix assert failure at end of recovery, broken by XLogInsert scaling patch.

Initialization of the first XLOG buffer at end-of-recovery was broken for
the case that the last read WAL record ended at a page boundary. Instead of
trying to copy the last full xlog page to the buffer cache in that case,
just set shared state so that the next page is initialized when the first
WAL record after startup is inserted. (that's what we did in earlier
version, too)

To make the shared state required for that case less surprising, replace the
XLogCtl->curridx variable, which was the index of the latest initialized
buffer, with an XLogRecPtr of how far the buffers have been initialized.
That also allows us to get rid of the XLogRecEndPtrToBufIdx macro.

While we're at it, make a similar change for XLogCtl->Write.curridx, getting
rid of that variable and calculating the next buffer to write from
XLogCtl->LogwrtResult instead.

11 years agoFix end-of-loop optimization in pglz_find_match() function.
Heikki Linnakangas [Wed, 17 Jul 2013 17:24:28 +0000 (20:24 +0300)]
Fix end-of-loop optimization in pglz_find_match() function.

After the recent pglz optimization patch, the next/prev pointers in the
hash table are never NULL, INVALID_ENTRY_PTR is used to represent invalid
entries instead. The end-of-loop check in pglz_find_match() function didn't
get the memo. The result was the same from a correctness point of view, but
because the NULL-check would never fail, the tiny optimization turned into
a pessimization.

Reported by Stephen Frost, using Coverity scanner.