]> granicus.if.org Git - postgresql/log
postgresql
8 years agoPartition the freelist for shared dynahash tables.
Robert Haas [Wed, 23 Mar 2016 14:56:23 +0000 (10:56 -0400)]
Partition the freelist for shared dynahash tables.

Without this, contention on the freelist can become a pretty serious
problem on large servers.

Aleksander Alekseev, reviewed by Anastasia Lubennikova, Dilip Kumar,
and me.

8 years agoCode review for error reports in jsonb_set().
Tom Lane [Wed, 23 Mar 2016 15:00:39 +0000 (11:00 -0400)]
Code review for error reports in jsonb_set().

User-facing (even tested by regression tests) error conditions were thrown
with elog(), hence had wrong SQLSTATE and were untranslatable.  And the
error message texts weren't up to project style, either.

8 years agoFix unsafe use of strtol() on a non-null-terminated Text datum.
Tom Lane [Wed, 23 Mar 2016 14:43:13 +0000 (10:43 -0400)]
Fix unsafe use of strtol() on a non-null-terminated Text datum.

jsonb_set() could produce wrong answers or incorrect error reports, or in
the worst case even crash, when trying to convert a path-array element into
an integer for use as an array subscript.  Per report from Vitaly Burovoy.
Back-patch to 9.5 where the faulty code was introduced (in commit
c6947010ceb42143).

Michael Paquier

8 years agoChange comment to describe correct lock level used
Simon Riggs [Wed, 23 Mar 2016 11:32:34 +0000 (11:32 +0000)]
Change comment to describe correct lock level used

8 years agoFix EvalPlanQual bug when query contains both locked and not-locked rels.
Tom Lane [Tue, 22 Mar 2016 21:56:06 +0000 (17:56 -0400)]
Fix EvalPlanQual bug when query contains both locked and not-locked rels.

In commit afb9249d06f47d7a, we (probably I) made ExecLockRows assign
null test tuples to all relations of the query while setting up to do an
EvalPlanQual recheck for a newly-updated locked row.  This was sheerest
brain fade: we should only set test tuples for relations that are lockable
by the LockRows node, and in particular empty test tuples are only sensible
for inheritance child relations that weren't the source of the current
tuple from their inheritance tree.  Setting a null test tuple for an
unrelated table causes it to return NULLs when it should not, as exhibited
in bug #14034 from Bronislav Houdek.  To add insult to injury, doing it the
wrong way required two loops where one would suffice; so the corrected code
is even a bit shorter and faster.

Add a regression test case based on his example, and back-patch to 9.5
where the bug was introduced.

8 years agoImprove docs of pg_trgm changes
Teodor Sigaev [Tue, 22 Mar 2016 14:08:10 +0000 (17:08 +0300)]
Improve docs of pg_trgm changes

Artur Zakirov, per gripe from Jeff Janes

8 years agoFix typo in docs.
Fujii Masao [Tue, 22 Mar 2016 13:04:30 +0000 (22:04 +0900)]
Fix typo in docs.

Jeff Janes

8 years agoAllow the delay in psql's \watch command to be a fractional second.
Tom Lane [Mon, 21 Mar 2016 22:34:18 +0000 (18:34 -0400)]
Allow the delay in psql's \watch command to be a fractional second.

Instead of just "2" seconds, allow eg. "2.5" seconds.  Per request
from Alvaro Herrera.  No docs change since the docs didn't say you
couldn't do this already.

8 years agoImprove header output from psql's \watch command.
Tom Lane [Mon, 21 Mar 2016 22:18:13 +0000 (18:18 -0400)]
Improve header output from psql's \watch command.

Include the \pset title string if there is one, and shorten the prefab
part of the header to be "timestamp (every Ns)".  Per suggestion by
David Johnston.

Michael Paquier and Tom Lane

8 years agoClean up some Coverity complaints about commit 0bf3ae88af330496.
Tom Lane [Mon, 21 Mar 2016 15:59:49 +0000 (11:59 -0400)]
Clean up some Coverity complaints about commit 0bf3ae88af330496.

The two get_tle_by_resno() calls introduced by this commit lacked any
check for a NULL return, unlike any other calls of that function anywhere
in our tree.  Coverity quite properly complained about it.  Also fix a
misindented line in process_query_params(), which Coverity also complained
about on the grounds that the bad indentation suggested possible programmer
misinterpretation.

8 years agoMake max_parallel_degree PGC_USERSET.
Robert Haas [Mon, 21 Mar 2016 14:54:36 +0000 (10:54 -0400)]
Make max_parallel_degree PGC_USERSET.

It was intended to be this way all along, just like other planner
GUCs such as work_mem.  But I goofed.

8 years agoSupport parallel aggregation.
Robert Haas [Mon, 21 Mar 2016 13:20:53 +0000 (09:20 -0400)]
Support parallel aggregation.

Parallel workers can now partially aggregate the data and pass the
transition values back to the leader, which can combine the partial
results to produce the final answer.

David Rowley, based on earlier work by Haribabu Kommi.  Reviewed by
Álvaro Herrera, Tomas Vondra, Amit Kapila, James Sewell, and me.

8 years agoProperly declare FeBeWaitSet.
Andres Freund [Mon, 21 Mar 2016 11:58:18 +0000 (12:58 +0100)]
Properly declare FeBeWaitSet.

Surprising that this worked on a number of systems. Reported by
buildfarm member longfin.

8 years agoIntroduce WaitEventSet API.
Andres Freund [Mon, 21 Mar 2016 08:56:39 +0000 (09:56 +0100)]
Introduce WaitEventSet API.

Commit ac1d794 ("Make idle backends exit if the postmaster dies.")
introduced a regression on, at least, large linux systems. Constantly
adding the same postmaster_alive_fds to the OSs internal datastructures
for implementing poll/select can cause significant contention; leading
to a performance regression of nearly 3x in one example.

This can be avoided by using e.g. linux' epoll, which avoids having to
add/remove file descriptors to the wait datastructures at a high rate.
Unfortunately the current latch interface makes it hard to allocate any
persistent per-backend resources.

Replace, with a backward compatibility layer, WaitLatchOrSocket with a
new WaitEventSet API. Users can allocate such a Set across multiple
calls, and add more than one file-descriptor to wait on. The latter has
been added because there's upcoming postgres features where that will be
helpful.

In addition to the previously existing poll(2), select(2),
WaitForMultipleObjects() implementations also provide an epoll_wait(2)
based implementation to address the aforementioned performance
problem. Epoll is only available on linux, but that is the most likely
OS for machines large enough (four sockets) to reproduce the problem.

To actually address the aforementioned regression, create and use a
long-lived WaitEventSet for FE/BE communication.  There are additional
places that would benefit from a long-lived set, but that's a task for
another day.

