]> granicus.if.org Git - postgresql/log
postgresql
8 years agoDocs: improve warnings about nextval() not producing gapless sequences.
Tom Lane [Sat, 7 May 2016 17:16:50 +0000 (13:16 -0400)]
Docs: improve warnings about nextval() not producing gapless sequences.

In the documentation for nextval(), point out explicitly that INSERT ...
ON CONFLICT will call nextval() if needed for the insertion case, whether
or not it ends up following the ON CONFLICT path.  This seems to be a
matter of some confusion, cf bug #14126, so let's be clear about it.

Also mention the issue in the CREATE SEQUENCE reference page, since that
is another place where people might expect such things to be covered.

Minor wording improvements nearby, as well.

Back-patch to 9.5 where ON CONFLICT was introduced.

8 years agoUpdate back-branch release notes for the last few commits.
Tom Lane [Sat, 7 May 2016 04:51:27 +0000 (00:51 -0400)]
Update back-branch release notes for the last few commits.

OpenSSL error queue fix no longer needs to be documented under 9.6.

8 years agoClean up after pg_dump test runs.
Tom Lane [Sat, 7 May 2016 02:28:01 +0000 (22:28 -0400)]
Clean up after pg_dump test runs.

The tmp_check directory needs to be removed by "make clean",
and also ignored by .gitignore.

8 years agoFix pg_upgrade to not fail when new-cluster TOAST rules differ from old.
Tom Lane [Sat, 7 May 2016 02:05:51 +0000 (22:05 -0400)]
Fix pg_upgrade to not fail when new-cluster TOAST rules differ from old.

This patch essentially reverts commit 4c6780fd17aa43ed, in favor of a much
simpler solution for the case where the new cluster would choose to create
a TOAST table but the old cluster doesn't have one: just don't create a
TOAST table.

The existing code failed in at least two different ways if the situation
arose: (1) ALTER TABLE RESET didn't grab an exclusive lock, so that the
lock sanity check in create_toast_table failed; (2) pg_upgrade did not
provide a pg_type OID for the new toast table, so that the crosscheck in
TypeCreate failed.  While both these problems were introduced by later
patches, they show that the hack being used to cause TOAST table creation
is overwhelmingly fragile (and untested).  I also note that before the
TypeCreate crosscheck was added, the code would have resulted in assigning
an indeterminate pg_type OID to the toast table, possibly causing a later
OID conflict in that catalog; so that it didn't really work even when
committed.

If we simply don't create a TOAST table, there will only be a problem if
the code tries to store a tuple that's wider than a page, and field
compression isn't sufficient to get it under a page.  Given that the TOAST
creation threshold is intended to be about a quarter of a page, it's very
hard to believe that cross-version differences in the do-we-need-a-toast-
table heuristic could result in an observable problem.  So let's just
follow the old version's conclusion about whether a TOAST table is needed.

(If we ever do change needs_toast_table() so much that this conclusion
doesn't apply, we can devise a solution at that time, and hopefully do
it in a less klugy way than 4c6780fd17aa43ed did.)

Back-patch to 9.3, like the previous patch.

Discussion: <8110.1462291671@sss.pgh.pa.us>

8 years agoDisable BLOB test in pg_dump TAP tests
Stephen Frost [Sat, 7 May 2016 01:24:31 +0000 (21:24 -0400)]
Disable BLOB test in pg_dump TAP tests

Buildfarm member jacana appears to have an issue with running this
test.  It's not entirely clear to me why, but rather than try to
fight with it, just disable it for now.

None of the other tests try to write out from psql directly as
this test does, so it seems likely that the rest of the tests will
be fine (as they have been on numerous other systems).

8 years agoMitigate "snapshot too old" performance regression on NUMA
Kevin Grittner [Sat, 7 May 2016 01:05:29 +0000 (20:05 -0500)]
Mitigate "snapshot too old" performance regression on NUMA

Limit maintenance of time to xid mapping to once per minute.  At
least in the tested case this brings performance within 5% of when
the feature is off, compared to several times slower without this
patch.

While there, fix comments and whitespace.

Ants Aasma, with cosmetic adjustments suggested by Andres Freund
Reviewed by Kevin Grittner and Andres Freund

8 years agoFirst-draft release notes for 9.5.3.
Tom Lane [Fri, 6 May 2016 23:43:51 +0000 (19:43 -0400)]
First-draft release notes for 9.5.3.

As usual, the release notes for other branches will be made by cutting
these down, but put them up for community review first.

8 years agoDocs: fix alphabetization of table entries.
Tom Lane [Fri, 6 May 2016 21:48:56 +0000 (17:48 -0400)]
Docs: fix alphabetization of table entries.

Fabien Coelho

8 years agoDocs: minor copy-editing for GSSAPI/SSPI authentication docs.
Tom Lane [Fri, 6 May 2016 21:42:44 +0000 (17:42 -0400)]
Docs: minor copy-editing for GSSAPI/SSPI authentication docs.

Describe compat_realm = 0 as "disabled" not "enabled", per discussion
with Christian Ullrich.  I failed to resist the temptation to do some
other minor copy-editing in the same area.

8 years agoAdd test_pg_dump to @contrib_excludes
Stephen Frost [Fri, 6 May 2016 20:39:56 +0000 (16:39 -0400)]
Add test_pg_dump to @contrib_excludes

The test_pg_dump extension doesn't have a C component, so we need
to exclude it from the MSVC build system trying to figure out how
to build it.

Also add a "MODULES" line to the Makefile, as test_extensions has.
Might not be necessary, but seems good to keep things consistent.

Lastly, remove the 'installcheck' line from test_pg_dump, as that
was causing redefinition errors, at least on my box.  This also
makes test_pg_dump consistent with how commit_ts is set up.

8 years agoMore small 9.6 release note improvements.
Tom Lane [Fri, 6 May 2016 20:20:56 +0000 (16:20 -0400)]
More small 9.6 release note improvements.

Corrections per Jeff Janes, Christian Ullrich, and Daniel Vérité.

8 years agoCorrect query in pg_dumpall:dumpRoles
Stephen Frost [Fri, 6 May 2016 20:15:52 +0000 (16:15 -0400)]
Correct query in pg_dumpall:dumpRoles

We need to use a new branch due to the 9.5 addition of bypassrls
when adding in the clause to exclude pg_* roles from being dumped
by pg_dumpall.

Pointed out by Noah, patch by me.

8 years agoRemove MODULES_big from test_pg_dump
Stephen Frost [Fri, 6 May 2016 19:26:57 +0000 (15:26 -0400)]
Remove MODULES_big from test_pg_dump

The Makefile for test_pg_dump shouldn't have a MODULES_big line
because there's no actual compiled bit for that extension.  Hopefully
this will fix the Windows buildfarm members which were complaining.

In passing, also add the 'prove_installcheck' bit to the pg_dump and
test_pg_dump Makefiles, to get the buildfarm members to actually run
those tests.

8 years agoMinimal fix for crash bug in quals_match_foreign_key.
Robert Haas [Fri, 6 May 2016 19:00:55 +0000 (15:00 -0400)]
Minimal fix for crash bug in quals_match_foreign_key.

Discussion is still underway as to whether to revert the entire patch
that added this function, but that discussion may not conclude before
beta1.  So, in the meantime, let's do at least this much.

David Rowley

8 years agoLimit maximum parallel degree to 1024.
Robert Haas [Fri, 6 May 2016 18:43:34 +0000 (14:43 -0400)]
Limit maximum parallel degree to 1024.

