]> granicus.if.org Git - postgresql/log
postgresql
7 years agoAdd new function dsa_allocate0.
Robert Haas [Thu, 16 Feb 2017 17:45:53 +0000 (12:45 -0500)]
Add new function dsa_allocate0.

This does the same thing as dsa_allocate, except that the memory
is guaranteed to be zero-filled on return.

Dilip Kumar, adjusted by me.

7 years agoDoc: remove duplicate index entry.
Tom Lane [Thu, 16 Feb 2017 16:30:07 +0000 (11:30 -0500)]
Doc: remove duplicate index entry.

This causes a warning with the old html-docs toolchain, though not with the
new.  I had originally supposed that we needed both <indexterm> entries to
get both a primary index entry and a see-also link; but evidently not,
as pointed out by Fabien Coelho.

Discussion: https://postgr.es/m/alpine.DEB.2.20.1702161616060.5445@lancre

7 years agoAvoid crash in ALTER TABLE not_partitioned DETACH PARTITION.
Robert Haas [Thu, 16 Feb 2017 13:37:37 +0000 (08:37 -0500)]
Avoid crash in ALTER TABLE not_partitioned DETACH PARTITION.

Amit Langote, reviewed and slightly changed by me.

7 years agoFormatting and docs corrections for logical decoding output plugins.
Tom Lane [Wed, 15 Feb 2017 23:15:47 +0000 (18:15 -0500)]
Formatting and docs corrections for logical decoding output plugins.

Make the typedefs for output plugins consistent with project style;
they were previously not even consistent with each other as to layout
or inclusion of parameter names.  Make the documentation look the same,
and fix errors therein (missing and misdescribed parameters).

Back-patch because of the documentation bugs.

7 years agoDoc: fix typo in logicaldecoding.sgml.
Tom Lane [Wed, 15 Feb 2017 22:31:02 +0000 (17:31 -0500)]
Doc: fix typo in logicaldecoding.sgml.

There's no such field as OutputPluginOptions.output_mode;
it's actually output_type.  Noted by T. Katsumata.

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

7 years agoMake sure that hash join's bulk-tuple-transfer loops are interruptible.
Tom Lane [Wed, 15 Feb 2017 21:40:05 +0000 (16:40 -0500)]
Make sure that hash join's bulk-tuple-transfer loops are interruptible.

The loops in ExecHashJoinNewBatch(), ExecHashIncreaseNumBatches(), and
ExecHashRemoveNextSkewBucket() are all capable of iterating over many
tuples without ever doing a CHECK_FOR_INTERRUPTS, so that the backend
might fail to respond to SIGINT or SIGTERM for an unreasonably long time.
Fix that.  In the case of ExecHashJoinNewBatch(), it seems useful to put
the added CHECK_FOR_INTERRUPTS into ExecHashJoinGetSavedTuple() rather
than directly in the loop, because that will also ensure that both
principal code paths through ExecHashJoinOuterGetTuple() will do a
CHECK_FOR_INTERRUPTS, which seems like a good idea to avoid surprises.

Back-patch to all supported branches.

Tom Lane and Thomas Munro

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

7 years agoDoc: fix syntax synopsis for INSERT ... ON CONFLICT DO UPDATE.
Tom Lane [Wed, 15 Feb 2017 20:41:09 +0000 (15:41 -0500)]
Doc: fix syntax synopsis for INSERT ... ON CONFLICT DO UPDATE.

Commit 906bfcad7 adjusted the syntax synopsis for UPDATE, but missed
the fact that the INSERT synopsis now contains a duplicate of that.

In passing, improve wording and markup about using a table alias to
dodge the conflict with use of "excluded" as a special table name.

7 years agoFix tab completion for "ALTER SYSTEM SET variable ...".
Tom Lane [Wed, 15 Feb 2017 20:23:19 +0000 (15:23 -0500)]
Fix tab completion for "ALTER SYSTEM SET variable ...".

It wouldn't complete "TO" after the variable name, which is certainly
minor enough.  But since we do complete "TO" after "SET variable ...",
and since this case used to work pre-9.6, I think this is a bug.

Also, fix the query used to collect the variable names; whoever last
touched it evidently didn't understand how the pieces are supposed
to fit together.  It accidentally worked anyway, because readline
ignores irrelevant completions, but it was randomly unlike the ones
around it, and could be a source of actual bugs if someone copied
it as a prototype for another query.

7 years agoFix YA unwanted behavioral difference with operator_precedence_warning.
Tom Lane [Wed, 15 Feb 2017 19:43:59 +0000 (14:43 -0500)]
Fix YA unwanted behavioral difference with operator_precedence_warning.

Jeff Janes noted that the error cursor position shown for some errors
would vary when operator_precedence_warning is turned on.  We'd prefer
that option to have no undocumented effects, so this isn't desirable.
To fix, make sure that an AEXPR_PAREN node has the same exprLocation
as its child node.