Thanks to Amit Kapila, who helped make the windows code I blindly wrote
actually work.

Reported-By: Dmitry Vasilyev Discussion:
CAB-SwXZh44_2ybvS5Z67p_CDz=XFn4hNAD=CnMEF+QqkXwFrGg@mail.gmail.com
20160114143931.GG10941@awork2.anarazel.de

8 years agoCombine win32 and unix latch implementations.
Andres Freund [Mon, 21 Mar 2016 08:56:39 +0000 (09:56 +0100)]
Combine win32 and unix latch implementations.

Previously latches for windows and unix had been implemented in
different files. A later patch introduce an expanded wait
infrastructure, keeping the implementation separate would introduce too
much duplication.

This basically just moves the functions, without too much change. The
reason to keep this separate is that it allows blame to continue working
a little less badly; and to make review a tiny bit easier.

Discussion: 20160114143931.GG10941@awork2.anarazel.de

8 years agoSecond attempt at fixing MSVC build for 68ab8e8ba4a471d9.
Andres Freund [Mon, 21 Mar 2016 09:49:45 +0000 (10:49 +0100)]
Second attempt at fixing MSVC build for 68ab8e8ba4a471d9.

After the previous fix in 6f1f34c9 msvc ended up looking for psqlscan.c
in the wrong directory.

David's fix just forces the path to be adjusted. That's not a
particularly pretty fix, but it hopefully will make the buildfarm green
again.

Author: David Rowley
Discussion: CAKJS1f_9CCi_t+LEgV5GWoCj3wjavcMoDc5qfcf_A0UwpQoPoA@mail.gmail.com

8 years agoUse %option bison-bridge in psql/pgbench lexers.
Tom Lane [Mon, 21 Mar 2016 01:59:03 +0000 (21:59 -0400)]
Use %option bison-bridge in psql/pgbench lexers.