This new limit affects both the max_parallel_degree GUC and the
parallel_degree reloption.  There may some day be a use case for using
more than 1024 CPUs for a single query, but that's surely not the case
right now.  Not only do not very many people have that many CPUs, but
the code hasn't been tested at that kind of scale and is very unlikely
to perform well, or even work at all, without a lot more work.  The
issue addressed by commit 06bd458cb812623c3f1fdd55216c4c08b06a8447 is
probably just one problem of many.

The idea of a more reasonable limit here was suggested by Tom Lane;
the value of 1024 was suggested by Amit Kapila.

8 years agoImprove pg_upgrade's report about failure to match up old and new tables.
Tom Lane [Fri, 6 May 2016 18:23:45 +0000 (14:23 -0400)]
Improve pg_upgrade's report about failure to match up old and new tables.

Ordinarily, pg_upgrade shouldn't have any difficulty in matching up all
the relations it sees in the old and new databases.  If it does, however,
it just goes belly-up with a pretty unhelpful error message.  That seemed
fine as long as we expected the case never to occur in the wild, but
Alvaro reported that it had been seen in a database whose pg_largeobject
table had somehow acquired a TOAST table.  That doesn't quite seem like
a case that pg_upgrade actually needs to handle, but it would be good if
the report were more diagnosable.  Hence, extend the logic to print out
as much information as we can about the mismatch(es) before we quit.

In passing, improve the readability of get_rel_infos()'s data collection
query, which had suffered seriously from lets-not-bother-to-update-comments
syndrome, and generally was unnecessarily disrespectful to readers.

It could be argued that this is a bug fix, but given that we have so few
reports, I don't feel a need to back-patch; at least not before this has
baked awhile in HEAD.

8 years agoUse mul_size when multiplying by the number of parallel workers.
Robert Haas [Fri, 6 May 2016 18:23:47 +0000 (14:23 -0400)]
Use mul_size when multiplying by the number of parallel workers.

That way, if the result overflows size_t, you'll get an error instead
of undefined behavior, which seems like a plus.  This also has the
effect of casting the number of workers from int to Size, which is
better because it's harder to overflow int than size_t.

Dilip Kumar reported this issue and provided a patch upon which this
patch is based, but his version did use mul_size.

8 years agoRemove various special checks around default roles
Stephen Frost [Fri, 6 May 2016 18:06:50 +0000 (14:06 -0400)]
Remove various special checks around default roles

Default roles really should be like regular roles, for the most part.
This removes a number of checks that were trying to make default roles
extra special by not allowing them to be used as regular roles.

We still prevent users from creating roles in the "pg_" namespace or
from altering roles which exist in that namespace via ALTER ROLE, as
we can't preserve such changes, but otherwise the roles are very much
like regular roles.

Based on discussion with Robert and Tom.

8 years agoAdd TAP tests for pg_dump
Stephen Frost [Fri, 6 May 2016 18:06:50 +0000 (14:06 -0400)]
Add TAP tests for pg_dump

This TAP test suite will create a new cluster, populate it based on
the 'create_sql' values in the '%tests' hash, run all of the runs
defined in the '%pgdump_runs' hash, and then for each test in the
'%tests' hash, compare each run's output the the regular expression
defined for the test under the 'like' and 'unlike' functions, as
appropriate.

While this test suite covers a fair bit of ground (67% of pg_dump.c
and quite a bit of the other files in src/bin/pg_dump), there is
still quite a bit which remains to be added to provide better code
coverage.  Still, this is quite a bit better than we had, and has
found a few bugs already (note that the CREATE TRANSFORM test is
commented out, as it is currently failing).

Idea for using the TAP system from Tom, though all of the code is mine.

8 years agoOnly issue LOCK TABLE commands when necessary
Stephen Frost [Fri, 6 May 2016 18:06:50 +0000 (14:06 -0400)]
Only issue LOCK TABLE commands when necessary

Reviewing the cases where we need to LOCK a given table during a dump,
it was pointed out by Tom that we really don't need to LOCK a table if
we are only looking to dump the ACL for it, or certain other
components.  After reviewing the queries run for all of the component
pieces, a list of components were determined to not require LOCK'ing
of the table.

This implements a check to avoid LOCK'ing those tables.

Initial complaint from Rushabh Lathia, discussed with Robert and Tom,
the patch is mine.

8 years agopg_dump performance and other fixes
Stephen Frost [Fri, 6 May 2016 18:06:50 +0000 (14:06 -0400)]
pg_dump performance and other fixes

Do not try to dump objects which do not have ACLs when only ACLs are
being requested.  This results in a significant performance improvement
as we can avoid querying for further information on these objects when
we don't need to.

When limiting the components to dump for an extension, consider what
components have been requested.  Initially, we incorrectly hard-coded
the components of the extension objects to dump, which would mean that
we wouldn't dump some components even with they were asked for and in
other cases we would dump components which weren't requested.

Correct defaultACLs to use 'dump_contains' instead of 'dump'.  The
defaultACL is considered a member of the namespace and should be
dumped based on the same set of components that the other objects in
the schema are, not based on what we're dumping for the namespace
itself (which might not include ACLs, if the namespace has just the
default or initial ACL).

Use DUMP_COMPONENT_ACL for from-initdb objects, to allow users to
change their ACLs, should they wish to.  This just extends what we
are doing for the pg_catalog namespace to objects which are not
members of namespaces.

Due to column ACLs being treated a bit differently from other ACLs
(they are actually reset to NULL when all privileges are revoked),
adjust the query which gathers column-level ACLs to consider all of
the ACL-relevant columns.

8 years agoCorrect pg_dump WHERE clause for functions/aggregates
Stephen Frost [Fri, 6 May 2016 18:06:50 +0000 (14:06 -0400)]
Correct pg_dump WHERE clause for functions/aggregates

The query to grab the function/aggregate information is now joining
to pg_init_privs, so we can simplify (and correct) the WHERE clause
used to determine if a given function's ACL has changed from the
initial ACL on the function.

Bug found by Noah, patch by me.

8 years agoUpdate config.guess and config.sub
Peter Eisentraut [Fri, 6 May 2016 18:00:47 +0000 (14:00 -0400)]
Update config.guess and config.sub

8 years agoFix possible read past end of string in to_timestamp().
Tom Lane [Fri, 6 May 2016 16:09:20 +0000 (12:09 -0400)]
Fix possible read past end of string in to_timestamp().

to_timestamp() handles the TH/th format codes by advancing over two input
characters, whatever those are.  It failed to notice whether there were
two characters available to be skipped, making it possible to advance
the pointer past the end of the input string and keep on parsing.
A similar risk existed in the handling of "Y,YYY" format: it would advance
over three characters after the "," whether or not three characters were
available.

In principle this might be exploitable to disclose contents of server
memory.  But the security team concluded that it would be very hard to use
that way, because the parsing loop would stop upon hitting any zero byte,
and TH/th format codes can't be consecutive --- they have to follow some
other format code, which would have to match whatever data is there.
So it seems impractical to examine memory very much beyond the end of the
input string via this bug; and the input string will always be in local
memory not in disk buffers, making it unlikely that anything very
interesting is close to it in a predictable way.  So this doesn't quite
rise to the level of needing a CVE.

Thanks to Wolf Roediger for reporting this bug.

8 years agoFix pgbench's parsing of double values to notice trailing garbage.
Tom Lane [Fri, 6 May 2016 15:08:48 +0000 (11:08 -0400)]
Fix pgbench's parsing of double values to notice trailing garbage.

Noted by Fabien Coelho, though this isn't exactly his proposed patch.
(The technique used here is borrowed from the zic sources.)

8 years agoImprove handling of numeric-valued variables in pgbench.
Tom Lane [Fri, 6 May 2016 15:01:05 +0000 (11:01 -0400)]
Improve handling of numeric-valued variables in pgbench.

