]> granicus.if.org Git - postgresql/log
postgresql
7 years agoImprove isolation tests infrastructure.
Andres Freund [Tue, 14 Mar 2017 22:56:17 +0000 (15:56 -0700)]
Improve isolation tests infrastructure.

Previously if a directory had both isolationtester and plain
regression tests, they couldn't be run in parallel, because they'd
access the same files/directories.  That, so far, only affected
contrib/test_decoding.

Rather than fix that locally in contrib/test_decoding, improve
pg_regress_isolation_[install]check to use separate resources from
plain regression tests.

That requires a minor change in pg_regress, namely that the
--outputdir is created if not already existing, that seems like good
idea anyway.

Use the improved helpers even where previously not used.

Author: Tom Lane and Andres Freund
Discussion: https://postgr.es/m/20170311194831.vm5ikpczq52c2drg@alap3.anarazel.de

7 years agoAdd option to control snapshot export to CREATE_REPLICATION_SLOT
Peter Eisentraut [Tue, 14 Mar 2017 21:13:56 +0000 (17:13 -0400)]
Add option to control snapshot export to CREATE_REPLICATION_SLOT

We used to export snapshots unconditionally in CREATE_REPLICATION_SLOT
in the replication protocol, but several upcoming patches want more
control over what happens.

Suppress snapshot export in pg_recvlogical, which neither needs nor can
use the exported snapshot.  Since snapshot exporting can fail this
improves reliability.

This also paves the way for allowing the creation of replication slots
on standbys, which cannot export snapshots because they cannot allocate
new XIDs.

Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>

7 years agoamcheck: Harden tests against concurrent autovacuums.
Andres Freund [Tue, 14 Mar 2017 20:07:38 +0000 (13:07 -0700)]
amcheck: Harden tests against concurrent autovacuums.

The previous coding of the test was vulnerable against autovacuum
triggering work on one of the tables in check_btree.sql.

For the purpose of the test it's entirely sufficient to check for
locks taken by the current process, so add an appropriate restriction.
While touching the test, expand it to also check for locks on the
underlying relations, rather than just the indexes.

Reported-By: Tom Lane
Discussion: https://postgr.es/m/30354.1489434301@sss.pgh.pa.us

7 years agohash: Support WAL consistency checking.
Robert Haas [Tue, 14 Mar 2017 18:58:56 +0000 (14:58 -0400)]
hash: Support WAL consistency checking.

Kuntal Ghosh, reviewed by Amit Kapila and Ashutosh Sharma, with
a few tweaks by me.

Discussion: http://postgr.es/m/CAGz5QCJLERUn_zoO0eDv6_Y_d0o4tNTMPeR7ivTLBg4rUrJdwg@mail.gmail.com

7 years agoFix regression in parallel planning against inheritance tables.
Robert Haas [Tue, 14 Mar 2017 18:33:14 +0000 (14:33 -0400)]
Fix regression in parallel planning against inheritance tables.

Commit 51ee6f3160d2e1515ed6197594bda67eb99dc2cc accidentally changed
the behavior around inheritance hierarchies; before, we always
considered parallel paths even for very small inheritance children,
because otherwise an inheritance hierarchy with even one small child
wouldn't be eligible for parallelism.  That exception was inadverently
removed; put it back.

In passing, also adjust the degree-of-parallelism comptuation for
index-only scans not to consider the number of heap pages fetched.
Otherwise, we'll avoid parallel index-only scans on tables that are
mostly all-visible, which isn't especially logical.

Robert Haas and Amit Kapila, per a report from Ashutosh Sharma.

Discussion: http://postgr.es/m/CAE9k0PmgSoOHRd60SHu09aRVTHRSs8s6pmyhJKWHxWw9C_x+XA@mail.gmail.com

7 years agohash: Add write-ahead logging support.
Robert Haas [Tue, 14 Mar 2017 17:27:02 +0000 (13:27 -0400)]
hash: Add write-ahead logging support.

The warning about hash indexes not being write-ahead logged and their
use being discouraged has been removed.  "snapshot too old" is now
supported for tables with hash indexes.  Most importantly, barring
bugs, hash indexes will now be crash-safe and usable on standbys.

This commit doesn't yet add WAL consistency checking for hash
indexes, as we now have for other index types; a separate patch has
been submitted to cure that lack.

Amit Kapila, reviewed and slightly modified by me.  The larger patch
series of which this is a part has been reviewed and tested by Álvaro
Herrera, Ashutosh Sharma, Mark Kirkwood, Jeff Janes, and Jesper
Pedersen.

Discussion: http://postgr.es/m/CAA4eK1JOBX=YU33631Qh-XivYXtPSALh514+jR8XeD7v+K3r_Q@mail.gmail.com

7 years agoInclude port number when logging successful binding to a TCP port.
Tom Lane [Tue, 14 Mar 2017 17:18:27 +0000 (13:18 -0400)]
Include port number when logging successful binding to a TCP port.

Per suggestion from Andres Freund.

Discussion: https://postgr.es/m/20170314033842.st7gifec55yigz2h@alap3.anarazel.de

7 years agoecpg: Improve some variable names
Peter Eisentraut [Tue, 14 Mar 2017 16:39:37 +0000 (12:39 -0400)]
ecpg: Improve some variable names

based on patch from Josh Soref <jsoref@gmail.com>

7 years agoSpelling fixes
Peter Eisentraut [Tue, 14 Mar 2017 16:57:10 +0000 (12:57 -0400)]
Spelling fixes

From: Josh Soref <jsoref@gmail.com>

7 years agoSpelling fixes in code comments
Peter Eisentraut [Tue, 14 Mar 2017 15:38:30 +0000 (11:38 -0400)]
Spelling fixes in code comments

From: Josh Soref <jsoref@gmail.com>

7 years agoMake logging about multixact wraparound protection less chatty.
Tom Lane [Tue, 14 Mar 2017 16:47:46 +0000 (12:47 -0400)]
Make logging about multixact wraparound protection less chatty.

The original messaging design, introduced in commit 068cfadf9, seems too
chatty now that some time has elapsed since the bug fix; most installations
will be in good shape and don't really need a reminder about this on every
postmaster start.

Hence, arrange to suppress the "wraparound protections are now enabled"
message during startup (specifically, during the TrimMultiXact() call).
The message will still appear if protection becomes effective at some
later point.

Discussion: https://postgr.es/m/17211.1489189214@sss.pgh.pa.us

7 years agoUpdate .gitignore
Robert Haas [Tue, 14 Mar 2017 16:17:44 +0000 (12:17 -0400)]
Update .gitignore

Commit 42fcad68a9c0e0ebecf6842888723cad1f9d5be2 failed to do this.

Michael Paquier

Discussion: http://postgr.es/m/CAB7nPqTXK9Qn8TmonPf29jNXGw_CA3fTDaRfgnbHCFYr-Tx6qw@mail.gmail.com

7 years agoFix failure to mark init buffers as BM_PERMANENT.
Robert Haas [Tue, 14 Mar 2017 15:51:11 +0000 (11:51 -0400)]
Fix failure to mark init buffers as BM_PERMANENT.

This could result in corruption of the init fork of an unlogged index
if the ambuildempty routine for that index used shared buffers to
create the init fork, which was true for brin, gin, gist, and hash
indexes.

