]> granicus.if.org Git - postgresql/log
postgresql
10 years agoCreate function prototype as part of PG_FUNCTION_INFO_V1 macro
Peter Eisentraut [Fri, 18 Apr 2014 04:03:19 +0000 (00:03 -0400)]
Create function prototype as part of PG_FUNCTION_INFO_V1 macro

Because of gcc -Wmissing-prototypes, all functions in dynamically
loadable modules must have a separate prototype declaration.  This is
meant to detect global functions that are not declared in header files,
but in cases where the function is called via dfmgr, this is redundant.
Besides filling up space with boilerplate, this is a frequent source of
compiler warnings in extension modules.

We can fix that by creating the function prototype as part of the
PG_FUNCTION_INFO_V1 macro, which such modules have to use anyway.  That
makes the code of modules cleaner, because there is one less place where
the entry points have to be listed, and creates an additional check that
functions have the right prototype.

Remove now redundant prototypes from contrib and other modules.

10 years agoFix unused-variable warning on Windows.
Tom Lane [Thu, 17 Apr 2014 20:12:24 +0000 (16:12 -0400)]
Fix unused-variable warning on Windows.

Introduced in 585bca39: msgid is not used in the Windows code path.

Also adjust comments a tad (mostly to keep pgindent from messing it up).

David Rowley

10 years agopgcrypto: fix memset() calls that might be optimized away
Bruce Momjian [Thu, 17 Apr 2014 16:37:53 +0000 (12:37 -0400)]
pgcrypto:  fix memset() calls that might be optimized away

Specifically, on-stack memset() might be removed, so:

* Replace memset() with px_memset()
* Add px_memset to copy_crlf()
* Add px_memset to pgp-s2k.c

Patch by Marko Kreen

Report by PVS-Studio

Backpatch through 8.4.

10 years agoreport stat() error in trigger file check
Bruce Momjian [Thu, 17 Apr 2014 15:55:57 +0000 (11:55 -0400)]
report stat() error in trigger file check

Permissions might prevent the existence of the trigger file from being
checked.

Per report from Andres Freund

10 years agopg_upgrade: throw an error for non-existent tablespace directories
Bruce Momjian [Thu, 17 Apr 2014 15:42:21 +0000 (11:42 -0400)]
pg_upgrade:  throw an error for non-existent tablespace directories

Non-existent tablespace directory references can occur if user
tablespaces are created inside data directories and the data directory
is renamed in preparation for running pg_upgrade, and the symbolic links
are not updated.

Backpatch to 9.3.

10 years agodocs: adjustments for streaming standbys that disconnect frequently
Bruce Momjian [Thu, 17 Apr 2014 14:52:32 +0000 (10:52 -0400)]
docs: adjustments for streaming standbys that disconnect frequently

Document problems when disconnection causes loss of hot_standby_feedback
and suggest adjusting max_standby_archive_delay and
max_standby_streaming_delay.

Initial patch by Marko Tiikkaja, adjustments by me

10 years agoSet the all-visible flag on heap page before writing WAL record, not after.
Heikki Linnakangas [Thu, 17 Apr 2014 14:47:50 +0000 (17:47 +0300)]
Set the all-visible flag on heap page before writing WAL record, not after.

If we set the all-visible flag after writing WAL record, and XLogInsert
takes a full-page image of the page, the image would not include the flag.
We will then proceed to set the VM bit, which would then be set without the
corresponding all-visible flag on the heap page.

Found by comparing page images on master and standby, after writing/replaying
each WAL record. (There is still a discrepancy: the all-visible flag won't
be set after replaying the HEAP_CLEAN record, even though it is set in the
master. However, it will be set when replaying the HEAP2_VISIBLE record and
setting the VM bit, so the all-visible flag and VM bit are always consistent
on the standby, even though they are momentarily out-of-sync with master)

Backpatch to 9.3 where this code was introduced.

10 years agoRename EXPLAIN ANALYZE's "total runtime" output to "execution time".
Tom Lane [Thu, 17 Apr 2014 00:48:51 +0000 (20:48 -0400)]
Rename EXPLAIN ANALYZE's "total runtime" output to "execution time".

Now that EXPLAIN also outputs a "planning time" measurement, the use of
"total" here seems rather confusing: it sounds like it might include the
planning time which of course it doesn't.  Majority opinion was that
"execution time" is a better label, so we'll call it that.

This should be noted as a backwards incompatibility for tools that examine
EXPLAIN ANALYZE output.

In passing, I failed to resist the temptation to do a little editing on the
materialized-view example affected by this change.

10 years agodocs: properly document psql auto encoding mode
Bruce Momjian [Wed, 16 Apr 2014 23:53:42 +0000 (19:53 -0400)]
docs: properly document psql auto encoding mode

In psql, both stdin and stdout must be terminals to get a client
encoding of 'auto'.

Patch by Albe Laurenz

Backpatch to 9.3.

10 years agolibpq: use pgsocket for socket values, for portability
Bruce Momjian [Wed, 16 Apr 2014 23:46:51 +0000 (19:46 -0400)]
libpq:  use pgsocket for socket values, for portability

Previously, 'int' was used for socket values in libpq, but socket values
are unsigned on Windows.  This is a style correction.

Initial patch and previous PGINVALID_SOCKET initial patch by Joel
Jacobson, modified by me

Report from PVS-Studio

10 years agodoc: move min_recovery_apply_delay into the right section
Bruce Momjian [Wed, 16 Apr 2014 23:15:16 +0000 (19:15 -0400)]
doc:  move min_recovery_apply_delay into the right section

Patch by Fujii Masao

10 years agopsql: update --help output for unaligned mode params
Bruce Momjian [Wed, 16 Apr 2014 22:13:15 +0000 (18:13 -0400)]
psql:  update --help output for unaligned mode params

Previously it wasn't clear from --help that -F, -R, -z, -0 only
controlled psql unaligned output.

Initial patch from Jov <amutu@amutu.com>, adjustments by me

10 years agoFix object identities for text search objects
Alvaro Herrera [Wed, 16 Apr 2014 21:25:44 +0000 (18:25 -0300)]
Fix object identities for text search objects

We were neglecting to schema-qualify them.

Backpatch to 9.3, where object identities were introduced as a concept
by commit f8348ea32ec8.