The previous coding always stored variable values as strings, doing
conversion on-the-fly when a numeric value was needed or a number was to be
assigned.  This was a bit inefficient and risked loss of precision for
floating-point values.  The precision aspect had been hacked around by
printing doubles in "%.18e" format, which is ugly and has machine-dependent
results.  Instead, arrange to preserve an assigned numeric value in the
original binary numeric format, converting to string only when and if
needed.  When we do need to convert a double to string, convert in "%g"
format with DBL_DIG precision, which is the standard way to do it and
produces the least surprising results in most cases.

The implementation supports storing both a string value and a numeric
value for any one variable, with lazy conversion between them.  I also
arranged for lazy re-sorting of the variable array when new variables are
added.  That was mainly to allow a clean refactoring of putVariable()
into two levels of subroutine, but it may allow us to save a few sorts.

Discussion: <9188.1462475559@sss.pgh.pa.us>

8 years agoDocs: fix \crosstabview example.
Tom Lane [Fri, 6 May 2016 14:39:35 +0000 (10:39 -0400)]
Docs: fix \crosstabview example.

This example missed being updated when we redefined \crosstabview's
argument processing.

Daniel Vérité

8 years agoFix hash index vs "snapshot too old" problemms
Kevin Grittner [Fri, 6 May 2016 12:47:12 +0000 (07:47 -0500)]
Fix hash index vs "snapshot too old" problemms

Hash indexes are not WAL-logged, and so do not maintain the LSN of
index pages.  Since the "snapshot too old" feature counts on
detecting error conditions using the LSN of a table and all indexes
on it, this makes it impossible to safely do early vacuuming on any
table with a hash index, so add this to the tests for whether the
xid used to vacuum a table can be adjusted based on
old_snapshot_threshold.

While at it, add a paragraph to the docs for old_snapshot_threshold
which specifically mentions this and other aspects of the feature
which may otherwise surprise users.

Problem reported and patch reviewed by Amit Kapila

8 years agoFix psql's \ev and \sv commands so that they handle view reloptions.
Dean Rasheed [Fri, 6 May 2016 11:48:27 +0000 (12:48 +0100)]
Fix psql's \ev and \sv commands so that they handle view reloptions.

Commit 8eb6407aaeb6cbd972839e356b436bb698f51cff added support for
editing and showing view definitions, but neglected to account for
view options such as security_barrier and WITH CHECK OPTION which are
not returned by pg_get_viewdef() and so need special handling.

Author: Dean Rasheed
Reviewed-by: Peter Eisentraut
Discussion: http://www.postgresql.org/message-id/CAEZATCWZjCgKRyM-agE0p8ax15j9uyQoF=qew7D2xB6cF76T8A@mail.gmail.com

8 years agoMove and rename fmtReloptionsArray().
Dean Rasheed [Fri, 6 May 2016 11:45:36 +0000 (12:45 +0100)]
Move and rename fmtReloptionsArray().

Move fmtReloptionsArray() from pg_dump.c to string_utils.c so that it
is available to other frontend code. In particular psql's \ev and \sv
commands need it to handle view reloptions. Also rename the function
to appendReloptionsArray(), which is a more accurate description of
what it does.

Author: Dean Rasheed
Reviewed-by: Peter Eisentraut
Discussion: http://www.postgresql.org/message-id/CAEZATCWZjCgKRyM-agE0p8ax15j9uyQoF=qew7D2xB6cF76T8A@mail.gmail.com

8 years agoFurther 9.6 release note improvements.
Tom Lane [Fri, 6 May 2016 02:37:30 +0000 (22:37 -0400)]
Further 9.6 release note improvements.

Call out the major enhancements in this release as identified by
pgsql-advocacy discussion, and rearrange some of the entries to
make those items more prominent.  Other minor improvements per
advice from Vitaly Burovoy, Masahiko Sawada, Peter Geoghegan,
and Andres Freund.

8 years agoUpdate time zone data files to tzdata release 2016d.
Tom Lane [Fri, 6 May 2016 00:08:58 +0000 (20:08 -0400)]
Update time zone data files to tzdata release 2016d.

DST law changes in Russia (Magadan, Tomsk regions) and Venezuela.
Historical corrections for Russia.  There are new zone names Europe/Kirov
and Asia/Tomsk reflecting the fact that these regions now have different
time zone histories from adjacent regions.

8 years agoRename tsvector delete() to ts_delete(), and filter() to ts_filter().
Tom Lane [Thu, 5 May 2016 23:43:32 +0000 (19:43 -0400)]
Rename tsvector delete() to ts_delete(), and filter() to ts_filter().

The similarity of the original names to SQL keywords seems like a bad
idea.  Rename them before we're stuck with 'em forever.

In passing, minor code and docs cleanup.

Discussion: <4875.1462210058@sss.pgh.pa.us>

8 years agoSmall 9.6 release note improvements.
Tom Lane [Thu, 5 May 2016 22:52:32 +0000 (18:52 -0400)]
Small 9.6 release note improvements.

Sync release notes through today, and incorporate some suggestions
from Robert Haas.

8 years agoRename pgbench min/max to least/greatest, and fix handling of double args.
Tom Lane [Thu, 5 May 2016 18:51:00 +0000 (14:51 -0400)]
Rename pgbench min/max to least/greatest, and fix handling of double args.

These functions behave like the backend's least/greatest functions,
not like min/max, so the originally-chosen names invite confusion.
Per discussion, rename to least/greatest.

I also took it upon myself to make them return double if any input is
double.  The previous behavior of silently coercing all inputs to int
surely does not meet the principle of least astonishment.

Copy-edit some of the other new functions' documentation, too.

8 years agoFirst-draft release notes for Postgres 9.6.
Tom Lane [Thu, 5 May 2016 17:27:59 +0000 (13:27 -0400)]
First-draft release notes for Postgres 9.6.

These are just of beta quality, but we're only at beta ... the section
about parallel query, in particular, could doubtless use more work.

8 years agoFix ordering/categorization of some recently-added system views.
Tom Lane [Thu, 5 May 2016 16:33:12 +0000 (12:33 -0400)]
Fix ordering/categorization of some recently-added system views.

Somebody added pg_replication_origin, pg_replication_origin_status and
pg_replication_slots to catalogs.sgml without a whole lot of concern for
either alphabetical order or the difference between a table and a view.
Clean up the mess.

Back-patch to 9.5, not so much because this is critical as because if
I don't it will result in a cross-branch divergence in release-9.5.sgml,
which would be a maintenance hazard.

8 years agoFix corner-case loss of precision in numeric pow() calculation
Dean Rasheed [Thu, 5 May 2016 10:16:17 +0000 (11:16 +0100)]
Fix corner-case loss of precision in numeric pow() calculation

Commit 7d9a4737c268f61fb8800957631f12d3f13be218 greatly improved the
accuracy of the numeric transcendental functions, however it failed to
consider the case where the result from pow() is close to the overflow
threshold, for example 0.12 ^ -2345.6. For such inputs, where the
result has more than 2000 digits before the decimal point, the decimal
result weight estimate was being clamped to 2000, leading to a loss of
precision in the final calculation.

Fix this by replacing the clamping code with an overflow test that
aborts the calculation early if the final result is sure to overflow,
based on the overflow limit in exp_var(). This provides the same
protection against integer overflow in the subsequent result scale
computation as the original clamping code, but it also ensures that
precision is never lost and saves compute cycles in cases that are
sure to overflow.

The new early overflow test works with the initial low-precision
result (expected to be accurate to around 8 significant digits) and
includes a small fuzz factor to ensure that it doesn't kick in for
values that would not overflow exp_var(), so the overall overflow
threshold of pow() is unchanged and consistent for all inputs with
non-integer exponents.