Patch by me, based on an earlier patch by Michael Paquier, who also
reviewed this one.  This also incorporates an idea from Artur
Zakirov.

Discussion: http://postgr.es/m/CACYUyc8yccE4xfxhqxfh_Mh38j7dRFuxfaK1p6dSNAEUakxUyQ@mail.gmail.com

7 years agodoc: Fix synopsis
Peter Eisentraut [Tue, 14 Mar 2017 15:19:12 +0000 (11:19 -0400)]
doc: Fix synopsis

7 years agoUpdate overlooked comment for Gather Merge.
Robert Haas [Tue, 14 Mar 2017 11:52:11 +0000 (07:52 -0400)]
Update overlooked comment for Gather Merge.

Commit 355d3993c53ed62c5b53d020648e4fbcfbf5f155 probably should have
done this, but nobody noticed that it was needed.

7 years agoRemove some bogus logic from create_gather_merge_plan.
Robert Haas [Tue, 14 Mar 2017 11:28:35 +0000 (07:28 -0400)]
Remove some bogus logic from create_gather_merge_plan.

This logic was adapated from create_merge_append_plan, but the two
cases aren't really analogous, because create_merge_append_plan is not
projection-capable and must therefore have a tlist identical to that
of the underlying paths.  Overwriting the tlist of Gather Merge with
whatever the underlying plan happens to produce is no good at all.

Patch by me, reviewed by Rushabh Lathia, who also reported the issue
and made an initial attempt at a fix.

Discussion: http://postgr.es/m/CA+Tgmob_-oHEOBfT9S25bjqokdqv8e8xEmh9zOY+3MPr_LmuhA@mail.gmail.com

7 years agoFix busted markup.
Tom Lane [Mon, 13 Mar 2017 23:06:28 +0000 (19:06 -0400)]
Fix busted markup.

Oversight in commit 9ca5c8721.  Per buildfarm.

7 years agoSilence unused variable compiler warning
Alvaro Herrera [Mon, 13 Mar 2017 21:54:35 +0000 (18:54 -0300)]
Silence unused variable compiler warning

Fallout from fcec6caafa2: mark a variable in
set_tablefunc_size_estimates as used for asserts only.

Also, the planner_rte_fetch() call is pointless with assertions
disabled, so enclose it in a USE_ASSERT_CHECKING #ifdef; fix the same
problem in set_subquery_size_estimates().

First problem noted by David Rowley, whose compiler is noisier than mine
in this regard.

7 years agoAdd a "void *" passthrough pointer for psqlscan.l's callback functions.
Tom Lane [Mon, 13 Mar 2017 21:14:46 +0000 (17:14 -0400)]
Add a "void *" passthrough pointer for psqlscan.l's callback functions.

The immediate motivation for this is to provide clean infrastructure
for the proposed \if...\endif patch for psql; but it seems like a good
thing to have even if that patch doesn't get in.  Previously the callback
functions could only make use of application-global state, which is a
pretty severe handicap.

For the moment, the pointer is only passed through to the get_variable
callback function.  I considered also passing it to the write_error
callback, but for now let's not.  Neither psql nor pgbench has a use
for that, and in the case of psql we'd have to invent a separate wrapper
function because we would certainly not want to change the signature of
psql_error().

Discussion: https://postgr.es/m/10108.1489418309@sss.pgh.pa.us

7 years agoRemove unnecessary dependency on statement_timeout in prepared_xacts test.
Tom Lane [Mon, 13 Mar 2017 20:46:32 +0000 (16:46 -0400)]
Remove unnecessary dependency on statement_timeout in prepared_xacts test.

Rather than waiting around for statement_timeout to expire, we can just
try to take the table's lock in nowait mode.  This saves some fraction
under 4 seconds when running this test with prepared xacts available,
and it guards against timeout-expired-anyway failures on very slow
machines when prepared xacts are not available, as seen in a recent
failure on axolotl for instance.

This approach could fail if autovacuum were to take an exclusive lock
on the test table concurrently, but there's no reason for it to do so.

Since the main point here is to improve stability in the buildfarm,
back-patch to all supported branches.

7 years agoDocument two phase commit commands in ecpg docu.
Michael Meskes [Mon, 13 Mar 2017 19:48:29 +0000 (20:48 +0100)]
Document two phase commit commands in ecpg docu.

Patch by Masahiko Sawada

7 years agoAdd test case for two phase commit. Also by Masahiko Sawada.
Michael Meskes [Mon, 13 Mar 2017 19:47:27 +0000 (20:47 +0100)]
Add test case for two phase commit. Also by Masahiko Sawada.

7 years agoEcpg should support COMMIT PREPARED and ROLLBACK PREPARED.
Michael Meskes [Mon, 13 Mar 2017 19:44:13 +0000 (20:44 +0100)]
Ecpg should support COMMIT PREPARED and ROLLBACK PREPARED.

The problem was that "begin transaction" was issued automatically
before executing COMMIT/ROLLBACK PREPARED if not in auto commit. This fix by
Masahiko Sawada fixes this.

7 years agoInclude array size in forward declaration.
Heikki Linnakangas [Mon, 13 Mar 2017 19:53:38 +0000 (21:53 +0200)]
Include array size in forward declaration.

Some compilers require it. At least Visual Studio, according to the
buildfarm, and gcc with the -pedantic flag.

7 years agoFix compiler warning
Peter Eisentraut [Mon, 13 Mar 2017 19:44:50 +0000 (15:44 -0400)]
Fix compiler warning

From: David Rowley <david.rowley@2ndquadrant.com>

7 years agoChange xlog to WAL in some error messages
Peter Eisentraut [Mon, 13 Mar 2017 19:40:16 +0000 (15:40 -0400)]
Change xlog to WAL in some error messages

7 years agoUse radix tree for character encoding conversions.
Heikki Linnakangas [Mon, 13 Mar 2017 18:46:39 +0000 (20:46 +0200)]
Use radix tree for character encoding conversions.

Replace the mapping tables used to convert between UTF-8 and other
character encodings with new radix tree-based maps. Looking up an entry in
a radix tree is much faster than a binary search in the old maps. As a
bonus, the radix tree representation is also more compact, making the
binaries slightly smaller.

The "combined" maps work the same as before, with binary search. They are
much smaller than the main tables, so it doesn't matter so much. However,
the "combined" maps are now stored in the same .map files as the main
tables. This seems more clear, since they're always used together, and
generated from the same source files.

Patch by Kyotaro Horiguchi, with lot of hacking by me at various stages.
Reviewed by Michael Paquier and Daniel Gustafsson.

Discussion: https://www.postgresql.org/message-id/20170306.171609.204324917.horiguchi.kyotaro%40lab.ntt.co.jp

7 years agoRemove obsolete references to JIS0201.TXT JIS0208.TXT.
Heikki Linnakangas [Mon, 13 Mar 2017 17:04:45 +0000 (19:04 +0200)]
Remove obsolete references to JIS0201.TXT JIS0208.TXT.

We don't use those files anymore, since commit 1de9cc0dcc.