10 years agoFix contrib/postgres_fdw's remote-estimate representation of array Params.
Tom Lane [Wed, 16 Apr 2014 21:21:57 +0000 (17:21 -0400)]
Fix contrib/postgres_fdw's remote-estimate representation of array Params.

We were emitting "(SELECT null::typename)", which is usually interpreted
as a scalar subselect, but not so much in the context "x = ANY(...)".
This led to remote-side parsing failures when remote_estimate is enabled.
A quick and ugly fix is to stick in an extra cast step,
"((SELECT null::typename)::typename)".  The cast will be thrown away as
redundant by parse analysis, but not before it's done its job of making
sure the grammar sees the ANY argument as an a_expr rather than a
select_with_parens.  Per an example from Hannu Krosing.

10 years agodocs: make max_wal_senders higher to handle disconnects
Bruce Momjian [Wed, 16 Apr 2014 19:06:17 +0000 (15:06 -0400)]
docs:  make max_wal_senders higher to handle disconnects

Document abrupt streaming client disconnection might leave slots in use,
so max_wal_senders should be slightly higher than needed to allow for
immediate reconnection.

Per mention by Magnus

10 years agoUpdate oidjoins regression test for 9.4.
Tom Lane [Wed, 16 Apr 2014 18:28:59 +0000 (14:28 -0400)]
Update oidjoins regression test for 9.4.

Now that we're pretty much feature-frozen, it's time to update the checks
on system catalog foreign-key references.

(It looks like we missed doing this altogether for 9.3.  Sigh.)

10 years agoAttempt to get plpython regression tests working again for MSVC builds.
Andrew Dunstan [Wed, 16 Apr 2014 17:35:46 +0000 (13:35 -0400)]
Attempt to get plpython regression tests working again for MSVC builds.

This has probably been broken for quite a long time. Buildfarm member
currawong's current results suggest that it's been broken since 9.1, so
backpatch this to that branch.

This only supports Python 2 - I will handle Python 3 separately, but
this is a fairly simple fix.

10 years agopg_upgrade: remove redundant include files
Bruce Momjian [Wed, 16 Apr 2014 17:27:00 +0000 (13:27 -0400)]
pg_upgrade:  remove redundant include files

The files were already included by pg_upgrade.h.

10 years agoUse AF_UNSPEC not PF_UNSPEC in getaddrinfo calls.
Tom Lane [Wed, 16 Apr 2014 17:20:54 +0000 (13:20 -0400)]
Use AF_UNSPEC not PF_UNSPEC in getaddrinfo calls.

According to the Single Unix Spec and assorted man pages, you're supposed
to use the constants named AF_xxx when setting ai_family for a getaddrinfo
call.  In a few places we were using PF_xxx instead.  Use of PF_xxx
appears to be an ancient BSD convention that was not adopted by later
standardization.  On BSD and most later Unixen, it doesn't matter much
because those constants have equivalent values anyway; but nonetheless
this code is not per spec.

In the same vein, replace PF_INET by AF_INET in one socket() call, which
wasn't even consistent with the other socket() call in the same function
let alone the remainder of our code.

Per investigation of a Cygwin trouble report from Marco Atzeri.  It's
probably a long shot that this will fix his issue, but it's wrong in
any case.

10 years agoFix timeout in LDAP lookup of libpq connection parameters
Magnus Hagander [Wed, 16 Apr 2014 15:18:02 +0000 (17:18 +0200)]
Fix timeout in LDAP lookup of libpq connection parameters

Bind attempts to an LDAP server should time out after two seconds,
allowing additional lines in the service control file to be parsed
(which provide a fall back to a secondary LDAP server or default options).
The existing code failed to enforce that timeout during TCP connect,
resulting in a hang far longer than two seconds if the LDAP server
does not respond.

Laurenz Albe

10 years agoAdd to_regprocedure() and to_regoperator().
Robert Haas [Wed, 16 Apr 2014 16:21:43 +0000 (12:21 -0400)]
Add to_regprocedure() and to_regoperator().

These are natural complements to the functions added by commit
0886fc6a5c75b294544263ea979b9cf6195407d9, but they weren't included
in the original patch for some reason.  Add them.

Patch by me, per a complaint by Tom Lane.  Review by Tatsuo
Ishii.

10 years agoTry to fix spurious DSM failures on Windows.
Robert Haas [Wed, 16 Apr 2014 16:04:44 +0000 (12:04 -0400)]
Try to fix spurious DSM failures on Windows.

Apparently, Windows can sometimes return an error code even when the
operation actually worked just fine.  Rearrange the order of checks
according to what appear to be the best practices in this area.

Amit Kapila

10 years agodoc: fix json_extract_path_text() typo by adding jsonb
Bruce Momjian [Wed, 16 Apr 2014 15:24:38 +0000 (11:24 -0400)]
doc: fix json_extract_path_text() typo by adding jsonb

Report from rudolf <stu3.1@eq.cz>

10 years agocheck socket creation errors against PGINVALID_SOCKET
Bruce Momjian [Wed, 16 Apr 2014 14:45:48 +0000 (10:45 -0400)]
check socket creation errors against PGINVALID_SOCKET

Previously, in some places, socket creation errors were checked for
negative values, which is not true for Windows because sockets are
unsigned.  This masked socket creation errors on Windows.

Backpatch through 9.0.  8.4 doesn't have the infrastructure to fix this.

10 years agoUse correctly-sized buffer when zero-filling a WAL file.
Heikki Linnakangas [Wed, 16 Apr 2014 07:21:09 +0000 (10:21 +0300)]
Use correctly-sized buffer when zero-filling a WAL file.

I mixed up BLCKSZ and XLOG_BLCKSZ when I changed the way the buffer is
allocated a couple of weeks ago. With the default settings, they are both
8k, but they can be changed at compile-time.

10 years agocontrib/test_decoding: fix regression test for psql oid display changes
Bruce Momjian [Tue, 15 Apr 2014 18:45:10 +0000 (14:45 -0400)]
contrib/test_decoding:  fix regression test for psql oid display changes

Missed in previous commit

10 years agopsql: conditionally display oids and replication identity
Bruce Momjian [Tue, 15 Apr 2014 17:28:54 +0000 (13:28 -0400)]
psql: conditionally display oids and replication identity

In psql \d+, display oids only when they exist, and display replication
identity only when it is non-default.  Also document the defaults for
replication identity for system and non-system tables.  Update
regression output.

