]> granicus.if.org Git - postgresql/log
postgresql
7 years agoIn load_relcache_init_file, initialize rd_pdcxt.
Robert Haas [Fri, 28 Apr 2017 18:05:13 +0000 (14:05 -0400)]
In load_relcache_init_file, initialize rd_pdcxt.

Oversight noted by Gao Zeng Qi.

Discussion: http://postgr.es/m/CAFmBtr1N3-SbepJbnGpaYp=jw-FvWMnYY7-bTtRgvjvbyB8YJA@mail.gmail.com

7 years agoSpeed up dropping tables with many partitions.
Robert Haas [Fri, 28 Apr 2017 18:00:58 +0000 (14:00 -0400)]
Speed up dropping tables with many partitions.

We need to lock the parent, but we don't need a relcache entry
for it.

Gao Zeng Qi, reviewed by Amit Langote

Discussion: http://postgr.es/m/CAFmBtr0ukqJjRJEhPWL5wt4rNMrJUUxggVAGXPR3SyYh3E+HDQ@mail.gmail.com

7 years agoFix crash when partitioned column specified twice.
Robert Haas [Fri, 28 Apr 2017 17:52:17 +0000 (13:52 -0400)]
Fix crash when partitioned column specified twice.

Amit Langote, reviewed by Beena Emerson

Discussion: http://postgr.es/m/6ed23d3d-c09d-4cbc-3628-0a8a32f750f4@lab.ntt.co.jp

7 years agoWait between tablesync worker restarts
Peter Eisentraut [Thu, 27 Apr 2017 18:57:26 +0000 (14:57 -0400)]
Wait between tablesync worker restarts

Before restarting a tablesync worker for the same relation, wait
wal_retrieve_retry_interval (currently 5s by default).  This avoids
restarting failing workers in a tight loop.

We keep the last start times in a hash table last_start_times that is
separate from the table_states list, because that list is cleared out on
syscache invalidation, which happens whenever a table finishes syncing.
The hash table is kept until all tables have finished syncing.

A future project might be to unify these two and keep everything in one
data structure, but for now this is a less invasive change to accomplish
the original purpose.

For the test suite, set wal_retrieve_retry_interval to its minimum
value, to not increase the test suite run time.

Reviewed-by: Petr Jelinek <petr.jelinek@2ndquadrant.com>
Reported-by: Masahiko Sawada <sawada.mshk@gmail.com>
7 years agoMisc SCRAM code cleanups.
Heikki Linnakangas [Fri, 28 Apr 2017 12:04:02 +0000 (15:04 +0300)]
Misc SCRAM code cleanups.

* Move computation of SaltedPassword to a separate function from
  scram_ClientOrServerKey(). This saves a lot of cycles in libpq, by
  computing SaltedPassword only once per authentication. (Computing
  SaltedPassword is expensive by design.)

* Split scram_ClientOrServerKey() into two functions. Improves
  readability, by making the calling code less verbose.

* Rename "server proof" to "server signature", to better match the
  nomenclature used in RFC 5802.

* Rename SCRAM_SALT_LEN to SCRAM_DEFAULT_SALT_LEN, to make it more clear
  that the salt can be of any length, and the constant only specifies how
  long a salt we use when we generate a new verifier. Also rename
  SCRAM_ITERATIONS_DEFAULT to SCRAM_DEFAULT_ITERATIONS, for consistency.

These things caught my eye while working on other upcoming changes.

7 years agoRemove unnecessairly duplicated gram.y productions
Stephen Frost [Fri, 28 Apr 2017 00:14:39 +0000 (20:14 -0400)]
Remove unnecessairly duplicated gram.y productions

Declarative partitioning duplicated the TypedTableElement productions,
evidently to remove the need to specify WITH OPTIONS when creating
partitions.  Instead, simply make WITH OPTIONS optional in the
TypedTableElement production and remove all of the duplicate
PartitionElement-related productions.  This change simplifies the
syntax and makes WITH OPTIONS optional when adding defaults, constraints
or storage parameters to columns when creating either typed tables or
partitions.

Also update pg_dump to no longer include WITH OPTIONS, since it's not
necessary, and update the documentation to reflect that WITH OPTIONS is
now optional.

7 years agoDon't build full initial logical decoding snapshot if NOEXPORT_SNAPSHOT.
Andres Freund [Thu, 27 Apr 2017 22:49:22 +0000 (15:49 -0700)]
Don't build full initial logical decoding snapshot if NOEXPORT_SNAPSHOT.