7 years agoinitdb: Re-add translatable string that got lost
Peter Eisentraut [Mon, 13 Mar 2017 13:10:49 +0000 (09:10 -0400)]
initdb: Re-add translatable string that got lost

7 years agoFix typo in comment
Magnus Hagander [Mon, 13 Mar 2017 11:10:54 +0000 (12:10 +0100)]
Fix typo in comment

Masahiko Sawada

7 years agoUse wrappers of PG_DETOAST_DATUM_PACKED() more.
Noah Misch [Sun, 12 Mar 2017 23:35:34 +0000 (19:35 -0400)]
Use wrappers of PG_DETOAST_DATUM_PACKED() more.

This makes almost all core code follow the policy introduced in the
previous commit.  Specific decisions:

- Text search support functions with char* and length arguments, such as
  prsstart and lexize, may receive unaligned strings.  I doubt
  maintainers of non-core text search code will notice.

- Use plain VARDATA() on values detoasted or synthesized earlier in the
  same function.  Use VARDATA_ANY() on varlenas sourced outside the
  function, even if they happen to always have four-byte headers.  As an
  exception, retain the universal practice of using VARDATA() on return
  values of SendFunctionCall().

- Retain PG_GETARG_BYTEA_P() in pageinspect.  (Page images are too large
  for a one-byte header, so this misses no optimization.)  Sites that do
  not call get_page_from_raw() typically need the four-byte alignment.

- For now, do not change btree_gist.  Its use of four-byte headers in
  memory is partly entangled with storage of 4-byte headers inside
  GBT_VARKEY, on disk.

- For now, do not change gtrgm_consistent() or gtrgm_distance().  They
  incorporate the varlena header into a cache, and there are multiple
  credible implementation strategies to consider.

7 years agoRecommend wrappers of PG_DETOAST_DATUM_PACKED().
Noah Misch [Sun, 12 Mar 2017 23:35:33 +0000 (19:35 -0400)]
Recommend wrappers of PG_DETOAST_DATUM_PACKED().

When commit 3e23b68dac006e8deb0afa327e855258df8de064 introduced
single-byte varlena headers, its fmgr.h changes presented
PG_GETARG_TEXT_PP() and PG_GETARG_TEXT_P() as equals.  Its postgres.h
changes presented PG_DETOAST_DATUM_PACKED() and VARDATA_ANY() as the
exceptional case.  Now, instead, firmly recommend PG_GETARG_TEXT_PP()
over PG_GETARG_TEXT_P(); likewise for other ...PP() macros.  This shaves
cycles and invites consistency of style.

7 years agoFix pg_file_write() error handling.
Noah Misch [Sun, 12 Mar 2017 23:35:31 +0000 (19:35 -0400)]
Fix pg_file_write() error handling.

Detect fclose() failures; given "ln -s /dev/full $PGDATA/devfull",
"pg_file_write('devfull', 'x', true)" now fails as it should.  Don't
leak a stream when fwrite() fails.  Remove a born-ineffective test that
aimed to skip zero-length writes.  Back-patch to 9.2 (all supported
versions).

7 years agoAssume deconstruct_array() outputs are untoasted.
Noah Misch [Sun, 12 Mar 2017 23:35:31 +0000 (19:35 -0400)]
Assume deconstruct_array() outputs are untoasted.

In functions that issue a deconstruct_array() call, consistently use
plain VARSIZE()/VARDATA() on the array elements.  Prior practice was
divided between those and VARSIZE_ANY_EXHDR()/VARDATA_ANY().

7 years agoFix comment about length of text, bytea, etc.
Noah Misch [Sun, 12 Mar 2017 23:35:30 +0000 (19:35 -0400)]
Fix comment about length of text, bytea, etc.

When commit 3e23b68dac006e8deb0afa327e855258df8de064 introduced
single-byte varlena headers, it rendered this comment incomplete.

7 years agoAdd "break"s to make it clearer what will happen in a nested switch.
Tom Lane [Sun, 12 Mar 2017 20:01:33 +0000 (16:01 -0400)]
Add "break"s to make it clearer what will happen in a nested switch.

This could only matter if the guessed_type variable had a value that wasn't
a member of the PasswordType enum; but just in case, let's be sure that
control falls out to reach the elog(ERROR) at the end of the function.
Per gripe from Coverity.

7 years agoFix typo in initdb's SCRAM password processing.
Tom Lane [Sun, 12 Mar 2017 19:57:03 +0000 (15:57 -0400)]
Fix typo in initdb's SCRAM password processing.

Noted by Coverity (a rather impressive catch).

Michael Paquier

7 years agoRemove dead code in nodeGatherMerge.c.
Tom Lane [Sun, 12 Mar 2017 19:52:50 +0000 (15:52 -0400)]
Remove dead code in nodeGatherMerge.c.

Coverity noted that the last line of gather_merge_getnext() was
unreachable, since each arm of the preceding "if" ends in a "return".
Drop it as an oversight.  In passing, improve some nearby comments.

7 years agoImprove expression evaluation test coverage.
Andres Freund [Sat, 11 Mar 2017 23:36:50 +0000 (15:36 -0800)]
Improve expression evaluation test coverage.

Upcoming patches are revamping expression evaluation significantly. It
therefore seems prudent to try to ensure that the coverage of the
existing evaluation code is high.

This commit adds coverage for the cases that can reasonably be
tested. There's still a bunch of unreachable error messages and such,
but otherwise this achieves nearly full regression test coverage (with
the exception of the unused GetAttributeByNum/GetAttributeByName).

Author: Andres Freund
Discussion: https://postgr.es/m/20170310194021.ek4bs4bl2khxkmll@alap3.anarazel.de

7 years agoFix ancient connection leak in dblink
Joe Conway [Sat, 11 Mar 2017 21:32:18 +0000 (13:32 -0800)]
Fix ancient connection leak in dblink

When using unnamed connections with dblink, every time a new
connection is made, the old one is leaked. Fix that.

This has been an issue probably since dblink was first committed.
Someone complained almost ten years ago, but apparently I decided
not to pursue it at the time, and neither did anyone else, so it
slipped between the cracks. Now that someone else has complained,
fix in all supported branches.

Discussion: (orig) https://postgr.es/m/flat/F680AB59-6D6F-4026-9599-1BE28880273D%40decibel.org#F680AB59-6D6F-4026-9599-1BE28880273D@decibel.org
Discussion: (new) https://postgr.es/m/flat/0A3221C70F24FB45833433255569204D1F6ADF8C@G01JPEXMBYT05
Reported by: Jim Nasby and Takayuki Tsunakawa

7 years agoAdd a "subtransaction" command to PL/Tcl.
Tom Lane [Sat, 11 Mar 2017 19:37:05 +0000 (14:37 -0500)]
Add a "subtransaction" command to PL/Tcl.

This allows rolling back the effects of some SPI commands without
having to fail the entire PL/Tcl function.

Victor Wagner, reviewed by Pavel Stehule

Discussion: https://postgr.es/m/20170108205750.2dab04a1@wagner.wagner.home

7 years agoImprove postmaster's logging of listen socket creation.
Tom Lane [Fri, 10 Mar 2017 21:32:18 +0000 (16:32 -0500)]
Improve postmaster's logging of listen socket creation.