10 years agovacuumdb: Add option --analyze-in-stages
Peter Eisentraut [Tue, 15 Apr 2014 03:15:05 +0000 (23:15 -0400)]
vacuumdb: Add option --analyze-in-stages

Add vacuumdb option --analyze-in-stages which runs ANALYZE three times
with different configuration settings, adopting the logic from the
analyze_new_cluster.sh script that pg_upgrade generates.  That way,
users of pg_dump/pg_restore can also use that functionality.

Change pg_upgrade to create the script so that it calls vacuumdb instead
of implementing the logic itself.

10 years agoHave lcov call the right gcov
Peter Eisentraut [Tue, 15 Apr 2014 01:52:03 +0000 (21:52 -0400)]
Have lcov call the right gcov

By default, lcov will call whatever gcov it can find in the path.  But
if the user has specified a different gcov to configure, this could be
incompatible.  So tell lcov explicitly with an option which gcov program
to call.

10 years agoAdd @configure_input@ marker to Makefile.global.in
Peter Eisentraut [Tue, 15 Apr 2014 01:49:57 +0000 (21:49 -0400)]
Add @configure_input@ marker to Makefile.global.in

That way, when looking at Makefile.global, we don't get confused by the
comment that claims that this is Makefile.global.in.

10 years agoAdd TAP tests for client programs
Peter Eisentraut [Tue, 15 Apr 2014 01:33:46 +0000 (21:33 -0400)]
Add TAP tests for client programs

Reviewed-by: Pavel Stěhule <pavel.stehule@gmail.com>
Reviewed-by: Erik Rijkers <er@xs4all.nl>
10 years agoFix whitespace
Peter Eisentraut [Mon, 14 Apr 2014 19:36:54 +0000 (15:36 -0400)]
Fix whitespace

10 years agoSet pd_lower on internal GIN posting tree pages.
Heikki Linnakangas [Mon, 14 Apr 2014 18:03:01 +0000 (21:03 +0300)]
Set pd_lower on internal GIN posting tree pages.

This allows squeezing out the unused space in full-page writes. And more
importantly, it can be a useful debugging aid.

In hindsight we should've done this back when GIN was added - we wouldn't
need the 'maxoff' field in the page opaque struct if we had used pd_lower
and pd_upper like on normal pages. But as long as there can be pages in the
index that have been binary-upgraded from pre-9.4 versions, we can't rely
on that, and have to continue using 'maxoff'.

Most of the code churn comes from renaming some macros, now that they're
used on internal pages, too.

This change is completely backwards-compatible, no effect on pg_upgrade.

10 years agodoc: Suggesting clearing pg_replslot from a hot filesystem backup.
Robert Haas [Mon, 14 Apr 2014 17:00:04 +0000 (13:00 -0400)]
doc: Suggesting clearing pg_replslot from a hot filesystem backup.

Maybe we'll settle on another way of solving this problem, but for
now this is the recommended procedure.

Per discussion with Michael Paquier.

10 years agodoc: Update yet another place that didn't get the memo about matviews.
Robert Haas [Mon, 14 Apr 2014 16:47:46 +0000 (12:47 -0400)]
doc: Update yet another place that didn't get the memo about matviews.

Etsuro Fujita

10 years agoFix bogus handling of bad strategy number in GIST consistent() functions.
Tom Lane [Mon, 14 Apr 2014 15:10:32 +0000 (11:10 -0400)]
Fix bogus handling of bad strategy number in GIST consistent() functions.

Make sure we throw an error instead of silently doing the wrong thing when
fed a strategy number we don't recognize.  Also, in the places that did
already throw an error, spell the error message in a way more consistent
with our message style guidelines.

Per report from Paul Jones.  Although this is a bug, it won't occur unless
a superuser tries to do something he shouldn't, so it doesn't seem worth
back-patching.

10 years agoCorrect description of constraint_name in ALTER TABLE documentation.
Robert Haas [Mon, 14 Apr 2014 14:52:07 +0000 (10:52 -0400)]
Correct description of constraint_name in ALTER TABLE documentation.

Apparently, the old text was written at a time when the only use of
constraint_name here was for a constraint to be dropped, but that's
no longer true.

Etsuro Fujita

10 years agoUpdate list of relation types on which ALTER TABLE RENAME/OWNER work.
Robert Haas [Mon, 14 Apr 2014 14:43:53 +0000 (10:43 -0400)]
Update list of relation types on which ALTER TABLE RENAME/OWNER work.

Etsuro Fujita

10 years agoTab completion for event triggers.
Robert Haas [Mon, 14 Apr 2014 12:44:21 +0000 (08:44 -0400)]
Tab completion for event triggers.

Ian Barwick

10 years agoRemove dead checks for invalid left page in ginDeletePage.
Heikki Linnakangas [Mon, 14 Apr 2014 12:27:32 +0000 (15:27 +0300)]
Remove dead checks for invalid left page in ginDeletePage.

In some places, the function assumes the left page is valid, and in others,
it checks if it is valid. Remove all the checks.

10 years agoGIN entry pages follow the standard page layout - tell XLogInsert.
Heikki Linnakangas [Mon, 14 Apr 2014 11:49:30 +0000 (14:49 +0300)]
GIN entry pages follow the standard page layout - tell XLogInsert.

The entry B-tree pages all follow the standard page layout. The 9.3 code has
this right. I inadvertently changed this at some point during the big
refactorings in git master.

10 years agoImprove some O(N^2) behavior in window function evaluation.
Tom Lane [Sun, 13 Apr 2014 17:59:17 +0000 (13:59 -0400)]
Improve some O(N^2) behavior in window function evaluation.

Repositioning the tuplestore seek pointer in window_gettupleslot() turns
out to be a very significant expense when the window frame is sizable and
the frame end can move.  To fix, introduce a tuplestore function for
skipping an arbitrary number of tuples in one call, parallel to the one we
introduced for tuplesort objects in commit 8d65da1f.  This reduces the cost
of window_gettupleslot() to O(1) if the tuplestore has not spilled to disk.
As in the previous commit, I didn't try to do any real optimization of
tuplestore_skiptuples for the case where the tuplestore has spilled to
disk.  There is probably no practical way to get the cost to less than O(N)
anyway, but perhaps someone can think of something later.

Also fix PersistHoldablePortal() to make use of this API now that we have
it.

Based on a suggestion by Dean Rasheed, though this turns out not to look
much like his patch.

