postgres-xl.git
8 years agoRemove bogus SCRAM_ITERATION_LEN constant.
Heikki Linnakangas [Thu, 6 Apr 2017 14:41:48 +0000 (17:41 +0300)]
Remove bogus SCRAM_ITERATION_LEN constant.

It was not used for what the comment claimed, at all. It was actually used
as the 'base' argument to strtol(), when reading the iteration count. We
don't need a constant for base-10, so remove it.

8 years agoAlways SnapshotResetXmin() during ClearTransaction()
Simon Riggs [Thu, 6 Apr 2017 14:30:22 +0000 (10:30 -0400)]
Always SnapshotResetXmin() during ClearTransaction()

Avoid corner cases during 2PC with 6bad580d9e678a0b604883e14d8401d469b06566

8 years agoIdentity columns
Peter Eisentraut [Thu, 6 Apr 2017 12:33:16 +0000 (08:33 -0400)]
Identity columns

This is the SQL standard-conforming variant of PostgreSQL's serial
columns.  It fixes a few usability issues that serial columns have:

- CREATE TABLE / LIKE copies default but refers to same sequence
- cannot add/drop serialness with ALTER TABLE
- dropping default does not drop sequence
- need to grant separate privileges to sequence
- other slight weirdnesses because serial is some kind of special macro

Reviewed-by: Vitaly Burovoy <vitaly.burovoy@gmail.com>
8 years agoAvoid SnapshotResetXmin() during AtEOXact_Snapshot()
Simon Riggs [Thu, 6 Apr 2017 12:31:52 +0000 (08:31 -0400)]
Avoid SnapshotResetXmin() during AtEOXact_Snapshot()

For normal commits and aborts we already reset PgXact->xmin,
so we can simply avoid running SnapshotResetXmin() twice.

During performance tests by Alexander Korotkov, diagnosis
by Andres Freund showed PgXact array as a bottleneck. After
manual analysis by me of the code paths that touch those
memory locations, I was able to identify extraneous code
in the main transaction commit path.

Avoiding touching highly contented shmem improves concurrent
performance slightly on all workloads, confirmed by tests
run by Ashutosh Sharma and Alexander Korotkov.

Simon Riggs

Discussion: CANP8+jJdXE9b+b9F8CQT-LuxxO0PBCB-SZFfMVAdp+akqo4zfg@mail.gmail.com

8 years agoRemove dead code and fix comments in fast-path function handling.
Heikki Linnakangas [Thu, 6 Apr 2017 06:09:39 +0000 (09:09 +0300)]
Remove dead code and fix comments in fast-path function handling.

HandleFunctionRequest() is no longer responsible for reading the protocol
message from the client, since commit 2b3a8b20c2. Fix the outdated
comments.

HandleFunctionRequest() now always returns 0, because the code that used
to return EOF was moved in 2b3a8b20c2. Therefore, the caller no longer
needs to check the return value.

Reported by Andres Freund. Backpatch to all supported versions, even though
this doesn't have any user-visible effect, to make backporting future
patches in this area easier.

Discussion: https://www.postgresql.org/message-id/20170405010525.rt5azbya5fkbhvrx@alap3.anarazel.de

8 years agoCode review for recent slot.c changes.
Andres Freund [Thu, 6 Apr 2017 03:56:35 +0000 (20:56 -0700)]
Code review for recent slot.c changes.

8 years agoFix integer-overflow problems in interval comparison.
Tom Lane [Thu, 6 Apr 2017 03:51:27 +0000 (23:51 -0400)]
Fix integer-overflow problems in interval comparison.

When using integer timestamps, the interval-comparison functions tried
to compute the overall magnitude of an interval as an int64 number of
microseconds.  As reported by Frazer McLean, this overflows for intervals
exceeding about 296000 years, which is bad since we nominally allow
intervals many times larger than that.  That results in wrong comparison
results, and possibly in corrupted btree indexes for columns containing
such large interval values.

To fix, compute the magnitude as int128 instead.  Although some compilers
have native support for int128 calculations, many don't, so create our
own support functions that can do 128-bit addition and multiplication
if the compiler support isn't there.  These support functions are designed
with an eye to allowing the int128 code paths in numeric.c to be rewritten
for use on all platforms, although this patch doesn't do that, or even
provide all the int128 primitives that will be needed for it.