The point of this change is to use %pure-parser in pgbench's exprparse.y.
The immediate reason is that it turns out very ancient versions of bison
have a bug with the combination of a reentrant lexer and non-reentrant
parser.  We could consider dropping support for such ancient bisons; but
considering that we might well need exprparse.y to be reentrant some day,
it seems better to make it so right now than to move the portability
goalposts.  (AFAICT there's no particular performance consequence to this
change, either, so there's no good reason not to do it.)

Now, %pure-parser assumes that the called lexer is built with %option
bison-bridge.  Because we're assuming bitwise compatibility of yyscan_t
(yyguts_t) data structures among all the psql/pgbench lexers, that
requirement propagates back to psql's lexers as well.  But it's just a
few lines of change on that side too; and if psqlscan.l is to set the
baseline for a possibly-large family of lexers, it should err on the
side of including not omitting useful features.

8 years agoBest-guess attempt at fixing MSVC build for 68ab8e8ba4a471d9.
Tom Lane [Sun, 20 Mar 2016 21:51:54 +0000 (17:51 -0400)]
Best-guess attempt at fixing MSVC build for 68ab8e8ba4a471d9.

pgbench now needs to use src/bin/psql/psqlscan.l, but it's not very clear
how to fit that into the MSVC build system.  If this doesn't work I'm going
to need some help from somebody who actually understands those scripts ...

8 years agoSQL commands in pgbench scripts are now ended by semicolons, not newlines.
Tom Lane [Sun, 20 Mar 2016 16:58:44 +0000 (12:58 -0400)]
SQL commands in pgbench scripts are now ended by semicolons, not newlines.

To allow multiline SQL commands in scripts, adopt the same rules psql uses
to decide what is the end of a SQL command, to wit, an unquoted semicolon
not encased in parentheses.  Do this by importing the same flex lexer that
psql uses, since coping with stuff like dollar-quoted literals is hard to
get right without going the full nine yards.

This makes use of the infrastructure added in commit 0ea9efbe9ec1bf07 to
support independently-written flex lexers scanning the same PsqlScanState
input-buffer data structure.  Since that infrastructure isn't very
friendly to ad-hoc parsing code such as strtok(), improve exprscan.l
so that it can parse either whitespace-separated words or expression
tokens, on demand, and rewrite pgbench.c's backslash-command parsing
code to always use the lexer to fetch tokens.

It's still the case that pgbench backslash commands extend to the end
of the line, no more and no less.  That could be changed in a fairly
localized way now, and there was some interest in doing so, but it
seems like material for a separate patch.

In passing, make some marginal cleanups in syntax error reporting,
const-ify a few data structures that could use it, and run some of
this code through pgindent.

I can't tell whether the MSVC build scripts need to be taught explicitly
about the changes here or not, but the buildfarm will soon tell us.

Kyotaro Horiguchi and Tom Lane

8 years agoRemove dependency on psed for MSVC builds.
Andrew Dunstan [Sat, 19 Mar 2016 22:36:35 +0000 (18:36 -0400)]
Remove dependency on psed for MSVC builds.

Modern Perl has removed psed from its core distribution, so it might not
be readily available on some build platforms. We therefore replace its
use with a Perl script generated by s2p, which is equivalent to the sed
script. The latter is retained for non-MSVC builds to avoid creating a
new hard dependency on Perl for non-Windows tarball builds.

Backpatch to all live branches.

Michael Paquier and me.

8 years agoFix phony .PHONY.
Tom Lane [Sat, 19 Mar 2016 21:19:37 +0000 (17:19 -0400)]
Fix phony .PHONY.

A couple makefiles had misspelled the magic .PHONY target as PHONY.

8 years agoMake pgbench's expression lexer reentrant.
Tom Lane [Sat, 19 Mar 2016 20:35:41 +0000 (16:35 -0400)]
Make pgbench's expression lexer reentrant.

This is a necessary preliminary step for making it play with psqlscan.l
given the way I set up the lexer input-buffer sharing mechanism in commit
0ea9efbe9ec1bf07.

I've not tried to make it *actually* reentrant; there's still some static
variables laying about.  But flex thinks it's reentrant, and that's what
counts.

In support of that, fix exprparse.y to pass through the yyscan_t from the
caller.  Also do some minor code beautification, like not casting away
const.

8 years agopgbench: Silence new compiler warnings
Alvaro Herrera [Sat, 19 Mar 2016 19:14:37 +0000 (16:14 -0300)]
pgbench: Silence new compiler warnings

The original coding in 7bafffea647 and previous wasn't all that great
anyway.

Reported by Jeff Janes and Tom Lane

8 years agoTypo fix.
Tom Lane [Sat, 19 Mar 2016 18:36:52 +0000 (14:36 -0400)]
Typo fix.

8 years agoSync backend/parser/scan.l with bin/psql/psqlscan.l.
Tom Lane [Sat, 19 Mar 2016 18:36:22 +0000 (14:36 -0400)]
Sync backend/parser/scan.l with bin/psql/psqlscan.l.

Make some minor formatting adjustments to make it easier to diff these
files and see that they indeed implement the same flex rules (at least
to the extent that we want them to be the same).

(Someday it'd be nice to make ecpg's pgc.l more easily diff'able too,
but today is not that day.)

Also run relevant parts of these files and psqlscanslash.l through
pgindent.

No actual behavioral changes here, just obsessive neatnik-ism.

8 years agoBuild backend/parser/scan.l and interfaces/ecpg/preproc/pgc.l standalone.
Tom Lane [Sat, 19 Mar 2016 16:07:16 +0000 (12:07 -0400)]
Build backend/parser/scan.l and interfaces/ecpg/preproc/pgc.l standalone.

Now that we know about the %top{} trick, we can revert to building flex
lexers as separate .o files.  This is worth doing for a couple of reasons
besides sheer cleanliness.  We can narrow the scope of the -Wno-error flag
that's forced on scan.c.  Also, since these grammar and lexer files are
so large, splitting them into separate build targets should have some
advantages in build speed, particularly in parallel or ccache'd builds.

We have quite a few other .l files that could be changed likewise, but the
above arguments don't apply to them, so the benefit of fixing them seems
pretty minimal.  Leave the rest for some other day.

8 years agopgbench: Allow changing weights for scripts
Alvaro Herrera [Sat, 19 Mar 2016 15:32:42 +0000 (12:32 -0300)]
pgbench: Allow changing weights for scripts

Previously, all scripts had the same probability of being chosen when
multiple of them were specified via -b, -f, -N, -S.  With this commit,
-b and -f now search for an "@" in the script name and use the integer
found after it as the drawing probability for that script.

(One disadvantage is that if you have script whose names contain @, you
are now forced to specify "@1" at the end; otherwise the name's @ is
confused with a weight separator.  We don't expect many pgbench script
with @ in their names in the wild, so this shouldn't be too serious a
problem.)

While at it, rework the interface between addScript, process_file,
process_builtin, and findBuiltin.  It had gotten a bit out of hand with
recent commits.

Author: Fabien Coelho
Reviewed-By: Andres Freund, Robert Haas, Álvaro Herrera, Michaël Paquier
Discussion: http://www.postgresql.org/message-id/alpine.DEB.2.10.1603160721240.1666@sto

8 years agoWith ancient gcc, skip pg_attribute_printf() on function pointer.
Tom Lane [Sat, 19 Mar 2016 14:59:20 +0000 (10:59 -0400)]
With ancient gcc, skip pg_attribute_printf() on function pointer.

Buildfarm results show that the ability to attach pg_attribute_printf
decoration to a function pointer appeared somewhere between gcc 2.95.3
and gcc 4.0.1.  Guess that it was there in 4.0.

8 years agoAllow SSL server key file to have group read access if owned by root
Peter Eisentraut [Sat, 19 Mar 2016 10:03:22 +0000 (11:03 +0100)]
Allow SSL server key file to have group read access if owned by root

We used to require the server key file to have permissions 0600 or less
for best security.  But some systems (such as Debian) have certificate
and key files managed by the operating system that can be shared with
other services.  In those cases, the "postgres" user is made a member of
a special group that has access to those files, and the server key file
has permissions 0640.  To accommodate that kind of setup, also allow the
key file to have permissions 0640 but only if owned by root.

From: Christoph Berg <myon@debian.org>
Reviewed-by: Alvaro Herrera <alvherre@alvh.no-ip.org>
8 years agoFix stupid omission in c4901a1e.
Andres Freund [Sat, 19 Mar 2016 05:35:43 +0000 (22:35 -0700)]
Fix stupid omission in c4901a1e.

Reported-By: Jeff Janes
Discussion: CAMkU=1zGxREwoyaCrp_CHadEB+dPgpVyKBysCJ+6xP9gCOvAuw@mail.gmail.com

8 years agoFix missed update in _readForeignScan().
Tom Lane [Sat, 19 Mar 2016 05:20:34 +0000 (01:20 -0400)]
Fix missed update in _readForeignScan().

Blatant fail in 0bf3ae88af330496517722e391e7c975e6bad219.
Caught by buildfarm member mandrill.

8 years agoUse yylex_init not yylex_init_extra().
Tom Lane [Sat, 19 Mar 2016 05:02:18 +0000 (01:02 -0400)]
Use yylex_init not yylex_init_extra().

Older versions of flex don't have the latter.  Per buildfarm.

8 years agoSuppress FLEX_NO_BACKUP check for psqlscanslash.l.
Tom Lane [Sat, 19 Mar 2016 04:43:46 +0000 (00:43 -0400)]
Suppress FLEX_NO_BACKUP check for psqlscanslash.l.

The existing infrastructure for FLEX_NO_BACKUP doesn't work reliably
when two lexers are built in parallel in the same directory.  We can
probably fix that, but as a short-term workaround, just don't make
the check for psqlscanslash.l.

Per buildfarm.

8 years agoSplit psql's lexer into two separate .l files for SQL and backslash cases.
Tom Lane [Sat, 19 Mar 2016 04:24:55 +0000 (00:24 -0400)]
Split psql's lexer into two separate .l files for SQL and backslash cases.

This gets us to a point where psqlscan.l can be used by other frontend
programs for the same purpose psql uses it for, ie to detect when it's
collected a complete SQL command from input that is divided across
line boundaries.  Moreover, other programs can supply their own lexers
for backslash commands of their own choosing.  A follow-on patch will
use this in pgbench.

The end result here is roughly the same as in Kyotaro Horiguchi's
0001-Make-SQL-parser-part-of-psqlscan-independent-from-ps.patch, although
the details of the method for switching between lexers are quite different.
Basically, in this patch we share the entire PsqlScanState, YY_BUFFER_STATE
stack, *and* yyscan_t between different lexers.  The only thing we need
to do to switch to a different lexer is to make sure the start_state is
valid for the new lexer.  This works because flex doesn't keep any other
persistent state that depends on the specific lexing tables generated for
a particular .l file.  (We are assuming that both lexers are built with
the same flex version, or at least versions that are compatible with
respect to the contents of yyscan_t; but that doesn't seem likely to
be a big problem in practice, considering how slowly flex changes.)

Aside from being more efficient than Horiguchi-san's original solution,
this avoids possible corner-case changes in semantics: the original code
was capable of popping the input buffer stack while still staying in
backslash-related parsing states.  I'm not sure that that equates to any
useful user-visible behaviors, but I'm not sure it doesn't either, so
I'm loath to assume that we only need to consider the topmost buffer when
parsing a backslash command.

I've attempted to update the MSVC build scripts for the added .l file,
but will rely on the buildfarm to see if I missed anything.

Kyotaro Horiguchi and Tom Lane

8 years agoConvert psql's flex lexer to be re-entrant, and make it compile standalone.
Tom Lane [Sat, 19 Mar 2016 01:21:52 +0000 (21:21 -0400)]
Convert psql's flex lexer to be re-entrant, and make it compile standalone.

Change psqlscan.l to specify '%option reentrant', adjust internal APIs
to match, and get rid of its internal static variables.  While this is
good cleanup in an abstract sense, the reason to do it right now is that
it seems the only practical way to support use of separate flex lexers
with common PsqlScanState infrastructure.  If we build two non-reentrant
lexers then we are going to have problems with dangling buffer pointers
in whichever lexer isn't active when we transition from one buffer to
another, as well as curious side-effects if we try to share any code
between the files.  (Horiguchi-san had a different solution to that in his
pending patch, but I find it ugly and probably broken for corner cases.)

Depending on which version of flex you're using, this may result in getting
a "warning: unused variable 'yyg'" warning from psqlscan, similar to the
one you'd have seen for a long time in backend/parser/scan.l.  I put a
local -Wno-error into CFLAGS for the file, for the convenience of those
who compile with -Werror.

Also, stop compiling psqlscan as part of mainloop.c, and make it a
standalone build target instead.  This is a lot cleaner than before, though
it doesn't really change much in practice as of this commit.  (I'm not sure
whether the MSVC build scripts will need some help with this part, but the
buildfarm will soon tell us.)