10 years agoSuppress compiler warning in new contrib/pg_trgm code.
Tom Lane [Sun, 13 Apr 2014 15:00:11 +0000 (11:00 -0400)]
Suppress compiler warning in new contrib/pg_trgm code.

MSVC doesn't seem to like it when a constant initializer loses
precision upon being assigned.

David Rowley

10 years agoMake a dedicated AlterTblSpcStmt production
Stephen Frost [Sun, 13 Apr 2014 05:02:44 +0000 (01:02 -0400)]
Make a dedicated AlterTblSpcStmt production

Given that ALTER TABLESPACE has moved on from just existing for
general purpose rename/owner changes, it deserves its own top-level
production in the grammar.  This also cleans up the RenameStmt to
only ever be used for actual RENAMEs again- it really wasn't
appropriate to hide non-RENAME productions under there.

Noted by Alvaro.

10 years agoAdd ANALYZE into regression tests
Stephen Frost [Sun, 13 Apr 2014 04:41:33 +0000 (00:41 -0400)]
Add ANALYZE into regression tests

Looks like we can end up with different plans happening on the
buildfarm, which breaks the regression tests when we include
EXPLAIN output (which is done in the regression tests for
updatable security views, to ensure that the user-defined
function isn't pushed down to a level where it could view the
rows before the security quals are applied).

This adds in ANALYZE to hopefully make the plans consistent.
The ANALYZE ends up changing the original plan too, so the
update looks bigger than it really is.  The new plan looks
perfectly valid, of course.

10 years agoProvide moving-aggregate support for boolean aggregates.
Tom Lane [Sun, 13 Apr 2014 04:01:46 +0000 (00:01 -0400)]
Provide moving-aggregate support for boolean aggregates.

David Rowley and Florian Pflug, reviewed by Dean Rasheed

10 years agoMake security barrier views automatically updatable
Stephen Frost [Sun, 13 Apr 2014 01:04:58 +0000 (21:04 -0400)]
Make security barrier views automatically updatable

Views which are marked as security_barrier must have their quals
applied before any user-defined quals are called, to prevent
user-defined functions from being able to see rows which the
security barrier view is intended to prevent them from seeing.

Remove the restriction on security barrier views being automatically
updatable by adding a new securityQuals list to the RTE structure
which keeps track of the quals from security barrier views at each
level, independently of the user-supplied quals.  When RTEs are
later discovered which have securityQuals populated, they are turned
into subquery RTEs which are marked as security_barrier to prevent
any user-supplied quals being pushed down (modulo LEAKPROOF quals).

Dean Rasheed, reviewed by Craig Ringer, Simon Riggs, KaiGai Kohei

10 years agoProvide moving-aggregate support for a bunch of numerical aggregates.
Tom Lane [Sun, 13 Apr 2014 00:33:09 +0000 (20:33 -0400)]
Provide moving-aggregate support for a bunch of numerical aggregates.

First installment of the promised moving-aggregate support in built-in
aggregates: count(), sum(), avg(), stddev() and variance() for
assorted datatypes, though not for float4/float8.

In passing, remove a 2001-vintage kluge in interval_accum(): interval
array elements have been properly aligned since around 2003, but
nobody remembered to take out this workaround.  Also, fix a thinko
in the opr_sanity tests for moving-aggregate catalog entries.

David Rowley and Florian Pflug, reviewed by Dean Rasheed

10 years agoCreate infrastructure for moving-aggregate optimization.
Tom Lane [Sat, 12 Apr 2014 15:58:53 +0000 (11:58 -0400)]
Create infrastructure for moving-aggregate optimization.

Until now, when executing an aggregate function as a window function
within a window with moving frame start (that is, any frame start mode
except UNBOUNDED PRECEDING), we had to recalculate the aggregate from
scratch each time the frame head moved.  This patch allows an aggregate
definition to include an alternate "moving aggregate" implementation
that includes an inverse transition function for removing rows from
the aggregate's running state.  As long as this can be done successfully,
runtime is proportional to the total number of input rows, rather than
to the number of input rows times the average frame length.

This commit includes the core infrastructure, documentation, and regression
tests using user-defined aggregates.  Follow-on commits will update some
of the built-in aggregates to use this feature.

David Rowley and Florian Pflug, reviewed by Dean Rasheed; additional
hacking by me

10 years agodocs: psql '--' comments are not passed to the server
Bruce Momjian [Thu, 10 Apr 2014 21:16:22 +0000 (17:16 -0400)]
docs: psql '--' comments are not passed to the server

C-style block comments are passed to the server.

10 years agoFix bugs in GIN "fast scan" with partial match.
Heikki Linnakangas [Thu, 10 Apr 2014 20:42:04 +0000 (23:42 +0300)]
Fix bugs in GIN "fast scan" with partial match.

There were a couple of bugs here. First, if the fuzzy limit was exceeded,
the loop in entryGetItem might drop out too soon if a whole block needs to
be skipped because it's < advancePast ("continue" in a while-loop checks the
loop condition too). Secondly, the loop checked when stepping to a new page
that there is at least one offset on the page < advancePast, but we cannot
rely on that on subsequent calls of entryGetItem, because advancePast might
change in between. That caused the skipping loop to read bogus items in the
TbmIterateResult's offset array.

First item and fix by Alexander Korotkov, second bug pointed out by Fabrízio
de Royes Mello, by a small variation of Alexander's test query.

10 years agoThe new pointer_to_struct test needs a special command line parameter to ecpg.
Michael Meskes [Thu, 10 Apr 2014 18:37:00 +0000 (20:37 +0200)]
The new pointer_to_struct test needs a special command line parameter to ecpg.
Hopefully this will fix the buildfarm failures on Windows.

10 years agoC comment: track_activity_query_size doesn't support memory units
Bruce Momjian [Thu, 10 Apr 2014 13:56:25 +0000 (09:56 -0400)]
C comment:  track_activity_query_size doesn't support memory units

And explain why.

Per report from Pavel Stehule

10 years agoFix typo in comment.
Heikki Linnakangas [Thu, 10 Apr 2014 10:11:49 +0000 (13:11 +0300)]
Fix typo in comment.

Tomonari Katsumata

10 years agoFix a few more misc typos in comments.
Heikki Linnakangas [Wed, 9 Apr 2014 21:53:15 +0000 (00:53 +0300)]
Fix a few more misc typos in comments.