Author: Dean Rasheed
Reviewed-by: Tom Lane
Discussion: http://www.postgresql.org/message-id/CAEZATCUj3U-cQj0jjoia=qgs0SjE3auroxh8swvNKvZWUqegrg@mail.gmail.com
See-also: http://www.postgresql.org/message-id/CAEZATCV7w+8iB=07dJ8Q0zihXQT1semcQuTeK+4_rogC_zq5Hw@mail.gmail.com

8 years agoRevert timeline following in replication slots
Alvaro Herrera [Wed, 4 May 2016 20:32:22 +0000 (17:32 -0300)]
Revert timeline following in replication slots

This reverts commits f07d18b6e94d82c83b3372023a3b309041b0, and
24c5f1a103ce.

This feature has shown enough immaturity that it was deemed better to
rip it out before rushing some more fixes at the last minute.  There are
discussions on larger changes in this area for the next release.

8 years agodoc: Fix more typos
Peter Eisentraut [Wed, 4 May 2016 18:07:00 +0000 (14:07 -0400)]
doc: Fix more typos

From: Alexander Law <exclusion@gmail.com>

8 years agoFix crash of filter(tsvector)
Teodor Sigaev [Wed, 4 May 2016 14:58:08 +0000 (17:58 +0300)]
Fix crash of filter(tsvector)

Variable storing a position of lexeme, had a wrong type: char, it's
obviously not enough to store 2^14 possible positions.

Stas Kelvich

8 years agoFix transient mdsync() errors of truncated relations due to 72a98a6395.
Andres Freund [Wed, 4 May 2016 08:54:20 +0000 (01:54 -0700)]
Fix transient mdsync() errors of truncated relations due to 72a98a6395.

Unfortunately the segment size checks from 72a98a6395 had the negative
side-effect of breaking a corner case in mdsync(): When processing a
fsync request for a truncated away segment mdsync() could fail with
"could not fsync file" (if previous segment < RELSEG_SIZE) because
_mdfd_getseg() now wouldn't return the relevant segment anymore.

The cleanest fix seems to be to allow the caller of _mdfd_getseg() to
specify whether checks for RELSEG_SIZE are performed. To allow doing so,
change the ExtensionBehavior enum into a bitmask. Besides allowing for
the addition of EXTENSION_DONT_CHECK_SIZE, this makes for a nicer
implementation of EXTENSION_REALLY_RETURN_NULL.

Besides mdsync() the only callsite that should change behaviour due to
this is mdprefetch() which now doesn't create segments anymore, even in
recovery. Given the uses of mdprefetch() that seems better.

Reported-By: Thom Brown
Discussion: CAA-aLv72QazLvPdKZYpVn4a_Eh+i4_cxuB03k+iCuZM_xjc+6Q@mail.gmail.com

8 years agodoc: Fix typos
Peter Eisentraut [Wed, 4 May 2016 01:06:25 +0000 (21:06 -0400)]
doc: Fix typos

From: Alexander Law <exclusion@gmail.com>

8 years agoFix more things to be parallel-safe.
Robert Haas [Tue, 3 May 2016 18:36:38 +0000 (14:36 -0400)]
Fix more things to be parallel-safe.

Conversion functions were previously marked as parallel-unsafe, since
that is the default, but in fact they are safe.  Parallel-safe
functions defined in pg_proc.h and redefined in system_views.sql were
ending up as parallel-unsafe because the redeclarations were not
marked PARALLEL SAFE.  While editing system_views.sql, mark ts_debug()
parallel safe also.

Andreas Karlsson

8 years agoTweak a few more things in preparation for upcoming pgindent run.
Robert Haas [Tue, 3 May 2016 14:52:25 +0000 (10:52 -0400)]
Tweak a few more things in preparation for upcoming pgindent run.

These adjustments adjust code and comments in minor ways to prevent
pgindent from mangling them.  Among other things, I tried to avoid
situations where pgindent would emit "a +b" instead of "a + b", and I
tried to avoid having it break up inline comments across multiple
lines.

8 years agoNote that max_worker_processes requires restart.
Robert Haas [Tue, 3 May 2016 14:39:21 +0000 (10:39 -0400)]
Note that max_worker_processes requires restart.

Since this is a minor issue, no back-patch.

Julien Rouhaud

8 years agoFix thinko in comment
Alvaro Herrera [Mon, 2 May 2016 19:46:42 +0000 (16:46 -0300)]
Fix thinko in comment

Pointed out by Andres Freund

8 years agoFix code comments regarding logical decoding
Alvaro Herrera [Mon, 2 May 2016 19:04:29 +0000 (16:04 -0300)]
Fix code comments regarding logical decoding

Back in 3b02ea4f0780 I added some comments in various places to explain
how logical decoding and other things worked.  Not all of the changes
were welcome, because they were misleading or wrong.  This changes them
a little bit to make them more accurate.

Some other comments are also changed to be more accurate.  Also, fix a
bunch of typos.

Author: Álvaro Herrera, Craig Ringer

Andres Freund reviewed some parts of this.

8 years agoDocs: improve index entries for new tsvector functions.
Tom Lane [Mon, 2 May 2016 17:28:52 +0000 (13:28 -0400)]
Docs: improve index entries for new tsvector functions.

Fix typos, reword some overly general index entries.

8 years agoFix configure's incorrect version tests for flex and perl.
Tom Lane [Mon, 2 May 2016 15:18:10 +0000 (11:18 -0400)]
Fix configure's incorrect version tests for flex and perl.

awk's equality-comparison operator is "==" not "=".  We got this right
in many places, but not in configure's checks for supported version
numbers of flex and perl.  It hadn't been noticed because unsupported
versions are so old as to be basically extinct in the wild, and because
the only consequence is whether or not a WARNING flies by during
configure.

Daniel Gustafsson noted the problem with respect to the test for flex,
I found the other by reviewing other awk calls.

8 years agoFix parallel safety markings for pg_start_backup.
Robert Haas [Mon, 2 May 2016 14:42:34 +0000 (10:42 -0400)]
Fix parallel safety markings for pg_start_backup.

Commit 7117685461af50f50c03f43e6a622284c8d54694 made pg_start_backup
parallel-restricted rather than parallel-safe, because it now relies
on backend-private state that won't be synchronized with the parallel
worker.  However, it didn't update pg_proc.h.  Separately, Andreas
Karlsson observed that system_views.sql neglected to reiterate the
parallel-safety markings whe redefining various functions, including
this one; so add a PARALLEL RESTRICTED declaration there to match
the new value in pg_proc.h.

8 years agoAgain update typedefs.list file in preparation for pgindent run
Robert Haas [Mon, 2 May 2016 13:23:55 +0000 (09:23 -0400)]
Again update typedefs.list file in preparation for pgindent run

This time, use the buildfarm-supplied contents for this file, instead
of trying to update it by eyeballing the pgindent output.

Per discussion with Tom and Bruce.

8 years agoRemove unused macros.
Heikki Linnakangas [Mon, 2 May 2016 07:07:49 +0000 (10:07 +0300)]
Remove unused macros.

CHECK_PAGE_OFFSET_RANGE() has been unused forever.
CHECK_RELATION_BLOCK_RANGE() has been unused in pgstatindex.c ever since
bt_page_stats() and bt_page_items() functions were moved from pgstattuple
to pageinspect module. It still exists in pageinspect/btreefuncs.c.

Daniel Gustafsson

8 years agodoc: Fix typo
Peter Eisentraut [Mon, 2 May 2016 01:33:31 +0000 (21:33 -0400)]
doc: Fix typo

From: Guillaume Lelarge <guillaume@lelarge.info>