8 years agoMerge wal_level "archive" and "hot_standby" into new name "replica"
Peter Eisentraut [Tue, 1 Mar 2016 01:01:54 +0000 (20:01 -0500)]
Merge wal_level "archive" and "hot_standby" into new name "replica"

The distinction between "archive" and "hot_standby" existed only because
at the time "hot_standby" was added, there was some uncertainty about
stability.  This is now a long time ago.  We would like to move forward
with simplifying the replication configuration, but this distinction is
in the way, because a primary server cannot tell (without asking a
standby or predicting the future) which one of these would be the
appropriate level.

Pick a new name for the combined setting to make it clearer that it
covers all (non-logical) backup and replication uses.  The old values
are still accepted but are converted internally.

Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
Reviewed-by: David Steele <david@pgmasters.net>
8 years agoDecouple psqlscan.l from surrounding program.
Tom Lane [Fri, 18 Mar 2016 19:05:49 +0000 (15:05 -0400)]
Decouple psqlscan.l from surrounding program.

Remove assorted external references from psqlscan.l in preparation for
making it usable by other frontend programs.  This mostly involves
getting rid of direct calls to psql_error() and GetVariable() in favor
of introducing a callback-functions struct to encapsulate variable
fetching and error printing.  In addition, pass the current encoding
and standard-strings status as additional parameters to psql_scan_setup
instead of looking directly at "pset" or calling additional functions.

I did not bother to change some references to psql_error that are in
functions that will soon migrate to a psql-specific backslash-command
lexer.  Other than that, this version of psqlscan.l is capable of
compiling standalone.  It still depends on assorted src/common functions
as well as some encoding-related libpq functions, but we expect that
all programs using it will be happy with those dependencies.

Kyotaro Horiguchi, somewhat editorialized on by me

8 years agoUse INT64_FORMAT instead of %ld for int64.
Robert Haas [Fri, 18 Mar 2016 18:53:06 +0000 (14:53 -0400)]
Use INT64_FORMAT instead of %ld for int64.

Commit 0011c0091e886b874e485a46ff2c94222ffbf550 introduced this
mistake.

Patch by me.  Reported by Andres Freund, who also reviewed the
patch.

8 years agoOnly clear latch self-pipe/event if there is a pending notification.
Andres Freund [Fri, 18 Mar 2016 18:43:59 +0000 (11:43 -0700)]
Only clear latch self-pipe/event if there is a pending notification.

This avoids a good number of, individually quite fast, system calls in
scenarios with many quick queries. Besides the aesthetic benefit of
seing fewer superflous system calls with strace, it also improves
performance by ~2% measured by pgbench -M prepared -c 96 -j 8 -S (scale
100).

Without having benchmarked it, this patch also adjust the windows code,
as that makes it easier to unify the unix/windows codepaths in a later
patch. There's little reason to diverge in behaviour between the
platforms.

Discussion: CA+TgmoYc1Zm+Szoc_Qbzi92z2c1vRHZmjhfPn5uC=w8bXv6Avg@mail.gmail.com
Reviewed-By: Robert Haas
8 years agoMake it easier to choose the used waiting primitive in unix_latch.c.
Andres Freund [Fri, 18 Mar 2016 18:43:59 +0000 (11:43 -0700)]
Make it easier to choose the used waiting primitive in unix_latch.c.

This allows for easier testing of the different primitives; in
preparation for adding a new primitive.

Discussion: 20160114143931.GG10941@awork2.anarazel.de
Reviewed-By: Robert Haas
8 years agoError out if waiting on socket readiness without a specified socket.
Andres Freund [Fri, 18 Mar 2016 18:43:59 +0000 (11:43 -0700)]
Error out if waiting on socket readiness without a specified socket.

Previously we just ignored such an attempt, but that seems to serve no
purpose but making things harder to debug.

Discussion: 20160114143931.GG10941@awork2.anarazel.de
    20151230173734.hx7jj2fnwyljfqek@alap3.anarazel.de
Reviewed-By: Robert Haas
8 years agoRemove unused, and dangerous, TestLatch() macro.
Andres Freund [Fri, 18 Mar 2016 18:43:59 +0000 (11:43 -0700)]
Remove unused, and dangerous, TestLatch() macro.

The macro has not seen any in-tree use since latches had been introduced
in 2746e5f, in 2010.

8 years agoDirectly modify foreign tables.
Robert Haas [Fri, 18 Mar 2016 17:48:58 +0000 (13:48 -0400)]
Directly modify foreign tables.

postgres_fdw can now sent an UPDATE or DELETE statement directly to
the foreign server in simple cases, rather than sending a SELECT FOR
UPDATE statement and then updating or deleting rows one-by-one.

Etsuro Fujita, reviewed by Rushabh Lathia, Shigeru Hanada, Kyotaro
Horiguchi, Albe Laurenz, Thom Brown, and me.

8 years agoClean up some misplaced #includes.
Tom Lane [Fri, 18 Mar 2016 17:43:13 +0000 (13:43 -0400)]
Clean up some misplaced #includes.

Random .h files have no business including postgres-fe.h (or postgres.h).
If that wasn't the first #include done by the calling .c file, it's the
.c file that's broken.  Noted while prepping Kyotaro Horiguchi's psql
lexer refactoring patch.