10 years agodocs: add link to pg_start_backup() from pg_basebackup --checkpoint
Bruce Momjian [Wed, 9 Apr 2014 21:44:59 +0000 (17:44 -0400)]
docs:  add link to pg_start_backup() from pg_basebackup --checkpoint

This references the meaning of the fast/spread checkpoint option.

Per private IM report

10 years agoFix misc typos in comments.
Heikki Linnakangas [Wed, 9 Apr 2014 20:16:08 +0000 (23:16 +0300)]
Fix misc typos in comments.

10 years agoAdd missing include.
Robert Haas [Wed, 9 Apr 2014 15:38:52 +0000 (11:38 -0400)]
Add missing include.

This is more cleanup from commit 11a65eed1637a05b03e174700799b024e104bfb4.

Amit Kapila

10 years agoSeveral fixes to array handling in ecpg.
Michael Meskes [Wed, 9 Apr 2014 09:21:46 +0000 (11:21 +0200)]
Several fixes to array handling in ecpg.

Patches by Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>

10 years agoFix silly oversight in patch to remove dsm state file.
Robert Haas [Tue, 8 Apr 2014 20:22:50 +0000 (16:22 -0400)]
Fix silly oversight in patch to remove dsm state file.

I'm not sure if this is what's causing the Windows buildfarm members
to get unhappy, but I don't think it can be helping anything...

10 years agoAdd an in-core GiST index opclass for inet/cidr types.
Tom Lane [Tue, 8 Apr 2014 19:46:14 +0000 (15:46 -0400)]
Add an in-core GiST index opclass for inet/cidr types.

This operator class can accelerate subnet/supernet tests as well as
btree-equivalent ordered comparisons.  It also handles a new network
operator inet && inet (overlaps, a/k/a "is supernet or subnet of"),
which is expected to be useful in exclusion constraints.

Ideally this opclass would be the default for GiST with inet/cidr data,
but we can't mark it that way until we figure out how to do a more or
less graceful transition from the current situation, in which the
really-completely-bogus inet/cidr opclasses in contrib/btree_gist are
marked as default.  Having the opclass in core and not default is better
than not having it at all, though.

While at it, add new documentation sections to allow us to officially
document GiST/GIN/SP-GiST opclasses, something there was never a clear
place to do before.  I filled these in with some simple tables listing
the existing opclasses and the operators they support, but there's
certainly scope to put more information there.

Emre Hasegeli, reviewed by Andreas Karlsson, further hacking by me

10 years agodoc: Fix typo.
Robert Haas [Tue, 8 Apr 2014 15:47:29 +0000 (11:47 -0400)]
doc: Fix typo.

Ian Barwick

10 years agoGet rid of the dynamic shared memory state file.
Robert Haas [Tue, 8 Apr 2014 15:39:55 +0000 (11:39 -0400)]
Get rid of the dynamic shared memory state file.

Instead of storing the ID of the dynamic shared memory control
segment in a file within the data directory, store it in the main
control segment.  This avoids a number of nasty corner cases,
most seriously that doing an online backup and then using it on
the same machine (e.g. to fire up a standby) would result in the
standby clobbering all of the master's dynamic shared memory
segments.

Per complaints from Heikki Linnakangas, Fujii Masao, and Tom
Lane.

10 years agoAdd new to_reg* functions for error-free OID lookups.
Robert Haas [Tue, 8 Apr 2014 14:27:56 +0000 (10:27 -0400)]
Add new to_reg* functions for error-free OID lookups.

These functions won't throw an error if the object doesn't exist,
or if (for functions and operators) there's more than one matching
object.

Yugo Nagata and Nozomi Anzai, reviewed by Amit Khandekar, Marti
Raudsepp, Amit Kapila, and me.

10 years agoFix hot standby bug with GiST scans.
Heikki Linnakangas [Tue, 8 Apr 2014 11:47:24 +0000 (14:47 +0300)]
Fix hot standby bug with GiST scans.

Don't reset the rightlink of a page when replaying a page update record.
This was a leftover from pre-hot standby days, when it was not possible to
have scans concurrent with WAL replay. Resetting the right-link was not
necessary back then either, but it was done for the sake of tidiness. But
with hot standby, it's wrong, because a concurrent scan might still need it.

Backpatch all versions with hot standby, 9.0 and above.

10 years agoZero padding byte at end of GIN posting list.
Heikki Linnakangas [Mon, 7 Apr 2014 16:48:03 +0000 (19:48 +0300)]
Zero padding byte at end of GIN posting list.

This isn't strictly necessary, but helps debugging.

10 years agoRemove 'make clean' support for ipc_test.
Robert Haas [Mon, 7 Apr 2014 15:44:54 +0000 (11:44 -0400)]
Remove 'make clean' support for ipc_test.

I missed this in the previous commit; Tom Lane spotted my error.

10 years agoAssert that strong-lock count is >0 everywhere it's decremented.
Robert Haas [Mon, 7 Apr 2014 14:59:42 +0000 (10:59 -0400)]
Assert that strong-lock count is >0 everywhere it's decremented.

The one existing assertion of this type has tripped a few times in the
buildfarm lately, but it's not clear whether the problem is really
originating there or whether it's leftovers from a trip through one
of the other two paths that lack a matching assertion.  So add one.

Since the same bug(s) most likely exist(s) in the back-branches also,
back-patch to 9.2, where the fast-path lock mechanism was added.

10 years agoRemove ipc_test.
Robert Haas [Mon, 7 Apr 2014 14:40:47 +0000 (10:40 -0400)]
Remove ipc_test.

This doesn't seem to be useful any more, and it's not really worth the
effort to keep updating it every time relevant dependencies or calling
signatures in the shared memory or semaphore code change.

10 years agoFix WAL replay bug in the new GIN incomplete-split code.
Heikki Linnakangas [Mon, 7 Apr 2014 11:34:31 +0000 (14:34 +0300)]
Fix WAL replay bug in the new GIN incomplete-split code.

Forgot to set the incomplete-split flag on the left page half, in redo of a
page split.

Spotted this by comparing the page contents on master and standby, after
inserting/applying each WAL record.

10 years agoExtra warnings and errors for PL/pgSQL
Simon Riggs [Sun, 6 Apr 2014 16:21:51 +0000 (12:21 -0400)]
Extra warnings and errors for PL/pgSQL