When one of the kernel calls in the socket()/bind()/listen() sequence
fails, include the specific address we're trying to bind to in the log
message.  This greatly eases debugging of network misconfigurations.

Also, after successfully setting up a listen socket, report its address
in the log, to ease verification that the expected addresses were bound.
There was some debate about whether to print this message at LOG level or
only DEBUG1, but the majority of votes were for the former.

Discussion: https://postgr.es/m/9564.1489091245@sss.pgh.pa.us

7 years agopg_dump: Fix dumping of publications
Peter Eisentraut [Fri, 10 Mar 2017 20:31:47 +0000 (15:31 -0500)]
pg_dump: Fix dumping of publications

Dumping a publication with more than one table crashed pg_dump.

patch by Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>, test by me

7 years agoReduce log verbosity of startup/shutdown for launcher subprocesses.
Tom Lane [Fri, 10 Mar 2017 20:18:38 +0000 (15:18 -0500)]
Reduce log verbosity of startup/shutdown for launcher subprocesses.

There's no really good reason why the autovacuum launcher and logical
replication launcher should announce themselves at startup and shutdown
by default.  Users don't care that those processes exist, and it's
inconsistent that those background processes announce themselves while
others don't.  So, reduce those messages from LOG to DEBUG1 level.

I was sorely tempted to reduce the "starting logical replication worker
for subscription ..." message to DEBUG1 as well, but forebore for now.
Those processes might possibly be of direct interest to users, at least
until logical replication is a lot better shaken out than it is today.

Discussion: https://postgr.es/m/19479.1489121003@sss.pgh.pa.us

7 years agoRevert "Use group updates when setting transaction status in clog."
Robert Haas [Fri, 10 Mar 2017 19:49:56 +0000 (14:49 -0500)]
Revert "Use group updates when setting transaction status in clog."

This reverts commit ccce90b398673d55b0387b3de66639b1b30d451b.  This
optimization is unsafe, at least, of rollbacks and rollbacks to
savepoints, but I'm concerned there may be other problematic cases as
well.  Therefore, I've decided to revert this pending further
investigation.

7 years agoEnable 64 bit atomics on ARM64.
Andres Freund [Fri, 10 Mar 2017 19:14:06 +0000 (11:14 -0800)]
Enable 64 bit atomics on ARM64.

Previously they were disabled due to performance concerns on 32bit
arm, where 64bit atomics are often implemented via kernel traps.

Author: Roman Shaposhnik
Discussion: http://postgr.es/m/CA+ULb+uErkFuXUCCXWHYvnV5KnAyjGUzzRcPA-M0cgO+Hm4RSA@mail.gmail.com

7 years agoSanitize newlines in object names in "pg_restore -l" output.
Tom Lane [Fri, 10 Mar 2017 19:15:09 +0000 (14:15 -0500)]
Sanitize newlines in object names in "pg_restore -l" output.

Commits 89e0bac86 et al replaced newlines with spaces in object names
printed in SQL comments, but we neglected to consider that the same
names are also printed by "pg_restore -l", and a newline would render
the output unparseable by "pg_restore -L".  Apply the same replacement
in "-l" output.  Since "pg_restore -L" doesn't actually examine any
object names, only the dump ID field that starts each line, this is
enough to fix things for its purposes.

The previous fix was treated as a security issue, and we might have
done that here as well, except that the issue was reported publicly
to start with.  Anyway it's hard to see how this could be exploited
for SQL injection; "pg_restore -L" doesn't do much with the file
except parse it for leading integers.

Per bug #14587 from Milos Urbanek.  Back-patch to all supported versions.

Discussion: https://postgr.es/m/20170310155318.1425.30483@wrigleys.postgresql.org

7 years agoChange the relkind for partitioned tables from 'P' to 'p'.
Tom Lane [Fri, 10 Mar 2017 18:15:47 +0000 (13:15 -0500)]
Change the relkind for partitioned tables from 'P' to 'p'.

Seven of the eight other relkind codes are lower-case, so it wasn't
consistent for this one to be upper-case.  Fix it while we still can.

Historical notes: the reason for the lone exception, i.e. sequences being
'S', is that 's' was once used for "special" relations.  Also, at one time
the partitioned-tables patch used both 'P' and 'p', but that got changed,
leaving only a surprising choice behind.

This also fixes a couple little bits of technical debt, such as
type_sanity.sql not knowing that 'm' is a legal value for relkind.

Discussion: https://postgr.es/m/27899.1488909319@sss.pgh.pa.us

7 years agoUn-break things on IPv6-less platforms.
Tom Lane [Fri, 10 Mar 2017 17:17:56 +0000 (12:17 -0500)]
Un-break things on IPv6-less platforms.

Commit be37c2120 forgot to teach initdb about commenting out the IPv6
replication entry that it caused to exist in pg_hba.conf.sample.
Per buildfarm.

7 years agoImprove gitignore file
Peter Eisentraut [Fri, 10 Mar 2017 15:16:04 +0000 (10:16 -0500)]
Improve gitignore file

One file was listed under a wrong comment.

7 years agodblink: Change some StringInfo to StringInfoData
Peter Eisentraut [Fri, 10 Mar 2017 14:59:10 +0000 (09:59 -0500)]
dblink: Change some StringInfo to StringInfoData

For consistency with other code and to avoid wasting some small amount
of memory.

From: Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com>

7 years agodblink: Replace some macros by static functions
Peter Eisentraut [Sun, 25 Dec 2016 17:00:00 +0000 (12:00 -0500)]
dblink: Replace some macros by static functions

Also remove some unused code and the no longer useful dblink.h file.

Reviewed-by: Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com>
7 years agoFix a potential double-free in ecpg.
Michael Meskes [Fri, 10 Mar 2017 09:32:41 +0000 (10:32 +0100)]
Fix a potential double-free in ecpg.

7 years agoFix hard-coded relkind constants in assorted other files.
Tom Lane [Fri, 10 Mar 2017 04:36:44 +0000 (23:36 -0500)]
Fix hard-coded relkind constants in assorted other files.

Although it's reasonable to expect that most of these constants will
never change, that does not make it good programming style to hard-code
the value rather than using the RELKIND_FOO macros.

I think I've now gotten all the hard-coded references in C code.
Unfortunately there's no equally convenient way to parameterize
SQL files ...

Discussion: https://postgr.es/m/11145.1488931324@sss.pgh.pa.us

7 years agoamcheck: editorialize variable name & comment.
Andres Freund [Fri, 10 Mar 2017 04:01:37 +0000 (20:01 -0800)]
amcheck: editorialize variable name & comment.

No exclusive lock is taken anymore...

7 years agocontrib/amcheck needs RecentGlobalXmin to be PGDLLIMPORT'ified.
Tom Lane [Fri, 10 Mar 2017 03:55:46 +0000 (22:55 -0500)]
contrib/amcheck needs RecentGlobalXmin to be PGDLLIMPORT'ified.

Per buildfarm.  Maybe some of the other xmin variables in snapmgr.h
ought to get this too, but for the moment I'm just interested in
un-breaking the buildfarm.

7 years agoAdd .gitignore to contrib/amcheck.
Tom Lane [Fri, 10 Mar 2017 03:45:24 +0000 (22:45 -0500)]
Add .gitignore to contrib/amcheck.