Earlier commits (56e19d938dd14 and 2bef06d5164) make it cheaper to
create a logical slot if not exporting the initial snapshot.  If
NOEXPORT_SNAPSHOT is specified, we can skip the overhead, not just
when creating a slot via sql (which can't export snapshots).  As
NOEXPORT_SNAPSHOT has only recently been introduced, this shouldn't be
backpatched.

7 years agoDon't use on-disk snapshots for exported logical decoding snapshot.
Andres Freund [Thu, 27 Apr 2017 22:28:24 +0000 (15:28 -0700)]
Don't use on-disk snapshots for exported logical decoding snapshot.

Logical decoding stores historical snapshots on disk, so that logical
decoding can restart without having to reconstruct a snapshot from
scratch (for which the resources are not guaranteed to be present
anymore).  These serialized snapshots were also used when creating a
new slot via the walsender interface, which can export a "full"
snapshot (i.e. one that can read all tables, not just catalog ones).

The problem is that the serialized snapshots are only useful for
catalogs and not for normal user tables.  Thus the use of such a
serialized snapshot could result in an inconsistent snapshot being
exported, which could lead to queries returning wrong data.  This
would only happen if logical slots are created while another logical
slot already exists.

Author: Petr Jelinek
Reviewed-By: Andres Freund
Discussion: https://postgr.es/m/f37e975c-908f-858e-707f-058d3b1eb214@2ndquadrant.com
Backport: 9.4, where logical decoding was introduced.

7 years agoAvoid slow shutdown of pg_basebackup.
Tom Lane [Thu, 27 Apr 2017 22:27:02 +0000 (18:27 -0400)]
Avoid slow shutdown of pg_basebackup.

pg_basebackup's child process did not pay any attention to the pipe
from its parent while waiting for input from the source server.
If no server data was arriving, it would only wake up and check the
pipe every standby_message_timeout or so.  This creates a problem
since the parent process might determine and send the desired stop
position only after the server has reached end-of-WAL and stopped
sending data.  In the src/test/recovery regression tests, the timing
is repeatably such that it takes nearly 10 seconds for the child
process to realize that it should shut down.  It's not clear how
often that would happen in real-world cases, but it sure seems like
a bug --- and if the user turns off standby_message_timeout or sets
it very large, the delay could be a lot worse.

To fix, expand the StreamCtl API to allow the pipe input FD to be
passed down to the low-level wait routine, and watch both sockets
when sleeping.

(Note: AFAICS this issue doesn't affect the Windows port, since
it doesn't rely on a pipe to transfer the stop position to the
child thread.)

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

7 years agoFix bug so logical rep launcher saves correctly time of last startup of worker.
Fujii Masao [Thu, 27 Apr 2017 21:35:00 +0000 (06:35 +0900)]
Fix bug so logical rep launcher saves correctly time of last startup of worker.

Previously the logical replication launcher stored the last timestamp
when it started the worker, in the local variable "last_start_time",
in order to check whether wal_retrive_retry_interval elapsed since
the last startup of worker. If it has elapsed, the launcher sees
pg_subscription and starts new worker if necessary. This is for
limitting the startup of worker to once a wal_retrieve_retry_interval.

The bug was that the variable "last_start_time" was defined and
always initialized with 0 at the beginning of the launcher's main loop.
So even if it's set to the last timestamp in later phase of the loop,
it's always reset to 0. Therefore the launcher could not check
correctly whether wal_retrieve_retry_interval elapsed since
the last startup.

This patch moves the variable "last_start_time" outside the main loop
so that it will not be reset.

Reviewed-by: Petr Jelinek
Discussion: http://postgr.es/m/CAHGQGwGJrPO++XM4mFENAwpy1eGXKsGdguYv43GUgLgU-x8nTQ@mail.gmail.com

7 years agoCope with glibc too old to have epoll_create1().
Tom Lane [Thu, 27 Apr 2017 21:13:29 +0000 (17:13 -0400)]
Cope with glibc too old to have epoll_create1().

Commit fa31b6f4e supposed that we didn't have to worry about that
anymore, but it seems that RHEL5 is like that, and that's still
a supported platform.  Put back the prior coding under an #ifdef,
adding an explicit fcntl() to retain the desired CLOEXEC property.

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

7 years agoPreserve required !catalog tuples while computing initial decoding snapshot.
Andres Freund [Mon, 24 Apr 2017 03:41:29 +0000 (20:41 -0700)]
Preserve required !catalog tuples while computing initial decoding snapshot.

The logical decoding machinery already preserved all the required
catalog tuples, which is sufficient in the course of normal logical
decoding, but did not guarantee that non-catalog tuples were preserved
during computation of the initial snapshot when creating a slot over
the replication protocol.

This could cause a corrupted initial snapshot being exported.  The
time window for issues is usually not terribly large, but on a busy
server it's perfectly possible to it hit it.  Ongoing decoding is not
affected by this bug.

To avoid increased overhead for the SQL API, only retain additional
tuples when a logical slot is being created over the replication
protocol.  To do so this commit changes the signature of
CreateInitDecodingContext(), but it seems unlikely that it's being
used in an extension, so that's probably ok.

In a drive-by fix, fix handling of
ReplicationSlotsComputeRequiredXmin's already_locked argument, which
should only apply to ProcArrayLock, not ReplicationSlotControlLock.

Reported-By: Erik Rijkers
Analyzed-By: Petr Jelinek
Author: Petr Jelinek, heavily editorialized by Andres Freund
Reviewed-By: Andres Freund
Discussion: https://postgr.es/m/9a897b86-46e1-9915-ee4c-da02e4ff6a95@2ndquadrant.com
Backport: 9.4, where logical decoding was introduced.

7 years agoMake latch.c more paranoid about child-process cases.
Tom Lane [Thu, 27 Apr 2017 19:07:36 +0000 (15:07 -0400)]
Make latch.c more paranoid about child-process cases.

Although the postmaster doesn't currently create a self-pipe or any
latches, there's discussion of it doing so in future.  It's also
conceivable that a shared_preload_libraries extension would try to
create such a thing in the postmaster process today.  In that case
the self-pipe FDs would be inherited by forked child processes.
latch.c was entirely unprepared for such a case and could suffer an
assertion failure, or worse try to use the inherited pipe if somebody
called WaitLatch without having called InitializeLatchSupport in that
process.  Make it keep track of whether InitializeLatchSupport has been
called in the *current* process, and do the right thing if state has
been inherited from a parent.

Apply FD_CLOEXEC to file descriptors created in latch.c (the self-pipe,
as well as epoll event sets).  This ensures that child processes spawned
in backends, the archiver, etc cannot accidentally or intentionally mess
with these FDs.  It also ensures that we end up with the right state
for the self-pipe in EXEC_BACKEND processes, which otherwise wouldn't
know to close the postmaster's self-pipe FDs.

Back-patch to 9.6, mainly to keep latch.c looking similar in all branches
it exists in.

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

7 years agodoc: PG10 release note typo fix
Bruce Momjian [Thu, 27 Apr 2017 14:21:44 +0000 (10:21 -0400)]
doc:  PG10 release note typo fix

Reported-by: daniel.westermann
7 years agodoc PG10rel: adjust hash index commits and add parallel subquery
Bruce Momjian [Thu, 27 Apr 2017 14:17:08 +0000 (10:17 -0400)]
doc PG10rel: adjust hash index commits and add parallel subquery

Reported-by: Amit Kapila
7 years agoRework handling of subtransactions in 2PC recovery
Simon Riggs [Thu, 27 Apr 2017 12:41:22 +0000 (14:41 +0200)]
Rework handling of subtransactions in 2PC recovery

The bug fixed by 0874d4f3e183757ba15a4b3f3bf563e0393dd9c2
caused us to question and rework the handling of
subtransactions in 2PC during and at end of recovery.
Patch adds checks and tests to ensure no further bugs.

This effectively removes the temporary measure put in place
by 546c13e11b29a5408b9d6a6e3cca301380b47f7f.

Author: Simon Riggs
Reviewed-by: Tom Lane, Michael Paquier
Discussion: http://postgr.es/m/CANP8+j+vvXmruL_i2buvdhMeVv5TQu0Hm2+C5N+kdVwHJuor8w@mail.gmail.com

7 years agoAdditional tests for subtransactions in recovery
Simon Riggs [Thu, 27 Apr 2017 12:26:57 +0000 (14:26 +0200)]
Additional tests for subtransactions in recovery

Tests for normal and prepared transactions

Author: Nikhil Sontakke, placed in new test file by me

7 years agoFix typo in comment
Peter Eisentraut [Thu, 27 Apr 2017 01:12:35 +0000 (21:12 -0400)]
Fix typo in comment

Author: Masahiko Sawada <sawada.mshk@gmail.com>

7 years agoAllow multiple bgworkers to be launched per postmaster iteration.
Tom Lane [Wed, 26 Apr 2017 20:17:29 +0000 (16:17 -0400)]
Allow multiple bgworkers to be launched per postmaster iteration.

Previously, maybe_start_bgworker() would launch at most one bgworker
process per call, on the grounds that the postmaster might otherwise
neglect its other duties for too long.  However, that seems overly
conservative, especially since bad effects only become obvious when
many hundreds of bgworkers need to be launched at once.  On the other
side of the coin is that the existing logic could result in substantial
delay of bgworker launches, because ServerLoop isn't guaranteed to
iterate immediately after a signal arrives.  (My attempt to fix that
by using pselect(2) encountered too many portability question marks,
and in any case could not help on platforms without pselect().)
One could also question the wisdom of using an O(N^2) processing
method if the system is intended to support so many bgworkers.

As a compromise, allow that function to launch up to 100 bgworkers
per call (and in consequence, rename it to maybe_start_bgworkers).
This will allow any normal parallel-query request for workers
to be satisfied immediately during sigusr1_handler, avoiding the
question of whether ServerLoop will be able to launch more promptly.

There is talk of rewriting the postmaster to use a WaitEventSet to
avoid the signal-response-delay problem, but I'd argue that this change
should be kept even after that happens (if it ever does).

Backpatch to 9.6 where parallel query was added.  The issue exists
before that, but previous uses of bgworkers typically aren't as
sensitive to how quickly they get launched.

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

7 years agodoc PG10: add commit for transition table item
Bruce Momjian [Wed, 26 Apr 2017 19:50:51 +0000 (15:50 -0400)]
doc PG10:  add commit for transition table item

7 years agopg_get_partkeydef: return NULL for non-partitions
Stephen Frost [Wed, 26 Apr 2017 18:59:22 +0000 (14:59 -0400)]
pg_get_partkeydef: return NULL for non-partitions

Our general rule for pg_get_X(oid) functions is to simply return NULL
when passed an invalid or inappropriate OID.  Teach pg_get_partkeydef to
do this also, making it easier for users to use this function when
querying against tables with both partitions and non-partitions (such as
pg_class).

As a concrete example, this makes pg_dump's life a little easier.

Author: Amit Langote

7 years agoSilence compiler warning induced by commit de4389712.
Tom Lane [Wed, 26 Apr 2017 18:01:26 +0000 (14:01 -0400)]
Silence compiler warning induced by commit de4389712.

Smarter compilers can see that "slot" can't be used uninitialized,
but some popular ones cannot.  Noted by Jeff Janes.

7 years agodoc: ALTER SUBSCRIPTION documentation fixes
Peter Eisentraut [Wed, 26 Apr 2017 16:05:11 +0000 (12:05 -0400)]
doc: ALTER SUBSCRIPTION documentation fixes

WITH is optional for REFRESH PUBLICATION.  Also, remove a spurious
bracket and fix a punctuation.

Author: Euler Taveira <euler@timbira.com.br>

7 years agoFix query that gets remote relation info
Peter Eisentraut [Wed, 26 Apr 2017 16:05:04 +0000 (12:05 -0400)]
Fix query that gets remote relation info

Publisher relation can be incorrectly chosen, if there are more than
one relation in different schemas with the same name.

Author: Euler Taveira <euler@timbira.com.br>

7 years agoSpelling fixes in code comments
Peter Eisentraut [Wed, 26 Apr 2017 16:04:44 +0000 (12:04 -0400)]
Spelling fixes in code comments

Author: Euler Taveira <euler@timbira.com.br>

7 years agoFix typo in comment.
Fujii Masao [Wed, 26 Apr 2017 15:03:07 +0000 (00:03 +0900)]
Fix typo in comment.

Author: Masahiko Sawada

7 years agoFix various concurrency issues in logical replication worker launching
Peter Eisentraut [Wed, 26 Apr 2017 14:43:04 +0000 (10:43 -0400)]
Fix various concurrency issues in logical replication worker launching

The code was originally written with assumption that launcher is the
only process starting the worker.  However that hasn't been true since
commit 7c4f52409 which failed to modify the worker management code
adequately.

This patch adds an in_use field to the LogicalRepWorker struct to
indicate whether the worker slot is being used and uses proper locking
everywhere this flag is set or read.

However if the parent process dies while the new worker is starting and
the new worker fails to attach to shared memory, this flag would never
get cleared.  We solve this rare corner case by adding a sort of garbage
collector for in_use slots.  This uses another field in the
LogicalRepWorker struct named launch_time that contains the time when
the worker was started.  If any request to start a new worker does not
find free slot, we'll check for workers that were supposed to start but
took too long to actually do so, and reuse their slot.

In passing also fix possible race conditions when stopping a worker that
hasn't finished starting yet.

Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
Reported-by: Fujii Masao <masao.fujii@gmail.com>
7 years agodoc PG10: add Rafia Sabih to parallel index scan item
Bruce Momjian [Wed, 26 Apr 2017 10:33:25 +0000 (06:33 -0400)]
doc PG10:  add Rafia Sabih to parallel index scan item

Reported-by: Amit Kapila
7 years agoAllow ALTER TABLE ONLY on partitioned tables
Stephen Frost [Tue, 25 Apr 2017 20:57:43 +0000 (16:57 -0400)]
Allow ALTER TABLE ONLY on partitioned tables

There is no need to forbid ALTER TABLE ONLY on partitioned tables,
when no partitions exist yet.  This can be handy for users who are
building up their partitioned table independently and will create actual
partitions later.

In addition, this is how pg_dump likes to operate in certain instances.

Author: Amit Langote, with some error message word-smithing by me

7 years agodoc PG10: update EXPLAIN SUMMARY item
Bruce Momjian [Tue, 25 Apr 2017 19:30:45 +0000 (15:30 -0400)]
doc PG10:  update EXPLAIN SUMMARY item

Reported-by: Tels
7 years agoWake up launcher when enabling a subscription
Peter Eisentraut [Tue, 25 Apr 2017 18:40:33 +0000 (14:40 -0400)]
Wake up launcher when enabling a subscription

Otherwise one would have to wait up to DEFAULT_NAPTIME_PER_CYCLE until
the subscription worker is considered for starting.

There is a small race condition:  If one enables a subscription right
after disabling it, the launcher might not have registered the stopping
when receiving the wakeup signal for the re-enabling.  The start will
then not happen right away but after the full cycle time.

Author: Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>

7 years agodoc: update PG 10 item about referencing many relations
Bruce Momjian [Tue, 25 Apr 2017 17:47:51 +0000 (13:47 -0400)]
doc:  update PG 10 item about referencing many relations

Reported-by: Tom Lane
7 years agodoc: add PG 10 doc item about VACUUM truncation, 7e26e02ee
Bruce Momjian [Tue, 25 Apr 2017 17:45:47 +0000 (13:45 -0400)]
doc:  add PG 10 doc item about VACUUM truncation, 7e26e02ee

Reported-by: Andres Freund
7 years agodoc PG10: add commit 090010f2e and adjust EXPLAIN SUMMARY item
Bruce Momjian [Tue, 25 Apr 2017 17:29:26 +0000 (13:29 -0400)]
doc PG10:  add commit 090010f2e and adjust EXPLAIN SUMMARY item

Reported-by: Tels, Andres Freund
7 years agodoc: properly indent SGML tags in PG 10 release notes
Bruce Momjian [Tue, 25 Apr 2017 16:54:37 +0000 (12:54 -0400)]
doc:  properly indent SGML tags in PG 10 release notes

7 years agoSet the priorities of all quorum synchronous standbys to 1.
Fujii Masao [Tue, 25 Apr 2017 16:07:13 +0000 (01:07 +0900)]
Set the priorities of all quorum synchronous standbys to 1.

In quorum-based synchronous replication, all the standbys listed in
synchronous_standby_names equally have chances to be chosen
as synchronous standbys. So they should have the same priority.
However, previously, quorum standbys whose names appear earlier
in the list were given higher priority values though the difference of
those priority values didn't affect the selection of synchronous standbys.
Users could see those "meaningless" priority values in pg_stat_replication
and this was confusing.

This commit gives all the quorum synchronous standbys the same
highest priority, i.e., 1, in order to remove such confusion.

Author: Fujii Masao
Reviewed-by: Masahiko Sawada, Kyotaro Horiguchi
Discussion: http://postgr.es/m/CAHGQGwEKOw=SmPLxJzkBsH6wwDBgOnVz46QjHbtsiZ-d-2RGUg@mail.gmail.com

7 years agodoc: PG 10 release notes updates
Bruce Momjian [Tue, 25 Apr 2017 15:17:14 +0000 (11:17 -0400)]
doc:  PG 10 release notes updates

Reported-by: Michael Paquier, Felix Gerzaguet
7 years agodoc: PG 10 release note updates
Bruce Momjian [Tue, 25 Apr 2017 15:04:35 +0000 (11:04 -0400)]
doc:  PG 10 release note updates

Reported-by: David Rowley, Amit Langote, Ashutosh Bapat
7 years agoAdjust outdated comment.
Robert Haas [Tue, 25 Apr 2017 14:57:13 +0000 (10:57 -0400)]
Adjust outdated comment.

Commit 5dfc198146b49ce7ecc8a1fc9d5e171fb75f6ba5 removed the only
existing caller of hash_freeze, but left behind a comment indicating
that hash_freeze was still used.  Adjust.

Kyotaro Horiguchi

Discussion: http://postgr.es/m/20170424.165541.230634914.horiguchi.kyotaro@lab.ntt.co.jp

7 years agoUpdate copyright in recently added files.
Fujii Masao [Tue, 25 Apr 2017 14:38:41 +0000 (23:38 +0900)]
Update copyright in recently added files.

This commit also fixes copyright line missed by the automated script.

Author: Masahiko Sawada

7 years agodoc: move hash info to new section and split out growth item
Bruce Momjian [Tue, 25 Apr 2017 13:44:50 +0000 (09:44 -0400)]
doc: move hash info to new section and split out growth item

Reported-by: Amit Kapila
7 years agodoc: move hash performance item into index section
Bruce Momjian [Tue, 25 Apr 2017 03:29:14 +0000 (23:29 -0400)]
doc:  move hash performance item into index section

The requirement to rebuild pg_upgrade-ed hash indexes was kept in the
incompatibilities section.

Reported-by: Amit Kapila
7 years agodoc: add Rafia Sabih to PG 10 release note item
Bruce Momjian [Tue, 25 Apr 2017 03:08:25 +0000 (23:08 -0400)]
doc:  add Rafia Sabih to PG 10 release note item

Reported-by: Amit Kapila
7 years agodoc: fix PG 10 release note doc markup
Bruce Momjian [Tue, 25 Apr 2017 02:53:16 +0000 (22:53 -0400)]
doc:  fix PG 10 release note doc markup

7 years agodoc: merge PG 10 release SysV item
Bruce Momjian [Tue, 25 Apr 2017 02:51:20 +0000 (22:51 -0400)]
doc:  merge PG 10 release SysV item

Reported-by: Takayuki Tsunakawa
7 years agopostgres_fdw: Fix join push down with extensions
Peter Eisentraut [Tue, 25 Apr 2017 02:50:07 +0000 (22:50 -0400)]
postgres_fdw: Fix join push down with extensions

Objects in an extension are shippable to a foreign server if the
extension is part of the foreign server definition's shippable
extensions list.  But this was not properly considered in some cases
when checking whether a join condition can be pushed to a foreign server
and the join condition uses an object from a shippable extension.  So
the join would never be pushed down in those cases.

So, the list of extensions needs to be made available in fpinfo of the
relation being considered to be pushed down before any expressions are
assessed for being shippable.  Fix foreign_join_ok() to do that for a
join relation.

The code to save FDW options in fpinfo is scattered at multiple places.
Bring all of that together into functions apply_server_options(),
apply_table_options(), and merge_fdw_options().

David Rowley and Ashutosh Bapat, per report from David Rowley

7 years agodoc: PG 10 fixes
Bruce Momjian [Tue, 25 Apr 2017 02:48:25 +0000 (22:48 -0400)]
doc:  PG 10 fixes

Reported-by: Takayuki Tsunakawa
7 years agodoc: several minor PG 10 doc adjustments
Bruce Momjian [Tue, 25 Apr 2017 02:45:06 +0000 (22:45 -0400)]
doc:  several minor PG 10 doc adjustments

7 years agodoc: fix attribution of sequence item, order incompatibilities
Bruce Momjian [Tue, 25 Apr 2017 01:53:37 +0000 (21:53 -0400)]
doc:  fix attribution of sequence item, order incompatibilities

Reported-by: Andreas Karlsson
7 years agodoc: first draft of Postgres 10 release notes
Bruce Momjian [Tue, 25 Apr 2017 01:26:33 +0000 (21:26 -0400)]
doc:  first draft of Postgres 10 release notes

7 years agodoc: update release doc markup instructions
Bruce Momjian [Mon, 24 Apr 2017 23:04:28 +0000 (19:04 -0400)]
doc:  update release doc markup instructions

7 years agoRevert "Use pselect(2) not select(2), if available, to wait in postmaster's loop."
Tom Lane [Mon, 24 Apr 2017 22:29:03 +0000 (18:29 -0400)]
Revert "Use pselect(2) not select(2), if available, to wait in postmaster's loop."

This reverts commit 81069a9efc5a374dd39874a161f456f0fb3afba4.

Buildfarm results suggest that some platforms have versions of pselect(2)
that are not merely non-atomic, but flat out non-functional.  Revert the
use-pselect patch to confirm this diagnosis (and exclude the no-SA_RESTART
patch as the source of trouble).  If it's so, we should probably look into
blacklisting specific platforms that have broken pselect.

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

7 years agoUse pselect(2) not select(2), if available, to wait in postmaster's loop.
Tom Lane [Mon, 24 Apr 2017 18:03:14 +0000 (14:03 -0400)]
Use pselect(2) not select(2), if available, to wait in postmaster's loop.

Traditionally we've unblocked signals, called select(2), and then blocked
signals again.  The code expects that the select() will be cancelled with
EINTR if an interrupt occurs; but there's a race condition, which is that
an already-pending signal will be delivered as soon as we unblock, and then
when we reach select() there will be nothing preventing it from waiting.
This can result in a long delay before we perform any action that
ServerLoop was supposed to have taken in response to the signal.  As with
the somewhat-similar symptoms fixed by commit 893902085, the main practical
problem is slow launching of parallel workers.  The window for trouble is
usually pretty short, corresponding to one iteration of ServerLoop; but
it's not negligible.

To fix, use pselect(2) in place of select(2) where available, as that's
designed to solve exactly this problem.  Where not available, we continue
to use the old way, and are no worse off than before.

pselect(2) has been required by POSIX since about 2001, so most modern
platforms should have it.  A bigger portability issue is that some
implementations are said to be non-atomic, ie pselect() isn't really
any different from unblock/select/reblock.  Still, we're no worse off
than before on such a platform.

There is talk of rewriting the postmaster to use a WaitEventSet and
not do signal response work in signal handlers, at which point this
could be reverted, since we'd be using a self-pipe to solve the race
condition.  But that's not happening before v11 at the earliest.

Back-patch to 9.6.  The problem exists much further back, but the
worst symptom arises only in connection with parallel query, so it
does not seem worth taking any portability risks in older branches.

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

7 years agoRun the postmaster's signal handlers without SA_RESTART.
Tom Lane [Mon, 24 Apr 2017 17:00:23 +0000 (13:00 -0400)]
Run the postmaster's signal handlers without SA_RESTART.

The postmaster keeps signals blocked everywhere except while waiting
for something to happen in ServerLoop().  The code expects that the
select(2) will be cancelled with EINTR if an interrupt occurs; without
that, followup actions that should be performed by ServerLoop() itself
will be delayed.  However, some platforms interpret the SA_RESTART
signal flag as meaning that they should restart rather than cancel
the select(2).  Worse yet, some of them restart it with the original
timeout delay, meaning that a steady stream of signal interrupts can
prevent ServerLoop() from iterating at all if there are no incoming
connection requests.

Observable symptoms of this, on an affected platform such as HPUX 10,
include extremely slow parallel query startup (possibly as much as
30 seconds) and failure to update timestamps on the postmaster's sockets
and lockfiles when no new connections arrive for a long time.

We can fix this by running the postmaster's signal handlers without
SA_RESTART.  That would be quite a scary change if the range of code
where signals are accepted weren't so tiny, but as it is, it seems
safe enough.  (Note that postmaster children do, and must, reset all
the handlers before unblocking signals; so this change should not
affect any child process.)

There is talk of rewriting the postmaster to use a WaitEventSet and
not do signal response work in signal handlers, at which point it might
be appropriate to revert this patch.  But that's not happening before
v11 at the earliest.

Back-patch to 9.6.  The problem exists much further back, but the
worst symptom arises only in connection with parallel query, so it
does not seem worth taking any portability risks in older branches.

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

7 years agoGet rid of extern declarations of non-existent functions.
Fujii Masao [Mon, 24 Apr 2017 16:31:42 +0000 (01:31 +0900)]
Get rid of extern declarations of non-existent functions.

Those extern declartions were mistakenly added by commit 7c4f52409.

Author: Petr Jelinek

7 years agoFix postmaster's handling of fork failure for a bgworker process.
Tom Lane [Mon, 24 Apr 2017 16:16:58 +0000 (12:16 -0400)]
Fix postmaster's handling of fork failure for a bgworker process.

This corner case didn't behave nicely at all: the postmaster would
(partially) update its state as though the process had started
successfully, and be quite confused thereafter.  Fix it to act
like the worker had crashed, instead.

In passing, refactor so that do_start_bgworker contains all the
state-change logic for bgworker launch, rather than just some of it.

Back-patch as far as 9.4.  9.3 contains similar logic, but it's just
enough different that I don't feel comfortable applying the patch
without more study; and the use of bgworkers in 9.3 was so small
that it doesn't seem worth the extra work.

transam/parallel.c is still entirely unprepared for the possibility
of bgworker startup failure, but that seems like material for a
separate patch.

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

7 years agoCode review for commands/statscmds.c.
Tom Lane [Mon, 24 Apr 2017 15:15:15 +0000 (11:15 -0400)]
Code review for commands/statscmds.c.

Fix machine-dependent sorting of column numbers.  (Odd behavior
would only materialize for column numbers above 255, but that's
certainly legal.)

Fix poor choice of SQLSTATE for some errors, and improve error message
wording.  (Notably, "is not a scalar type" is a totally misleading way
to explain "does not have a default btree opclass".)

Avoid taking AccessExclusiveLock on the associated relation during DROP
STATISTICS.  That's neither necessary nor desirable, and it could easily
have put us into situations where DROP fails (compare commit 68ea2b7f9).

Adjust/improve comments.

David Rowley and Tom Lane

Discussion: https://postgr.es/m/CAKJS1f-GmCfPvBbAEaM5xoVOaYdVgVN1gicALSoYQ77z-+vLbw@mail.gmail.com

7 years agoDon't include sys/poll.h anymore.
Andres Freund [Sun, 23 Apr 2017 23:04:46 +0000 (16:04 -0700)]
Don't include sys/poll.h anymore.

poll.h is mandated by Single Unix Spec v2, the usual baseline for
postgres on unix.  None of the unixoid buildfarms animals has
sys/poll.h but not poll.h.  Therefore there's not much point to test
for sys/poll.h's existence and include it optionally.

Author: Andres Freund, per suggestion from Tom Lane
Discussion: https://postgr.es/m/20505.1492723662@sss.pgh.pa.us

7 years agoZero padding in replication origin's checkpointed on disk-state.
Andres Freund [Sun, 23 Apr 2017 22:48:31 +0000 (15:48 -0700)]
Zero padding in replication origin's checkpointed on disk-state.

This seems to be largely cosmetic, avoiding valgrind bleats and the
like. The uninitialized padding influences the CRC of the on-disk
entry, but because it's also used when verifying the CRC, that doesn't
cause spurious failures.  Backpatch nonetheless.

It's a bit unfortunate that contrib/test_decoding/sql/replorigin.sql
doesn't exercise the checkpoint path, but checkpoints are fairly
expensive on weaker machines, and we'd have to stop/start for that to
be meaningful.

Author: Andres Freund
Discussion: https://postgr.es/m/20170422183123.w2jgiuxtts7qrqaq@alap3.anarazel.de
Backpatch: 9.5, where replication origins were introduced

7 years agoInitialize all memory for logical replication relation cache.
Andres Freund [Sun, 23 Apr 2017 22:36:47 +0000 (15:36 -0700)]
Initialize all memory for logical replication relation cache.

As reported by buildfarm animal skink / valgrind, some of the
variables weren't always initialized.  To avoid further mishaps use
memset to ensure the entire entry is initialized.

Author: Petr Jelinek
Reported-By: Andres Freund
Discussion: https://postgr.es/m/20170422183123.w2jgiuxtts7qrqaq@alap3.anarazel.de
Backpatch: none, code new in master

7 years agoRemove select(2) backed latch implementation.
Andres Freund [Sun, 23 Apr 2017 22:26:25 +0000 (15:26 -0700)]
Remove select(2) backed latch implementation.

poll(2) is required by Single Unix Spec v2, the usual baseline for
postgres (leaving windows aside).  There's not been any buildfarm
animals without poll(2) for a long while, leaving the select(2)
implementation to be largely untested.

On windows, including mingw, poll() is not available, but we have a
special case implementation for windows anyway.

Author: Andres Freund
Discussion: https://postgr.es/m/20170420003611.7r2sdvehesdyiz2i@alap3.anarazel.de

7 years agoWorkaround for RecoverPreparedTransactions()
Simon Riggs [Sun, 23 Apr 2017 21:12:01 +0000 (22:12 +0100)]
Workaround for RecoverPreparedTransactions()

Force overwriteOK = true while we investigate deeper fix

Proposed by Tom Lane as temporary measure, accepted by me

7 years agoFix LagTrackerRead() for timeline increments
Simon Riggs [Sun, 23 Apr 2017 20:35:41 +0000 (21:35 +0100)]
Fix LagTrackerRead() for timeline increments

Bug was masked by error in running 004_timeline_switch.pl that was
fixed recently in 7d68f2281a.

Detective work by Alvaro Herrera and Tom Lane

Author: Thomas Munro

7 years agoFix order of arguments to SubTransSetParent().
Tom Lane [Sun, 23 Apr 2017 17:10:57 +0000 (13:10 -0400)]
Fix order of arguments to SubTransSetParent().

ProcessTwoPhaseBuffer (formerly StandbyRecoverPreparedTransactions)
mixed up the parent and child XIDs when calling SubTransSetParent to
record the transactions' relationship in pg_subtrans.

Remarkably, analysis by Simon Riggs suggests that this doesn't lead to
visible problems (at least, not in non-Assert builds).  That might
explain why we'd not noticed it before.  Nonetheless, it's surely wrong.

This code was born broken, so back-patch to all supported branches.

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

7 years agoFix TAP infrastructure to support Mingw better
Andrew Dunstan [Sun, 23 Apr 2017 13:21:38 +0000 (09:21 -0400)]
Fix TAP infrastructure to support Mingw better

archive_command and restore_command need to refer to Windows paths, not
Msys virtual file system paths, as postgres is completely unaware of the
latter, so prefix them with the Windows path to the virtual file system
root. Clean psql and pg_recvlogical output of carriage returns.

7 years agoMake PostgresNode.pm check server status more carefully.
Tom Lane [Sat, 22 Apr 2017 22:18:25 +0000 (18:18 -0400)]
Make PostgresNode.pm check server status more carefully.

PostgresNode blithely ignored the exit status of pg_ctl, and in general
made no effort to be sure that the server was running when it should be.
This caused it to miss server crashes, which is a serious shortcoming
in a test scaffold.  Make it complain if pg_ctl fails, and modify the
start and stop logic to complain if the server doesn't start, or doesn't
stop, when expected.

Also, have it turn off the "restart_after_crash" configuration parameter
in created clusters, as bitter experience has shown that leaving that on
can mask crashes too.

We might at some point need variant functions that allow for, eg,
server start failure to be expected.  But no existing test case appears
to want that, and it surely shouldn't be the default behavior.

Note that this *will* break the buildfarm, as it will expose known
bugs that the previous testing failed to.  I'm committing it despite
that, to verify that we get the expected failures in the buildfarm
not just in manual testing.

Back-patch into 9.6 where PostgresNode was introduced.  (The 9.6
branch is not expected to show any failures.)

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

7 years agoMake PostgresNode::append_conf append a newline automatically.
Tom Lane [Sat, 22 Apr 2017 20:58:15 +0000 (16:58 -0400)]
Make PostgresNode::append_conf append a newline automatically.

Although the documentation for append_conf said clearly that it didn't
add a newline, many test authors seem to have forgotten that ... or maybe
they just consulted the example at the top of the POD documentation,
which clearly shows adding a config entry without bothering to add a
trailing newline.  The worst part of that is that it works, as long as
you don't do it more than once, since the backend isn't picky about
whether config files end with newlines.  So there's not a strong forcing
function reminding test authors not to do it like that.  Upshot is that
this is a terribly fragile way to go about things, and there's at least
one existing test case that is demonstrably broken and not testing what
it thinks it is.

Let's just make append_conf append a newline, instead; that is clearly
way safer than the old definition.

I also cleaned up a few call sites that were unnecessarily ugly.
(I left things alone in places where it's plausible that additional
config lines would need to be added someday.)

Back-patch the change in append_conf itself to 9.6 where it was added,
as having a definitional inconsistency between branches would obviously
be pretty hazardous for back-patching TAP tests.  The other changes are
just cosmetic and don't need to be back-patched.

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

7 years agoRequire sufficiently modern version of Test::More for TAP tests
Andrew Dunstan [Sat, 22 Apr 2017 14:04:01 +0000 (10:04 -0400)]
Require sufficiently modern version of Test::More for TAP tests

Ancient versions of Test::More don't support the note() function used in
some TAP tests, so we require the minimum version of the module that
does.

7 years agoPartially revert commit 536d47bd9d5fce8d91929bee3128fa1d08dbcc57.
Tom Lane [Sat, 22 Apr 2017 06:06:16 +0000 (02:06 -0400)]
Partially revert commit 536d47bd9d5fce8d91929bee3128fa1d08dbcc57.

Per buildfarm, the "#ifdef F_SETFD" removed in that commit actually
is needed on Windows, because fcntl() isn't available at all on that
platform, unless using Cygwin.  We could perhaps spell it more like
"#ifdef HAVE_FCNTL", or "#ifndef WIN32", but it's not clear that
those choices are better.

It does seem that we don't need the bogus manual definition of
FD_CLOEXEC, though, so keep that change.

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

7 years agodoc: Update link
Peter Eisentraut [Fri, 21 Apr 2017 23:42:01 +0000 (19:42 -0400)]
doc: Update link

The reference "That is the topic of the next section." has been
incorrect since the materialized views documentation got inserted
between the section "rules-views" and "rules-update".

Author: Zertrin <postgres_wiki@zertrin.org>

7 years agoAvoid depending on non-POSIX behavior of fcntl(2).
Tom Lane [Fri, 21 Apr 2017 19:55:56 +0000 (15:55 -0400)]
Avoid depending on non-POSIX behavior of fcntl(2).

The POSIX standard does not say that the success return value for
fcntl(F_SETFD) and fcntl(F_SETFL) is zero; it says only that it's not -1.
We had several calls that were making the stronger assumption.  Adjust
them to test specifically for -1 for strict spec compliance.

The standard further leaves open the possibility that the O_NONBLOCK
flag bit is not the only active one in F_SETFL's argument.  Formally,
therefore, one ought to get the current flags with F_GETFL and store
them back with only the O_NONBLOCK bit changed when trying to change
the nonblock state.  In port/noblock.c, we were doing the full pushup
in pg_set_block but not in pg_set_noblock, which is just weird.  Make
both of them do it properly, since they have little business making
any assumptions about the socket they're handed.  The other places
where we're issuing F_SETFL are working with FDs we just got from
pipe(2), so it's reasonable to assume the FDs' properties are all
default, so I didn't bother adding F_GETFL steps there.

Also, while pg_set_block deserves some points for trying to do things
right, somebody had decided that it'd be even better to cast fcntl's
third argument to "long".  Which is completely loony, because POSIX
clearly says the third argument for an F_SETFL call is "int".

Given the lack of field complaints, these missteps apparently are not
of significance on any common platforms.  But they're still wrong,
so back-patch to all supported branches.

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

7 years agoChange the on-disk format of SCRAM verifiers to conform to RFC 5803.
Heikki Linnakangas [Fri, 21 Apr 2017 19:51:57 +0000 (22:51 +0300)]
Change the on-disk format of SCRAM verifiers to conform to RFC 5803.

It doesn't make any immediate difference to PostgreSQL, but might as well
follow the standard, since one exists. (I looked at RFC 5803 earlier, but
didn't fully understand it back then.)

The new format uses Base64 instead of hex to encode StoredKey and
ServerKey, which makes the verifiers slightly smaller. Using the same
encoding for the salt and the keys also means that you only need one
encoder/decoder instead of two. Although we have code in the backend to
do both, we are talking about teaching libpq how to create SCRAM verifiers
for PQencodePassword(), and libpq doesn't currently have any code for hex
encoding.

Bump catversion, because this renders any existing SCRAM verifiers in
pg_authid invalid.

Discussion: https://www.postgresql.org/message-id/351ba574-85ea-d9b8-9689-8c928dd0955d@iki.fi

7 years agodoc: Fix typo
Peter Eisentraut [Fri, 21 Apr 2017 19:33:25 +0000 (15:33 -0400)]
doc: Fix typo

7 years agoRemove long-obsolete catering for platforms without F_SETFD/FD_CLOEXEC.
Tom Lane [Fri, 21 Apr 2017 18:48:29 +0000 (14:48 -0400)]
Remove long-obsolete catering for platforms without F_SETFD/FD_CLOEXEC.

SUSv2 mandates that <fcntl.h> provide both F_SETFD and FD_CLOEXEC,
so it seems pretty unlikely that any platforms remain without those.
Remove the #ifdef-ery installed by commit 7627b91cd to see if the
buildfarm agrees.

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

7 years agoSynchronize table list before creating slot in CREATE SUBSCRIPTION
Peter Eisentraut [Fri, 21 Apr 2017 12:35:24 +0000 (08:35 -0400)]
Synchronize table list before creating slot in CREATE SUBSCRIPTION

This way a failure to synchronize the table list will not leave an
unused slot on the publisher.

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

7 years agoAdd missing erand48.c to libpq/.gitignore.
Tom Lane [Thu, 20 Apr 2017 20:31:10 +0000 (16:31 -0400)]
Add missing erand48.c to libpq/.gitignore.

Oversight in commit 818fd4a67.  While at it, sync order of file list
in .gitignore with those in the Makefile.

7 years agoImprove multivariate statistics documentation
Alvaro Herrera [Thu, 20 Apr 2017 18:43:33 +0000 (15:43 -0300)]
Improve multivariate statistics documentation

Extended statistics commit 7b504eb282c did not include appropriate
documentation next to where we document regular planner statistics (I
ripped what was submitted before commit and then forgot to put it back),
and while later commit 2686ee1b7ccf added some material, it structurally
depended on what I had ripped out, so the end result wasn't proper.

Fix those problems by shuffling what was added by 2686ee1b7ccf and
including some additional material, so that now chapter 14 "Performance
Tips" now describes the types of multivariate statistics we currently
have, and chapter 68 "How the Planner Uses Statistics" shows some
examples.  The new text should be more in line with previous material,
in (hopefully) the appropriate depth.

While at it, fix a small bug in pg_statistic_ext docs: one column was
listed in the wrong spot.

7 years agoSync pg_ctl documentation and usage message with reality.
Tom Lane [Thu, 20 Apr 2017 18:41:48 +0000 (14:41 -0400)]
Sync pg_ctl documentation and usage message with reality.

Commit 05cd12ed5 ("pg_ctl: Change default to wait for all actions")
was a tad sloppy about updating the documentation to match.  The
documentation was also sorely in need of a copy-editing pass, having
been adjusted at different times by different people who took little
care to maintain consistency of style.

7 years agoModify message when partitioned table is added to publication
Peter Eisentraut [Thu, 20 Apr 2017 18:18:33 +0000 (14:18 -0400)]
Modify message when partitioned table is added to publication

Give a more specific error message than "xyz is not a table".

Also document in CREATE PUBLICATION which kinds of relations are not
supported.

based on patch by Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>

7 years agoPrevent log_replication_commands from causing SQL commands to be logged.
Fujii Masao [Thu, 20 Apr 2017 15:56:27 +0000 (00:56 +0900)]
Prevent log_replication_commands from causing SQL commands to be logged.

Commit 7c4f524 allowed walsender to execute normal SQL commands
to support table sync feature in logical replication. Previously
while log_statement caused such SQL commands to be logged,
log_replication_commands caused them to be logged, too.
That is, such SQL commands were logged twice unexpectedly
when those settings were both enabled.

This commit forces log_replication_commands to log only replication
commands, to prevent normal SQL commands from being logged twice.

Author: Masahiko Sawada
Reviewed-by: Kyotaro Horiguchi
Reported-by: Fujii Masao
Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com

7 years agoMark some columns in pg_subscription as NOT NULL.
Fujii Masao [Thu, 20 Apr 2017 14:35:30 +0000 (23:35 +0900)]
Mark some columns in pg_subscription as NOT NULL.

In pg_subscription, subconninfo, subslotname, subsynccommit and
subpublications are expected not to be NULL. Therefore this patch
adds BKI_FORCE_NOT_NULL markings to them.

This patch is basically unnecessary unless the code has a bug which
wrongly sets either of those columns to NULL. But it's good to have
this as a safeguard.

Author: Masahiko Sawada
Reviewed-by: Kyotaro Horiguchi
Reported-by: Fujii Masao
Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com

7 years agoDon't call the function that may raise an error while holding spinlock.
Fujii Masao [Thu, 20 Apr 2017 14:12:57 +0000 (23:12 +0900)]
Don't call the function that may raise an error while holding spinlock.

It's not safe to raise an error while holding spinlock. But previously
logical replication worker for table sync called the function which
reads the system catalog and may raise an error while it's holding
spinlock. Which could lead to the trouble where spinlock will never
be released and the server gets stuck infinitely.

Author: Petr Jelinek
Reviewed-by: Kyotaro Horiguchi and Fujii Masao
Reported-by: Fujii Masao
Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com

7 years agoFix typo in docs on SASL authentication.
Heikki Linnakangas [Wed, 19 Apr 2017 18:42:27 +0000 (21:42 +0300)]
Fix typo in docs on SASL authentication.

Word "sends" was missing.

Jaime Casanova

7 years agoFix testing of parallel-safety of SubPlans.
Tom Lane [Tue, 18 Apr 2017 19:43:56 +0000 (15:43 -0400)]
Fix testing of parallel-safety of SubPlans.

is_parallel_safe() supposed that the only relevant property of a SubPlan
was the parallel safety of the referenced subplan tree.  This is wrong:
the testexpr or args subtrees might contain parallel-unsafe stuff, as
demonstrated by the test case added here.  However, just recursing into the
subtrees fails in a different way: we'll typically find PARAM_EXEC Params
representing the subplan's output columns in the testexpr.  The previous
coding supposed that any Param must be treated as parallel-restricted, so
that a naive attempt at fixing this disabled parallel pushdown of SubPlans
altogether.  We must instead determine, for any visited Param, whether it
is one that would be computed by a surrounding SubPlan node; if so, it's
safe to push down along with the SubPlan node.

We might later be able to extend this logic to cope with Params used for
correlated subplans and other cases; but that's a task for v11 or beyond.

Tom Lane and Amit Kapila

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

7 years agoDoc: improve markup in self-signed certificate example.
Tom Lane [Tue, 18 Apr 2017 18:21:57 +0000 (14:21 -0400)]
Doc: improve markup in self-signed certificate example.

7 years agoImprove documentation and comment for quorum-based sync replication.
Fujii Masao [Tue, 18 Apr 2017 17:58:28 +0000 (02:58 +0900)]
Improve documentation and comment for quorum-based sync replication.

Author: Masahiko Sawada, heavily modified by me
Discussion: http://postgr.es/m/CAHGQGwEKOw=SmPLxJzkBsH6wwDBgOnVz46QjHbtsiZ-d-2RGUg@mail.gmail.com

7 years agoProvide an error cursor for "can't call an SRF here" errors.
Tom Lane [Tue, 18 Apr 2017 17:20:59 +0000 (13:20 -0400)]
Provide an error cursor for "can't call an SRF here" errors.

Since it appears that v10 is going to move the goalposts by some amount
in terms of where you can and can't invoke set-returning functions,
arrange for the executor's "set-valued function called in context that
cannot accept a set" errors to include a syntax position if possible,
pointing to the specific SRF that can't be called where it's located.

The main bit of infrastructure needed for this is to make the query source
text accessible in the executor; but it turns out that commit 4c728f382
already did that.  We just need a new function executor_errposition()
modeled on parser_errposition(), and we're ready to rock.

While experimenting with this, I noted that the error position wasn't
properly reported if it occurred in a plpgsql FOR-over-query loop,
which turned out to be because SPI_cursor_open_internal wasn't providing
an error context callback during PortalStart.  Fix that.

There's a whole lot more that could be done with this infrastructure
now that it's there, but this is not the right time in the development
cycle for that sort of work.  Hence, resist the temptation to plaster
executor_errposition() calls everywhere ... for the moment.

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

7 years agoA collection of small fixes for logical replication.
Fujii Masao [Tue, 18 Apr 2017 17:16:34 +0000 (02:16 +0900)]
A collection of small fixes for logical replication.

* Be sure to reset the launcher's pid (LogicalRepCtx->launcher_pid) to 0
  even when the launcher emits an error.

* Declare ApplyLauncherWakeup() as a static function because it's called
  only in launcher.c.

* Previously IsBackendPId() was used to check whether the launcher's pid
  was valid. IsBackendPid() was necessary because there was the bug where
  the launcher's pid was not reset to 0. But now it's fixed, so IsBackendPid()
  is not necessary and this patch removes it.

Author: Masahiko Sawada
Reviewed-by: Kyotaro Horiguchi
Reported-by: Fujii Masao
Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com

7 years agoUse DatumGetInt32() to extract 32-bit integer value from a datum.
Fujii Masao [Tue, 18 Apr 2017 15:12:27 +0000 (00:12 +0900)]
Use DatumGetInt32() to extract 32-bit integer value from a datum.

Previously DatumGetObjectId() was wrongly used for that.

Author: Masahiko Sawada
Reviewed-by: Kyotaro Horiguchi
Reported-by: Fujii Masao
Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com

7 years agoAlso fix comment in sample postgresql.conf file, for "scram-sha-256".
Heikki Linnakangas [Tue, 18 Apr 2017 14:38:32 +0000 (17:38 +0300)]
Also fix comment in sample postgresql.conf file, for "scram-sha-256".

Reported offlist by hubert depesz lubaczewski.

7 years agoSimplify docs on creating a self-signed SSL certificate
Andrew Dunstan [Tue, 18 Apr 2017 12:50:15 +0000 (08:50 -0400)]
Simplify docs on creating a self-signed SSL certificate

Discussion: <https://postgr.es/m/72335afb-969b-af84-3fcb-1739e3ed09a6@2ndQuadrant.com>

7 years agoRename "scram" to "scram-sha-256" in pg_hba.conf and password_encryption.
Heikki Linnakangas [Tue, 18 Apr 2017 11:50:50 +0000 (14:50 +0300)]
Rename "scram" to "scram-sha-256" in pg_hba.conf and password_encryption.

Per discussion, plain "scram" is confusing because we actually implement
SCRAM-SHA-256 rather than the original SCRAM that uses SHA-1 as the hash
algorithm. If we add support for SCRAM-SHA-512 or some other mechanism in
the SCRAM family in the future, that would become even more confusing.

Most of the internal files and functions still use just "scram" as a
shorthand for SCRMA-SHA-256, but I did change PASSWORD_TYPE_SCRAM to
PASSWORD_TYPE_SCRAM_SHA_256, as that could potentially be used by 3rd
party extensions that hook into the password-check hook.

Michael Paquier did this in an earlier version of the SCRAM patch set
already, but I didn't include that in the version that was committed.

Discussion: https://www.postgresql.org/message-id/fde71ff1-5858-90c8-99a9-1c2427e7bafb@iki.fi

7 years agoFix minor typo in comment
Simon Riggs [Tue, 18 Apr 2017 10:57:11 +0000 (11:57 +0100)]
Fix minor typo in comment

Reported-by: Amit Langote
7 years agoExit correctly from PrepareRedoRemove() when not found
Simon Riggs [Tue, 18 Apr 2017 10:35:38 +0000 (11:35 +0100)]
Exit correctly from PrepareRedoRemove() when not found

Complex crash bug all started with this failure.
Diagnosed and fixed by Nikhil Sontakke, reviewed by me.

Reported-by: Jeff Janes
Author: Nikhil Sontakke
Discussion: https://postgr.es/m/CAMkU=1xBP8cqdS5eK8APHL=X6RHMMM2vG5g+QamduuTsyCwv9g@mail.gmail.com

7 years agoDon’t push nextid too far forwards in recovery
Simon Riggs [Tue, 18 Apr 2017 10:14:05 +0000 (11:14 +0100)]
Don’t push nextid too far forwards in recovery

Doing so allows various crash possibilities. Fix by avoiding
having PrescanPreparedTransactions() increment
ShmemVariableCache->nextXid when it has no 2PC files

Bug found by Jeff Janes, diagnosis and patch by Pavan Deolasee,
then patch re-designed for clarity and full accuracy by
Michael Paquier.

Reported-by: Jeff Janes
Author: Pavan Deolasee, Michael Paquier
Discussion: https://postgr.es/m/CAMkU=1zMLnH_i1-PVQ-biZzvNx7VcuatriquEnh7HNk6K8Ss3Q@mail.gmail.com

7 years agoAllow COMMENT ON COLUMN with partitioned tables
Simon Riggs [Tue, 18 Apr 2017 09:42:10 +0000 (10:42 +0100)]
Allow COMMENT ON COLUMN with partitioned tables

Amit Langote

7 years agoFix example on creating a trigger with a transition table.
Heikki Linnakangas [Tue, 18 Apr 2017 08:51:06 +0000 (11:51 +0300)]
Fix example on creating a trigger with a transition table.

Yugo Nagata

Discussion: https://www.postgresql.org/message-id/20170417180921.3047f3b0.nagata@sraoss.co.jp

7 years agodoc: Clarify logical replication details
Peter Eisentraut [Tue, 18 Apr 2017 03:32:54 +0000 (23:32 -0400)]
doc: Clarify logical replication details

Document more explicitly that the target table can have more columns
than the source table.

Reported-by: Euler Taveira <euler@timbira.com.br>
7 years agoSet range table for CopyFrom() in tablesync
Peter Eisentraut [Tue, 18 Apr 2017 03:22:04 +0000 (23:22 -0400)]
Set range table for CopyFrom() in tablesync

CopyFrom() needs a range table for formatting certain errors for
constraint violations.

This changes the mechanism of how the range table is passed to the
CopyFrom() executor state.  We used to generate the range table and one
entry for the relation manually inside DoCopy().  Now we use
addRangeTableEntryForRelation() to setup the range table and relation
entry for the ParseState, which is then passed down by BeginCopyFrom().

Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
Reported-by: Euler Taveira <euler@timbira.com.br>
7 years agoRename columns in new pg_statistic_ext catalog
Alvaro Herrera [Mon, 17 Apr 2017 21:34:29 +0000 (18:34 -0300)]
Rename columns in new pg_statistic_ext catalog

The new catalog reused a column prefix "sta" from pg_statistic, but this
is undesirable, so change the catalog to use prefix "stx" instead.
Also, rename the column that lists enabled statistic kinds as "stxkind"
rather than "enabled".

Discussion: https://postgr.es/m/CAKJS1f_2t5jhSN7huYRFH3w3rrHfG2QU7hiUHsu-Vdjd1rYT3w@mail.gmail.com