Infrastructure to allow
 plpgsql.extra_warnings
 plpgsql.extra_errors

Initial extra checks only for shadowed_variables

Marko Tiikkaja and Petr Jelinek
Reviewed by Simon Riggs and Pavel Stěhule

10 years agoIsolation test files for ALTER TABLE patch
Simon Riggs [Sun, 6 Apr 2014 15:44:24 +0000 (11:44 -0400)]
Isolation test files for ALTER TABLE patch

10 years agoReduce lock levels of some ALTER TABLE cmds
Simon Riggs [Sun, 6 Apr 2014 15:13:43 +0000 (11:13 -0400)]
Reduce lock levels of some ALTER TABLE cmds

VALIDATE CONSTRAINT

CLUSTER ON
SET WITHOUT CLUSTER

ALTER COLUMN SET STATISTICS
ALTER COLUMN SET ()
ALTER COLUMN RESET ()

All other sub-commands use AccessExclusiveLock

Simon Riggs and Noah Misch

Reviews by Robert Haas and Andres Freund

10 years agoImprove contrib/pg_trgm's heuristics for regexp index searches.
Tom Lane [Sun, 6 Apr 2014 00:48:47 +0000 (20:48 -0400)]
Improve contrib/pg_trgm's heuristics for regexp index searches.

When extracting trigrams from a regular expression for search of a GIN or
GIST trigram index, it's useful to penalize (preferentially discard)
trigrams that contain whitespace, since those are typically far more common
in the index than trigrams not containing whitespace.  Of course, this
should only be a preference not a hard rule, since we might otherwise end
up with no trigrams to search for.  The previous coding tended to produce
fairly inefficient trigram search sets for anchored regexp patterns, as
reported by Erik Rijkers.  This patch penalizes whitespace-containing
trigrams, and also reduces the target number of extracted trigrams, since
experience suggests that the original coding tended to select too many
trigrams to search for.

Alexander Korotkov, reviewed by Tom Lane

10 years agoBlock signals earlier during postmaster startup.
Tom Lane [Sat, 5 Apr 2014 22:16:08 +0000 (18:16 -0400)]
Block signals earlier during postmaster startup.

Formerly, we set up the postmaster's signal handling only when we were
about to start launching subprocesses.  This is a bad idea though, as
it means that for example a SIGINT arriving before that will kill the
postmaster instantly, perhaps leaving lockfiles, socket files, shared
memory, etc laying about.  We'd rather that such a signal caused orderly
postmaster termination including releasing of those resources.  A simple
fix is to move the PostmasterMain stanza that initializes signal handling
to an earlier point, before we've created any such resources.  Then, an
early-arriving signal will be blocked until we're ready to deal with it
in the usual way.  (The only part that really needs to be moved up is
blocking of signals, but it seems best to keep the signal handler
installation calls together with that; for one thing this ensures the
kernel won't drop any signals we wished to get.  The handlers won't get
invoked in any case until we unblock signals in ServerLoop.)

Per a report from MauMau.  He proposed changing the way "pg_ctl stop"
works to deal with this, but that'd just be masking one symptom not
fixing the core issue.

It's been like this since forever, so back-patch to all supported branches.

10 years agoFix another palloc in critical section.
Heikki Linnakangas [Sat, 5 Apr 2014 19:02:28 +0000 (22:02 +0300)]
Fix another palloc in critical section.

Also add a regression test for a GIN index with enough items with the same
key, so that a GIN posting tree gets created. Apparently none of the
existing GIN tests were large enough for that.

This code is new, no backpatching required.

10 years agoFix processing of PGC_BACKEND GUC parameters on Windows.
Tom Lane [Sat, 5 Apr 2014 16:41:25 +0000 (12:41 -0400)]
Fix processing of PGC_BACKEND GUC parameters on Windows.

EXEC_BACKEND builds (i.e., Windows) failed to absorb values of PGC_BACKEND
parameters if they'd been changed post-startup via the config file.  This
for example prevented log_connections from working if it were turned on
post-startup.  The mechanism for handling this case has always been a bit
of a kluge, and it wasn't revisited when we implemented EXEC_BACKEND.
While in a normal forking environment new backends will inherit the
postmaster's value of such settings, EXEC_BACKEND backends have to read
the settings from the CONFIG_EXEC_PARAMS file, and they were mistakenly
rejecting them.  So this case has always been broken in the Windows port;
so back-patch to all supported branches.

Amit Kapila

10 years agoecpg/ecpglib must build the src/port files it uses with -DFRONTEND.
Tom Lane [Sat, 5 Apr 2014 06:20:25 +0000 (02:20 -0400)]
ecpg/ecpglib must build the src/port files it uses with -DFRONTEND.

Remarkably, this hasn't been noticed before, though it surely should
have been happening since around the fall of the Byzantine empire.
Commit 438b529604 changed path.c to depend on FRONTEND, and that exposed
the omission, per buildfarm reports.

I'm suspicious that some other subdirectories are missing this too,
but this one change is enough to make ecpg tests pass for me.

10 years agoFix tablespace creation WAL replay to work on Windows.
Tom Lane [Sat, 5 Apr 2014 03:09:35 +0000 (23:09 -0400)]
Fix tablespace creation WAL replay to work on Windows.

The code segment that removes the old symlink (if present) wasn't clued
into the fact that on Windows, symlinks are junction points which have
to be removed with rmdir().

Backpatch to 9.0, where the failing code was introduced.

MauMau, reviewed by Muhammad Asif Naeem and Amit Kapila

10 years agoAllow "-C variable" and "--describe-config" even to root users.
Tom Lane [Sat, 5 Apr 2014 02:03:35 +0000 (22:03 -0400)]
Allow "-C variable" and "--describe-config" even to root users.

There's no really compelling reason to refuse to do these read-only,
non-server-starting options as root, and there's at least one good
reason to allow -C: pg_ctl uses -C to find out the true data directory
location when pointed at a config-only directory.  On Windows, this is
done before dropping administrator privileges, which means that pg_ctl
fails for administrators if and only if a config-only layout is used.

Since the root-privilege check is done so early in startup, it's a bit
awkward to check for these switches.  Make the somewhat arbitrary
decision that we'll only skip the root check if -C is the first switch.
This is not just to make the code a bit simpler: it also guarantees that
we can't misinterpret a --boot mode switch.  (While AuxiliaryProcessMain
doesn't currently recognize any such switch, it might have one in the
future.)  This is no particular problem for pg_ctl, and since the whole
behavior is undocumented anyhow, it's not a documentation issue either.
(--describe-config only works as the first switch anyway, so this is
no restriction for that case either.)

