]> granicus.if.org Git - postgresql/log
postgresql
11 years agoRemove ph_may_need from PlaceHolderInfo, with attendant simplifications.
Tom Lane [Wed, 14 Aug 2013 22:38:36 +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 agoRemove Assert that matview is not in system schema from REFRESH.
Kevin Grittner [Wed, 14 Aug 2013 17:43:01 +0000 (12:43 -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 agoEmit a log message if output is about to be redirected away from stderr.
Tom Lane [Tue, 13 Aug 2013 19:24:56 +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:51:26 +0000 (12:51 -0400)]
9.3 release notes:  move foreign table item

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

Backpatch to 9.3.

From Etsuro Fujita

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:14:26 +0000 (22:14 +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 agoMake sure float4in/float8in accept all standard spellings of "infinity".
Tom Lane [Sat, 3 Aug 2013 16:39:51 +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 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 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 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 regexp_matches() handling of zero-length matches.
Tom Lane [Wed, 31 Jul 2013 15:31:26 +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 inaccurate description of tablespace.
Fujii Masao [Wed, 31 Jul 2013 13:36:39 +0000 (22:36 +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 agoFix contrib/cube and contrib/seg to build with bison 3.0.
Tom Lane [Mon, 29 Jul 2013 14:42:41 +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:47 +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 agoFix configure probe for sys/ucred.h.
Tom Lane [Thu, 25 Jul 2013 15:39:11 +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:14 +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 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 agoImprove ilist.h's support for deletion of slist elements during iteration.
Tom Lane [Wed, 24 Jul 2013 21:42:03 +0000 (17:42 -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 agoFurther hacking on ruleutils' new column-alias-assignment code.
Tom Lane [Tue, 23 Jul 2013 21:54:24 +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:38:32 +0000 (17:38 -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:04 +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 agoBack-patch bgworker API changes to 9.3.
Robert Haas [Mon, 22 Jul 2013 19:41:44 +0000 (15:41 -0400)]
Back-patch bgworker API changes to 9.3.

Commit 7f7485a0cde92aa4ba235a1ffe4dda0ca0b6cc9a made these changes
in master; per discussion, backport the API changes (but not the
functional changes), so that people don't get used to the 9.3 API
only to see it get broken in the next release.  There are already
some people coding to the original 9.3 API, and this will cause
minor breakage, but there will be even more if we wait until next
year to roll out these changes.

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 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 agoFix regex match failures for backrefs combined with non-greedy quantifiers.
Tom Lane [Fri, 19 Jul 2013 01:22:43 +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 agoUse correct parameter name for view_option_value
Stephen Frost [Wed, 17 Jul 2013 14:50:39 +0000 (10:50 -0400)]
Use correct parameter name for view_option_value

The documentation for ALTER VIEW had a minor copy-and-paste error in
defining the parameters.  Noticed when reviewing the WITH CHECK OPTION
patch.

Backpatch to 9.2 where this was first introduced.

11 years agoFix PQconninfoParse error message handling
Peter Eisentraut [Tue, 16 Jul 2013 00:04:14 +0000 (20:04 -0400)]
Fix PQconninfoParse error message handling

The returned error message already includes a newline, but the callers
were adding their own when printing it out.

11 years agoCorrect off-by-one when reading from pipe
Stephen Frost [Mon, 15 Jul 2013 14:42:27 +0000 (10:42 -0400)]
Correct off-by-one when reading from pipe

In pg_basebackup.c:reached_end_position(), we're reading from an
internal pipe with our own background process but we're possibly
reading more bytes than will actually fit into our buffer due to
an off-by-one error.  As we're reading from an internal pipe
there's no real risk here, but it's good form to not depend on
such convenient arrangements.

Bug spotted by the Coverity scanner.

Back-patch to 9.2 where this showed up.

11 years agoCheck version before allocating PQExpBuffer
Stephen Frost [Mon, 15 Jul 2013 01:17:59 +0000 (21:17 -0400)]
Check version before allocating PQExpBuffer

In pg_dump.c:getEventTriggers, check what major version we are on
before calling createPQExpBuffer() to avoid leaking that bit of
memory.

Leak discovered by the Coverity scanner.

Back-patch to 9.3 where support for dumping event triggers was
added.

11 years agoBe sure to close() file descriptor on error case
Stephen Frost [Sun, 14 Jul 2013 21:25:47 +0000 (17:25 -0400)]
Be sure to close() file descriptor on error case

In receivelog.c:writeTimeLineHistoryFile(), we were not properly
closing the open'd file descriptor in error cases.  While this
wouldn't matter much if we were about to exit due to such an
error, that's not the case with pg_receivexlog as it can be a
long-running process and these errors are non-fatal.

This resource leak was found by the Coverity scanner.

Back-patch to 9.3 where this issue first appeared.

11 years agoEnsure 64bit arithmetic when calculating tapeSpace
Stephen Frost [Sun, 14 Jul 2013 20:42:58 +0000 (16:42 -0400)]
Ensure 64bit arithmetic when calculating tapeSpace

In tuplesort.c:inittapes(), we calculate tapeSpace by first figuring
out how many 'tapes' we can use (maxTapes) and then multiplying the
result by the tape buffer overhead for each.  Unfortunately, when
we are on a system with an 8-byte long, we allow work_mem to be
larger than 2GB and that allows maxTapes to be large enough that the
32bit arithmetic can overflow when multiplied against the buffer
overhead.

When this overflow happens, we end up adding the overflow to the
amount of space available, causing the amount of memory allocated to
be larger than work_mem.

Note that to reach this point, you have to set work mem to at least
24GB and be sorting a set which is at least that size.  Given that a
user who can set work_mem to 24GB could also set it even higher, if
they were looking to run the system out of memory, this isn't
considered a security issue.

This overflow risk was found by the Coverity scanner.

Back-patch to all supported branches, as this issue has existed
since before 8.4.

11 years agopg_isready: Message improvement
Peter Eisentraut [Sun, 14 Jul 2013 19:53:56 +0000 (15:53 -0400)]
pg_isready: Message improvement

11 years agopg_receivexlog - Exit on failure to parse
Stephen Frost [Sun, 14 Jul 2013 19:31:23 +0000 (15:31 -0400)]
pg_receivexlog - Exit on failure to parse

In streamutil.c:GetConnection(), upgrade failure to parse the
connection string to an exit(1) instead of simply returning NULL.
Most callers already immediately exited, but pg_receivexlog would
loop on this case, continually trying to re-parse the connection
string (which can't be changed after pg_receivexlog has started).

GetConnection() was already expected to exit(1) in some cases
(eg: failure to allocate memory or if unable to determine the
integer_datetimes flag), so this change shouldn't surprise anyone.

Began looking at this due to the Coverity scanner complaining that
we were leaking err_msg in this case- no longer an issue since we
just exit(1) immediately.

11 years agoDuring parallel pg_dump, free commands from master
Stephen Frost [Sun, 14 Jul 2013 18:35:26 +0000 (14:35 -0400)]
During parallel pg_dump, free commands from master

The command strings read by the child processes during parallel
pg_dump, after being read and handled, were not being free'd.
This patch corrects this relatively minor memory leak.

Leak found by the Coverity scanner.

Back patch to 9.3 where parallel pg_dump was introduced.

11 years agoSwitch user ID to the object owner when populating a materialized view.
Noah Misch [Fri, 12 Jul 2013 22:21:22 +0000 (18:21 -0400)]
Switch user ID to the object owner when populating a materialized view.

This makes superuser-issued REFRESH MATERIALIZED VIEW safe regardless of
the object's provenance.  REINDEX is an earlier example of this pattern.
As a downside, functions called from materialized views must tolerate
running in a security-restricted operation.  CREATE MATERIALIZED VIEW
need not change user ID.  Nonetheless, avoid creation of materialized
views that will invariably fail REFRESH by making it, too, start a
security-restricted operation.

Back-patch to 9.3 so materialized views have this from the beginning.

Reviewed by Kevin Grittner.

11 years agopg_dump: Formatting cleanup of new messages
Peter Eisentraut [Fri, 12 Jul 2013 01:48:09 +0000 (21:48 -0400)]
pg_dump: Formatting cleanup of new messages

11 years agopg_upgrade: document possible pg_hba.conf options
Bruce Momjian [Thu, 11 Jul 2013 13:43:19 +0000 (09:43 -0400)]
pg_upgrade: document possible pg_hba.conf options
Previously, pg_upgrade docs recommended using .pgpass if using MD5
authentication to avoid being prompted for a password.  Turns out pg_ctl
never prompts for a password, so MD5 requires .pgpass --- document that.
Also recommend 'peer' for authentication too.
Backpatch back to 9.1.

11 years agodoc: Replace link to pgFouine with pgBadger
Peter Eisentraut [Thu, 11 Jul 2013 02:40:41 +0000 (22:40 -0400)]
doc: Replace link to pgFouine with pgBadger

From: Ian Lawrence Barwick <barwick@gmail.com>

11 years agoFix lack of message pluralization
Peter Eisentraut [Wed, 10 Jul 2013 00:49:44 +0000 (20:49 -0400)]
Fix lack of message pluralization

11 years agoFixed incorrect description of EXEC SQL VAR command.
Michael Meskes [Thu, 27 Jun 2013 14:00:32 +0000 (16:00 +0200)]
Fixed incorrect description of EXEC SQL VAR command.

Thanks to MauMau <maumau307@gmail.com> for finding and fixing this.

11 years agoFix mention of htup.h in pageinspect docs
Alvaro Herrera [Mon, 8 Jul 2013 21:11:55 +0000 (17:11 -0400)]
Fix mention of htup.h in pageinspect docs

It's htup_details.h now.

Jeff Janes

11 years agoFix planning of parameterized appendrel paths with expensive join quals.
Tom Lane [Mon, 8 Jul 2013 02:37:28 +0000 (22:37 -0400)]
Fix planning of parameterized appendrel paths with expensive join quals.

The code in set_append_rel_pathlist() for building parameterized paths
for append relations (inheritance and UNION ALL combinations) supposed
that the cheapest regular path for a child relation would still be cheapest
when reparameterized.  Which might not be the case, particularly if the
added join conditions are expensive to compute, as in a recent example from
Jeff Janes.  Fix it to compare child path costs *after* reparameterizing.
We can short-circuit that if the cheapest pre-existing path is already
parameterized correctly, which seems likely to be true often enough to be
worth checking for.

Back-patch to 9.2 where parameterized paths were introduced.

11 years agopg_isready: Make --help output more consistent with other utilities
Peter Eisentraut [Sun, 7 Jul 2013 20:01:29 +0000 (16:01 -0400)]
pg_isready: Make --help output more consistent with other utilities

11 years agopg_resetxlog: Make --help consistent with man page
Peter Eisentraut [Sun, 7 Jul 2013 19:56:23 +0000 (15:56 -0400)]
pg_resetxlog: Make --help consistent with man page

Use "MXID" as placeholder for -m option, instead of just "XID".

11 years agopg_upgrade: document link options
Bruce Momjian [Sun, 7 Jul 2013 19:57:24 +0000 (15:57 -0400)]
pg_upgrade:  document link options
Document that tablespaces and pg_xlog can be on different file systems
for pg_upgrade --link mode.
Backpatch to 9.3.

11 years agoFix include-guard
Magnus Hagander [Sun, 7 Jul 2013 11:36:20 +0000 (13:36 +0200)]
Fix include-guard

Looks like a cut/paste error in the original addition of the file.

Andres Freund

11 years agoAlso escape double quotes for ECPG's #line statement.
Michael Meskes [Sat, 6 Jul 2013 20:08:53 +0000 (22:08 +0200)]
Also escape double quotes for ECPG's #line statement.

11 years agoRename a function to avoid naming conflict in parallel regression tests.
Tom Lane [Sat, 6 Jul 2013 15:16:53 +0000 (11:16 -0400)]
Rename a function to avoid naming conflict in parallel regression tests.

Commit 31a891857a128828d47d93c63e041f3b69cbab70 added some tests in
plpgsql.sql that used a function rather unthinkingly named "foo()".
However, rangefuncs.sql has some much older tests that create a function
of that name, and since these test scripts run in parallel, there is a
chance of failures if the timing is just right.  Use another name to
avoid that.  Per buildfarm (failure seen today on "hamerkop", but
probably it's happened before and not been noticed).

11 years agoApplied patch by MauMau <maumau307@gmail.com> to escape filenames in #line statements.
Michael Meskes [Fri, 5 Jul 2013 09:07:16 +0000 (11:07 +0200)]
Applied patch by MauMau <maumau307@gmail.com> to escape filenames in #line statements.

11 years agoUpdate messages, comments and documentation for materialized views.
Noah Misch [Fri, 5 Jul 2013 19:25:51 +0000 (15:25 -0400)]
Update messages, comments and documentation for materialized views.

All instances of the verbiage lagging the code.  Back-patch to 9.3,
where materialized views were introduced.

11 years agoRemove stray | character
Magnus Hagander [Fri, 5 Jul 2013 14:21:08 +0000 (16:21 +0200)]
Remove stray | character

Erikjan Rijkers

11 years agoAdd contrib function references in the doc index
Bruce Momjian [Thu, 4 Jul 2013 15:33:08 +0000 (11:33 -0400)]
Add contrib function references in the doc index
Backpatch to 9.3.
Idea from Craig Ringer

11 years agodocs: Clarify flag dependencies for background workers.
Robert Haas [Thu, 4 Jul 2013 15:11:56 +0000 (11:11 -0400)]
docs: Clarify flag dependencies for background workers.

BGWORKER_BACKEND_DATABASE_CONNECTION can only be used if
BGWORKER_SHMEM_ACCESS is also used.

Michael Paquier, with some tweaks by me.

11 years agodoc: Fix typo in event trigger documentation
Peter Eisentraut [Thu, 4 Jul 2013 14:27:33 +0000 (10:27 -0400)]
doc: Fix typo in event trigger documentation

From: Dimitri Fontaine <dimitri@2ndQuadrant.fr>

11 years agodoc: Add event trigger C API documentation
Peter Eisentraut [Thu, 4 Jul 2013 01:06:20 +0000 (21:06 -0400)]
doc: Add event trigger C API documentation

From: Dimitri Fontaine <dimitri@2ndQuadrant.fr>

11 years agopg_buffercache: document column meanings
Bruce Momjian [Wed, 3 Jul 2013 18:25:06 +0000 (14:25 -0400)]
pg_buffercache: document column meanings
Improve documentation for usagecount and relforknumber.
Backpatch to 9.3
Suggestion from Satoshi Nagayasu

11 years agoFix handling of auto-updatable views on inherited tables.
Tom Lane [Wed, 3 Jul 2013 16:26:33 +0000 (12:26 -0400)]
Fix handling of auto-updatable views on inherited tables.

An INSERT into such a view should work just like an INSERT into its base
table, ie the insertion should go directly into that table ... not be
duplicated into each child table, as was happening before, per bug #8275
from Rushabh Lathia.  On the other hand, the current behavior for
UPDATE/DELETE seems reasonable: the update/delete traverses the child
tables, or not, depending on whether the view specifies ONLY or not.
Add some regression tests covering this area.

Dean Rasheed

11 years agoExpose object name error fields in PL/pgSQL.
Noah Misch [Wed, 3 Jul 2013 11:29:23 +0000 (07:29 -0400)]
Expose object name error fields in PL/pgSQL.

Specifically, permit attaching them to the error in RAISE and retrieving
them from a caught error in GET STACKED DIAGNOSTICS.  RAISE enforces
nothing about the content of the fields; for its purposes, they are just
additional string fields.  Consequently, clarify in the protocol and
libpq documentation that the usual relationships between error fields,
like a schema name appearing wherever a table name appears, are not
universal.  This freedom has other applications; consider a FDW
propagating an error from an RDBMS having no schema support.

Back-patch to 9.3, where core support for the error fields was
introduced.  This prevents the confusion of having a release where libpq
exposes the fields and PL/pgSQL does not.

Pavel Stehule, lexical revisions by Noah Misch.

11 years agodoc: Remove i18ngurus.com link
Peter Eisentraut [Wed, 3 Jul 2013 00:32:09 +0000 (20:32 -0400)]
doc: Remove i18ngurus.com link

The web site is dead, and the Wayback Machine shows that it didn't have
much useful content before.

11 years agodoc: Arrange See Also links in more consistent order
Peter Eisentraut [Wed, 3 Jul 2013 00:12:58 +0000 (20:12 -0400)]
doc: Arrange See Also links in more consistent order

11 years agoMention extra_float_digits in floating point docs
Alvaro Herrera [Tue, 2 Jul 2013 16:21:16 +0000 (12:21 -0400)]
Mention extra_float_digits in floating point docs

Make it easier for readers of the FP docs to find out about possibly
truncated values.

Per complaint from Tom Duffey in message
F0E0F874-C86F-48D1-AA2A-0C5365BF5118@trillitech.com

Author: Albe Laurenz
Reviewed by: Abhijit Menon-Sen

11 years agoSilence compiler warning in assertion-enabled builds.
Heikki Linnakangas [Tue, 2 Jul 2013 14:23:42 +0000 (17:23 +0300)]
Silence compiler warning in assertion-enabled builds.

With -Wtype-limits, gcc correctly points out that size_t can never be < 0.
Backpatch to 9.3 and 9.2. It's been like this forever, but in <= 9.1 you got
a lot other warnings with -Wtype-limits anyway (at least with my version of
gcc).

Andres Freund

11 years agopg_dump docs: use escaped double-quotes, for Windows
Bruce Momjian [Mon, 1 Jul 2013 18:52:56 +0000 (14:52 -0400)]
pg_dump docs:  use escaped double-quotes, for Windows
On Unix, you can embed double-quotes in single-quotes, and via versa.
However, on Windows, you can only escape double-quotes in double-quotes,
so use that in the pg_dump -t/table example.
Backpatch to 9.3.
Report from Mike Toews

11 years agoFix cpluspluscheck in checksum code
Peter Eisentraut [Sun, 30 Jun 2013 14:25:43 +0000 (10:25 -0400)]
Fix cpluspluscheck in checksum code

C++ is more picky about comparing signed and unsigned integers.

11 years agoChange errcode for lock_timeout to match NOWAIT
Simon Riggs [Fri, 28 Jun 2013 23:57:25 +0000 (00:57 +0100)]
Change errcode for lock_timeout to match NOWAIT

Set errcode to ERRCODE_LOCK_NOT_AVAILABLE

Zoltán Bsöszörményi

11 years agoUpdate pg_resetxlog's documentation on multixacts
Alvaro Herrera [Thu, 27 Jun 2013 19:31:04 +0000 (15:31 -0400)]
Update pg_resetxlog's documentation on multixacts

I added some more functionality to it in 0ac5ad5134f27 but neglected to
add it to the docs.

Per Peter Eisentraut in message
1367112171.32604.4.camel@vanquo.pezone.net

11 years agoDocument relminmxid and datminmxid
Alvaro Herrera [Thu, 27 Jun 2013 19:20:33 +0000 (15:20 -0400)]
Document relminmxid and datminmxid

I introduced these new fields in 0ac5ad5134f27 but neglected to add them
to the system catalogs section of the docs.

Per Thom Brown in message
CAA-aLv7UiO=Whiq3MVbsEqSyQRthuX8Tb_RLyBuQt0KQBp=6EQ@mail.gmail.com

11 years agoMark index-constraint comments with correct dependency in pg_dump.
Tom Lane [Thu, 27 Jun 2013 17:54:55 +0000 (13:54 -0400)]
Mark index-constraint comments with correct dependency in pg_dump.

When there's a comment on an index that was created with UNIQUE or PRIMARY
KEY constraint syntax, we need to label the comment as depending on the
constraint not the index, since only the constraint object actually appears
in the dump.  This incorrect dependency can lead to parallel pg_restore
trying to restore the comment before the index has been created, per bug
#8257 from Lloyd Albin.

This patch fixes pg_dump to produce the right dependency in dumps made
in the future.  Usually we also try to hack pg_restore to work around
bogus dependencies, so that existing (wrong) dumps can still be restored in
parallel mode; but that doesn't seem practical here since there's no easy
way to relate the constraint dump entry to the comment after the fact.

Andres Freund

11 years agoExpect EWOULDBLOCK from a non-blocking connect() call only on Windows.
Tom Lane [Thu, 27 Jun 2013 16:36:44 +0000 (12:36 -0400)]
Expect EWOULDBLOCK from a non-blocking connect() call only on Windows.

On Unix-ish platforms, EWOULDBLOCK may be the same as EAGAIN, which is
*not* a success return, at least not on Linux.  We need to treat it as a
failure to avoid giving a misleading error message.  Per the Single Unix
Spec, only EINPROGRESS and EINTR returns indicate that the connection
attempt is in progress.

On Windows, on the other hand, EWOULDBLOCK (WSAEWOULDBLOCK) is the expected
case.  We must accept EINPROGRESS as well because Cygwin will return that,
and it doesn't seem worth distinguishing Cygwin from native Windows here.
It's not very clear whether EINTR can occur on Windows, but let's leave
that part of the logic alone in the absence of concrete trouble reports.

Also, remove the test for errno == 0, effectively reverting commit
da9501bddb42222dc33c031b1db6ce2133bcee7b, which AFAICS was just a thinko;
or at best it might have been a workaround for a platform-specific bug,
which we can hope is gone now thirteen years later.  In any case, since
libpq makes no effort to reset errno to zero before calling connect(),
it seems unlikely that that test has ever reliably done anything useful.

Andres Freund and Tom Lane

11 years agoTweak wording in sequence-function docs to avoid PDF build failures.
Tom Lane [Thu, 27 Jun 2013 04:23:37 +0000 (00:23 -0400)]
Tweak wording in sequence-function docs to avoid PDF build failures.

Adjust the wording in the first para of "Sequence Manipulation Functions"
so that neither of the link phrases in it break across line boundaries,
in either A4- or US-page-size PDF output.  This fixes a reported build
failure for the 9.3beta2 A4 PDF docs, and future-proofs this particular
para against causing similar problems in future.  (Perhaps somebody will
fix this issue in the SGML/TeX documentation tool chain someday, but I'm
not holding my breath.)

Back-patch to all supported branches, since the same problem could rise up
to bite us in future updates if anyone changes anything earlier than this
in func.sgml.

11 years agoDocument effect of constant folding on CASE.
Noah Misch [Wed, 26 Jun 2013 23:51:56 +0000 (19:51 -0400)]
Document effect of constant folding on CASE.

Back-patch to all supported versions.

Laurenz Albe

11 years agopg_receivexlog: Fix logic error
Peter Eisentraut [Wed, 26 Jun 2013 03:50:14 +0000 (23:50 -0400)]
pg_receivexlog: Fix logic error

The code checking the WAL file name contained a logic error and wouldn't
actually catch some bad names.

11 years agoAvoid inconsistent type declaration
Alvaro Herrera [Tue, 25 Jun 2013 20:36:29 +0000 (16:36 -0400)]
Avoid inconsistent type declaration

Clang 3.3 correctly complains that a variable of type enum
MultiXactStatus cannot hold a value of -1, which makes sense.  Change
the declared type of the variable to int instead, and apply casting as
necessary to avoid the warning.

Per notice from Andres Freund

11 years agoProperly dump dropped foreign table cols in binary-upgrade mode.
Andrew Dunstan [Tue, 25 Jun 2013 17:46:10 +0000 (13:46 -0400)]
Properly dump dropped foreign table cols in binary-upgrade mode.

In binary upgrade mode, we need to recreate and then drop dropped
columns so that all the columns get the right attribute number. This is
true for foreign tables as well as for native tables. For foreign
tables we have been getting the first part right but not the second,
leading to bogus columns in the upgraded database. Fix this all the way
back to 9.1, where foreign tables were introduced.

11 years agoSupport clean switchover.
Fujii Masao [Tue, 25 Jun 2013 17:18:26 +0000 (02:18 +0900)]
Support clean switchover.

In replication, when we shutdown the master, walsender tries to send
all the outstanding WAL records to the standby, and then to exit. This
basically means that all the WAL records are fully synced between
two servers after the clean shutdown of the master. So, after
promoting the standby to new master, we can restart the stopped
master as new standby without the need for a fresh backup from
new master.

But there was one problem so far: though walsender tries to send all
the outstanding WAL records, it doesn't wait for them to be replicated
to the standby. Then, before receiving all the WAL records,
walreceiver can detect the closure of connection and exit. We cannot
guarantee that there is no missing WAL in the standby after clean
shutdown of the master. In this case, backup from new master is
required when restarting the stopped master as new standby.

This patch fixes this problem. It just changes walsender so that it
waits for all the outstanding WAL records to be replicated to the
standby before closing the replication connection.

Per discussion, this is a fix that needs to get backpatched rather than
new feature. So, back-patch to 9.1 where enough infrastructure for
this exists.

Patch by me, reviewed by Andres Freund.

11 years agoStamp 9.3beta2. REL9_3_BETA2
Peter Eisentraut [Mon, 24 Jun 2013 18:55:41 +0000 (14:55 -0400)]
Stamp 9.3beta2.

11 years agoTranslation updates
Peter Eisentraut [Mon, 24 Jun 2013 18:16:15 +0000 (14:16 -0400)]
Translation updates

11 years agoEnsure no xid gaps during Hot Standby startup
Simon Riggs [Sun, 23 Jun 2013 10:09:24 +0000 (11:09 +0100)]
Ensure no xid gaps during Hot Standby startup

In some cases with higher numbers of subtransactions
it was possible for us to incorrectly initialize
subtrans leading to complaints of missing pages.

Bug report by Sergey Konoplev
Analysis and fix by Andres Freund

11 years agodoc: Fix date in EPUB manifest
Peter Eisentraut [Sat, 22 Jun 2013 02:48:06 +0000 (22:48 -0400)]
doc: Fix date in EPUB manifest

If there is no <date> element, the publication date for the EPUB
manifest is taken from the copyright year.  But something like
"1996-2013" is not a legal date specification.  So the EPUB output
currently fails epubcheck.

Put in a separate <date> element with the current year.  Put it in
legal.sgml, because copyright.pl already instructs to update that
manually, so it hopefully won't be missed.

11 years agoFurther update CREATE FUNCTION documentation about argument names
Peter Eisentraut [Thu, 20 Jun 2013 02:25:13 +0000 (22:25 -0400)]
Further update CREATE FUNCTION documentation about argument names

More languages than SQL and PL/pgSQL actually support parameter names.

11 years agoinitdb: Add blank line before output about checksums
Peter Eisentraut [Wed, 19 Jun 2013 01:56:13 +0000 (21:56 -0400)]
initdb: Add blank line before output about checksums

This maintains the logical grouping of the output better.