8 years agoFix a typo
Teodor Sigaev [Fri, 18 Mar 2016 15:49:24 +0000 (18:49 +0300)]
Fix a typo

Erik Rijkers

8 years agoIntroduce parse_ident()
Teodor Sigaev [Fri, 18 Mar 2016 15:16:14 +0000 (18:16 +0300)]
Introduce parse_ident()

SQL-layer function to split qualified identifier into array parts.

Author: Pavel Stehule with minor editorization by me and Jim Nasby

8 years agoPush scan/join target list beneath Gather when possible.
Robert Haas [Fri, 18 Mar 2016 13:46:40 +0000 (09:46 -0400)]
Push scan/join target list beneath Gather when possible.

This means that, for example, "SELECT expensive_func(a) FROM bigtab
WHERE something" can compute expensive_func(a) in the workers rather
than the leader if it happens to be parallel-safe, which figures to be
a big win in some practical cases.

Currently, we can only do this if the entire target list is
parallel-safe.  If we worked harder, we might be able to evaluate
parallel-safe targets in the worker and any parallel-restricted
targets in the leader, but that would be more complicated, and there
aren't that many parallel-restricted functions that people are likely
to use in queries anyway.  I think.  So just do the simple thing for
the moment.

Robert Haas, Amit Kapila, and Tom Lane

8 years agoVarious minor corrections of and improvements to comments.
Robert Haas [Fri, 18 Mar 2016 13:38:59 +0000 (09:38 -0400)]
Various minor corrections of and improvements to comments.

Aleksander Alekseev

8 years agopg_trgm's set_limit() now uses SetConfigOption()
Teodor Sigaev [Fri, 18 Mar 2016 09:26:27 +0000 (12:26 +0300)]
pg_trgm's set_limit() now uses SetConfigOption()

Deprecated set_limit() is modified to use SetConfigOption() to set
similarity_threshold which is actually an instance of
pg_trgm.similarity_threshold GUC variable. Previous coding directly sets
similarity_threshold what could cause an inconsistency between states of
actual variable and GUC representation.

Per gripe from Tom Lane

8 years agodocs: Fix typo'd brin_summarize_new_values
Alvaro Herrera [Thu, 17 Mar 2016 23:17:04 +0000 (20:17 -0300)]
docs: Fix typo'd brin_summarize_new_values

I wrote "brin_summarize_new_pages" instead, in docs as well as in the
commit message of commit ac443d1034d9.

Bug: #14030
Reported-By: Chris Pacejo
8 years agoRemove useless double calls of make_parsestate().
Tom Lane [Thu, 17 Mar 2016 20:46:23 +0000 (16:46 -0400)]
Remove useless double calls of make_parsestate().

Aleksander Alekseev

8 years agoUpdate tuplesort.c comments for memory mangement improvements.
Robert Haas [Thu, 17 Mar 2016 20:11:14 +0000 (16:11 -0400)]
Update tuplesort.c comments for memory mangement improvements.

I'm committing these changes separately so that it's clear what is
Peter's original work versus what I changed.  This is a followup to
commit 0011c0091e886b874e485a46ff2c94222ffbf550, and these changes
are all by me.

8 years agoImprove memory management for external sorts.
Robert Haas [Thu, 17 Mar 2016 20:05:05 +0000 (16:05 -0400)]
Improve memory management for external sorts.

Introduce a new memory context which stores tuple data, and reset it
at the end of each merge pass; this helps avoid memory fragmentation
and, consequently, overallocation.  Also, for the final merge patch,
eliminate memory context chunk header overhead entirely by allocating
all of the memory used for buffering tuples during the merge in a
single chunk.  Since this modestly increases the number of tuples we
can store, grow the memtuples array a bit so that we're less likely to
run short of slots there.

Peter Geoghegan.  Review and testing of patches in this series by
Jeff Janes, Greg Stark, Mithun Cy, and me.

8 years agoFix assorted breakage in to_char()'s OF format option.
Tom Lane [Thu, 17 Mar 2016 19:50:33 +0000 (15:50 -0400)]
Fix assorted breakage in to_char()'s OF format option.

In HEAD, fix incorrect field width for hours part of OF when tm_gmtoff is
negative.  This was introduced by commit 2d87eedc1d4468d3 as a result of
falsely applying a pattern that's correct when + signs are omitted, which
is not the case for OF.

In 9.4, fix missing abs() call that allowed a sign to be attached to the
minutes part of OF.  This was fixed in 9.5 by 9b43d73b3f9bef27, but for
inscrutable reasons not back-patched.

In all three versions, ensure that the sign of tm_gmtoff is correctly
reported even when the GMT offset is less than 1 hour.

Add regression tests, which evidently we desperately need here.

Thomas Munro and Tom Lane, per report from David Fetter

8 years agoImprove support of Hunspell
Teodor Sigaev [Thu, 17 Mar 2016 14:23:38 +0000 (17:23 +0300)]
Improve support of Hunspell

- allow to use non-ascii characters as affix flag. Non-numeric affix flags now
  are stored as string instead of numeric value of character.
- allow to use 0 as affix flag in numeric encoded affixes

That adds support for arabian, hungarian, turkish and
brazilian portuguese languages.

Author: Artur Zakirov with heavy editorization by me

8 years agoFix typos.
Robert Haas [Thu, 17 Mar 2016 11:26:20 +0000 (07:26 -0400)]
Fix typos.

Jim Nasby

8 years agoAdd syslog_split_messages parameter
Peter Eisentraut [Wed, 16 Mar 2016 02:48:53 +0000 (22:48 -0400)]
Add syslog_split_messages parameter

Reviewed-by: Andreas Karlsson <andreas@proxel.se>
8 years agoAdd syslog_sequence_numbers parameter
Peter Eisentraut [Sat, 27 Feb 2016 03:34:30 +0000 (22:34 -0500)]
Add syslog_sequence_numbers parameter

Reviewed-by: Andreas Karlsson <andreas@proxel.se>
8 years agoFix "pg_bench -C -M prepared".
Tom Lane [Thu, 17 Mar 2016 03:18:07 +0000 (23:18 -0400)]
Fix "pg_bench -C -M prepared".

This didn't work because when we dropped and re-established a database
connection, we did not bother to reset session-specific state such as
the statements-are-prepared flags.

The st->prepared[] array certainly needs to be flushed, and I cleared a
couple of other fields as well that couldn't possibly retain meaningful
state for a new connection.

In passing, fix some bogus comments and strange field order choices.

Per report from Robins Tharakan.

8 years agoFix j2day() to behave sanely for negative Julian dates.
Tom Lane [Thu, 17 Mar 2016 00:57:45 +0000 (20:57 -0400)]
Fix j2day() to behave sanely for negative Julian dates.