8 years agoAdd a --non-master-only option to git_changelog.
Tom Lane [Sun, 1 May 2016 15:24:32 +0000 (11:24 -0400)]
Add a --non-master-only option to git_changelog.

This has the inverse effect of --master-only.  It's needed to help find
cases where a commit should not be described in major release notes
because it was back-patched into older branches, though not at the same
time as the HEAD commit.

8 years agoUpdate contrib/unaccent documentation about its unaccent.rules file.
Tom Lane [Sat, 30 Apr 2016 19:06:26 +0000 (15:06 -0400)]
Update contrib/unaccent documentation about its unaccent.rules file.

Commit 1bbd52cb9a4aa61a didn't bother with such niceties.

8 years agoSmall improvements to OPTIMIZER_DEBUG code.
Tom Lane [Sat, 30 Apr 2016 18:08:00 +0000 (14:08 -0400)]
Small improvements to OPTIMIZER_DEBUG code.

Now that Paths have their own rows field, print that rather than
the parent relation's rowcount.

Show the relid sets associated with Paths using table names rather
than numbers; since this code is able to print simple Var references
using table names, it seems a bit silly that print_relids can't.

Print the cheapest_parameterized_paths list for a RelOptInfo, and
include information about a parameterized path's required_outer rels.

Noted while trying to use this feature to debug Alexander Kirkouski's
recent bug report.

8 years agoFix planner crash from pfree'ing a partial path that a GatherPath uses.
Tom Lane [Sat, 30 Apr 2016 16:29:21 +0000 (12:29 -0400)]
Fix planner crash from pfree'ing a partial path that a GatherPath uses.

We mustn't run generate_gather_paths() during add_paths_to_joinrel(),
because that function can be invoked multiple times for the same target
joinrel.  Not only is it wasteful to build GatherPaths repeatedly, but
a later add_partial_path() could delete the partial path that a previously
created GatherPath depends on.  Instead establish the convention that we
do generate_gather_paths() for a rel only just before set_cheapest().

The code was accidentally not broken for baserels, because as of today there
never is more than one partial path for a baserel.  But that assumption
obviously has a pretty short half-life, so move the generate_gather_paths()
calls for those cases as well.

Also add some generic comments explaining how and why this all works.

Per fuzz testing by Andreas Seltenreich.

Report: <871t5pgwdt.fsf@credativ.de>

8 years agoRemove warning about num_sync being too large in synchronous_standby_names.
Tom Lane [Sat, 30 Apr 2016 14:54:45 +0000 (10:54 -0400)]
Remove warning about num_sync being too large in synchronous_standby_names.

If we're not going to reject such setups entirely, throwing a WARNING in
check_synchronous_standby_names() is unhelpful, because it will cause the
warning to be logged again every time the postmaster receives SIGHUP.
Per discussion, just remove the warning.

In passing, improve the documentation for synchronous_commit, which had not
gotten the word that now there can be more than one synchronous standby.

8 years agoFix mishandling of equivalence-class tests in parameterized plans.
Tom Lane [Sat, 30 Apr 2016 00:19:38 +0000 (20:19 -0400)]
Fix mishandling of equivalence-class tests in parameterized plans.

Given a three-or-more-way equivalence class, such as X.Y = Y.Y = Z.Z,
it was possible for the planner to omit one of the quals needed to
enforce that all members of the equivalence class are actually equal.
This only happened in the case of a parameterized join node for two
of the relations, that is a plan tree like

Nested Loop
  ->  Scan X
  ->  Nested Loop
    ->  Scan Y
    ->  Scan Z
          Filter: Z.Z = X.X

The eclass machinery normally expects to apply X.X = Y.Y when those
two relations are joined, but in this shape of plan tree they aren't
joined until the top node --- and, if the lower nested loop is marked
as parameterized by X, the top node will assume that the relevant eclass
condition(s) got pushed down into the lower node.  On the other hand,
the scan of Z assumes that it's only responsible for constraining Z.Z
to match any one of the other eclass members.  So one or another of
the required quals sometimes fell between the cracks, depending on
whether consideration of the eclass in get_joinrel_parampathinfo()
for the lower nested loop chanced to generate X.X = Y.Y or X.X = Z.Z
as the appropriate constraint there.  If it generated the latter,
it'd erroneously suppose that the Z scan would take care of matters.
To fix, force X.X = Y.Y to be generated and applied at that join node
when this case occurs.

This is *extremely* hard to hit in practice, because various planner
behaviors conspire to mask the problem; starting with the fact that the
planner doesn't really like to generate a parameterized plan of the
above shape.  (It might have been impossible to hit it before we
tweaked things to allow this plan shape for star-schema cases.)  Many
thanks to Alexander Kirkouski for submitting a reproducible test case.

The bug can be demonstrated in all branches back to 9.2 where parameterized
paths were introduced, so back-patch that far.

8 years agoAdd a few entries to the tail of time mapping, to see old values.
Kevin Grittner [Fri, 29 Apr 2016 21:46:08 +0000 (16:46 -0500)]
Add a few entries to the tail of time mapping, to see old values.

Without a few entries beyond old_snapshot_threshold, the lookup
would often fail, resulting in the more aggressive pruning or
vacuum being skipped often enough to matter.  This was very clearly
shown by a python test script posted by Ants Aasma, and was likely
a factor in an earlier but somewhat less clear-cut test case posted
by Jeff Janes.

This patch makes no change to the logic, per se -- it just makes
the array of mapping entries big enough to make lookup misses based
on timing much less likely.  An occasional miss is still possible
if a thread stalls for more than 10 minutes, but that does not
create any problem with correctness of behavior.  Besides, if
things are so busy that a thread is stalling for more than 10
minutes, it is probably OK to skip the more aggressive cleanup at
that particular point in time.

8 years agoFix comment whitespace in VS2105 patch
Andrew Dunstan [Fri, 29 Apr 2016 18:18:51 +0000 (14:18 -0400)]
Fix comment whitespace in VS2105 patch

per gripe from Michael Paquier.

8 years agodoc: Minor wording changes
Peter Eisentraut [Fri, 29 Apr 2016 17:03:58 +0000 (13:03 -0400)]
doc: Minor wording changes

From: Dmitry Igrishin <dmitigr@gmail.com>

8 years agoFix typo
Magnus Hagander [Fri, 29 Apr 2016 14:14:20 +0000 (16:14 +0200)]
Fix typo

Author: Thomas Munro

8 years agoFix typo in VS2015 patch
Andrew Dunstan [Fri, 29 Apr 2016 13:49:31 +0000 (09:49 -0400)]
Fix typo in VS2015 patch

reported by Christian Ullrich

8 years agoSupport building with Visual Studio 2015
Andrew Dunstan [Fri, 29 Apr 2016 11:59:47 +0000 (07:59 -0400)]
Support building with Visual Studio 2015

Adjust the way we detect the locale. As a result the minumum Windows
version supported by VS2015 and later is Windows Vista. Add some tweaks
to remove new compiler warnings. Remove documentation references to the
now obsolete msysGit.

Michael Paquier, somewhat edited by me, reviewed by Christian Ullrich.

Backpatch to 9.5

8 years agoRemember asking for feedback during walsender shutdown.
Andres Freund [Fri, 29 Apr 2016 05:05:37 +0000 (22:05 -0700)]
Remember asking for feedback during walsender shutdown.

Since 5a991ef8 we're explicitly asking for feedback from the receiving
side when shutting down walsender, if there's not yet replicated
data.

Unfortunately we didn't remember (i.e. set waiting_for_ping_response to
true) having asked for feedback, leading to scenarios in which replies
were requested at a high frequency.