Oversight in commit 3717dc149.

7 years agoFix hard-coded relkind constants in assorted src/bin files.
Tom Lane [Fri, 10 Mar 2017 03:42:16 +0000 (22:42 -0500)]
Fix hard-coded relkind constants in assorted src/bin files.

Although it's reasonable to expect that most of these constants will
never change, that does not make it good programming style to hard-code
the value rather than using the RELKIND_FOO macros.

Discussion: https://postgr.es/m/11145.1488931324@sss.pgh.pa.us

7 years agoFix portability problem in Catalog.pm.
Tom Lane [Fri, 10 Mar 2017 01:45:52 +0000 (20:45 -0500)]
Fix portability problem in Catalog.pm.

Commit 7666e73a2 introduced a dependency on filehandles' input_line_number
method, but apparently that's a Perl neologism.  Use $. instead, which
works at least back to Perl 5.10, and hopefully back to 5.8.

Jeff Janes

Discussion: https://postgr.es/m/CAMkU=1wuQW=xVfu-14A4VCvxO0ohkD3m9vk6HOj_dprQoKNAQw@mail.gmail.com

7 years agoFix hard-coded relkind constants in psql/describe.c.
Tom Lane [Fri, 10 Mar 2017 01:42:42 +0000 (20:42 -0500)]
Fix hard-coded relkind constants in psql/describe.c.

Although it's reasonable to expect that most of these constants will
never change, that does not make it good programming style to hard-code
the value rather than using the RELKIND_FOO macros.

Discussion: https://postgr.es/m/11145.1488931324@sss.pgh.pa.us

7 years agopgstattuple: Fix typo partitiond -> partitioned
Stephen Frost [Fri, 10 Mar 2017 01:06:11 +0000 (20:06 -0500)]
pgstattuple: Fix typo partitiond -> partitioned

Pointed out by Michael Paquier

7 years agoAdd amcheck extension to contrib.
Andres Freund [Thu, 9 Mar 2017 23:50:40 +0000 (15:50 -0800)]
Add amcheck extension to contrib.

This is the beginning of a collection of SQL-callable functions to
verify the integrity of data files.  For now it only contains code to
verify B-Tree indexes.

This adds two SQL-callable functions, validating B-Tree consistency to
a varying degree.  Check the, extensive, docs for details.

The goal is to later extend the coverage of the module to further
access methods, possibly including the heap.  Once checks for
additional access methods exist, we'll likely add some "dispatch"
functions that cover multiple access methods.

Author: Peter Geoghegan, editorialized by Andres Freund
Reviewed-By: Andres Freund, Tomas Vondra, Thomas Munro,
   Anastasia Lubennikova, Robert Haas, Amit Langote
Discussion: CAM3SWZQzLMhMwmBqjzK+pRKXrNUZ4w90wYMUWfkeV8mZ3Debvw@mail.gmail.com

7 years agoFix hard-coded relkind constants in pg_dump.c.
Tom Lane [Fri, 10 Mar 2017 00:18:57 +0000 (19:18 -0500)]
Fix hard-coded relkind constants in pg_dump.c.

Although it's reasonable to expect that most of these constants will
never change, that does not make it good programming style to hard-code
the value rather than using the RELKIND_FOO macros.  There were only
a few such violations, and all relatively new AFAICT.

Existing style is mostly to inject relkind values into constructed
query strings using %c.  I did not bother to touch places that did it
like that, but really a better technique is to stringify the RELKIND
macro, at least in places where you'd want single quotes around the
code character.  That avoids any runtime effort and keeps the RELKIND
symbol close to where it's used.

Discussion: https://postgr.es/m/11145.1488931324@sss.pgh.pa.us

7 years agoMake CppAsString2() more visible in c.h.
Tom Lane [Thu, 9 Mar 2017 23:54:45 +0000 (18:54 -0500)]
Make CppAsString2() more visible in c.h.

For some reason this standard C string-processing hack was buried in an
NLS-related section of c.h.  Put it beside CppAsString() so that people
are more likely to find it and not be tempted to reinvent local copies,
as I nearly did.  And provide a more helpful comment, too.

7 years agoThrow an error if a DATA() line contains wrong # of attributes.
Robert Haas [Thu, 9 Mar 2017 23:17:58 +0000 (18:17 -0500)]
Throw an error if a DATA() line contains wrong # of attributes.

David Christensen, reviewed by Dagfinn Ilmari Mannsåker

Discussion: http://postgr.es/m/20170215154018.fs5vwtqhp5d2sifs@veeddeux.attlocal.net

7 years agoUse group updates when setting transaction status in clog.
Robert Haas [Thu, 9 Mar 2017 22:44:52 +0000 (17:44 -0500)]
Use group updates when setting transaction status in clog.

Commit 0e141c0fbb211bdd23783afa731e3eef95c9ad7a introduced a mechanism
to reduce contention on ProcArrayLock by having a single process clear
XIDs in the procArray on behalf of multiple processes, reducing the
need to hand the lock around.  Use a similar mechanism to reduce
contention on CLogControlLock.  Testing shows that this very
significantly reduces the amount of time waiting for CLogControlLock
on high-concurrency pgbench tests run on a large multi-socket
machines; whether that translates into a TPS improvement depends on
how much of that contention is simply shifted to some other lock,
particularly WALWriteLock.

Amit Kapila, with some cosmetic changes by me.  Extensively reviewed,
tested, and benchmarked over a period of about 15 months by Simon
Riggs, Robert Haas, Andres Freund, Jesper Pedersen, and especially by
Tomas Vondra and Dilip Kumar.

Discussion: http://postgr.es/m/CAA4eK1L_snxM_JcrzEstNq9P66++F4kKFce=1r5+D1vzPofdtg@mail.gmail.com
Discussion: http://postgr.es/m/CAA4eK1LyR2A+m=RBSZ6rcPEwJ=rVi1ADPSndXHZdjn56yqO6Vg@mail.gmail.com
Discussion: http://postgr.es/m/91d57161-d3ea-0cc2-6066-80713e4f90d7@2ndquadrant.com

7 years agoFix timestamptz regression test to still work with latest IANA zone data.
Tom Lane [Thu, 9 Mar 2017 22:20:11 +0000 (17:20 -0500)]
Fix timestamptz regression test to still work with latest IANA zone data.

The IANA timezone crew continues to chip away at their project of removing
timezone abbreviations that have no real-world currency from their
database.  The tzdata2017a update removes all such abbreviations for
South American zones, as well as much of the Pacific.  This breaks some
test cases in timestamptz.sql that were expecting America/Santiago and
America/Caracas to have non-numeric abbreviations.

The test cases involving America/Santiago seem to have selected that
zone more or less at random, so just replace it with America/New_York,
which is of similar longitude.  The cases involving America/Caracas are
harder since they were chosen to test a time-varying zone abbreviation
around a point where it changed meaning in the backwards direction.
Fortunately, Europe/Moscow has a similar case in 2014, and the MSK/MSD
abbreviations are well enough attested that IANA seems unlikely to
decide to remove them from the database in future.

With these changes, this regression test should pass when using any IANA
zone database from 2015 or later.  One could wish that there were a few
years more daylight on how out-of-date your zone database can be ... but
really the --with-system-tzdata option is only meant for use on platforms
where the zone database is kept up-to-date pretty faithfully, so I do not
think this is a big objection.