Back-patch to 9.2 where pg_ctl first began to use -C.

MauMau, heavily edited by me

10 years agoPreserve errno across free().
Tom Lane [Fri, 4 Apr 2014 23:07:37 +0000 (19:07 -0400)]
Preserve errno across free().

Dept. of second thoughts: free() isn't guaranteed not to change errno.
Make sure we report the right error if getcwd() fails.

10 years agoMake sure -D is an absolute path when starting server on Windows.
Tom Lane [Fri, 4 Apr 2014 22:42:13 +0000 (18:42 -0400)]
Make sure -D is an absolute path when starting server on Windows.

This is needed because Windows services may get started with a different
current directory than where pg_ctl is executed.  We want relative -D
paths to be interpreted relative to pg_ctl's CWD, similarly to what
happens on other platforms.

In support of this, move the backend's make_absolute_path() function
into src/port/path.c (where it probably should have been long since)
and get rid of the rather inferior version in pg_regress.

Kumar Rajeev Rastogi, reviewed by MauMau

10 years agoFix bogus time printout in walreceiver's debug log messages.
Tom Lane [Fri, 4 Apr 2014 15:43:34 +0000 (11:43 -0400)]
Fix bogus time printout in walreceiver's debug log messages.

The displayed sendtime and receipttime were always exactly equal, because
somebody forgot that timestamptz_to_str returns a static buffer (thereby
simplifying life for most callers, at the cost of complicating it for those
who need two results concurrently).  Apply the same pstrdup solution used
by the other call sites with this issue.  Back-patch to 9.2 where the
faulty code was introduced.  Per bug #9849 from Haruka Takatsuka, though
this is not exactly his patch.

Possibly we should change timestamptz_to_str's API, but I wouldn't want
to do so in the back branches.

10 years agoFix some compiler warnings that clang emits with -pedantic.
Robert Haas [Fri, 4 Apr 2014 15:26:01 +0000 (11:26 -0400)]
Fix some compiler warnings that clang emits with -pedantic.

Andres Freund

10 years agoMove multixid allocation out of critical section.
Heikki Linnakangas [Fri, 4 Apr 2014 15:20:22 +0000 (18:20 +0300)]
Move multixid allocation out of critical section.

It can fail if you run out of memory.

This call was added in 9.3, so backpatch to 9.3 only.

10 years agoIn checkpoint, move the check for in-progress xacts out of critical section.
Heikki Linnakangas [Fri, 4 Apr 2014 14:29:50 +0000 (17:29 +0300)]
In checkpoint, move the check for in-progress xacts out of critical section.

GetVirtualXIDsDelayingChkpt calls palloc, which isn't safe in a critical
section. I thought I covered this case with the exemption for the
checkpointer, but CreateCheckPoint is also called from the startup process.

10 years agoAdd an Assertion that you don't palloc within a critical section.
Heikki Linnakangas [Fri, 4 Apr 2014 11:27:18 +0000 (14:27 +0300)]
Add an Assertion that you don't palloc within a critical section.

This caught a bunch of cases doing that already, which I just fixed in
previous commit. This is the assertion itself.

Per Tom Lane's idea.

10 years agoAvoid allocations in critical sections.
Heikki Linnakangas [Fri, 4 Apr 2014 10:12:38 +0000 (13:12 +0300)]
Avoid allocations in critical sections.

If a palloc in a critical section fails, it becomes a PANIC.

10 years agoFix non-equivalence of VARIADIC and non-VARIADIC function call formats.
Tom Lane [Fri, 4 Apr 2014 02:02:24 +0000 (22:02 -0400)]
Fix non-equivalence of VARIADIC and non-VARIADIC function call formats.

For variadic functions (other than VARIADIC ANY), the syntaxes foo(x,y,...)
and foo(VARIADIC ARRAY[x,y,...]) should be considered equivalent, since the
former is converted to the latter at parse time.  They have indeed been
equivalent, in all releases before 9.3.  However, commit 75b39e790 made an
ill-considered decision to record which syntax had been used in FuncExpr
nodes, and then to make equal() test that in checking node equality ---
which caused the syntaxes to not be seen as equivalent by the planner.
This is the underlying cause of bug #9817 from Dmitry Ryabov.

It might seem that a quick fix would be to make equal() disregard
FuncExpr.funcvariadic, but the same commit made that untenable, because
the field actually *is* semantically significant for some VARIADIC ANY
functions.  This patch instead adopts the approach of redefining
funcvariadic (and aggvariadic, in HEAD) as meaning that the last argument
is a variadic array, whether it got that way by parser intervention or was
supplied explicitly by the user.  Therefore the value will always be true
for non-ANY variadic functions, restoring the principle of equivalence.
(However, the planner will continue to consider use of VARIADIC as a
meaningful difference for VARIADIC ANY functions, even though some such
functions might disregard it.)

In HEAD, this change lets us simplify the decompilation logic in
ruleutils.c, since the funcvariadic/aggvariadic flag tells directly whether
to print VARIADIC.  However, in 9.3 we have to continue to cope with
existing stored rules/views that might contain the previous definition.
Fortunately, this just means no change in ruleutils.c, since its existing
behavior effectively ignores funcvariadic for all cases other than VARIADIC
ANY functions.

In HEAD, bump catversion to reflect the fact that FuncExpr.funcvariadic
changed meanings; this is sort of pro forma, since I don't believe any
built-in views are affected.

Unfortunately, this patch doesn't magically fix everything for affected
9.3 users.  After installing 9.3.5, they might need to recreate their
rules/views/indexes containing variadic function calls in order to get
everything consistent with the new definition.  As in the cited bug,
the symptom of a problem would be failure to use a nominally matching
index that has a variadic function call in its definition.  We'll need
to mention this in the 9.3.5 release notes.

10 years agoCode review for commit d26888bc4d1e539a82f21382b0000fe5bbf889d9.
Tom Lane [Thu, 3 Apr 2014 20:57:45 +0000 (16:57 -0400)]
Code review for commit d26888bc4d1e539a82f21382b0000fe5bbf889d9.