Somebody had apparently once figured that casting to unsigned int would
produce the right output for negative inputs, but that would only be
true if 2^32 were a multiple of 7, which of course it ain't.  We need
to use a signed division and then correct the sign of the remainder.

AFAICT, the only case where this would arise currently is when doing
ISO-week calculations for dates in 4714BC, where we'd compute a
negative Julian date representing 4714-01-04BC and then do some
arithmetic with it.  Since we don't even really document support for
such dates, this is not of much consequence.  But we may as well
get it right.

Per report from Vitaly Burovoy.

8 years agoBe more careful about out-of-range dates and timestamps.
Tom Lane [Wed, 16 Mar 2016 23:09:04 +0000 (19:09 -0400)]
Be more careful about out-of-range dates and timestamps.

Tighten the semantics of boundary-case timestamptz so that we allow
timestamps >= '4714-11-24 00:00+00 BC' and < 'ENDYEAR-01-01 00:00+00 AD'
exactly, no more and no less, but it is allowed to enter timestamps
within that range using non-GMT timezone offsets (which could make the
nominal date 4714-11-23 BC or ENDYEAR-01-01 AD).  This eliminates
dump/reload failure conditions for timestamps near the endpoints.
To do this, separate checking of the inputs for date2j() from the
final range check, and allow the Julian date code to handle a range
slightly wider than the nominal range of the datatypes.

Also add a bunch of checks to detect out-of-range dates and timestamps
that formerly could be returned by operations such as date-plus-integer.
All C-level functions that return date, timestamp, or timestamptz should
now be proof against returning a value that doesn't pass IS_VALID_DATE()
or IS_VALID_TIMESTAMP().

Vitaly Burovoy, reviewed by Anastasia Lubennikova, and substantially
whacked around by me

8 years agoAnother comment update.
Robert Haas [Wed, 16 Mar 2016 18:28:25 +0000 (14:28 -0400)]
Another comment update.

I thought this was in my last commit, but I goofed.

8 years agoFix problems in commit c16dc1aca5e01e6acaadfcf38f5fc964a381dc62.
Robert Haas [Wed, 16 Mar 2016 17:54:04 +0000 (13:54 -0400)]
Fix problems in commit c16dc1aca5e01e6acaadfcf38f5fc964a381dc62.

Vinayak Pokale provided a patch for a copy-and-paste error in a
comment.  I noticed that I'd use the word "automatically" nearby where
I meant to talk about things being "atomic".  Rahila Syed spotted a
misplaced counter update.  Fix all that stuff.

8 years agoAdd files forgotten in f576b17cd6ba653bdace1f0da9a3b57f4984e460
Teodor Sigaev [Wed, 16 Mar 2016 16:23:41 +0000 (19:23 +0300)]
Add files forgotten in f576b17cd6ba653bdace1f0da9a3b57f4984e460

8 years agoAdd word_similarity to pg_trgm contrib module.
Teodor Sigaev [Wed, 16 Mar 2016 15:59:21 +0000 (18:59 +0300)]
Add word_similarity to pg_trgm contrib module.

Patch introduces a concept of similarity over string and just a word from
another string.

Version of extension is not changed because 1.2 was already introduced in 9.6
release cycle, so, there wasn't a public version.

Author: Alexander Korotkov, Artur Zakirov

8 years agoFix typo.
Robert Haas [Wed, 16 Mar 2016 15:38:30 +0000 (11:38 -0400)]
Fix typo.

Amit Langote

8 years agoAdd idle_in_transaction_session_timeout.
Robert Haas [Wed, 16 Mar 2016 15:30:45 +0000 (11:30 -0400)]
Add idle_in_transaction_session_timeout.

Vik Fearing, reviewed by Stéphane Schildknecht and me, and revised
slightly by me.

8 years agoGUC variable pg_trgm.similarity_threshold insead of set_limit()
Teodor Sigaev [Wed, 16 Mar 2016 14:44:58 +0000 (17:44 +0300)]
GUC variable pg_trgm.similarity_threshold insead of set_limit()

Use GUC variable pg_trgm.similarity_threshold insead of
set_limit()/show_limit() which was introduced when defining GUC varuables
by modules was absent.

Author: Artur Zakirov

8 years agoUCS_to_EUC_JIS_2004.pl: Turn off "test" mode by default
Peter Eisentraut [Tue, 1 Mar 2016 01:08:16 +0000 (20:08 -0500)]
UCS_to_EUC_JIS_2004.pl: Turn off "test" mode by default

It produces debugging output files that are of no further use, so we
don't need that by default.

8 years agoMake spacing and punctuation consistent
Peter Eisentraut [Tue, 1 Mar 2016 01:08:16 +0000 (20:08 -0500)]
Make spacing and punctuation consistent

8 years agofix typo in comment
Teodor Sigaev [Wed, 16 Mar 2016 14:18:14 +0000 (17:18 +0300)]
fix typo in comment

8 years agoImprove script generating unaccent rules
Teodor Sigaev [Wed, 16 Mar 2016 13:47:03 +0000 (16:47 +0300)]
Improve script generating unaccent rules

Script now use the standard Unicode transliterator Latin-ASCII.

Author: Leonard Benedetti

8 years agoFix typos.
Robert Haas [Tue, 15 Mar 2016 22:06:11 +0000 (18:06 -0400)]
Fix typos.

Oskari Saarenmaa

8 years agoAvoid incorrectly indicating exclusion constraint wait
Stephen Frost [Tue, 15 Mar 2016 22:04:39 +0000 (18:04 -0400)]
Avoid incorrectly indicating exclusion constraint wait

INSERT ... ON CONFLICT's precheck may have to wait on the outcome of
another insertion, which may or may not itself be a speculative
insertion.  This wait is not necessarily associated with an exclusion
constraint, but was always reported that way in log messages if the wait
happened to involve a tuple that had no speculative token.

Initially discovered through use of ON CONFLICT DO NOTHING, where
spurious references to exclusion constraints in log messages were more
likely.

Patch by Peter Geoghegan.
Reviewed by Julien Rouhaud.

Back-patch to 9.5 where INSERT ... ON CONFLICT was added.

8 years agoFix typos in comments
Alvaro Herrera [Tue, 15 Mar 2016 20:57:17 +0000 (17:57 -0300)]
Fix typos in comments

8 years agopostgres_fdw: make_tuple_from_result_row should set cur_attno for ctid.
Robert Haas [Tue, 15 Mar 2016 20:51:56 +0000 (16:51 -0400)]
postgres_fdw: make_tuple_from_result_row should set cur_attno for ctid.

There's no reason for this function to do this for every other
attribute number and omit it for CTID, especially since
conversion_error_callback has code to handle that case.  This seems
to be an oversight in commit e690b9515072fd7767fdeca5c54166f6a77733bc.