Discussion: https://postgr.es/m/6749.1489087470@sss.pgh.pa.us

7 years agoAdd relkind checks to certain contrib modules
Stephen Frost [Thu, 9 Mar 2017 21:34:25 +0000 (16:34 -0500)]
Add relkind checks to certain contrib modules

The contrib extensions pageinspect, pg_visibility and pgstattuple only
work against regular relations which have storage.  They don't work
against foreign tables, partitioned (parent) tables, views, et al.

Add checks to the user-callable functions to return a useful error
message to the user if they mistakenly pass an invalid relation to a
function which doesn't accept that kind of relation.

In passing, improve some of the existing checks to use ereport() instead
of elog(), add a function to consolidate common checks where
appropriate, and add some regression tests.

Author: Amit Langote, with various changes by me
Reviewed by: Michael Paquier and Corey Huinker
Discussion: https://postgr.es/m/ab91fd9d-4751-ee77-c87b-4dd704c1e59c@lab.ntt.co.jp

7 years agoDocument lack of validation when attaching foreign partitions.
Robert Haas [Thu, 9 Mar 2017 18:09:48 +0000 (13:09 -0500)]
Document lack of validation when attaching foreign partitions.

Ashutosh Bapat, revised a bit by me.

Discussion: http://postgr.es/m/CAFjFpRdLaCa-1wJase0=YWG5o3cJnbuUt_vrqm2TDBKM_vQ_oA@mail.gmail.com

7 years agoDocument some new parallel query capabilities.
Robert Haas [Thu, 9 Mar 2017 18:02:34 +0000 (13:02 -0500)]
Document some new parallel query capabilities.

This updates the text for parallel index scan, parallel index-only
scan, parallel bitmap heap scan, and parallel merge join.  It also
expands the discussion of parallel joins slightly.

Discussion: http://postgr.es/m/CA+TgmoZnCUoM31w3w7JSakVQJQOtcuTyX=HLUr-X1rto2=2bjw@mail.gmail.com

7 years agoFix bug in parallel tidbitmap iteration.
Robert Haas [Thu, 9 Mar 2017 17:13:48 +0000 (12:13 -0500)]
Fix bug in parallel tidbitmap iteration.

Avoid computing idxpages[istate->spageptr] until after checking
that istate->spageptr is a legal index.

Dilip Kumar, per a report from David Rowley

Discussion: http://postgr.es/m/CAKJS1f8OtrHE+-P+=E=4ycnL29e9idZKuaTQ6o2MbhvGN9D8ig@mail.gmail.com

7 years agoFix a couple of planner bugs in Gather Merge.
Robert Haas [Thu, 9 Mar 2017 17:05:54 +0000 (12:05 -0500)]
Fix a couple of planner bugs in Gather Merge.

Neha Sharma reported these to Rushabh Lathia just after I commit
355d3993c53ed62c5b53d020648e4fbcfbf5f155 went in.  The patch is
Rushabh's, with input from me.

7 years agoUse SQL standard error code for nextval
Peter Eisentraut [Tue, 28 Feb 2017 20:14:14 +0000 (15:14 -0500)]
Use SQL standard error code for nextval

7 years agoEnable replication connections by default in pg_hba.conf
Peter Eisentraut [Thu, 9 Mar 2017 13:27:16 +0000 (08:27 -0500)]
Enable replication connections by default in pg_hba.conf

initdb now initializes a pg_hba.conf that allows replication connections
from the local host, same as it does for regular connections.  The
connecting user still needs to have the REPLICATION attribute or be a
superuser.

The intent is to allow pg_basebackup from the local host to succeed
without requiring additional configuration.

Michael Paquier <michael.paquier@gmail.com> and me

7 years agoAdd a Gather Merge executor node.
Robert Haas [Thu, 9 Mar 2017 12:40:36 +0000 (07:40 -0500)]
Add a Gather Merge executor node.

Like Gather, we spawn multiple workers and run the same plan in each
one; however, Gather Merge is used when each worker produces the same
output ordering and we want to preserve that output ordering while
merging together the streams of tuples from various workers.  (In a
way, Gather Merge is like a hybrid of Gather and MergeAppend.)

This works out to a win if it saves us from having to perform an
expensive Sort.  In cases where only a small amount of data would need
to be sorted, it may actually be faster to use a regular Gather node
and then sort the results afterward, because Gather Merge sometimes
needs to wait synchronously for tuples whereas a pure Gather generally
doesn't.  But if this avoids an expensive sort then it's a win.

Rushabh Lathia, reviewed and tested by Amit Kapila, Thomas Munro,
and Neha Sharma, and reviewed and revised by me.

Discussion: http://postgr.es/m/CAGPqQf09oPX-cQRpBKS0Gq49Z+m6KBxgxd_p9gX8CKk_d75HoQ@mail.gmail.com

7 years agoFix inclusions of c.h from .h files.
Tom Lane [Thu, 9 Mar 2017 01:58:17 +0000 (20:58 -0500)]
Fix inclusions of c.h from .h files.

We have a project policy that every .c file should start by including
postgres.h, postgres_fe.h, or c.h as appropriate; and then there is no
need for any .h file to explicitly include any of these.  Fix a few
headers that were violating this policy by including c.h.

Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us

7 years agoFix inclusions of postgres_fe.h from .h files.
Tom Lane [Thu, 9 Mar 2017 01:41:06 +0000 (20:41 -0500)]
Fix inclusions of postgres_fe.h from .h files.

We have a project policy that every .c file should start by including
postgres.h, postgres_fe.h, or c.h as appropriate; and then there is no
need for any .h file to explicitly include any of these.  Fix a few
headers that were violating this policy by including postgres_fe.h.

Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us

7 years agoBring plpgsql into line with header inclusion policy.
Tom Lane [Wed, 8 Mar 2017 22:21:08 +0000 (17:21 -0500)]
Bring plpgsql into line with header inclusion policy.

We have a project policy that every .c file should start by including
postgres.h, postgres_fe.h, or c.h as appropriate; and then there is no
need for any .h file to explicitly include any of these.  (The core
reason for this policy is to make it easy to verify that pg_config_os.h
is included before any system headers such as <stdio.h>; without that,
we have portability issues on some platforms due to variation in largefile
options across different modules in the backend.  Also, if .h files were
responsible for choosing which of these key headers to include, .h files
that need to be includable in either frontend or backend compiles would be
in trouble.)

plpgsql was blithely ignoring this policy, so whack it upside the head
until it complies.  I also chose to standardize on including plpgsql's
own .h files after all core-system headers that it pulls in.  That
could've been done either way, but this way seems saner.

Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us

7 years agoDocument intentional violations of header inclusion policy.
Tom Lane [Wed, 8 Mar 2017 22:01:13 +0000 (17:01 -0500)]
Document intentional violations of header inclusion policy.

Although there are good reasons for our policy of including postgres.h
as the first #include in every .c file, never from .h files, there are
two places where it seems expedient to violate the policy because the
alternative is to modify externally-supplied .c files.  (In the case
of the regexp library, the idea that it's externally-supplied is kind
of at odds with reality, but I haven't entirely given up hope that it
will become a standalone project some day.)  Add some comments to make
it explicit that this is a policy violation and provide the reasoning.