Mostly, copy-edit the comments; but also fix it to not reject domains over
arrays.

10 years agoFix documentation about joining pg_locks to other views.
Tom Lane [Thu, 3 Apr 2014 18:18:25 +0000 (14:18 -0400)]
Fix documentation about joining pg_locks to other views.

The advice to join to pg_prepared_xacts via the transaction column was not
updated when the transaction column was replaced by virtualtransaction.
Since it's not quite obvious how to do that join, give an explicit example.
For consistency also give an example for the adjacent case of joining to
pg_stat_activity.  And link-ify the view references too, just because we
can.  Per bug #9840 from Alexey Bashtanov.

Michael Paquier and Tom Lane

10 years agoAvoid promising that "ADD COLUMN ... DEFAULT NULL" is free.
Tom Lane [Thu, 3 Apr 2014 16:38:00 +0000 (12:38 -0400)]
Avoid promising that "ADD COLUMN ... DEFAULT NULL" is free.

The system realizes that DEFAULT NULL is dummy in simple cases, but not if
a cast function (such as a length coercion) needs to be applied.  It's
dubious that suppressing that function call would be appropriate, anyway.
For the moment, let's just adjust the docs to say that you should omit the
DEFAULT clause if you don't want a rewrite to happen.  Per gripe from Amit
Langote.

10 years agoAvoid palloc in critical section in GiST WAL-logging.
Heikki Linnakangas [Thu, 3 Apr 2014 12:09:37 +0000 (15:09 +0300)]
Avoid palloc in critical section in GiST WAL-logging.

Memory allocation can fail if you run out of memory, and inside a critical
section that will lead to a PANIC. Use conservatively-sized arrays in stack
instead.

There was previously no explicit limit on the number of pages a GiST split
can produce, it was only limited by the number of LWLocks that can be held
simultaneously (100 at the moment). This patch adds an explicit limit of 75
pages. That should be plenty, a typical split shouldn't produce more than
2-3 page halves.

The bug has been there forever, but only backpatch down to 9.1. The code
was changed significantly in 9.1, and it doesn't seem worth the risk or
trouble to adapt this for 9.0 and 8.4.

10 years agoFix assorted issues in client host name lookup.
Tom Lane [Wed, 2 Apr 2014 21:11:24 +0000 (17:11 -0400)]
Fix assorted issues in client host name lookup.

The code for matching clients to pg_hba.conf lines that specify host names
(instead of IP address ranges) failed to complain if reverse DNS lookup
failed; instead it silently didn't match, so that you might end up getting
a surprising "no pg_hba.conf entry for ..." error, as seen in bug #9518
from Mike Blackwell.  Since we don't want to make this a fatal error in
situations where pg_hba.conf contains a mixture of host names and IP
addresses (clients matching one of the numeric entries should not have to
have rDNS data), remember the lookup failure and mention it as DETAIL if
we get to "no pg_hba.conf entry".  Apply the same approach to forward-DNS
lookup failures, too, rather than treating them as immediate hard errors.

Along the way, fix a couple of bugs that prevented us from detecting an
rDNS lookup error reliably, and make sure that we make only one rDNS lookup
attempt; formerly, if the lookup attempt failed, the code would try again
for each host name entry in pg_hba.conf.  Since more or less the whole
point of this design is to ensure there's only one lookup attempt not one
per entry, the latter point represents a performance bug that seems
sufficient justification for back-patching.

Also, adjust src/port/getaddrinfo.c so that it plays as well as it can
with this code.  Which is not all that well, since it does not have actual
support for rDNS lookup, but at least it should return the expected (and
required by spec) error codes so that the main code correctly perceives the
lack of functionality as a lookup failure.  It's unlikely that PG is still
being used in production on any machines that require our getaddrinfo.c,
so I'm not excited about working harder than this.

To keep the code in the various branches similar, this includes
back-patching commits c424d0d1052cb4053c8712ac44123f9b9a9aa3f2 and
1997f34db4687e671690ed054c8f30bb501b1168 into 9.2 and earlier.

Back-patch to 9.1 where the facility for hostnames in pg_hba.conf was
introduced.

10 years agoDe-anonymize the union in JsonbValue.
Tom Lane [Wed, 2 Apr 2014 18:30:08 +0000 (14:30 -0400)]
De-anonymize the union in JsonbValue.

Needed for strict C89 compliance.

10 years agoFix bugs in manipulation of PgBackendStatus.st_clienthostname.
Tom Lane [Wed, 2 Apr 2014 01:30:08 +0000 (21:30 -0400)]
Fix bugs in manipulation of PgBackendStatus.st_clienthostname.

Initialization of this field was not being done according to the
st_changecount protocol (it has to be done within the changecount increment
range, not outside).  And the test to see if the value should be reported
as null was wrong.  Noted while perusing uses of Port.remote_hostname.

This was wrong from the introduction of this code (commit 4a25bc145),
so back-patch to 9.1.

10 years agoFix bug in the new GIN incomplete-split code.
Heikki Linnakangas [Tue, 1 Apr 2014 19:45:10 +0000 (22:45 +0300)]
Fix bug in the new GIN incomplete-split code.

Inserting a downlink to an internal page clears the incomplete-split flag
of the child's left sibling, so the left sibling's LSN also needs to be
updated and it needs to be marked dirty. The codepath for an insertion got
this right, but the case where the internal node is split because of
inserting the new downlink missed that.

10 years agoDoc: improve discussion of reverse+forward host name lookup in pg_hba.conf.
Tom Lane [Tue, 1 Apr 2014 19:20:30 +0000 (15:20 -0400)]
Doc: improve discussion of reverse+forward host name lookup in pg_hba.conf.

Fix some grammatical issues and make it a bit more readable.

10 years agoRemove dead check for backup block, replace with Assert.
Heikki Linnakangas [Tue, 1 Apr 2014 18:16:10 +0000 (21:16 +0300)]
Remove dead check for backup block, replace with Assert.

We don't use backup blocks with GIN vacuum records anymore, the page is
always recreated from scratch.

10 years agoFix bug in the new B-tree incomplete-split code.
Heikki Linnakangas [Tue, 1 Apr 2014 16:19:47 +0000 (19:19 +0300)]
Fix bug in the new B-tree incomplete-split code.

Inserting a downlink to an internal page clears the incomplete-split flag
of the child's left sibling, so the left sibling's LSN also needs to be
updated.