Etsuro Fujita

8 years agoFix typos.
Robert Haas [Tue, 15 Mar 2016 20:28:17 +0000 (16:28 -0400)]
Fix typos.

Thomas Reiss

8 years agoAdd simple VACUUM progress reporting.
Robert Haas [Tue, 15 Mar 2016 17:31:18 +0000 (13:31 -0400)]
Add simple VACUUM progress reporting.

There's a lot more that could be done here yet - in particular, this
reports only very coarse-grained information about the index vacuuming
phase - but even as it stands, the new pg_stat_progress_vacuum can
tell you quite a bit about what a long-running vacuum is actually
doing.

Amit Langote and Robert Haas, based on earlier work by Vinayak Pokale
and Rahila Syed.

8 years agoCope if platform declares mbstowcs_l(), but not locale_t, in <xlocale.h>.
Tom Lane [Tue, 15 Mar 2016 17:19:57 +0000 (13:19 -0400)]
Cope if platform declares mbstowcs_l(), but not locale_t, in <xlocale.h>.

Previously, we included <xlocale.h> only if necessary to get the definition
of type locale_t.  According to notes in PGAC_TYPE_LOCALE_T, this is
important because on some versions of glibc that file supplies an
incompatible declaration of locale_t.  (This info may be obsolete, because
on my RHEL6 box that seems to be the *only* definition of locale_t; but
there may still be glibc's in the wild for which it's a live concern.)

It turns out though that on FreeBSD and maybe other BSDen, you can get
locale_t from stdlib.h or locale.h but mbstowcs_l() and friends only from
<xlocale.h>.  This was leaving us compiling calls to mbstowcs_l() and
friends with no visible prototype, which causes a warning and could
possibly cause actual trouble, since it's not declared to return int.

Hence, adjust the configure checks so that we'll include <xlocale.h>
either if it's necessary to get type locale_t or if it's necessary to
get a declaration of mbstowcs_l().

Report and patch by Aleksander Alekseev, somewhat whacked around by me.
Back-patch to all supported branches, since we have been using
mbstowcs_l() since 9.1.

8 years agoAdd a GetForeignUpperPaths callback function for FDWs.
Tom Lane [Tue, 15 Mar 2016 00:04:44 +0000 (20:04 -0400)]
Add a GetForeignUpperPaths callback function for FDWs.

This is basically like the just-added create_upper_paths_hook, but
control is funneled only to the FDW responsible for all the baserels
of the current query; so providing such a callback is much less likely
to add useless overhead than using the hook function is.

The documentation is a bit sketchy.  We'll likely want to improve it,
and/or adjust the call conventions, when we get some experience with
actually using this callback.  Hopefully somebody will find time to
experiment with it before 9.6 feature freeze.

8 years agoAdd missing include for self-containment
Peter Eisentraut [Mon, 14 Mar 2016 23:56:33 +0000 (19:56 -0400)]
Add missing include for self-containment

8 years agoFix EXPLAIN ANALYZE SELECT INTO not to choose a parallel plan.
Robert Haas [Mon, 14 Mar 2016 23:48:46 +0000 (19:48 -0400)]
Fix EXPLAIN ANALYZE SELECT INTO not to choose a parallel plan.

We don't support any parallel write operations at present, so choosing
a parallel plan causes us to error out.  Also, add a new regression
test that uses EXPLAIN ANALYZE SELECT INTO; if we'd had this previously,
force_parallel_mode testing would have caught this issue.

Mithun Cy and Robert Haas

8 years agoProvide a planner hook at a suitable place for creating upper-rel Paths.
Tom Lane [Mon, 14 Mar 2016 23:23:29 +0000 (19:23 -0400)]
Provide a planner hook at a suitable place for creating upper-rel Paths.

In the initial revision of the upper-planner pathification work, the only
available way for an FDW or custom-scan provider to inject Paths
representing post-scan-join processing was to insert them during scan-level
GetForeignPaths or similar processing.  While that's not impossible, it'd
require quite a lot of duplicative processing to look forward and see if
the extension would be capable of implementing the whole query.  To improve
matters for custom-scan providers, provide a hook function at the point
where the core code is about to start filling in upperrel Paths.  At this
point Paths are available for the whole scan/join tree, which should reduce
the amount of redundant effort considerably.

(An alternative design that was suggested was to provide a separate hook
for each post-scan-join processing step, but that seems messy and not
clearly more useful.)

Following our time-honored tradition, there's no documentation for this
hook outside the source code.

As-is, this hook is only meant for custom scan providers, which we can't
assume very much about.  A followon patch will implement an FDW callback
to let FDWs do the same thing in a somewhat more structured fashion.

8 years agoAllow callers of create_foreignscan_path to specify nondefault PathTarget.
Tom Lane [Mon, 14 Mar 2016 21:31:28 +0000 (17:31 -0400)]
Allow callers of create_foreignscan_path to specify nondefault PathTarget.

Although the default choice of rel->reltarget should typically be
sufficient for scan or join paths, it's not at all sufficient for the
purposes PathTargets were invented for; in particular not for
upper-relation Paths.  So break API compatibility by adding a PathTarget
argument to create_foreignscan_path().  To ease updating of existing
code, accept a NULL value of the argument as selecting rel->reltarget.

8 years agoRethink representation of PathTargets.
Tom Lane [Mon, 14 Mar 2016 20:59:59 +0000 (16:59 -0400)]
Rethink representation of PathTargets.

In commit 19a541143a09c067 I did not make PathTarget a subtype of Node,
and embedded a RelOptInfo's reltarget directly into it rather than having
a separately-allocated Node.  In hindsight that was misguided
micro-optimization, enabled by the fact that at that point we didn't have
any Paths with custom PathTargets.  Now that PathTarget processing has
been fleshed out some more, it's easier to see that it's better to have
PathTarget as an indepedent Node type, even if it does cost us one more
palloc to create a RelOptInfo.  So change it while we still can.

This commit just changes the representation, without doing anything more
interesting than that.

8 years agoUpdate PL/Perl's comment about hv_store().
Tom Lane [Mon, 14 Mar 2016 18:45:45 +0000 (14:45 -0400)]
Update PL/Perl's comment about hv_store().

Negative klen is documented since Perl 5.16, and 5.6 is no longer
supported so no need to comment about it.

Dagfinn Ilmari Mannsåker

8 years agoImprove conversions from uint64 to Perl types.
Tom Lane [Mon, 14 Mar 2016 18:38:36 +0000 (14:38 -0400)]
Improve conversions from uint64 to Perl types.

Perl's integers are pointer-sized, so can hold more than INT_MAX on LP64
platforms, and come in both signed (IV) and unsigned (UV).  Floating
point values (NV) may also be larger than double.