In passing, move #include "miscadmin.h" out of regcomp.c and into
regcustom.h, which is where it should be if we're taking this reasoning
seriously at all.

Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us

7 years agoSuppress compiler warning in slab.c.
Tom Lane [Wed, 8 Mar 2017 21:19:37 +0000 (16:19 -0500)]
Suppress compiler warning in slab.c.

Compilers that don't realize that elog(ERROR) doesn't return
complained that SlabRealloc() failed to return a value.

While at it, fix the rather muddled header comment for the function.

Per buildfarm.

7 years agoSuppress compiler warning in non-USE_LIBXML builds.
Tom Lane [Wed, 8 Mar 2017 21:10:00 +0000 (16:10 -0500)]
Suppress compiler warning in non-USE_LIBXML builds.

Compilers that don't realize that ereport(ERROR) doesn't return
complained that XmlTableGetValue() failed to return a value.

Also, make XmlTableFetchRow's non-USE_LIBXML case look more like
the other ones.  As coded, it could lead to "unreachable code"
warnings with USE_LIBXML enabled.

Oversights in commit fcec6caaf.  Per buildfarm.

7 years agoPut back <float.h> in a few files that need it for _isnan().
Tom Lane [Wed, 8 Mar 2017 20:38:26 +0000 (15:38 -0500)]
Put back <float.h> in a few files that need it for _isnan().