I can't reproduce this problem on my laptop, I think that's because the
problem requires a significant TCP window to manifest due to the
!pq_is_send_pending() condition. But since this clearly is a bug, let's
fix it.  There's quite possibly more wrong than just this though.

While fiddling with WalSndDone(), I rewrote a hard to understand comment
about looking at the flush vs. the write position.

Reported-By: Nick Cleaton, Magnus Hagander
Author: Nick Cleaton
Discussion: CAFgz3kus=rC_avEgBV=+hRK5HYJ8vXskJRh8yEAbahJGTzF2VQ@mail.gmail.com
    CABUevExsjROqDcD0A2rnJ6HK6FuKGyewJr3PL12pw85BHFGS2Q@mail.gmail.com
Backpatch: 9.4, were 5a991ef8 introduced the use of feedback messages
    during shutdown.

8 years agoAdjust DatumGetBool macro, this time for sure.
Tom Lane [Thu, 28 Apr 2016 15:50:58 +0000 (11:50 -0400)]
Adjust DatumGetBool macro, this time for sure.

Commit 23a41573c attempted to fix the DatumGetBool macro to ignore bits
in a Datum that are to the left of the actual bool value.  But it did that
by casting the Datum to bool; and on compilers that use C99 semantics for
bool, that ends up being a whole-word test, not a 1-byte test.  This seems
to be the true explanation for contrib/seg failing in VS2015.  To fix, use
GET_1_BYTE() explicitly.  I think in the previous patch, I'd had some idea
of not having to commit to bool being exactly 1 byte wide, but regardless
of what the compiler's bool is, boolean columns and Datums are certainly
1 byte wide.

The previous fix was (eventually) back-patched into all active versions,
so do likewise with this one.

8 years agoRevert "Convert contrib/seg's bool-returning SQL functions to V1 call convention."
Tom Lane [Thu, 28 Apr 2016 15:46:07 +0000 (11:46 -0400)]
Revert "Convert contrib/seg's bool-returning SQL functions to V1 call convention."

This reverts commit c8e81afc60093b199a128ccdfbb692ced8e0c9cd.
That turns out to have been based on a faulty diagnosis of why the
VS2015 build was misbehaving.  Instead, we need to fix DatumGetBool().

8 years agoPrevent to use magic constants
Teodor Sigaev [Thu, 28 Apr 2016 13:39:25 +0000 (16:39 +0300)]
Prevent to use magic constants

Use macroses for definition amstrategies/amsupport fields instead of
hardcoded values.

Author: Nikolay Shaplov with addition for contrib/bloom

8 years agoPrevent multiple cleanup process for pending list in GIN.
Teodor Sigaev [Thu, 28 Apr 2016 13:21:42 +0000 (16:21 +0300)]
Prevent multiple cleanup process for pending list in GIN.

Previously, ginInsertCleanup could exit early if it detects that someone else
is cleaning up the pending list, without waiting for that someone else to
finish the job. But in this case vacuum could miss tuples to be deleted.

Cleanup process now locks metapage with a help of heavyweight
LockPage(ExclusiveLock), and it guarantees that there is no another cleanup
process at the same time. Lock is taken differently depending on caller of
cleanup process: any vacuums and gin_clean_pending_list() will be blocked
until lock becomes available, ordinary insert uses conditional lock to
prevent indefinite waiting on lock.

Insert into pending list doesn't use this lock, so insertion isn't blocked.

Also, patch adds stopping of cleanup process when at-start-cleanup-tail is
reached in order to prevent infinite cleanup in case of massive insertion. But
it will stop only for automatic maintenance tasks like autovacuum.

Patch introduces choice of limit of memory to use: autovacuum_work_mem,
maintenance_work_mem or work_mem depending on call path.

Patch for previous releases should be reworked due to changes between 9.6 and
previous ones in this area.

Discover and diagnostics by Jeff Janes and Tomas Vondra

Patch by me with some ideas of Jeff Janes

8 years agoUse memmove() not memcpy() to slide some pointers down.
Tom Lane [Wed, 27 Apr 2016 22:19:28 +0000 (18:19 -0400)]
Use memmove() not memcpy() to slide some pointers down.

The previous coding here was formally undefined, though it seems to
accidentally work on most platforms in the buildfarm.  Caught by some
OpenBSD platforms in which libc contains an assertion check for
overlapping areas passed to memcpy().

Thomas Munro

8 years agoClean up parsing of synchronous_standby_names GUC variable.
Tom Lane [Wed, 27 Apr 2016 21:55:19 +0000 (17:55 -0400)]
Clean up parsing of synchronous_standby_names GUC variable.

Commit 989be0810dffd08b added a flex/bison lexer/parser to interpret
synchronous_standby_names.  It was done in a pretty crufty way, though,
making assorted end-use sites responsible for calling the parser at the
right times.  That was not only vulnerable to errors of omission, but made
it possible that lexer/parser errors occur at very undesirable times,
and created memory leakages even if there was no error.

Instead, perform the parsing once during check_synchronous_standby_names
and let guc.c manage the resulting data.  To do that, we have to flatten
the parsed representation into a single hunk of malloc'd memory, but that
is not very hard.

While at it, work a little harder on making useful error reports for
parsing problems; the previous code felt that "synchronous_standby_names
parser returned 1" was an appropriate user-facing error message.  (To
be fair, it did also log a syntax error message, but separately from the
GUC problem report, which is at best confusing.)  It had some outright
bugs in the face of invalid input, too.

I (tgl) also concluded that we need to restrict unquoted names in
synchronous_standby_names to be just SQL identifiers.  The previous coding
would accept darn near anything, which (1) makes the quoting convention
both nearly-unnecessary and formally ambiguous, (2) makes it very hard to
understand what is a syntax error and what is a creative interpretation of
the input as a standby name, and (3) makes it impossible to further extend
the syntax in future without a compatibility break.  I presume that we're
intending future extensions of the syntax, else this parsing infrastructure
is massive overkill, so (3) is an important objection.  Since we've taken
a compatibility hit for non-identifier names with this change anyway, we
might as well lock things down now and insist that users use double quotes
for standby names that aren't identifiers.

Kyotaro Horiguchi and Tom Lane

8 years agoFix wrong word.
Robert Haas [Wed, 27 Apr 2016 18:23:56 +0000 (14:23 -0400)]
Fix wrong word.

Commit a31212b429cd3397fb3147b1a584ae33224454a6 was a little too hasty.

Per report from Tom Lane.

8 years agoChange postgresql.conf.sample to say that fsync=off will corrupt data.
Robert Haas [Wed, 27 Apr 2016 17:46:26 +0000 (13:46 -0400)]
Change postgresql.conf.sample to say that fsync=off will corrupt data.

Discussion: 24748.1461764666@sss.pgh.pa.us

Per a suggestion from Craig Ringer.  This wording from Tom Lane,
following discussion.

8 years agoTighten up sanity checks for parallel aggregate in execQual.c.
Robert Haas [Wed, 27 Apr 2016 16:05:35 +0000 (12:05 -0400)]
Tighten up sanity checks for parallel aggregate in execQual.c.

David Rowley

8 years agoRemove inadvertently commited vim swapfile.
Robert Haas [Wed, 27 Apr 2016 15:53:01 +0000 (11:53 -0400)]
Remove inadvertently commited vim swapfile.

If you were wondering what editor I use, now you know.

8 years agoUpdate typedefs.list file in preparation for pgindent run
Robert Haas [Wed, 27 Apr 2016 15:47:28 +0000 (11:47 -0400)]
Update typedefs.list file in preparation for pgindent run

In addition to adding new typedefs, I also re-sorted the file so that
various entries add piecemeal, mostly or entirely by me, were alphabetized
the same way as other entries in the file.