Back-patch as far as 9.4.  Earlier releases did not guard against overflow
of interval values at all (commit 146604ec4 fixed that), so it seems not
very exciting to worry about overly-large intervals for them.

Before 9.6, we did not assume that unreferenced "static inline" functions
would not draw compiler warnings, so omit functions not directly referenced
by timestamp.c, the only present consumer of int128.h.  (We could have
omitted these functions in HEAD too, but since they were written and
debugged on the way to the present patch, and they look likely to be needed
by numeric.c, let's keep them in HEAD.)  I did not bother to try to prevent
such warnings in a --disable-integer-datetimes build, though.

Before 9.5, configure will never define HAVE_INT128, so the part of
int128.h that exploits a native int128 implementation is dead code in the
9.4 branch.  I didn't bother to remove it, thinking that keeping the file
looking similar in different branches is more useful.

In HEAD only, add a simple test harness for int128.h in src/tools/.

In back branches, this does not change the float-timestamps code path.
That's not subject to the same kind of overflow risk, since it computes
the interval magnitude as float8.  (No doubt, when this code was originally
written, overflow was disregarded for exactly that reason.)  There is a
precision hazard instead :-(, but we'll avert our eyes from that question,
since no complaints have been reported and that code's deprecated anyway.

Kyotaro Horiguchi and Tom Lane

Discussion: https://postgr.es/m/1490104629.422698.918452336.26FA96B7@webmail.messagingengine.com

8 years agoReduce lock level for CREATE STATISTICS
Simon Riggs [Wed, 5 Apr 2017 22:22:32 +0000 (18:22 -0400)]
Reduce lock level for CREATE STATISTICS

In line with other lock reductions related to planning.

Simon Riggs

8 years agoCollect and use multi-column dependency stats
Simon Riggs [Wed, 5 Apr 2017 22:00:42 +0000 (18:00 -0400)]
Collect and use multi-column dependency stats

Follow on patch in the multi-variate statistics patch series.

CREATE STATISTICS s1 WITH (dependencies) ON (a, b) FROM t;
ANALYZE;
will collect dependency stats on (a, b) and then use the measured
dependency in subsequent query planning.

Commit 7b504eb282ca2f5104b5c00b4f05a3ef6bb1385b added
CREATE STATISTICS with n-distinct coefficients. These are now
specified using the mutually exclusive option WITH (ndistinct).

Author: Tomas Vondra, David Rowley
Reviewed-by: Kyotaro HORIGUCHI, Álvaro Herrera, Dean Rasheed, Robert Haas
and many other comments and contributions
Discussion: https://postgr.es/m/56f40b20-c464-fad2-ff39-06b668fac47c@2ndquadrant.com

8 years agoAllow --with-wal-segsize=n up to n=1024MB
Simon Riggs [Wed, 5 Apr 2017 19:38:17 +0000 (15:38 -0400)]
Allow --with-wal-segsize=n up to n=1024MB

Other part of Beena Emerson's patch to allow testing

8 years agoSpelling mistake in comment in utility.c
Simon Riggs [Wed, 5 Apr 2017 18:29:29 +0000 (14:29 -0400)]
Spelling mistake in comment in utility.c

8 years agoFix pageinspect failures on hash indexes.
Robert Haas [Wed, 5 Apr 2017 18:17:23 +0000 (14:17 -0400)]
Fix pageinspect failures on hash indexes.

Make every page in a hash index which isn't all-zeroes have a valid
special space, so that tools like pageinspect don't error out.

Also, make pageinspect cope with all-zeroes pages, because
_hash_alloc_buckets can leave behind large numbers of those until
they're consumed by splits.

Ashutosh Sharma and Robert Haas, reviewed by Amit Kapila.
Original trouble report from Jeff Janes.

Discussion: http://postgr.es/m/CAMkU=1y6NjKmqbJ8wLMhr=F74WzcMALYWcVFhEpm7i=mV=XsOg@mail.gmail.com

8 years agoUse American English in error message
Peter Eisentraut [Wed, 5 Apr 2017 18:06:15 +0000 (14:06 -0400)]
Use American English in error message

All error messages use the American English spelling of recognize,
apply to the single one not doing so to be consistent.

Author: Daniel Gustafsson <daniel@yesql.se>

8 years agodoc: Remove remark elements
Peter Eisentraut [Wed, 5 Apr 2017 17:18:32 +0000 (13:18 -0400)]
doc: Remove remark elements

They were not rendered with DSSSL, but now they show up by default using
XSLT.  Just remove them, since they are not useful.

8 years agohash: Fix write-ahead logging bug.
Robert Haas [Wed, 5 Apr 2017 15:45:35 +0000 (11:45 -0400)]
hash: Fix write-ahead logging bug.

The size of the data is not the same thing as the size of the size of
the data.

Reported off-list by Tushar Ahuja.  Fix by Ashutosh Sharma, reviewed
by Amit Kapila.

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

8 years agoAdd isolation test for SERIALIZABLE READ ONLY DEFERRABLE.
Kevin Grittner [Wed, 5 Apr 2017 15:04:36 +0000 (10:04 -0500)]
Add isolation test for SERIALIZABLE READ ONLY DEFERRABLE.

This improves code coverage and lays a foundation for testing
similar issues in a distributed environment.

Author: Thomas Munro <thomas.munro@enterprisedb.com>
Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
8 years agodblink: Small code rearrangement for clarity
Peter Eisentraut [Wed, 5 Apr 2017 13:03:11 +0000 (09:03 -0400)]
dblink: Small code rearrangement for clarity

suggested by Tom Lane

8 years agoCapitalize names of PLs consistently
Peter Eisentraut [Wed, 5 Apr 2017 04:38:25 +0000 (00:38 -0400)]
Capitalize names of PLs consistently

Author: Daniel Gustafsson <daniel@yesql.se>

8 years agopageinspect: Add bt_page_items function with bytea argument
Peter Eisentraut [Wed, 5 Apr 2017 03:48:49 +0000 (23:48 -0400)]
pageinspect: Add bt_page_items function with bytea argument

Author: Tomas Vondra <tomas.vondra@2ndquadrant.com>
Reviewed-by: Ashutosh Sharma <ashu.coek88@gmail.com>
8 years agoFollow-on cleanup for the transition table patch.
Kevin Grittner [Tue, 4 Apr 2017 23:36:39 +0000 (18:36 -0500)]
Follow-on cleanup for the transition table patch.

Commit 59702716 added transition table support to PL/pgsql so that
SQL queries in trigger functions could access those transient
tables.  In order to provide the same level of support for PL/perl,
PL/python and PL/tcl, refactor the relevant code into a new
function SPI_register_trigger_data.  Call the new function in the
trigger handler of all four PLs, and document it as a public SPI
function so that authors of out-of-tree PLs can do the same.

Also get rid of a second QueryEnvironment object that was
maintained by PL/pgsql.  That was previously used to deal with
cursors, but the same approach wasn't appropriate for PLs that are
less tangled up with core code.  Instead, have SPI_cursor_open
install the connection's current QueryEnvironment, as already
happens for SPI_execute_plan.

While in the docs, remove the note that transition tables were only
supported in C and PL/pgSQL triggers, and correct some ommissions.

Thomas Munro with some work by Kevin Grittner (mostly docs)

8 years agoMake min_wal_size/max_wal_size use MB internally
Simon Riggs [Tue, 4 Apr 2017 22:00:01 +0000 (18:00 -0400)]
Make min_wal_size/max_wal_size use MB internally

Previously they were defined using multiples of XLogSegSize.
Remove GUC_UNIT_XSEGS. Introduce GUC_UNIT_MB

Extracted from patch series on XLogSegSize infrastructure.

Beena Emerson

8 years agoFix uninitialized variables in twophase.c
Simon Riggs [Tue, 4 Apr 2017 21:50:02 +0000 (17:50 -0400)]
Fix uninitialized variables in twophase.c

8 years agoForce synchronous commit in new-ish test_decoding test.
Andres Freund [Tue, 4 Apr 2017 21:38:00 +0000 (14:38 -0700)]
Force synchronous commit in new-ish test_decoding test.

This was missed in a924c327 ff.

8 years agoFix two valgrind issues in slab allocator.
Andres Freund [Tue, 4 Apr 2017 21:26:42 +0000 (14:26 -0700)]
Fix two valgrind issues in slab allocator.

During allocation VALGRIND_MAKE_MEM_DEFINED was called with a pointer
as size. That kind of works, but makes valgrind exceedingly slow for
workloads involving the slab allocator.

Secondly there was an access to memory marked as unreachable within
SlabCheck(). Fix that too.

Author: Tomas Vondra
Discussion: https://postgr.es/m/a6543b6d-6015-99b1-63ef-3ed55a76a730@2ndquadrant.com

8 years agoClarify documentation of to_tsvector(json(b))
Andrew Dunstan [Tue, 4 Apr 2017 20:50:13 +0000 (16:50 -0400)]
Clarify documentation of to_tsvector(json(b))

Per gripe from Sven R. Kunze

8 years agoSpeedup 2PC recovery by skipping two phase state files in normal path
Simon Riggs [Tue, 4 Apr 2017 19:56:56 +0000 (15:56 -0400)]
Speedup 2PC recovery by skipping two phase state files in normal path

2PC state info held in shmem at PREPARE, then cleaned at COMMIT PREPARED/ABORT PREPARED,
avoiding writing/fsyncing any state information to disk in the normal path, greatly enhancing replay speed.
Prepared transactions that live past one checkpoint redo horizon will be written to disk as now.
Similar conceptually to 978b2f65aa1262eb4ecbf8b3785cb1b9cf4db78e and building upon
the infrastructure created by that commit.

Authors, in equal measure: Stas Kelvich, Nikhil Sontakke and Michael Paquier
Discussion: https://postgr.es/m/CAMGcDxf8Bn9ZPBBJZba9wiyQq-Qk5uqq=VjoMnRnW5s+fKST3w@mail.gmail.com

8 years agoAdjust min/max values when changing sequence type
Peter Eisentraut [Tue, 4 Apr 2017 16:36:15 +0000 (12:36 -0400)]
Adjust min/max values when changing sequence type

When changing the type of a sequence, adjust the min/max values of the
sequence if it looks like the previous values were the default values.
Previously, it would leave the old values in place, requiring manual
adjustments even in the usual/default cases.

Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
Reviewed-by: Vitaly Burovoy <vitaly.burovoy@gmail.com>
8 years agoFix thinko in BitmapAdjustPrefetchIterator.
Robert Haas [Tue, 4 Apr 2017 13:03:41 +0000 (09:03 -0400)]
Fix thinko in BitmapAdjustPrefetchIterator.

Dilip Kumar

Discussion: http://postgr.es/m/CAFiTN-uKAvRhWprb0i-U9zFOekgQRRwqjP1wvOBsKZb-UEKbug@mail.gmail.com

8 years agoFix typo
Peter Eisentraut [Tue, 4 Apr 2017 13:03:24 +0000 (09:03 -0400)]
Fix typo

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

8 years agopsql: Add some missing tab completion
Peter Eisentraut [Tue, 4 Apr 2017 12:58:21 +0000 (08:58 -0400)]
psql: Add some missing tab completion

Add tab completion for COMMENT/SECURITY LABEL ON
PUBLICATION/SUBSCRIPTION.

Reported-by: Stephen Frost <sfrost@snowman.net>
8 years agoRemove --verbose from PROVE_FLAGS
Stephen Frost [Tue, 4 Apr 2017 12:42:09 +0000 (08:42 -0400)]
Remove --verbose from PROVE_FLAGS

Per discussion, the TAP tests are really more verbose than necessary, so
remove the --verbose flag from PROVE_FLAGS.  Also add comments to let
folks know how they can enable it if they really wish to, as suggested
by Craig Ringer.

Author: Michael Paquier, additional comments by me.
Discussion: https://postgr.es/m/CAMsr%2BYGAzcMDOZ_BirnMCL6Sb%3DMUjP0FRE82YBDSbXcf6pm9Yg%40mail.gmail.com

8 years agoFix remote position tracking in logical replication
Peter Eisentraut [Tue, 4 Apr 2017 12:24:32 +0000 (08:24 -0400)]
Fix remote position tracking in logical replication

We need to set the origin remote position to end_lsn, not commit_lsn, as
commit_lsn is the start of commit record, and we use the origin remote
position as start position when restarting replication stream.  If we'd
use commit_lsn, we could request data that we already received from the
remote server after a crash of a downstream server.

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

8 years agoFix formula in _hash_spareindex.
Robert Haas [Tue, 4 Apr 2017 11:42:05 +0000 (07:42 -0400)]
Fix formula in _hash_spareindex.

This was correct in earlier versions of the patch that lead to
commit ea69a0dead5128c421140dc53fac165ba4af8520, but somehow got
broken in the last version which I actually committed.

Mithun Cy, per an off-list report from Ashutosh Sharma

Discussion: http://postgr.es/m/CAD__OujbAwNU71v1y-RoQxZ8LZ6-V2UFTkex3v34MK6uZ3Xb5w@mail.gmail.com

8 years agoExpand hash indexes more gradually.
Robert Haas [Tue, 4 Apr 2017 03:46:33 +0000 (23:46 -0400)]
Expand hash indexes more gradually.

Since hash indexes typically have very few overflow pages, adding a
new splitpoint essentially doubles the on-disk size of the index,
which can lead to large and abrupt increases in disk usage (and
perhaps long delays on occasion).  To mitigate this problem to some
degree, divide larger splitpoints into four equal phases.  This means
that, for example, instead of growing from 4GB to 8GB all at once, a
hash index will now grow from 4GB to 5GB to 6GB to 7GB to 8GB, which
is perhaps still not as smooth as we'd like but certainly an
improvement.

This changes the on-disk format of the metapage, so bump HASH_VERSION
from 2 to 3.  This will force a REINDEX of all existing hash indexes,
but that's probably a good idea anyway.  First, hash indexes from
pre-10 versions of PostgreSQL could easily be corrupted, and we don't
want to confuse corruption carried over from an older release with any
corruption caused despite the new write-ahead logging in v10.  Second,
it will let us remove some backward-compatibility code added by commit
293e24e507838733aba4748b514536af2d39d7f2.

Mithun Cy, reviewed by Amit Kapila, Jesper Pedersen and me.  Regression
test outputs updated by me.

Discussion: http://postgr.es/m/CAD__OuhG6F1gQLCgMQNnMNgoCvOLQZz9zKYJQNYvYmmJoM42gA@mail.gmail.com
Discussion: http://postgr.es/m/CA+TgmoYty0jCf-pa+m+vYUJ716+AxM7nv_syvyanyf5O-L_i2A@mail.gmail.com

8 years agoFurther corrections and improvements to partitioning documentation.
Robert Haas [Tue, 4 Apr 2017 03:10:16 +0000 (23:10 -0400)]
Further corrections and improvements to partitioning documentation.

Amit Langote

Discussion: http://postgr.es/m/80f6b049-e882-f6c3-f82c-f44baa94d369@lab.ntt.co.jp

8 years agoUpdate comment.
Robert Haas [Tue, 4 Apr 2017 03:07:31 +0000 (23:07 -0400)]
Update comment.

Craig Ringer, reviewed by me.

8 years agoPrint new RelOptInfo field top_parent_relids in outfuncs.c
Robert Haas [Tue, 4 Apr 2017 03:06:36 +0000 (23:06 -0400)]
Print new RelOptInfo field top_parent_relids in outfuncs.c

I intended to include this adjustment in the previous commit
(7a39b5e4d11229ece930a51fd7cb29e535db44940) but messed up.

8 years agoAbstract logic to allow for multiple kinds of child rels.
Robert Haas [Tue, 4 Apr 2017 02:41:31 +0000 (22:41 -0400)]
Abstract logic to allow for multiple kinds of child rels.

Currently, the only type of child relation is an "other member rel",
which is the child of a baserel, but in the future joins and even
upper relations may have child rels.  To facilitate that, introduce
macros that test to test for particular RelOptKind values, and use
them in various places where they help to clarify the sense of a test.
(For example, a test may allow RELOPT_OTHER_MEMBER_REL either because
it intends to allow child rels, or because it intends to allow simple
rels.)

Also, remove find_childrel_top_parent, which will not work for a
child rel that is not a baserel.  Instead, add a new RelOptInfo
member top_parent_relids to track the same kind of information in a
more generic manner.

Ashutosh Bapat, slightly tweaked by me.  Review and testing of the
patch set from which this was taken by Rajkumar Raghuwanshi and Rafia
Sabih.

Discussion: http://postgr.es/m/CA+TgmoagTnF2yqR3PT2rv=om=wJiZ4-A+ATwdnriTGku1CLYxA@mail.gmail.com

8 years agoProperly acquire buffer lock for page-at-a-time hash vacuum.
Robert Haas [Tue, 4 Apr 2017 02:24:17 +0000 (22:24 -0400)]
Properly acquire buffer lock for page-at-a-time hash vacuum.

In a couple of places, _hash_kill_items was mistakenly called with
the buffer lock not held.  Repair.

Ashutosh Sharma, per a report from Andreas Seltenreich

Discussion: http://postgr.es/m/87o9wo8o0j.fsf@credativ.de

8 years agoTry and silence spurious Coverity warning.
Andrew Gierth [Mon, 3 Apr 2017 22:30:24 +0000 (23:30 +0100)]
Try and silence spurious Coverity warning.

gset_data (aka gd) in planner.c is always non-null if and only if
parse->groupingSets is non-null, but Coverity doesn't know that and
complains.  Feed it an assertion to see if that keeps it happy.

8 years agoMake header self-contained
Peter Eisentraut [Mon, 3 Apr 2017 20:17:45 +0000 (16:17 -0400)]
Make header self-contained

Add necessary include files for things used in the header.

8 years agoFix whitespace
Peter Eisentraut [Mon, 3 Apr 2017 15:12:48 +0000 (11:12 -0400)]
Fix whitespace

8 years agoHandle change of slot name in logical replication apply
Peter Eisentraut [Mon, 3 Apr 2017 15:10:28 +0000 (11:10 -0400)]
Handle change of slot name in logical replication apply

Since change of slot name is a supported operation, handle it more
gracefully, instead of in the this-should-not-happen way.

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

8 years agodoc: Change xref style to number only
Peter Eisentraut [Mon, 3 Apr 2017 14:50:32 +0000 (10:50 -0400)]
doc: Change xref style to number only

Change the style of links generated by xrefs to section number only, as
it was with DSSSL, instead of number and title, as is the default of the
XSLT stylesheets.

Our documentation is mostly written expecting the old style, so keep
that for the time being, per discussion.

8 years agoRemove reinvention of stringify macro.
Tom Lane [Sun, 2 Apr 2017 23:19:16 +0000 (19:19 -0400)]
Remove reinvention of stringify macro.

We already have CppAsString2, there's no need for the MSVC support to
re-invent a macro to do that (and especially not to inject it in as
ugly a way as this).

Discussion: https://postgr.es/m/CADkLM=c+hm2rc0tkKgC-ZgrLttHT2KkfppE+BC-=i-xj+7V-TQ@mail.gmail.com

8 years agoDoc: clarify behavior of OT_WHOLE_LINE and OT_FILEPIPE psql slash commands.
Tom Lane [Sun, 2 Apr 2017 23:01:53 +0000 (19:01 -0400)]
Doc: clarify behavior of OT_WHOLE_LINE and OT_FILEPIPE psql slash commands.

This is another bit of ancient behavior that was documented poorly (in
a couple of cases) or not at all (in several others).

Discussion: https://postgr.es/m/9b4ea968-753f-4b5f-b46c-d7d3bf7c8f90@manitou-mail.org

8 years agoDocument psql's behavior of recalling the previously executed query.
Tom Lane [Sun, 2 Apr 2017 22:26:37 +0000 (18:26 -0400)]
Document psql's behavior of recalling the previously executed query.

Various psql slash commands that normally act on the current query buffer
will automatically recall and re-use the most recently executed SQL command
instead, if the current query buffer is empty.  Although this behavior is
ancient (dating apparently to commit 77a472993), it was documented nowhere
in the psql reference page.  For that matter, we'd never bothered to define
the concept of "current query buffer" explicitly.  Fix that.  Do some
wordsmithing on relevant command descriptions to improve clarity and
consistency.

D