Further fallout from commit c29aff959: there are some files that need
<float.h>, and were getting it from datatype/timestamp.h, but it was not
apparent in my (tgl's) testing because the requirement for <float.h>
exists only on certain Windows toolchains.

Report and patch by David Rowley.

Discussion: https://postgr.es/m/CAKJS1f-BHceaFzZScFapDV48gUVM2CAOBfhkgffdqXzFb+kwew@mail.gmail.com

7 years agoExpose explain's SUMMARY option
Stephen Frost [Wed, 8 Mar 2017 20:14:03 +0000 (15:14 -0500)]
Expose explain's SUMMARY option

This exposes the existing explain summary option to users to allow them
to choose if they wish to have the planning time and totalled run time
included in the EXPLAIN result.  The existing default behavior is
retained if SUMMARY is not specified- running explain without analyze
will not print the summary lines (just the planning time, currently)
while running explain with analyze will include the summary lines (both
the planning time and the totalled execution time).

Users who wish to see the summary information for plain explain can now
use: EXPLAIN (SUMMARY ON) query;  Users who do not want to have the
summary printed for an analyze run can use:
EXPLAIN (ANALYZE ON, SUMMARY OFF) query;

With this, we can now also have EXPLAIN ANALYZE queries included in our
regression tests by using:
EXPLAIN (ANALYZE ON, TIMING OFF, SUMMARY off) query;

I went ahead and added an example of this, which will hopefully not make
the buildfarm complain.

Author: Ashutosh Bapat
Discussion: https://postgr.es/m/CAFjFpReE5z2h98U2Vuia8hcEkpRRwrauRjHmyE44hNv8-xk+XA@mail.gmail.com

7 years agoSilence compiler warnings in BitmapHeapNext().
Tom Lane [Wed, 8 Mar 2017 17:43:39 +0000 (12:43 -0500)]
Silence compiler warnings in BitmapHeapNext().

Same disease as 270d7dd8a5a7128fc2b859f3bf95e2c1fb45be79.

7 years agoUse doubly-linked block lists in aset.c to reduce large-chunk overhead.
Tom Lane [Wed, 8 Mar 2017 17:21:12 +0000 (12:21 -0500)]
Use doubly-linked block lists in aset.c to reduce large-chunk overhead.

Large chunks (those too large for any palloc freelist) are managed as
separate blocks.  Formerly, realloc'ing or pfree'ing such a chunk required
O(N) time in a context with N blocks, since we had to traipse down the
singly-linked block list to locate the block's predecessor before we could
fix the list links.  This can result in O(N^2) runtime in situations where
large numbers of such chunks are manipulated within one context.  Cases
like that were not foreseen in the original design of aset.c, and indeed
didn't arise until fairly recently.  But such problems can now occur in
reorderbuffer.c and in hash joining, both of which make repeated large
requests without scaling up their request size as they do so, and which
will free their requests in not-necessarily-LIFO order.

To fix, change the block list from singly-linked to doubly-linked.
This adds another 4 or 8 bytes to ALLOC_BLOCKHDRSZ, but that doesn't
seem like unacceptable overhead, since aset.c's blocks are normally
8K or more, and never less than 1K in current practice.

In passing, get rid of some redundant AllocChunkGetPointer() calls in
AllocSetRealloc (the compiler might be smart enough to optimize these
away anyway, but no need to assume that) and improve AllocSetCheck's
checking of block header fields.

Back-patch to 9.4 where reorderbuffer.c appeared.  We could take this
further back, but currently there's no evidence that it would be useful.

Discussion: https://postgr.es/m/CAMkU=1x1hvue1XYrZoWk_omG0Ja5nBvTdvgrOeVkkeqs71CV8g@mail.gmail.com

7 years agoSupport parallel bitmap heap scans.
Robert Haas [Wed, 8 Mar 2017 17:05:43 +0000 (12:05 -0500)]
Support parallel bitmap heap scans.

The index is scanned by a single process, but then all cooperating
processes can iterate jointly over the resulting set of heap blocks.
In the future, we might also want to support using a parallel bitmap
index scan to set up for a parallel bitmap heap scan, but that's a
job for another day.

Dilip Kumar, with some corrections and cosmetic changes by me.  The
larger patch set of which this is a part has been reviewed and tested
by (at least) Andres Freund, Amit Khandekar, Tushar Ahuja, Rafia
Sabih, Haribabu Kommi, Thomas Munro, and me.

Discussion: http://postgr.es/m/CAFiTN-uc4=0WxRGfCzs-xfkMYcSEWUC-Fon6thkJGjkh9i=13A@mail.gmail.com

7 years agoPrevent logical rep workers with removed subscriptions from starting.
Fujii Masao [Wed, 8 Mar 2017 16:44:23 +0000 (01:44 +0900)]
Prevent logical rep workers with removed subscriptions from starting.

Any logical rep workers must have their subscription entries in
pg_subscription. To ensure this, we need to prevent the launcher
from starting new worker corresponding to the subscription that
DROP SUBSCRIPTION command is removing. To implement this,
previously LogicalRepLauncherLock was introduced and held until
the end of transaction running DROP SUBSCRIPTION. But using
LWLock for that purpose was not valid.

Instead, this commit changes DROP SUBSCRIPTION so that it takes
AccessExclusiveLock on pg_subscription, in order to ensure that
the launcher cannot see any subscriptions being removed. Also this
commit gets rid of LogicalRepLauncherLock.

Patch by me, reviewed by Petr Jelinek

Discussion: https://www.postgresql.org/message-id/CAHGQGwHPi8ky-yANFfe0sgmhKtsYcQLTnKx07bW9S7-Rn1746w@mail.gmail.com

7 years agoFix XMLTABLE on older libxml2
Alvaro Herrera [Wed, 8 Mar 2017 16:29:48 +0000 (13:29 -0300)]
Fix XMLTABLE on older libxml2

libxml2 older than 2.9.1 does not have xmlXPathSetContextNode (released
in 2013, so reasonable platforms have trouble).  That function is fairly
trivial, so I have inlined it in the one added caller.  This passes
tests on my machine; let's see what the buildfarm thinks about it.

Per joint complaint from Tom Lane and buildfarm.

7 years agoAdd tests for foreign partitions.
Robert Haas [Wed, 8 Mar 2017 16:26:03 +0000 (11:26 -0500)]
Add tests for foreign partitions.

Amit Langote, reviewed by Ashutosh Bapat

Discussion: http://postgr.es/m/475dd52c-be4a-9b32-6d54-3044a00c93d9@lab.ntt.co.jp

7 years agoSupport XMLTABLE query expression
Alvaro Herrera [Wed, 8 Mar 2017 15:39:37 +0000 (12:39 -0300)]
Support XMLTABLE query expression

XMLTABLE is defined by the SQL/XML standard as a feature that allows
turning XML-formatted data into relational form, so that it can be used
as a <table primary> in the FROM clause of a query.

This new construct provides significant simplicity and performance
benefit for XML data processing; what in a client-side custom
implementation was reported to take 20 minutes can be executed in 400ms
using XMLTABLE.  (The same functionality was said to take 10 seconds
using nested PostgreSQL XPath function calls, and 5 seconds using
XMLReader under PL/Python).

The implemented syntax deviates slightly from what the standard
requires.  First, the standard indicates that the PASSING clause is
optional and that multiple XML input documents may be given to it; we
make it mandatory and accept a single document only.  Second, we don't
currently support a default namespace to be specified.

This implementation relies on a new executor node based on a hardcoded
method table.  (Because the grammar is fixed, there is no extensibility
in the current approach; further constructs can be implemented on top of
this such as JSON_TABLE, but they require changes to core code.)

Author: Pavel Stehule, Álvaro Herrera
Extensively reviewed by: Craig Ringer
Discussion: https://postgr.es/m/CAFj8pRAgfzMD-LoSmnMGybD0WsEznLHWap8DO79+-GTRAPR4qA@mail.gmail.com

7 years agoSilence compiler warnings in tbm_prepare_shared_iterate().
Tom Lane [Wed, 8 Mar 2017 15:39:40 +0000 (10:39 -0500)]
Silence compiler warnings in tbm_prepare_shared_iterate().

Maybe Robert's compiler can convince itself that these variables are
never used uninitialized, but mine can't.

7 years agopg_waldump: Remove extra newline in error message
Peter Eisentraut [Wed, 8 Mar 2017 14:57:17 +0000 (09:57 -0500)]
pg_waldump: Remove extra newline in error message

fatal_error() already prints out a trailing newline.

7 years agoFix connection leak in DROP SUBSCRIPTION command, take 2.
Fujii Masao [Wed, 8 Mar 2017 14:43:38 +0000 (23:43 +0900)]
Fix connection leak in DROP SUBSCRIPTION command, take 2.

Commit 898a792eb8283e31efc0b6fcbc03bbcd5f7df667 fixed the connection
leak issue, but it was an unreliable way of bugfix. This bugfix was
assuming that walrcv_command() subroutine cannot throw an error,
but it's untenable assumption. For example, if it will be changed
so that an error is thrown, connection leak issue will happen again.

This patch ensures that the connection is closed even when
walrcv_command() subroutine throws an error.

Patch by me, reviewed by Petr Jelinek and Michael Paquier

Discussion: https://www.postgresql.org/message-id/2058.1487704345@sss.pgh.pa.us

7 years agoCreate INSTALL file via XSLT
Peter Eisentraut [Mon, 27 Feb 2017 15:44:59 +0000 (10:44 -0500)]
Create INSTALL file via XSLT

As before, create an INSTALL.html file for processing with lynx, but use
xsltproc and a new XSLT stylesheet instead of jade and DSSSL.

Replacing jade with xsltproc removes jade from the requirements for
distribution building.

Reviewed-by: Magnus Hagander <magnus@hagander.net>
7 years agoRemove inclusion of postgres.h from a few header files.
Robert Haas [Wed, 8 Mar 2017 13:18:12 +0000 (08:18 -0500)]
Remove inclusion of postgres.h from a few header files.

Thomas Munro, per project policy articuled by Andres Freund and
Tom Lane.

Discussion: http://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com

7 years agoFix parallel index and index-only scans to fall back to serial.
Robert Haas [Wed, 8 Mar 2017 13:15:24 +0000 (08:15 -0500)]
Fix parallel index and index-only scans to fall back to serial.

Parallel executor nodes can't assume that parallel execution will
happen in every case where the plan calls for it, because it might
not work out that way.  However, parallel index scan and parallel
index-only scan failed to do the right thing here.  Repair.

Amit Kapila, per a report from me.

Discussion: http://postgr.es/m/CAA4eK1Kq5qb_u2AOoda5XBB91vVWz90w=LgtRLgsssriS8pVTw@mail.gmail.com

7 years agotidbitmap: Support shared iteration.
Robert Haas [Wed, 8 Mar 2017 13:02:03 +0000 (08:02 -0500)]
tidbitmap: Support shared iteration.

When a shared iterator is used, each call to tbm_shared_iterate()
returns a result that has not yet been returned to any process
attached to the shared iterator.  In other words, each cooperating
processes gets a disjoint subset of the full result set, but all
results are returned exactly once.

This is infrastructure for parallel bitmap heap scan.

Dilip Kumar.  The larger patch set of which this is a part has been
reviewed and tested by (at least) Andres Freund, Amit Khandekar,
Tushar Ahuja, Rafia Sabih, Haribabu Kommi, and Thomas Munro.

Discussion: http://postgr.es/m/CAFiTN-uc4=0WxRGfCzs-xfkMYcSEWUC-Fon6thkJGjkh9i=13A@mail.gmail.com

7 years agoFix grammar
Magnus Hagander [Wed, 8 Mar 2017 03:45:45 +0000 (22:45 -0500)]
Fix grammar

Reported by Jeremy Finzel

7 years agoFix segfault in ALTER PUBLICATION/SUBSCRIPTION RENAME
Peter Eisentraut [Wed, 8 Mar 2017 03:44:59 +0000 (22:44 -0500)]
Fix segfault in ALTER PUBLICATION/SUBSCRIPTION RENAME

From: Masahiko Sawada <sawada.mshk@gmail.com>
Reported-by: Fujii Masao <masao.fujii@gmail.com>
7 years agohash: Refactor hash index creation.
Robert Haas [Tue, 7 Mar 2017 22:03:51 +0000 (17:03 -0500)]
hash: Refactor hash index creation.

The primary goal here is to move all of the related page modifications
to a single section of code, in preparation for adding write-ahead
logging.  In passing, rename _hash_metapinit to _hash_init, since it
initializes more than just the metapage.

Amit Kapila.  The larger patch series of which this is a part has been
reviewed and tested by Álvaro Herrera, Ashutosh Sharma, Mark Kirkwood,
Jeff Janes, and Jesper Pedersen.