(Note: it would be a little cheaper to use @2 here instead of an
exprLocation call, but there are cases where that wouldn't produce
the identical answer, so don't do it like that.)

Back-patch to 9.5 where this feature was introduced.

Discussion: https://postgr.es/m/CAMkU=1ykK+VhhcQ4Ky8KBo9FoaUJH3f3rDQB8TkTXi-ZsBRUkQ@mail.gmail.com

7 years agoAdd optimizer and executor support for parallel index scans.
Robert Haas [Wed, 15 Feb 2017 18:53:24 +0000 (13:53 -0500)]
Add optimizer and executor support for parallel index scans.

In combination with 569174f1be92be93f5366212cc46960d28a5c5cd, which
taught the btree AM how to perform parallel index scans, this allows
parallel index scan plans on btree indexes.  This infrastructure
should be general enough to support parallel index scans for other
index AMs as well, if someone updates them to support parallel
scans.

Amit Kapila, reviewed and tested by Anastasia Lubennikova, Tushar
Ahuja, and Haribabu Kommi, and me.

7 years agoReplace min_parallel_relation_size with two new GUCs.
Robert Haas [Wed, 15 Feb 2017 18:37:24 +0000 (13:37 -0500)]
Replace min_parallel_relation_size with two new GUCs.

When min_parallel_relation_size was added, the only supported type
of parallel scan was a parallel sequential scan, but there are
pending patches for parallel index scan, parallel index-only scan,
and parallel bitmap heap scan.  Those patches introduce two new
types of complications: first, what's relevant is not really the
total size of the relation but the portion of it that we will scan;
and second, index pages and heap pages shouldn't necessarily be
treated in exactly the same way.  Typically, the number of index
pages will be quite small, but that doesn't necessarily mean that
a parallel index scan can't pay off.

Therefore, we introduce min_parallel_table_scan_size, which works
out a degree of parallelism for scans based on the number of table
pages that will be scanned (and which is therefore equivalent to
min_parallel_relation_size for parallel sequential scans) and also
min_parallel_index_scan_size which can be used to work out a degree
of parallelism based on the number of index pages that will be
scanned.

Amit Kapila and Robert Haas

Discussion: http://postgr.es/m/CAA4eK1KowGSYYVpd2qPpaPPA5R90r++QwDFbrRECTE9H_HvpOg@mail.gmail.com
Discussion: http://postgr.es/m/CAA4eK1+TnM4pXQbvn7OXqam+k_HZqb0ROZUMxOiL6DWJYCyYow@mail.gmail.com

7 years agoFix wrong articles in pg_proc descriptions.
Robert Haas [Wed, 15 Feb 2017 17:13:38 +0000 (12:13 -0500)]
Fix wrong articles in pg_proc descriptions.

This technically should involve a catversion bump, but that seems
pedantic, so I skipped it.

Report and patch by David Christensen.

7 years agoDocument new libpq connection statuses for target_session_attrs.
Robert Haas [Wed, 15 Feb 2017 16:03:41 +0000 (11:03 -0500)]
Document new libpq connection statuses for target_session_attrs.

I didn't realize these would ever be visible to clients, but Michael
figured out that it can happen when using asynchronous interfaces
such as PQconnectPoll.

Michael Paquier

7 years agolibpq: Make target_session_attrs=read-write consume empty result.
Robert Haas [Wed, 15 Feb 2017 16:03:30 +0000 (11:03 -0500)]
libpq: Make target_session_attrs=read-write consume empty result.

Otherwise, the leftover empty result can cause problems in some
situations.

Michael Paquier and Ashutosh Bapat, per a report from Higuchi Daisuke

7 years agodoc: Add advice about systemd RemoveIPC
Peter Eisentraut [Wed, 15 Feb 2017 15:44:07 +0000 (10:44 -0500)]
doc: Add advice about systemd RemoveIPC

Reviewed-by: Magnus Hagander <magnus@hagander.net>
7 years agopg_upgrade: Fix problems caused by renaming pg_resetxlog.
Robert Haas [Wed, 15 Feb 2017 15:14:16 +0000 (10:14 -0500)]
pg_upgrade: Fix problems caused by renaming pg_resetxlog.

Commit 85c11324cabaddcfaf3347df78555b30d27c5b5a renamed pg_resetxlog
to pg_resetwal, but didn't make pg_upgrade smart enough to cope with
the situation.

Michael Paquier, per a complaint from Jeff Janes

7 years agoAdd CREATE COLLATION IF NOT EXISTS clause
Peter Eisentraut [Thu, 9 Feb 2017 03:51:09 +0000 (22:51 -0500)]
Add CREATE COLLATION IF NOT EXISTS clause

The core of the functionality was already implemented when
pg_import_system_collations was added.  This just exposes it as an
option in the SQL command.

7 years agoFix some nonstandard capitalization.
Robert Haas [Wed, 15 Feb 2017 12:53:38 +0000 (07:53 -0500)]
Fix some nonstandard capitalization.

Ashutosh Bapat

7 years agobtree: Support parallel index scans.
Robert Haas [Wed, 15 Feb 2017 12:41:14 +0000 (07:41 -0500)]
btree: Support parallel index scans.

This isn't exposed to the optimizer or the executor yet; we'll add
support for those things in a separate patch.  But this puts the
basic mechanism in place: several processes can attach to a parallel
btree index scan, and each one will get a subset of the tuples that
would have been produced by a non-parallel scan.  Each index page
becomes the responsibility of a single worker, which then returns
all of the TIDs on that page.

Rahila Syed, Amit Kapila, Robert Haas, reviewed and tested by
Anastasia Lubennikova, Tushar Ahuja, and Haribabu Kommi.

7 years agoFix typo in comment.
Robert Haas [Wed, 15 Feb 2017 02:06:13 +0000 (21:06 -0500)]
Fix typo in comment.

Higuchi Daisuke

7 years agoAllow parallel workers to execute subplans.
Robert Haas [Tue, 14 Feb 2017 23:09:47 +0000 (18:09 -0500)]
Allow parallel workers to execute subplans.

This doesn't do anything to make Param nodes anything other than
parallel-restricted, so this only helps with uncorrelated subplans,
and it's not necessarily very cheap because each worker will run the
subplan separately (just as a Hash Join will build a separate copy of
the hash table in each participating process), but it's a first step
toward supporting cases that are more likely to help in practice, and
is occasionally useful on its own.

Amit Kapila, reviewed and tested by Rafia Sabih, Dilip Kumar, and
me.

Discussion: http://postgr.es/m/CAA4eK1+e8Z45D2n+rnDMDYsVEb5iW7jqaCH_tvPMYau=1Rru9w@mail.gmail.com

7 years agoSplit index xlog headers from other private index headers.
Robert Haas [Tue, 14 Feb 2017 20:37:59 +0000 (15:37 -0500)]
Split index xlog headers from other private index headers.

The xlog-specific headers need to be included in both frontend code -
specifically, pg_waldump - and the backend, but the remainder of the
private headers for each index are only needed by the backend.  By
splitting the xlog stuff out into separate headers, pg_waldump pulls
in fewer backend headers, which is a good thing.

Patch by me, reviewed by Michael Paquier and Andres Freund, per a
complaint from Dilip Kumar.

Discussion: http://postgr.es/m/CA+TgmoZ=F=GkxV0YEv-A8tb+AEGy_Qa7GSiJ8deBKFATnzfEug@mail.gmail.com

7 years agoMinor fixes for WAL consistency checking.
Robert Haas [Tue, 14 Feb 2017 17:41:01 +0000 (12:41 -0500)]
Minor fixes for WAL consistency checking.

Michael Paquier, reviewed and slightly revised by me.

Discussion: http://postgr.es/m/CAB7nPqRzCQb=vdfHvMtP0HMLBHU6z1aGdo4GJsUP-HP8jx+Pkw@mail.gmail.com

7 years agoDon't disallow dropping NOT NULL for a list partition key.
Robert Haas [Tue, 14 Feb 2017 17:12:34 +0000 (12:12 -0500)]
Don't disallow dropping NOT NULL for a list partition key.

Range partitioning doesn't support nulls in the partitioning columns,
but list partitioning does.

Amit Langote, per a complaint from Amul Sul

7 years agoRemove duplicate code in planner.c.
Tom Lane [Tue, 14 Feb 2017 16:47:12 +0000 (11:47 -0500)]
Remove duplicate code in planner.c.

I noticed while hacking on join UNION transforms that planner.c's
function get_base_rel_indexes() just duplicates the functionality of
get_relids_in_jointree().  It doesn't even have the excuse of being
older code :-(.  Drop it and use the latter function instead.

7 years agoReplace reference to "xlog-method" with "wal-method" in error message.
Fujii Masao [Tue, 14 Feb 2017 16:25:48 +0000 (01:25 +0900)]
Replace reference to "xlog-method" with "wal-method" in error message.

Commit 62e8b38 renamed "--xlog-method" option for pg_basebackup to
"--wal-method", but forgot to update the error message mentioning that option.

7 years agoCorrections and improvements to generic parallel query documentation.
Robert Haas [Tue, 14 Feb 2017 14:37:31 +0000 (09:37 -0500)]
Corrections and improvements to generic parallel query documentation.

David Rowley, reviewed by Brad DeJong, Amit Kapila, and me.

Discussion: http://postgr.es/m/CAKJS1f81fob-M6RJyTVv3SCasxMuQpj37ReNOJ=tprhwd7hAVg@mail.gmail.com

7 years agoReplace references to "xlog" with "wal" in docs.
Fujii Masao [Mon, 13 Feb 2017 17:30:46 +0000 (02:30 +0900)]
Replace references to "xlog" with "wal" in docs.

Commit f82ec32ac30ae7e3ec7c84067192535b2ff8ec0e renamed the pg_xlog
directory to pg_wal. To make things consistent, we decided to eliminate
"xlog" from user-visible docs.

7 years agoRemove contrib/tsearch2.
Robert Haas [Mon, 13 Feb 2017 16:02:23 +0000 (11:02 -0500)]
Remove contrib/tsearch2.

This module was intended to ease migrations of applications that used
the pre-8.3 version of text search to the in-core version introduced
in that release.  However, since all pre-8.3 releases of the database
have been out of support for more than 5 years at this point, we
expect that few people are depending on it at this point.  If some
people still need it, nothing prevents it from being maintained as a
separate extension, outside of core.

Discussion: http://postgr.es/m/CA+Tgmob5R8aDHiFRTQsSJbT1oreKg2FOSBrC=2f4tqEH3dOMAg@mail.gmail.com

7 years agodoc: Remove accidental extra table cell
Peter Eisentraut [Mon, 13 Feb 2017 01:22:06 +0000 (20:22 -0500)]
doc: Remove accidental extra table cell

7 years agoIgnore tablespace ACLs when ignoring schema ACLs.
Noah Misch [Sun, 12 Feb 2017 21:03:41 +0000 (16:03 -0500)]
Ignore tablespace ACLs when ignoring schema ACLs.

The ALTER TABLE ALTER TYPE implementation can issue DROP INDEX and
CREATE INDEX to refit existing indexes for the new column type.  Since
this CREATE INDEX is an implementation detail of an index alteration,
the ensuing DefineIndex() should skip ACL checks specific to index
creation.  It already skips the namespace ACL check.  Make it skip the
tablespace ACL check, too.  Back-patch to 9.2 (all supported versions).

Reviewed by Tom Lane.

7 years agoAdd CREATE SEQUENCE AS <data type> clause
Peter Eisentraut [Fri, 10 Feb 2017 20:12:32 +0000 (15:12 -0500)]
Add CREATE SEQUENCE AS <data type> clause

This stores a data type, required to be an integer type, with the
sequence.  The sequences min and max values default to the range
supported by the type, and they cannot be set to values exceeding that
range.  The internal implementation of the sequence is not affected.

Change the serial types to create sequences of the appropriate type.
This makes sure that the min and max values of the sequence for a serial
column match the range of values supported by the table column.  So the
sequence can no longer overflow the table column.

This also makes monitoring for sequence exhaustion/wraparound easier,
which currently requires various contortions to cross-reference the
sequences with the table columns they are used with.

This commit also effectively reverts the pg_sequence column reordering
in f3b421da5f4addc95812b9db05a24972b8fd9739, because the new seqtypid
column allows us to fill the hole in the struct and create a more
natural overall column ordering.

Reviewed-by: Steve Singer <steve@ssinger.info>
Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
7 years agoUpdate ddl.sgml for declarative partitioning syntax
Simon Riggs [Fri, 10 Feb 2017 10:03:28 +0000 (10:03 +0000)]
Update ddl.sgml for declarative partitioning syntax

Add a section titled "Partitioned Tables" to describe what are
partitioned tables, partition, their similarities with inheritance.
The existing section on inheritance is retained for clarity.

Then add examples to the partitioning chapter that show syntax for
partitioned tables.  In fact they implement the same partitioning
scheme that is currently shown using inheritance.

Amit Langote, with additional details and explanatory text by me

7 years agoAdd keywords for partitioning
Simon Riggs [Fri, 10 Feb 2017 09:07:18 +0000 (09:07 +0000)]
Add keywords for partitioning

Amit Langote

7 years agoImprove CREATE TABLE documentation of partitioning
Simon Riggs [Fri, 10 Feb 2017 08:59:37 +0000 (08:59 +0000)]
Improve CREATE TABLE documentation of partitioning

Amit Langote, with corrections by me

7 years agoRename command line options for ongoing xlog -> wal conversion.
Robert Haas [Thu, 9 Feb 2017 21:42:51 +0000 (16:42 -0500)]
Rename command line options for ongoing xlog -> wal conversion.

initdb and pg_basebackup now have a --waldir option rather --xlogdir,
and pg_basebackup now has --wal-method rather than --xlog-method.

7 years agoRename dtrace probes for ongoing xlog -> wal conversion.
Robert Haas [Thu, 9 Feb 2017 21:40:19 +0000 (16:40 -0500)]
Rename dtrace probes for ongoing xlog -> wal conversion.

xlog-switch becomes wal-switch, and xlog-insert becomes wal-insert.

7 years agoRename user-facing tools with "xlog" in the name to say "wal".
Robert Haas [Thu, 9 Feb 2017 21:23:46 +0000 (16:23 -0500)]
Rename user-facing tools with "xlog" in the name to say "wal".

This means pg_receivexlog because pg_receivewal, pg_resetxlog
becomes pg_resetwal, and pg_xlogdump becomes pg_waldump.

7 years agoBlind try to fix portability issue in commit 8f93bd851 et al.
Tom Lane [Thu, 9 Feb 2017 20:49:57 +0000 (15:49 -0500)]
Blind try to fix portability issue in commit 8f93bd851 et al.

The S/390 members of the buildfarm are showing failures indicating
that they're having trouble with the rint() calls I added yesterday.
There's no good reason for that, and I wonder if it is a compiler bug
similar to the one we worked around in d9476b838.  Try to fix it using
the same method as before, namely to store the result of rint() back
into a "double" variable rather than immediately converting to int64.
(This isn't entirely waving a dead chicken, since on machines with
wider-than-double float registers, the extra store forces a width
conversion.  I don't know if S/390 is like that, but it seems worth
trying.)

In passing, merge duplicate ereport() calls in float8_timestamptz().

Per buildfarm.

7 years agoRemove all references to "xlog" from SQL-callable functions in pg_proc.
Robert Haas [Thu, 9 Feb 2017 20:10:09 +0000 (15:10 -0500)]
Remove all references to "xlog" from SQL-callable functions in pg_proc.

Commit f82ec32ac30ae7e3ec7c84067192535b2ff8ec0e renamed the pg_xlog
directory to pg_wal.  To make things consistent, and because "xlog" is
terrible terminology for either "transaction log" or "write-ahead log"
rename all SQL-callable functions that contain "xlog" in the name to
instead contain "wal".  (Note that this may pose an upgrade hazard for
some users.)

Similarly, rename the xlog_position argument of the functions that
create slots to be called wal_position.

Discussion: https://www.postgresql.org/message-id/CA+Tgmob=YmA=H3DbW1YuOXnFVgBheRmyDkWcD9M8f=5bGWYEoQ@mail.gmail.com

7 years agosimplehash: Additional tweaks to make specifying an allocator work.
Robert Haas [Thu, 9 Feb 2017 19:59:57 +0000 (14:59 -0500)]
simplehash: Additional tweaks to make specifying an allocator work.

Even if we don't emit definitions for SH_ALLOCATE and SH_FREE, we
still need prototypes.  The user can't define them before including
simplehash.h because SH_TYPE isn't available yet.

For the allocator to be able to access private_data, it needs to
become an argument to SH_CREATE.  Previously we relied on callers
to set that after returning from SH_CREATE, but SH_CREATE calls
SH_ALLOCATE before returning.

Dilip Kumar, reviewed by me.

7 years agoFix race condition in ConditionVariablePrepareToSleep.
Robert Haas [Thu, 9 Feb 2017 19:42:32 +0000 (14:42 -0500)]
Fix race condition in ConditionVariablePrepareToSleep.

Thomas Munro

7 years agopageinspect: Fix hash_bitmap_info not to read the underlying page.
Robert Haas [Thu, 9 Feb 2017 19:02:58 +0000 (14:02 -0500)]
pageinspect: Fix hash_bitmap_info not to read the underlying page.

It did that to verify that the page was an overflow page rather than
anything else, but that means that checking the status of all the
overflow bits requires reading the entire index.  So don't do that.
The new code validates that the page is not a primary bucket page
or bitmap page by looking at the metapage, so that using this on
large numbers of pages can be reasonably efficient.

Ashutosh Sharma, per a complaint from me, and with further
modifications by me.

7 years agoAllow index AMs to cache data across aminsert calls within a SQL command.
Tom Lane [Thu, 9 Feb 2017 16:52:12 +0000 (11:52 -0500)]
Allow index AMs to cache data across aminsert calls within a SQL command.

It's always been possible for index AMs to cache data across successive
amgettuple calls within a single SQL command: the IndexScanDesc.opaque
field is meant for precisely that.  However, no comparable facility
exists for amortizing setup work across successive aminsert calls.
This patch adds such a feature and teaches GIN, GIST, and BRIN to use it
to amortize catalog lookups they'd previously been doing on every call.
(The other standard index AMs keep everything they need in the relcache,
so there's little to improve there.)

For GIN, the overall improvement in a statement that inserts many rows
can be as much as 10%, though it seems a bit less for the other two.
In addition, this makes a really significant difference in runtime
for CLOBBER_CACHE_ALWAYS tests, since in those builds the repeated
catalog lookups are vastly more expensive.

The reason this has been hard up to now is that the aminsert function is
not passed any useful place to cache per-statement data.  What I chose to
do is to add suitable fields to struct IndexInfo and pass that to aminsert.
That's not widening the index AM API very much because IndexInfo is already
within the ken of ambuild; in fact, by passing the same info to aminsert
as to ambuild, this is really removing an inconsistency in the AM API.

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

7 years agoAdd explicit ORDER BY to a few tests that exercise hash-join code.
Andres Freund [Thu, 9 Feb 2017 00:58:21 +0000 (16:58 -0800)]
Add explicit ORDER BY to a few tests that exercise hash-join code.

A proposed patch, also by Thomas and in the same thread, would change
the output order of these.  Independent of the follow-up patches
getting committed, nailing down the order in these specific tests at
worst seems harmless.

Author: Thomas Munro
Discussion: https://postgr.es/m/CAEepm=1D4-tP7j7UAgT_j4ZX2j4Ehe1qgZQWFKBMb8F76UW5Rg@mail.gmail.com

7 years agoFix roundoff problems in float8_timestamptz() and make_interval().
Tom Lane [Wed, 8 Feb 2017 23:04:59 +0000 (18:04 -0500)]
Fix roundoff problems in float8_timestamptz() and make_interval().

When converting a float value to integer microseconds, we should be careful
to round the value to the nearest integer, typically with rint(); simply
assigning to an int64 variable will truncate, causing apparently off-by-one
values in cases that should work.  Most places in the datetime code got
this right, but not these two.

float8_timestamptz() is new as of commit e511d878f (9.6).  Previous
versions effectively depended on interval_mul() to do roundoff correctly,
which it does, so this fixes an accuracy regression in 9.6.

The problem in make_interval() dates to its introduction in 9.4.  Aside
from being careful to round not truncate, let's incorporate the hours and
minutes inputs into the result with exact integer arithmetic, rather than
risk introducing roundoff error where there need not have been any.

float8_timestamptz() problem reported by Erik Nordström, though this is
not his proposed patch.  make_interval() problem found by me.

Discussion: https://postgr.es/m/CAHuQZDS76jTYk3LydPbKpNfw9KbACmD=49dC4BrzHcfPv6yA1A@mail.gmail.com

7 years agoAdd WAL consistency checking facility.
Robert Haas [Wed, 8 Feb 2017 20:45:30 +0000 (15:45 -0500)]
Add WAL consistency checking facility.

When the new GUC wal_consistency_checking is set to a non-empty value,
it triggers recording of additional full-page images, which are
compared on the standby against the results of applying the WAL record
(without regard to those full-page images).  Allowable differences
such as hints are masked out, and the resulting pages are compared;
any difference results in a FATAL error on the standby.

Kuntal Ghosh, based on earlier patches by Michael Paquier and Heikki
Linnakangas.  Extensively reviewed and revised by Michael Paquier and
by me, with additional reviews and comments from Amit Kapila, Álvaro
Herrera, Simon Riggs, and Peter Eisentraut.

7 years agoFix relcache leaks in get_object_address_publication_rel()
Peter Eisentraut [Wed, 8 Feb 2017 03:09:53 +0000 (22:09 -0500)]
Fix relcache leaks in get_object_address_publication_rel()

7 years agodoc: Some improvements in CREATE SUBSCRIPTION ref page
Peter Eisentraut [Wed, 8 Feb 2017 02:26:50 +0000 (21:26 -0500)]
doc: Some improvements in CREATE SUBSCRIPTION ref page

Add link to description of libpq connection strings.  Add link to
explanation of replication access control.  This currently points to the
description of streaming replication access control, which is currently
the same as for logical replication, but that might be refined later.
Also remove plain-text passwords from the examples, to not encourage
that dubious practice.

based on suggestions from Simon Riggs

7 years agoRevise the way the element allocator for a simplehash is specified.
Robert Haas [Tue, 7 Feb 2017 22:01:40 +0000 (17:01 -0500)]
Revise the way the element allocator for a simplehash is specified.

This method is more elegant and more efficient.

Per a suggestion from Andres Freund, who also briefly reviewed
the patch.

7 years agoSpeed up "brin" regression test a little bit.
Tom Lane [Tue, 7 Feb 2017 21:34:11 +0000 (16:34 -0500)]
Speed up "brin" regression test a little bit.

In the large DO block, collect row TIDs into array variables instead of
creating and dropping a pile of temporary tables.  In a normal build,
this reduces the brin test script's runtime from about 1.1 sec to 0.4 sec
on my workstation.  That's not all that exciting perhaps, but in a
CLOBBER_CACHE_ALWAYS test build, the runtime drops from 20 min to 17 min,
which is a little more useful.  In combination with some other changes
I plan to propose, this will help provide a noticeable reduction in
cycle time for CLOBBER_CACHE_ALWAYS buildfarm critters.

7 years agoAvoid redefining simplehash_allocate/simplehash_free.
Robert Haas [Tue, 7 Feb 2017 21:20:05 +0000 (16:20 -0500)]
Avoid redefining simplehash_allocate/simplehash_free.

There's no generic guard against multiple inclusion in this file,
for good reason.  But these typedefs need one, as per a report
from Jeff Janes.

7 years agoAllow the element allocator for a simplehash to be specified.
Robert Haas [Tue, 7 Feb 2017 20:58:30 +0000 (15:58 -0500)]
Allow the element allocator for a simplehash to be specified.

This is infrastructure for a pending patch to allow parallel bitmap
heap scans.

Dilip Kumar, reviewed (in earlier versions) by Andres Freund and
(more recently) by me.  Some further renaming by me, also.

7 years agoFix compiler warning.
Robert Haas [Tue, 7 Feb 2017 20:09:14 +0000 (15:09 -0500)]
Fix compiler warning.

Mithun Cy, per a report by Erik Rijkers

7 years agoCache hash index's metapage in rel->rd_amcache.
Robert Haas [Tue, 7 Feb 2017 17:24:25 +0000 (12:24 -0500)]
Cache hash index's metapage in rel->rd_amcache.

This avoids a very significant amount of buffer manager traffic and
contention when scanning hash indexes, because it's no longer
necessary to lock and pin the metapage for every scan.  We do need
some way of figuring out when the cache is too stale to use any more,
so that when we lock the primary bucket page to which the cached
metapage points us, we can tell whether a split has occurred since we
cached the metapage data.  To do that, we use the hash_prevblkno field
in the primary bucket page, which would otherwise always be set to
InvalidBuffer.

This patch contains code so that it will continue working (although
less efficiently) with hash indexes built before this change, but
perhaps we should consider bumping the hash version and ripping out
the compatibility code.  That decision can be made later, though.

Mithun Cy, reviewed by Jesper Pedersen, Amit Kapila, and by me.
Before committing, I made a number of cosmetic changes to the last
posted version of the patch, adjusted _hash_getcachedmetap to be more
careful about order of operation, and made some necessary updates to
the pageinspect documentation and regression tests.

7 years agoCorrect thinko in last-minute release note item.
Tom Lane [Tue, 7 Feb 2017 15:24:24 +0000 (10:24 -0500)]
Correct thinko in last-minute release note item.

The CREATE INDEX CONCURRENTLY bug can only be triggered by row updates,
not inserts, since the problem would arise from an update incorrectly
being made HOT.  Noted by Alvaro.

7 years agoRelease notes for 9.6.2, 9.5.6, 9.4.11, 9.3.16, 9.2.20.
Tom Lane [Mon, 6 Feb 2017 20:30:16 +0000 (15:30 -0500)]
Release notes for 9.6.2, 9.5.6, 9.4.11, 9.3.16, 9.2.20.

7 years agodoc: Document sequence function privileges better
Peter Eisentraut [Mon, 6 Feb 2017 20:21:20 +0000 (15:21 -0500)]
doc: Document sequence function privileges better

Document the privileges required for each of the sequence functions.
This was already in the GRANT reference page, but also add it to the
function description for easier reference.

7 years agoAvoid permission failure in pg_sequences.last_value
Peter Eisentraut [Mon, 6 Feb 2017 20:17:27 +0000 (15:17 -0500)]
Avoid permission failure in pg_sequences.last_value

Before, reading pg_sequences.last_value would fail unless the user had
appropriate sequence permissions, which would make the pg_sequences view
cumbersome to use.  Instead, return null instead of the real value when
there are no permissions.

From: Michael Paquier <michael.paquier@gmail.com>
Reported-by: Shinoda, Noriyoshi <noriyoshi.shinoda@hpe.com>
7 years agoRelease note updates.
Tom Lane [Mon, 6 Feb 2017 19:19:23 +0000 (14:19 -0500)]
Release note updates.

Add item for last-minute CREATE INDEX CONCURRENTLY fix.
Repair a couple of misspellings of patch authors' names.

Back-branch updates will follow shortly, but I thought I'd
commit this separately just to make it more visible.

7 years agoAvoid returning stale attribute bitmaps in RelationGetIndexAttrBitmap().
Tom Lane [Mon, 6 Feb 2017 18:19:50 +0000 (13:19 -0500)]
Avoid returning stale attribute bitmaps in RelationGetIndexAttrBitmap().

The problem with the original coding here is that we might receive (and
clear) a relcache invalidation signal for the target relation down inside
one of the index_open calls we're doing.  Since the target is open, we
would not drop the relcache entry, just reset its rd_indexvalid and
rd_indexlist fields.  But RelationGetIndexAttrBitmap() kept going, and
would eventually cache and return potentially-obsolete attribute bitmaps.

The case where this matters is where the inval signal was from a CREATE
INDEX CONCURRENTLY telling us about a new index on a formerly-unindexed
column.  (In all other cases, the lock we hold on the target rel should
prevent any concurrent change in index state.)  Even just returning the
stale attribute bitmap is not such a problem, because it shouldn't matter
during the transaction in which we receive the signal.  What hurts is
caching the stale data, because it can survive into later transactions,
breaking CREATE INDEX CONCURRENTLY's expectation that later transactions
will not create new broken HOT chains.  The upshot is that there's a window
for building corrupted indexes during CREATE INDEX CONCURRENTLY.

This patch fixes the problem by rechecking that the set of index OIDs
is still the same at the end of RelationGetIndexAttrBitmap() as it was
at the start.  If not, we loop back and try again.  That's a little
more than is strictly necessary to fix the bug --- in principle, we
could return the stale data but not cache it --- but it seems like a
bad idea on general principles for relcache to return data it knows
is stale.

There might be more hazards of the same ilk, or there might be a better
way to fix this one, but this patch definitely improves matters and seems
unlikely to make anything worse.  So let's push it into today's releases
even as we continue to study the problem.

Pavan Deolasee and myself

Discussion: https://postgr.es/m/CABOikdM2MUq9cyZJi1KyLmmkCereyGp5JQ4fuwKoyKEde_mzkQ@mail.gmail.com

7 years agodoc: Update CREATE DATABASE examples
Peter Eisentraut [Thu, 2 Feb 2017 19:57:46 +0000 (14:57 -0500)]
doc: Update CREATE DATABASE examples

The example of using CREATE DATABASE with the ENCODING option did not
work anymore (except in special circumstances) and did not represent a
good general-purpose example, so write some new examples.

Reported-by: marc+pgsql@milestonerdl.com
7 years agoUpdate comment in relcache.c.
Tom Lane [Mon, 6 Feb 2017 16:31:23 +0000 (11:31 -0500)]
Update comment in relcache.c.

Commit 665d1fad9 introduced rd_pkindex, and made RelationGetIndexList
responsible for updating it, but didn't bother to fix
RelationGetIndexList's header comment to say so.

7 years agoAdd missing newline to error messages
Peter Eisentraut [Mon, 6 Feb 2017 14:47:39 +0000 (09:47 -0500)]
Add missing newline to error messages

Also improve the message style a bit while we're here.

7 years agoFix typo also in expected output.
Heikki Linnakangas [Mon, 6 Feb 2017 10:04:04 +0000 (12:04 +0200)]
Fix typo also in expected output.

Commit 181bdb90ba fixed the typo in the .sql file, but forgot to update the
expected output.

7 years agoFix typo in variable name.
Heikki Linnakangas [Mon, 6 Feb 2017 09:45:08 +0000 (11:45 +0200)]
Fix typo in variable name.

Masahiko Sawada

7 years agoFix typos in comments.
Heikki Linnakangas [Mon, 6 Feb 2017 09:33:58 +0000 (11:33 +0200)]
Fix typos in comments.

Backpatch to all supported versions, where applicable, to make backpatching
of future fixes go more smoothly.

Josh Soref

Discussion: https://www.postgresql.org/message-id/CACZqfqCf+5qRztLPgmmosr-B0Ye4srWzzw_mo4c_8_B_mtjmJQ@mail.gmail.com

7 years agoFirst-draft release notes for 9.6.2.
Tom Lane [Sat, 4 Feb 2017 17:51:25 +0000 (12:51 -0500)]
First-draft release notes for 9.6.2.

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

7 years agoRemove redundant comment.
Robert Haas [Sat, 4 Feb 2017 00:05:49 +0000 (19:05 -0500)]
Remove redundant comment.

Rafia Sabih

7 years agoImprove grammar of message about two-phase state files.
Robert Haas [Fri, 3 Feb 2017 22:13:33 +0000 (17:13 -0500)]
Improve grammar of message about two-phase state files.

When there's only one two-phase state file, there's also only one
long-running prepared transaction.  Adjust the message text
accordingly.

Nikhil Sontakke

Discussion: http://postgr.es/m/CAMGcDxcmR_DWZXXndGoPzVQx=B17A5=RviEA1qNaF=FWLy5Whw@mail.gmail.com

7 years agopageinspect: More type-sanity surgery on the new hash index code.
Robert Haas [Fri, 3 Feb 2017 21:28:13 +0000 (16:28 -0500)]
pageinspect: More type-sanity surgery on the new hash index code.

Uniformly expose unsigned quantities using the next-wider signed
integer type (since we have no unsigned types at the SQL level).
At the SQL level, this results a change to report itemoffset as
int4 rather than int2.  Also at the SQL level, report one value
that is an OID as type oid.  Under the hood, uniformly use macros
that match the SQL output type as to both width and signedness.

7 years agopgstattuple: Add pgstathashindex.
Robert Haas [Fri, 3 Feb 2017 19:35:25 +0000 (14:35 -0500)]
pgstattuple: Add pgstathashindex.

Since pgstattuple v1.5 hasn't been released yet, no need for a new
extension version.  The new function exposes statistics about hash
indexes similar to what other pgstatindex functions return for other
index types.

Ashutosh Sharma, reviewed by Kuntal Ghosh.  Substantial further
revisions by me.

7 years agoBe sure to release LogicalRepLauncherLock in DROP SUBSCRIPTION command.
Fujii Masao [Fri, 3 Feb 2017 18:18:13 +0000 (03:18 +0900)]
Be sure to release LogicalRepLauncherLock in DROP SUBSCRIPTION command.

Previously DROP SUBSCRIPTION command forgot to release the lock at all.

Original patches by Kyotaro Horiguchi and Michael Paquier,
but I didn't use them.
Discussion: http://postgr.es/m/20170201.173623.66249355.horiguchi.kyotaro@lab.ntt.co.jp

7 years agoIn pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines.
Tom Lane [Fri, 3 Feb 2017 16:34:41 +0000 (11:34 -0500)]
In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines.

On machines with MAXALIGN = 8, the payload of a bytea is not maxaligned,
since it will start 4 bytes into a palloc'd value.  On alignment-picky
hardware, this will cause failures in accesses to 8-byte-wide values
within the page.  We already encountered this problem when we introduced
GIN index inspection functions, and fixed it in commit 84ad68d64.  Make
use of the same function for hash indexes.

A small difficulty is that up to now contrib/pageinspect has not shared
any functions at all across files.  To support that, introduce a common
header file "pageinspect.h" for the module.

Also, move get_page_from_raw() out of ginfuncs.c, where it didn't
especially belong, and put it in rawpage.c which seems a more natural home.

Per buildfarm.

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

7 years agopageinspect: Remove platform-dependent values from hash tests.
Robert Haas [Fri, 3 Feb 2017 16:06:41 +0000 (11:06 -0500)]
pageinspect: Remove platform-dependent values from hash tests.

Per a report from Tom Lane, the ffactor reported by hash_metapage_info
and the free_size reported by hash_page_stats vary by platform.

Ashutosh Sharma and Robert Haas

7 years agoFix a bunch more portability bugs in commit 08bf6e529.
Tom Lane [Fri, 3 Feb 2017 04:11:08 +0000 (23:11 -0500)]
Fix a bunch more portability bugs in commit 08bf6e529.

It seems like somebody used a dartboard while choosing integer widths
for the various values taken and returned by these functions ... and
then threw a fresh set of darts while writing the SQL declarations.

This patch brings the C code into line with what the SQL declarations
say, which is enough to make it not dump core on the particular 32-bit
machine I'm testing on.  But I think we could do with another round
of looking at what the datum widths *should* be.  For instance, it's
not all that sensible that hash_bitmap_info decided to use int64 to
represent a BlockNumber input when get_raw_page doesn't do it that way.

There's also a remaining problem that the expected outputs from the
test script are platform-dependent, but I'll leave that issue for
somebody else.

Per buildfarm.

7 years agopageinspect: Try to fix some bugs in previous commit.
Robert Haas [Fri, 3 Feb 2017 03:29:29 +0000 (22:29 -0500)]
pageinspect: Try to fix some bugs in previous commit.

Commit 08bf6e529587e1e9075d013d859af2649c32a511 seems not to have
used the correct *GetDatum and PG_GETARG_* macros for the SQL types
in some cases, and some of the SQL types seem to have been poorly
chosen, too.  Try to fix it.  I'm not sure if this is the reason
why the buildfarm is currently unhappy with this code, but it
seems like a good place to start.

Buildfarm unhappiness reported by Tom Lane.

7 years agoClean up psql's behavior for a few more control variables.
Tom Lane [Fri, 3 Feb 2017 01:16:17 +0000 (20:16 -0500)]
Clean up psql's behavior for a few more control variables.

Modify FETCH_COUNT to always have a defined value, like other control
variables, mainly so it will always appear in "\set" output.

Add hooks to force HISTSIZE to be defined and require it to have an
integer value.  (I don't see any point in allowing it to be set to
non-integral values.)

Add hooks to force IGNOREEOF to be defined and require it to have an
integer value.  Unlike the other cases, here we're trying to be
bug-compatible with a rather bogus externally-defined behavior, so I think
we need to continue to allow "\set IGNOREEOF whatever".  Fix it so that
the substitution hook silently replace non-numeric values with "10",
so that the stored value always reflects what we're really doing.

Add a dummy assign hook for HISTFILE, just so it's always in
variables.c's list.  We can't require it to be defined always, because
that would break the interaction with the PSQL_HISTORY environment
variable, so there isn't any change in visible behavior here.

Remove tab-complete.c's private list of known variable names, since that's
really a maintenance nuisance.  Given the preceding changes, there are no
control variables it won't show anyway.  This does mean that if for some
reason you've unset one of the status variables (DBNAME, HOST, etc), that
variable would not appear in tab completion for \set.  But I think that's
fine, for at least two reasons: we shouldn't be encouraging people to use
those variables as regular variables, and if someone does do so anyway,
why shouldn't it act just like a regular variable?

Remove ugly and no-longer-used-anywhere GetVariableNum().  In general,
future additions of integer-valued control variables should follow the
paradigm of adding an assign hook using ParseVariableNum(), so there's
no reason to expect we'd need this again later.

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

7 years agoAvoid improbable null pointer dereference in pgpassfileWarning().
Tom Lane [Fri, 3 Feb 2017 00:49:15 +0000 (19:49 -0500)]
Avoid improbable null pointer dereference in pgpassfileWarning().

Coverity complained that we might pass a null pointer to strcmp()
if PQresultErrorField were to return NULL.  That shouldn't be possible,
since the server is supposed to always provide some SQLSTATE or other
in an error message.  But we usually defend against such hazards, and
it only takes a little more code to do so here.

There's no good reason to think this is a live bug, so no back-patch.

7 years agoFix placement of initPlans when forcibly materializing a subplan.
Tom Lane [Fri, 3 Feb 2017 00:11:27 +0000 (19:11 -0500)]
Fix placement of initPlans when forcibly materializing a subplan.

If we forcibly place a Material node atop a finished subplan, we need
to move any initPlans attached to the subplan up to the Material node,
in order to keep SS_finalize_plan() happy.  I'd figured this out in
commit 7b67a0a49 for the case of materializing a cursor plan, but out of
an abundance of caution, I put the initPlan movement hack at the call
site for that case, rather than inside materialize_finished_plan().
That was the wrong thing, because it turns out to also be necessary for
the only other caller of materialize_finished_plan(), ie subselect.c.
We lacked any test cases that exposed the mistake, but bug#14524 from
Wei Congrui shows that it's possible to get an initPlan reference into
the top tlist in that case too, and then SS_finalize_plan() complains.
Hence, move the hack into materialize_finished_plan().

In HEAD, also relocate some recently-added tests in subselect.sql, which
I'd unthinkingly dropped into the middle of a sequence of related tests.

Report: https://postgr.es/m/20170202060020.1400.89021@wrigleys.postgresql.org

7 years agodoc: Add missing include in example code
Peter Eisentraut [Thu, 2 Feb 2017 21:49:46 +0000 (16:49 -0500)]
doc: Add missing include in example code

It's not broken because the header file is included via other headers,
but for better style we should be more explicit.

Reported-by: mthrockmorton@hme.com
7 years agoFix mishandling of tSRFs at different nesting levels.
Tom Lane [Thu, 2 Feb 2017 21:38:13 +0000 (16:38 -0500)]
Fix mishandling of tSRFs at different nesting levels.

Given a targetlist like "srf(x), f(srf(x))", split_pathtarget_at_srfs()
decided that it needed two levels of ProjectSet nodes, failing to notice
that the two SRF calls are textually equal().  Because of that, setrefs.c
would convert the upper ProjectSet's tlist to "Var1, f(Var1)" (where Var1
represents a reference to the srf(x) output of the lower ProjectSet).
This triggered an assertion in nodeProjectSet.c complaining that it found
no SRFs to evaluate, as reported by Erik Rijkers.

What we want in such a case is to evaluate srf(x) only once and use a plain
Result node to compute "Var1, f(Var1)"; that gives results similar to what
previous versions produced, whereas allowing srf(x) to be evaluated again
in an upper ProjectSet would square the number of rows emitted.

Furthermore, even if the SRF calls aren't textually identical, we want them
to be evaluated in lockstep, because that's what happened in the old
implementation.  But split_pathtarget_at_srfs() got this completely wrong,
using two levels of ProjectSet for a case like "srf(x), f(srf(y))".

Hence, rewrite split_pathtarget_at_srfs() from the ground up so that it
groups SRFs according to the depth of nesting of SRFs in their arguments.
This is pretty much how we envisioned that working originally, but I blew
it when it came to implementation.

In passing, optimize the case of target == input_target, which I noticed
is not only possible but quite common.

Discussion: https://postgr.es/m/dcbd2853c05d22088766553d60dc78c6@xs4all.nl

7 years agodoc: Document result set of CREATE_REPLICATION_SLOT
Peter Eisentraut [Thu, 2 Feb 2017 21:04:59 +0000 (16:04 -0500)]
doc: Document result set of CREATE_REPLICATION_SLOT

From: Marko Tiikkaja <marko@joh.to>

7 years agoIncrease upper bound for bgwriter_lru_maxpages.
Robert Haas [Thu, 2 Feb 2017 19:40:05 +0000 (14:40 -0500)]
Increase upper bound for bgwriter_lru_maxpages.

There is no particularly good reason to limit this value to 1000,
so increase the limit to INT_MAX / 2, the same limit we use for
shared_buffers.  It's not clear how much practical effect larger
settings will have, but there seems no harm in letting people try it.

Jim Nasby, less a comment change I stripped out.

Discussion: http://postgr.es/m/f6e58a22-030b-eb8a-5457-f62fb08d701c@BlueTreble.com

7 years agopageinspect: Support hash indexes.
Robert Haas [Thu, 2 Feb 2017 19:12:58 +0000 (14:12 -0500)]
pageinspect: Support hash indexes.

Patch by Jesper Pedersen and Ashutosh Sharma, with some error handling
improvements by me.  Tests from Peter Eisentraut.  Reviewed by Álvaro
Herrera, Michael Paquier, Jesper Pedersen, Jeff Janes, Peter
Eisentraut, Amit Kapila, Mithun Cy, and me.

Discussion: http://postgr.es/m/e2ac6c58-b93f-9dd9-f4e6-d6d30add7fdf@redhat.com

7 years agoCode review for avoidance of direct cross-module links.
Noah Misch [Thu, 2 Feb 2017 16:21:16 +0000 (11:21 -0500)]
Code review for avoidance of direct cross-module links.

Remove $(pkglibdir) from $(rpathdir), since commits
d51924be886c2a05e691fa05b16cb6b30ab8370f and
eda04886c1e048d695728206504ab4198462168e removed direct linkage to
objects stored there.  Users are unlikely to notice the difference.
Accompany every $(python_libspec) with $(python_additional_libs); this
doesn't fix a demonstrated bug, but it might do so on rare Python
configurations.  With these changes, AIX ceases to be a special case.

7 years agoAdd KOI8-U map files to Makefile.
Heikki Linnakangas [Thu, 2 Feb 2017 12:12:35 +0000 (14:12 +0200)]
Add KOI8-U map files to Makefile.

These were left out by mistake back when support for KOI8-U encoding was
added.

Extracted from Kyotaro Horiguchi's larger patch.

7 years agoSilence compiler warning.
Heikki Linnakangas [Thu, 2 Feb 2017 08:40:56 +0000 (10:40 +0200)]
Silence compiler warning.

Not all compilers understand that the elog(ERROR) never returns.

David Rowley

7 years agoDon't count background workers against a user's connection limit.
Andrew Dunstan [Wed, 1 Feb 2017 22:52:35 +0000 (17:52 -0500)]
Don't count background workers against a user's connection limit.

Doing so doesn't seem to be within the purpose of the per user
connection limits, and has particularly unfortunate effects in
conjunction with parallel queries.

Backpatch to 9.6 where parallel queries were introduced.

David Rowley, reviewed by Robert Haas and Albe Laurenz.

7 years agoFix CatalogTupleInsert/Update abstraction for case of shared indstate.
Tom Lane [Wed, 1 Feb 2017 22:18:36 +0000 (17:18 -0500)]
Fix CatalogTupleInsert/Update abstraction for case of shared indstate.

Add CatalogTupleInsertWithInfo and CatalogTupleUpdateWithInfo to let
callers use the CatalogTupleXXX abstraction layer even in cases where
we want to share the results of CatalogOpenIndexes across multiple
inserts/updates for efficiency.  This finishes the job begun in commit
2f5c9d9c9, by allowing some remaining simple_heap_insert/update
calls to be replaced.  The abstraction layer is now complete enough
that we don't have to export CatalogIndexInsert at all anymore.

Also, this fixes several places in which 2f5c9d9c9 introduced performance
regressions by using retail CatalogTupleInsert or CatalogTupleUpdate even
though the previous coding had been able to amortize CatalogOpenIndexes
work across multiple tuples.

A possible future improvement is to arrange for the indexing.c functions
to cache the CatalogIndexState somewhere, maybe in the relcache, in which
case we could get rid of CatalogTupleInsertWithInfo and
CatalogTupleUpdateWithInfo again.  But that's a task for another day.

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

7 years agoProvide CatalogTupleDelete() as a wrapper around simple_heap_delete().
Tom Lane [Wed, 1 Feb 2017 21:13:30 +0000 (16:13 -0500)]
Provide CatalogTupleDelete() as a wrapper around simple_heap_delete().

This extends the work done in commit 2f5c9d9c9 to provide a more nearly
complete abstraction layer hiding the details of index updating for catalog
changes.  That commit only invented abstractions for catalog inserts and
updates, leaving nearby code for catalog deletes still calling the
heap-level routines directly.  That seems rather ugly from here, and it
does little to help if we ever want to shift to a storage system in which
indexing work is needed at delete time.

Hence, create a wrapper function CatalogTupleDelete(), and replace calls
of simple_heap_delete() on catalog tuples with it.  There are now very
few direct calls of [simple_]heap_delete remaining in the tree.

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

7 years agoRefactor other replication commands to use DestRemoteSimple.
Robert Haas [Wed, 1 Feb 2017 18:42:41 +0000 (13:42 -0500)]
Refactor other replication commands to use DestRemoteSimple.

Commit a84069d9350400c860d5e932b50dfd337aa407b0 added a new type of
DestReceiver to avoid duplicating the existing code for the SHOW
command, but it turns out we can leverage that new DestReceiver
type in a few more places, saving some code.

Michael Paquier, reviewed by Andres Freund and by me.

Discussion: http://postgr.es/m/CAB7nPqSdFOQC0evc0r1nJeQyGBqjBrR41MC4rcMqUUpoJaZbtQ%40mail.gmail.com
Discussion: http://postgr.es/m/CAB7nPqT2K4XFT1JgqufFBjsOc-NUKXg5qBDucHPMbk6Xi1kYaA@mail.gmail.com

7 years agoMake psql's \set display variables in alphabetical order.
Tom Lane [Wed, 1 Feb 2017 16:25:19 +0000 (11:25 -0500)]
Make psql's \set display variables in alphabetical order.

"\set" with no arguments displays all defined variables, but it does so
in the order that they appear in variables.c's list, which previously
was mostly creation order.  That makes the list ugly and hard to find
things in, and it exposes some psql implementation details to users.
(For instance, ordinary variables will move to the bottom of the list
if unset and set again, but variables that have hooks won't.)

Fix that by keeping the list in alphabetical order at all times, which
isn't much more complicated than breaking out of the insertion search
loops once we reach an entry that should be after the one to be inserted.

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

7 years agoImprove psql's behavior for \set and \unset of its control variables.
Tom Lane [Wed, 1 Feb 2017 16:02:40 +0000 (11:02 -0500)]
Improve psql's behavior for \set and \unset of its control variables.

This commit improves on the results of commit 511ae628f in two ways:

1. It restores the historical behavior that "\set FOO" is interpreted
as setting FOO to "on", if FOO is a boolean control variable.  We
already found one test script that was expecting that behavior, and
the psql documentation certainly does nothing to discourage people
from assuming that would work, since it often says just "if FOO is set"
when describing the effects of a boolean variable.  However, now this
case will result in actually setting FOO to "on", not an empty string.

2. It arranges for an "\unset" of a control variable to set the value
back to its default value, rather than becoming apparently undefined.
The control variables are also initialized that way at psql startup.

In combination, these things guarantee that a control variable always
has a displayable value that reflects what psql is actually doing.
That is a pretty substantial usability improvement.

The implementation involves adding a second type of variable hook function
that is able to replace a proposed new value (including NULL) with another
one.  We could alternatively have complicated the API of the assign hook,
but this way seems better since many variables can share the same
substitution hook function.

Also document the actual behavior of these variables more fully,
including covering assorted behaviors that were there before but
never documented.

This patch also includes some minor cleanup that should have been in
511ae628f but was missed.

Patch by me, but it owes a lot to discussions with Daniel Vérité.

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

7 years agoReplace isMD5() with a more future-proof way to check if pw is encrypted.
Heikki Linnakangas [Wed, 1 Feb 2017 11:11:37 +0000 (13:11 +0200)]
Replace isMD5() with a more future-proof way to check if pw is encrypted.

The rule is that if pg_authid.rolpassword begins with "md5" and has the
right length, it's an MD5 hash, otherwise it's a plaintext password. The
idiom has been to use isMD5() to check for that, but that gets awkward,
when we add new kinds of verifiers, like the verifiers for SCRAM
authentication in the pending SCRAM patch set. Replace isMD5() with a new
get_password_type() function, so that when new verifier types are added, we
don't need to remember to modify every place that currently calls isMD5(),
to also recognize the new kinds of verifiers.

Also, use the new plain_crypt_verify function in passwordcheck, so that it
doesn't need to know about MD5, or in the future, about other kinds of
hashes or password verifiers.

Reviewed by Michael Paquier and Peter Eisentraut.

Discussion: https://www.postgresql.org/message-id/2d07165c-1793-e243-a2a9-e45b624c7580@iki.fi

7 years agoDon't create "holes" in BufFiles, in the new logtape code.
Heikki Linnakangas [Wed, 1 Feb 2017 10:17:38 +0000 (12:17 +0200)]
Don't create "holes" in BufFiles, in the new logtape code.

The "Simplify tape block format" commit ignored the rule that blocks
returned by ltsGetFreeBlock() must be written out in the same order, at
least in the first write pass. To fix, relax that requirement, by making
ltsWriteBlock() to detect if it's about to create a "hole" in the
underlying BufFile, and fill it with zeros instead.

Reported, analysed, and reviewed by Peter Geoghegan.

Discussion: https://www.postgresql.org/message-id/CAM3SWZRWdNtkhiG0GyiX_1mUAypiK3dV6-6542pYe2iEL-foTA@mail.gmail.com

7 years agoSmall fixes to the Perl scripts to create unicode conversion tables.
Heikki Linnakangas [Wed, 1 Feb 2017 09:23:53 +0000 (11:23 +0200)]
Small fixes to the Perl scripts to create unicode conversion tables.

Add missing semicolons in UCS_to_* perl scripts.
For consistency, use "$hashref->{key}" style everywhere.

Kyotaro Horiguchi

Discussion: https://www.postgresql.org/message-id/20170130.153738.139030994.horiguchi.kyotaro@lab.ntt.co.jp

7 years agoMove comment about test slightly closer to test.
Robert Haas [Tue, 31 Jan 2017 22:12:54 +0000 (17:12 -0500)]
Move comment about test slightly closer to test.

The addition of a TestForOldSnapshot() call here has made the
referent of this comment slightly less clear, so move the comment
to compensate.

Amit Kapila (as part of the parallel index scan patch)

7 years agoTweak catalog indexing abstraction for upcoming WARM
Alvaro Herrera [Tue, 31 Jan 2017 21:42:24 +0000 (18:42 -0300)]
Tweak catalog indexing abstraction for upcoming WARM

Split the existing CatalogUpdateIndexes into two different routines,
CatalogTupleInsert and CatalogTupleUpdate, which do both the heap
insert/update plus the index update.  This removes over 300 lines of
boilerplate code all over src/backend/catalog/ and src/backend/commands.
The resulting code is much more pleasing to the eye.

Also, by encapsulating what happens in detail during an UPDATE, this
facilitates the upcoming WARM patch, which is going to add a few more
lines to the update case making the boilerplate even more boring.

The original CatalogUpdateIndexes is removed; there was only one use
left, and since it's just three lines, we can as well expand it in place
there.  We could keep it, but WARM is going to break all the UPDATE
out-of-core callsites anyway, so there seems to be no benefit in doing
so.

Author: Pavan Deolasee
Discussion: https://www.postgr.es/m/CABOikdOcFYSZ4vA2gYfs=M2cdXzXX4qGHeEiW3fu9PCfkHLa2A@mail.gmail.com

7 years agopg_dump: Fix handling of ALTER DEFAULT PRIVILEGES
Stephen Frost [Tue, 31 Jan 2017 21:24:11 +0000 (16:24 -0500)]
pg_dump: Fix handling of ALTER DEFAULT PRIVILEGES

In commit 23f34fa, we changed how ACLs were handled to use the new
pg_init_privs catalog and to dump out the ACL commands as REVOKE+GRANT
combinations instead of trying to REVOKE all rights always and then
GRANT back just the ones which were in place.

Unfortunately, the DEFAULT PRIVILEGES system didn't quite get the
correct treatment with this change and ended up (incorrectly) only
including positive GRANTs instead of both the REVOKEs and GRANTs
necessary to preserve the correct privileges.

There are only a couple cases where such REVOKEs are possible because,
generally speaking, there's few rights which exist on objects by
default to be revoked.

Examples of REVOKEs which weren't being correctly preserved are when
privileges are REVOKE'd from the creator/owner, like so:

ALTER DEFAULT PRIVILEGES
  FOR ROLE myrole
  REVOKE SELECT ON TABLES FROM myrole;

or when other default privileges are being revoked, such as EXECUTE
rights granted to public for functions:

ALTER DEFAULT PRIVILEGES
  FOR ROLE myrole
  REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

Fix this by correctly working out what the correct REVOKE statements are
(if any) and dump them out, just as we do for everything else.

Noticed while developing additional regression tests for pg_dump, which
will be landing shortly.

Back-patch to 9.6 where the bug was introduced.