8 years agoClean up a few parallelism-related things that pgindent wants to mangle.
Robert Haas [Wed, 27 Apr 2016 15:29:45 +0000 (11:29 -0400)]
Clean up a few parallelism-related things that pgindent wants to mangle.

In nodeFuncs.c, pgindent wants to introduce spurious indentation into
the definitions of planstate_tree_walker and planstate_walk_subplans.
Fix that by spreading the definition out across several lines, similar
to what is already done for other walker functions in that file.

In execParallel.c, in the definition of SharedExecutorInstrumentation,
pgindent wants to insert more whitespace between the type name and the
member name.  That causes it to mangle comments later on the line.  Fix
by moving the comments out of line.  Now that we have a bit more room,
add some more details that may be useful to the next person reading
this code.

8 years agoRemove mergeHyperLogLog.
Robert Haas [Wed, 27 Apr 2016 14:55:32 +0000 (10:55 -0400)]
Remove mergeHyperLogLog.

It's buggy.  If somebody needs this later, they'll need to put back
a non-buggy vesion of it.

Discussion: CAM3SWZT-i6R9JU5YXa8MJUou2_r3LfGJZpQ9tYa1BYxfkj0=cQ@mail.gmail.com
Discussion: CAM3SWZRUOLsYoTT83QgdUy9D8ehYWm_nvbrrfcOOzikiRfFY7g@mail.gmail.com

Peter Geoghegan

8 years agoFix EXPLAIN VERBOSE output for parallel aggregate.
Robert Haas [Wed, 27 Apr 2016 11:33:33 +0000 (07:33 -0400)]
Fix EXPLAIN VERBOSE output for parallel aggregate.

The way that PartialAggregate and FinalizeAggregate plan nodes were
displaying output columns before was bogus.  Now, FinalizeAggregate
produces the same outputs as an Aggregate would have produced, while
PartialAggregate produces each of those outputs prefixed by the word
PARTIAL.

Discussion: 12585.1460737650@sss.pgh.pa.us

Patch by me, reviewed by David Rowley.

8 years agoDon't open formally non-existent segments in _mdfd_getseg().
Andres Freund [Wed, 27 Apr 2016 03:32:51 +0000 (20:32 -0700)]
Don't open formally non-existent segments in _mdfd_getseg().

Before this commit _mdfd_getseg(), in contrast to mdnblocks(), did not
verify whether all segments leading up to the to-be-opened one, were
RELSEG_SIZE sized. That is e.g. not the case after truncating a
relation, because later segments just get truncated to zero length, not
removed.

Once a "non-existent" segment has been opened in a session, mdnblocks()
will return wrong results, causing errors like "could not read block %u
in file" when accessing blocks. Closing the session, or the later
arrival of relevant invalidation messages, would "fix" the problem.

That, so far, was mostly harmless, because most segment accesses are
only done after an mdnblocks() call. But since 428b1d6b29ca we try to
open segments that might have been deleted, to trigger kernel writeback
from a backend's queue of recent writes.

To fix check segment sizes in _mdfd_getseg() when opening previously
unopened segments. In practice this shouldn't imply a lot of additional
lseek() calls, because mdnblocks() will most of the time already have
opened all relevant segments.

This commit also fixes a second problem, namely that _mdfd_getseg(
EXTENSION_RETURN_NULL) extends files during recovery, which is not
desirable for the mdwriteback() case.  Add EXTENSION_REALLY_RETURN_NULL,
which does not behave that way, and use it.

Reported-By: Thom Brown
Author: Andres Freund, Abhijit Menon-Sen
Reviewd-By: Robert Haas, Fabien Coehlo
Discussion: CAA-aLv6Dp_ZsV-44QA-2zgkqWKQq=GedBX2dRSrWpxqovXK=Pg@mail.gmail.com
Fixes: 428b1d6b29ca599c5700d4bc4f4ce4c5880369bf
8 years agoEmit invalidations to standby for transactions without xid.
Andres Freund [Sun, 24 Apr 2016 02:18:00 +0000 (19:18 -0700)]
Emit invalidations to standby for transactions without xid.

So far, when a transaction with pending invalidations, but without an
assigned xid, committed, we simply ignored those invalidation
messages. That's problematic, because those are actually sent for a
reason.

Known symptoms of this include that existing sessions on a hot-standby
replica sometimes fail to notice new concurrently built indexes and
visibility map updates.

The solution is to WAL log such invalidations in transactions without an
xid. We considered to alternatively force-assign an xid, but that'd be
problematic for vacuum, which might be run in systems with few xids.

Important: This adds a new WAL record, but as the patch has to be
back-patched, we can't bump the WAL page magic. This means that standbys
have to be updated before primaries; otherwise
"PANIC: standby_redo: unknown op code 32" errors can be encountered.

XXX:

Reported-By: Васильев Дмитрий, Masahiko Sawada
Discussion:
    CAB-SwXY6oH=9twBkXJtgR4UC1NqT-vpYAtxCseME62ADwyK5OA@mail.gmail.com
    CAD21AoDpZ6Xjg=gFrGPnSn4oTRRcwK1EBrWCq9OqOHuAcMMC=w@mail.gmail.com

8 years agoFix pg_get_functiondef to dump parallel-safety markings.
Robert Haas [Wed, 27 Apr 2016 02:56:04 +0000 (22:56 -0400)]
Fix pg_get_functiondef to dump parallel-safety markings.

Ashutosh Sharma

8 years agoImpose a full barrier in generic-xlc.h atomics functions.
Noah Misch [Wed, 27 Apr 2016 01:53:58 +0000 (21:53 -0400)]
Impose a full barrier in generic-xlc.h atomics functions.

pg_atomic_compare_exchange_*_impl() were providing only the semantics of
an acquire barrier.  Buildfarm members hornet and mandrill revealed this
deficit beginning with commit 008608b9d51061b1f598c197477b3dc7be9c4a64.
While we have no report of symptoms in 9.5, we can't rule out the
possibility of certain compilers, hardware, or extension code relying on
these functions' specified barrier semantics.  Back-patch to 9.5, where
commit b64d92f1a5602c55ee8b27a7ac474f03b7aee340 introduced atomics.

Reviewed by Andres Freund.

8 years agopg_dump: Message style improvements
Peter Eisentraut [Tue, 26 Apr 2016 16:04:43 +0000 (12:04 -0400)]
pg_dump: Message style improvements

forgotten in b6dacc173b6830c515d970698cead9a85663c553

8 years agoAdd a --brief option to git_changelog.
Tom Lane [Tue, 26 Apr 2016 22:52:17 +0000 (18:52 -0400)]
Add a --brief option to git_changelog.

In commit c0b050192, Andres introduced the idea of including one-line
commit references in our major release notes.  Teach git_changelog to
emit a (lightly adapted) version of that format, so that we don't
have to laboriously add it to the notes after the fact.  The default
output isn't changed, since I anticipate still using that for minor
release notes.

8 years agoFix tsearch docs
Teodor Sigaev [Tue, 26 Apr 2016 17:26:26 +0000 (20:26 +0300)]
Fix tsearch docs

Remove mention of setweight(tsquery) which wasn't included in 9.6. Also
replace old forgotten phrase operator to new one.

Dmitry Ivanov

8 years agoFix order of shutdown cleanup operations in PostgresNode.pm.
Tom Lane [Tue, 26 Apr 2016 16:43:03 +0000 (12:43 -0400)]
Fix order of shutdown cleanup operations in PostgresNode.pm.