Since Perl 5.19.4 array indices are SSize_t instead of I32, so allow up
to SSize_t_max on those versions.  The limit is not imposed just by
av_extend's argument type, but all the array handling code, so remove
the speculative comment.

Dagfinn Ilmari Mannsåker

8 years agoUpdate more comments for 96198d94cb7adc664bda341842dc8db671d8be72.
Robert Haas [Mon, 14 Mar 2016 18:27:11 +0000 (14:27 -0400)]
Update more comments for 96198d94cb7adc664bda341842dc8db671d8be72.

Etsuro Fujita, reviewed (though not completely endorsed) by Ashutosh
Bapat, and slightly expanded by me.

8 years agoUse repalloc_huge() to enlarge a SPITupleTable's tuple pointer array.
Tom Lane [Mon, 14 Mar 2016 18:22:16 +0000 (14:22 -0400)]
Use repalloc_huge() to enlarge a SPITupleTable's tuple pointer array.

Commit 23a27b039d94ba35 widened the rows-stored counters to uint64, but
that's academic unless we allow the tuple pointer array to exceed 1GB.

(It might be a good idea to provide some other limit on how much storage
a SPITupleTable can eat.  On the other hand, there are plenty of other
ways to drive a backend into swap hell.)

Dagfinn Ilmari Mannsåker

8 years agoImprove check for overly-long extensible node name.
Robert Haas [Mon, 14 Mar 2016 17:48:35 +0000 (13:48 -0400)]
Improve check for overly-long extensible node name.

The old code is bad for two reasons.  First, it has an off-by-one
error.  Second, it won't help if you aren't running with assertions
enabled.  Per discussion, we want a check here in that case too.

Author: KaiGai Kohei, adjusted by me.
Reviewed-by: Petr Jelinek
Discussion: 56E0D547.1030101@2ndquadrant.com

8 years agopg_stat_get_progress_info() should be marked STRICT.
Tom Lane [Mon, 14 Mar 2016 16:51:55 +0000 (12:51 -0400)]
pg_stat_get_progress_info() should be marked STRICT.

I didn't bother with a catversion bump.

Report and patch by Thomas Munro

8 years agoTeach the configure script to validate its --with-pgport argument.
Tom Lane [Mon, 14 Mar 2016 14:41:29 +0000 (10:41 -0400)]
Teach the configure script to validate its --with-pgport argument.

Previously, configure would take any string, including an empty string,
leading to obscure compile failures in guc.c.  It seems worth expending
a few lines of code to ensure that the argument is a decimal number
between 1 and 65535.

Report and patch by Jim Nasby; reviews by Alex Shulgin, Peter Eisentraut,
Ivan Kartyshov

8 years agoMop-up for setting minimum Tcl version to 8.4.
Tom Lane [Sun, 13 Mar 2016 21:14:49 +0000 (17:14 -0400)]
Mop-up for setting minimum Tcl version to 8.4.

Commit e2609323e set the minimum Tcl version we support to 8.4, but
I forgot to adjust the documentation to say the same.  Some nosing
around for other consequences found that the configure script could
be simplified slightly as well.

8 years agoFix memory leak in repeated GIN index searches.
Tom Lane [Sun, 13 Mar 2016 20:44:10 +0000 (16:44 -0400)]
Fix memory leak in repeated GIN index searches.

Commit d88976cfa1302e8d removed this code from ginFreeScanKeys():
- if (entry->list)
- pfree(entry->list);
evidently in the belief that that ItemPointer array is allocated in the
keyCtx and so would be reclaimed by the following MemoryContextReset.
Unfortunately, it isn't and it won't.  It'd likely be a good idea for
that to become so, but as a simple and back-patchable fix in the
meantime, restore this code to ginFreeScanKeys().

Also, add a similar pfree to where startScanEntry() is about to zero out
entry->list.  I am not sure if there are any code paths where this
change prevents a leak today, but it seems like cheap future-proofing.

In passing, make the initial allocation of so->entries[] use palloc
not palloc0.  The code doesn't depend on unused entries being zero;
if it did, the array-enlargement code in ginFillScanEntry() would be
wrong.  So using palloc0 initially can only serve to confuse readers
about what the invariant is.

Per report from Felipe de Jesús Molina Bravo, via Jaime Casanova in
<CAJGNTeMR1ndMU2Thpr8GPDUfiHTV7idELJRFusA5UXUGY1y-eA@mail.gmail.com>

8 years agoFix whitespace and remove obsolete gitattributes entry
Peter Eisentraut [Sun, 13 Mar 2016 20:03:13 +0000 (16:03 -0400)]
Fix whitespace and remove obsolete gitattributes entry

8 years agoRename auto_explain.sample_ratio to sample_rate
Magnus Hagander [Sun, 13 Mar 2016 12:18:03 +0000 (13:18 +0100)]
Rename auto_explain.sample_ratio to sample_rate

Per suggestion from Tomas Vondra

Author: Julien Rouhaud

8 years agoFix order of MemSet arguments
Magnus Hagander [Sun, 13 Mar 2016 12:11:06 +0000 (13:11 +0100)]
Fix order of MemSet arguments

Noted by Tomas Vondra

8 years agoReport memory context stats upon out-of-memory in repalloc[_huge].
Tom Lane [Sun, 13 Mar 2016 05:21:07 +0000 (00:21 -0500)]
Report memory context stats upon out-of-memory in repalloc[_huge].

This longstanding functionality evidently got lost in commit
3d6d1b585524aab6.  Noted while studying an OOM report from Jaime
Casanova.  Backpatch to 9.5 where the bug was introduced.

8 years agoFix Windows portability issue in 23a27b039d94ba35.
Tom Lane [Sun, 13 Mar 2016 03:34:47 +0000 (22:34 -0500)]
Fix Windows portability issue in 23a27b039d94ba35.

_strtoui64() is available in MSVC builds, but apparently not with
other Windows toolchains.  Thanks to Petr Jelinek for the diagnosis.

8 years agoGet rid of scribbling on a const variable in psql's print.c.
Tom Lane [Sat, 12 Mar 2016 23:16:24 +0000 (18:16 -0500)]
Get rid of scribbling on a const variable in psql's print.c.

Commit a2dabf0e1dda93c8 had the bright idea that it could modify a "const"
global variable if it merely casted away const from a pointer.  This does
not work on platforms where the compiler puts "const" variables into
read-only storage.  Depressingly, we evidently have no such platforms in
our buildfarm ... an oversight I have now remedied.  (The one platform
that is known to catch this is recent OS X with -fno-common.)

Per report from Chris Ruprecht.  Back-patch to 9.5 where the bogus
code was introduced.