Previously, database clusters created by a TAP test were shut down by
DESTROY methods attached to the PostgresNode objects representing them.
The trouble with that is that if the objects survive into the final global
destruction phase (which they do), Perl executes the DESTROY methods in an
unspecified order.  Thus, the order of shutdown of multiple clusters was
indeterminate, which might lead to not-very-reproducible errors getting
logged (eg from a slave whose master might or might not get killed first).
Worse, the File::Temp objects representing the temporary PGDATA directories
might get destroyed before the PostgresNode objects, resulting in attempts
to delete PGDATA directories that still have live servers in them.  On
Windows, this would lead to directory deletion failures; on Unix, it
usually had no effects worse than erratic "could not open temporary
statistics file "pg_stat/global.tmp": No such file or directory" log
messages.

While none of this would affect the reported result of the TAP test, which
is already determined, it could be very confusing when one is trying to
understand from the logs what went wrong with a failed test.

To fix, do the postmaster shutdowns in an END block rather than at object
destruction time.  The END block will execute at a well-defined (and
reasonable) time during script termination, and it will stop the
postmasters in order of PostgresNode object creation.  (Perhaps we should
change that to be reverse order of creation, but the main point here is
that we now have control which we did not before.)  Use "pg_ctl stop", not
an asynchronous kill(SIGQUIT), so that we wait for the postmasters to shut
down before proceeding with directory deletion.

Deletion of temporary directories still happens in an unspecified order
during global destruction, but I can see no reason to care about that
once the postmasters are stopped.

8 years agoYet more portability hacking for degree-based trig functions.
Tom Lane [Tue, 26 Apr 2016 15:24:15 +0000 (11:24 -0400)]
Yet more portability hacking for degree-based trig functions.

The true explanation for Peter Eisentraut's report of inexact asind results
seems to be that (a) he's compiling into x87 instruction set, which uses
wider-than-double float registers, plus (b) the library function asin() on
his platform returns a result that is wider than double and is not rounded
to double width.  To fix, we have to force the function's result to be
rounded comparably to what happened to the scaling constant asin_0_5.
Experimentation suggests that storing it into a volatile local variable is
the least ugly way of making that happen.  Although only asin() is known to
exhibit an observable inexact result, we'd better do this in all the places
where we're hoping to get an exact result by scaling.

8 years agoEnable parallel query by default.
Robert Haas [Tue, 26 Apr 2016 12:31:38 +0000 (08:31 -0400)]
Enable parallel query by default.

Change max_parallel_degree default from 0 to 2.  It is possible that
this is not a good idea, or that we should go with 1 worker rather
than 2, but we won't find out without trying it.  Along the way,
reword the documentation for max_parallel_degree a little bit to
hopefully make it more clear.

Discussion: 20160420174631.3qjjhpwsvvx5bau5@alap3.anarazel.de

8 years agoFix typo in comment
Magnus Hagander [Tue, 26 Apr 2016 08:38:32 +0000 (10:38 +0200)]
Fix typo in comment

Author: Daniel Gustafsson

8 years agopg_dump: Message style improvements
Peter Eisentraut [Mon, 25 Apr 2016 21:16:59 +0000 (17:16 -0400)]
pg_dump: Message style improvements

8 years agoFix C comment typo and redundant test
Kevin Grittner [Mon, 25 Apr 2016 20:42:29 +0000 (15:42 -0500)]
Fix C comment typo and redundant test

8 years agoNew method for preventing compile-time calculation of degree constants.
Tom Lane [Mon, 25 Apr 2016 19:21:04 +0000 (15:21 -0400)]
New method for preventing compile-time calculation of degree constants.

Commit 65abaab547a5758b tried to prevent the scaling constants used in
the degree-based trig functions from being precomputed at compile time,
because some compilers do that with functions that don't yield results
identical-to-the-last-bit to what you get at runtime.  A report from
Peter Eisentraut suggests that some recent compilers are smart enough
to see through that trick, though.  Instead, let's put the inputs to
these calculations into non-const global variables, which should be a
more reliable way of convincing the compiler that it can't assume that
they are compile-time constants.  (If we really get desperate, we could
mark these variables "volatile", but I do not believe we should have to.)

8 years agoTry harder to detect a port conflict in PostgresNode.pm.
Tom Lane [Mon, 25 Apr 2016 16:28:49 +0000 (12:28 -0400)]
Try harder to detect a port conflict in PostgresNode.pm.

Commit fab84c7787f25756 tried to get away without doing an actual bind(),
but buildfarm results show that that doesn't get the job done.  So we must
really bind to the target port --- and at least on my Linux box, we need a
listen() as well, or conflicts won't be detected.  We rely on SO_REUSEADDR
to prevent problems from starting a postmaster on the socket immediately
after we've bound to it in the test code.  (There may be platforms where
that doesn't work too well.  But fortunately, we only really care whether
this works on Windows, and there the default behavior should be OK.)

8 years agoUpdate GETTEXT_FILES after config and controldata refactoring
Peter Eisentraut [Mon, 25 Apr 2016 00:58:11 +0000 (20:58 -0400)]
Update GETTEXT_FILES after config and controldata refactoring

8 years agodoc: Fix typo
Peter Eisentraut [Mon, 25 Apr 2016 00:44:22 +0000 (20:44 -0400)]
doc: Fix typo

From: Andreas Seltenreich <andreas.seltenreich@credativ.de>

8 years agoImprove PostgresNode.pm's logic for detecting already-in-use ports.
Tom Lane [Sun, 24 Apr 2016 19:31:36 +0000 (15:31 -0400)]
Improve PostgresNode.pm's logic for detecting already-in-use ports.

Buildfarm members bowerbird and jacana have shown intermittent "could not
bind IPv4 socket" failures in the BinInstallCheck stage since mid-December,
shortly after commits 1caef31d9e550408 and 9821492ee417a591 changed the
logic for selecting which port to use in temporary installations.  One
plausible explanation is that we are randomly selecting ports that are
already in use for some non-Postgres purpose.  Although the code tried
to defend against already-in-use ports, it used pg_isready to probe
the port which is quite unhelpful: if some non-Postgres server responds
at the given address, pg_isready will generally say "no response",
leading to exactly the wrong conclusion about whether the port is free.

Instead, let's use a simple TCP connect() call to see if anything answers
without making assumptions about what it is.  Note that this means there's
no direct check for a conflicting Unix socket, but that should be okay
because there should be no other Unix sockets in use in the temporary
socket directory created for a test run.

This is only a partial solution for the TCP case, since if the port number
is in use for an outgoing connection rather than a listening socket, we'll
fail to detect that.  We could try to bind() to the proposed port as a
means of detecting that case, but that would introduce its own failure
modes, since the system might consider the address to remain reserved for
some period of time after we drop the bound socket.  Close study of the
errors returned by bowerbird and jacana suggests that what we're seeing
there may be conflicts with listening not outgoing sockets, so let's try
this and see if it improves matters.  It's certainly better than what's
there now, in any case.

Michael Paquier, adjusted by me to work on non-Windows as well as Windows

8 years agoFix documentation & config inconsistencies around 428b1d6b2.
Andres Freund [Sun, 24 Apr 2016 19:26:55 +0000 (12:26 -0700)]
Fix documentation & config inconsistencies around 428b1d6b2.

Several issues:
1) checkpoint_flush_after doc and code disagreed about the default
2) new GUCs were missing from postgresql.conf.sample
3) Outdated source-code comment about bgwriter_flush_after's default
4) Sub-optimal categories assigned to new GUCs
5) Docs suggested backend_flush_after is PGC_SIGHUP, but it's PGC_USERSET.
6) Spell out int as integer in the docs, as done elsewhere

Reported-By: Magnus Hagander, Fujii Masao
Discussion: CAHGQGwETyTG5VYQQ5C_srwxWX7RXvFcD3dKROhvAWWhoSBdmZw@mail.gmail.com