]> granicus.if.org Git - postgresql/log
postgresql
10 years agoFix whitespace
Peter Eisentraut [Wed, 30 Apr 2014 01:35:07 +0000 (21:35 -0400)]
Fix whitespace

10 years agoImprove planner to drop constant-NULL inputs of AND/OR where it's legal.
Tom Lane [Tue, 29 Apr 2014 17:12:26 +0000 (13:12 -0400)]
Improve planner to drop constant-NULL inputs of AND/OR where it's legal.

In general we can't discard constant-NULL inputs, since they could change
the result of the AND/OR to be NULL.  But at top level of WHERE, we do not
need to distinguish a NULL result from a FALSE result, so it's okay to
treat NULL as FALSE and then simplify AND/OR accordingly.

This is a very ancient oversight, but in 9.2 and later it can lead to
failure to optimize queries that previous releases did optimize, as a
result of more aggressive parameter substitution rules making it possible
to reduce more subexpressions to NULL constants.  This is the root cause of
bug #10171 from Arnold Scheffler.  We could alternatively have fixed that
by teaching orclauses.c to ignore constant-NULL OR arms, but it seems
better to get rid of them globally.

I resisted the temptation to back-patch this change into all active
branches, but it seems appropriate to back-patch as far as 9.2 so that
there will not be performance regressions of the kind shown in this bug.

10 years agoRemove unnecessary cast causing a warning
Greg Stark [Tue, 29 Apr 2014 11:43:03 +0000 (12:43 +0100)]
Remove unnecessary cast causing a warning

Incidentally, I reversed the two names in the earlier commit. The
original author was Sergey Muraviov and the reviewer was Emre
Hasegeli.

10 years agoAdd support for wrapping to psql's "extended" mode. This makes it very
Greg Stark [Mon, 28 Apr 2014 17:41:36 +0000 (18:41 +0100)]
Add support for wrapping to psql's "extended" mode. This makes it very
feasible to display tables that have both many columns and some large
data in some columns (such as pg_stats).

Emre Hasegeli with review and rewriting from Sergey Muraviov and
reviewed by Greg Stark

10 years agoFix two bugs in WAL-logging of GIN pending-list pages.
Heikki Linnakangas [Mon, 28 Apr 2014 13:12:45 +0000 (16:12 +0300)]
Fix two bugs in WAL-logging of GIN pending-list pages.

In writeListPage, never take a full-page image of the page, because we
have all the information required to re-initialize in the WAL record
anyway. Before this fix, a full-page image was always generated, unless
full_page_writes=off, because when the page is initialized its LSN is
always 0. In stable-branches, keep the code to restore the backup blocks
if they exist, in case that the WAL is generated with an older minor
version, but in master Assert that there are no full-page images.

In the redo routine, add missing "off++". Otherwise the tuples are added
to the page in reverse order. That happens to be harmless because we
always scan and remove all the tuples together, but it was clearly wrong.
Also, it was masked by the first bug unless full_page_writes=off, because
the page was always restored from a full-page image.

Backpatch to all supported versions.

10 years agoMinor fixes for ALTER TABLE documentation.
Robert Haas [Mon, 28 Apr 2014 14:10:51 +0000 (10:10 -0400)]
Minor fixes for ALTER TABLE documentation.

Etsuro Fujita

10 years agoCan't completely get rid of #ifndef FRONTEND in palloc.h :-(
Tom Lane [Mon, 28 Apr 2014 01:24:19 +0000 (21:24 -0400)]
Can't completely get rid of #ifndef FRONTEND in palloc.h :-(

pg_controldata includes postgres.h not postgres_fe.h, so utils/palloc.h
must be able to compile in a "#define FRONTEND" context.  It appears that
Solaris Studio is smart enough to persuade us to define PG_USE_INLINE,
but not smart enough to not make a copy of unreferenced static functions;
which leads to an unsatisfied reference to CurrentMemoryContext.  So we
need an #ifndef FRONTEND around that declaration.  Per buildfarm.

10 years agoImprove generation algorithm for database system identifier.
Tom Lane [Sat, 26 Apr 2014 19:11:10 +0000 (15:11 -0400)]
Improve generation algorithm for database system identifier.

As noted some time ago, the original coding had a typo ("|" for "^")
that made the result less unique than intended.  Even the intended
behavior is obsolete since it was based on wanting to produce a
usable value even if we didn't have int64 arithmetic --- a limitation
we stopped supporting years ago.  Instead, let's redefine the system
identifier as tv_sec in the upper 32 bits (same as before), tv_usec
in the next 20 bits, and the low 12 bits of getpid() in the remaining
bits.  This is still hardly guaranteed-universally-unique, but it's
noticeably better than before.  Per my proposal at
<29019.1374535940@sss.pgh.pa.us>

10 years agoDon't #include utils/palloc.h in common/fe_memutils.h.
Tom Lane [Sat, 26 Apr 2014 18:14:28 +0000 (14:14 -0400)]
Don't #include utils/palloc.h in common/fe_memutils.h.

This breaks the principle that common/ ought not depend on anything in the
server, not only code-wise but in the headers.  The only arguable advantage
is avoidance of duplication of half a dozen extern declarations, and even
that is rather dubious, considering that the previous coding was wrong
about which declarations to duplicate: it exposed pnstrdup() to frontend
code even though no such function is provided in fe_memutils.c.

On the same principle, don't #include utils/memutils.h in the frontend
build of psprintf.c.  This requires duplicating the definition of
MaxAllocSize, but that seems fine to me: there's no a-priori reason why
frontend code should use the same size limit as the backend anyway.

In passing, clean up some rather odd layout and ordering choices that
were imposed on palloc.h to reduce the number of #ifdefs required by
the previous approach.

Per gripe from Christoph Berg.  There's still more work to do to make
include/common/ clean, but this part seems reasonably noncontroversial.

10 years agoRecord the proper typmod for an index expression column.
Tom Lane [Sat, 26 Apr 2014 16:22:09 +0000 (12:22 -0400)]
Record the proper typmod for an index expression column.

We should use exprTypmod() to extract the typmod of the expression,
instead of just blindly storing -1.  This seems to have been an aboriginal
oversight in commit fc8d970cbcdd6f025475822a4cf01dfda0873226 which
introduced general-expression indexes.  The consequences are only cosmetic
at present, since the index machinery doesn't really look at typmod for
index columns; but still it seems best to describe the column type as
precisely as we can.  Per off-list complaint from Thomas Fanghaenel.

10 years agoFix off-by-one bug in LWLockRegisterTranche().
Tom Lane [Fri, 25 Apr 2014 19:59:57 +0000 (15:59 -0400)]
Fix off-by-one bug in LWLockRegisterTranche().

Original coding failed to enlarge the array as required if
the requested tranche_id was equal to LWLockTranchesAllocated.

In passing, fix poor style of not casting the result of (re)palloc.

10 years agoClean up temp installations after client program tests.
Tom Lane [Fri, 25 Apr 2014 19:40:35 +0000 (15:40 -0400)]
Clean up temp installations after client program tests.

Commit 7d0f493f19607774fdccb1a1ea06fdd96a3d9698 added infrastructure
to perform tests in assorted src/bin/ subdirectories, but forgot to
teach "make clean" to clean up the detritus the tests leave behind.

10 years agoFix race when updating a tuple concurrently locked by another process
Alvaro Herrera [Thu, 24 Apr 2014 18:41:55 +0000 (15:41 -0300)]
Fix race when updating a tuple concurrently locked by another process

If a tuple is locked, and this lock is later upgraded either to an
update or to a stronger lock, and in the meantime some other process
tries to lock, update or delete the same tuple, it (the tuple) could end
up being updated twice, or having conflicting locks held.

The reason for this is that the second updater checks for a change in
Xmax value, or in the HEAP_XMAX_IS_MULTI infomask bit, after noticing
the first lock; and if there's a change, it restarts and re-evaluates
its ability to update the tuple.  But it neglected to check for changes
in lock strength or in lock-vs-update status when those two properties
stayed the same.  This would lead it to take the wrong decision and
continue with its own update, when in reality it shouldn't do so but
instead restart from the top.

This could lead to either an assertion failure much later (when a
multixact containing multiple updates is detected), or duplicate copies
of tuples.

To fix, make sure to compare the other relevant infomask bits alongside
the Xmax value and HEAP_XMAX_IS_MULTI bit, and restart from the top if
necessary.

Also, in the belt-and-suspenders spirit, add a check to
MultiXactCreateFromMembers that a multixact being created does not have
two or more members that are claimed to be updates.  This should protect
against other bugs that might cause similar bogus situations.

Backpatch to 9.3, where the possibility of multixacts containing updates
was introduced.  (In prior versions it was possible to have the tuple
lock upgraded from shared to exclusive, and an update would not restart
from the top; yet we're protected against a bug there because there's
always a sleep to wait for the locking transaction to complete before
continuing to do anything.  Really, the fact that tuple locks always
conflicted with concurrent updates is what protected against bugs here.)

Per report from Andrew Dunstan and Josh Berkus in thread at
http://www.postgresql.org/message-id/534C8B33.9050807@pgexperts.com

Bug analysis by Andres Freund.

10 years agoReset pg_stat_activity.xact_start during PREPARE TRANSACTION.
Tom Lane [Thu, 24 Apr 2014 17:29:48 +0000 (13:29 -0400)]
Reset pg_stat_activity.xact_start during PREPARE TRANSACTION.

Once we've completed a PREPARE, our session is not running a transaction,
so its entry in pg_stat_activity should show xact_start as null, rather
than leaving the value as the start time of the now-prepared transaction.

I think possibly this oversight was triggered by faulty extrapolation
from the adjacent comment that says PrepareTransaction should not call
AtEOXact_PgStat, so tweak the wording of that comment.

Noted by Andres Freund while considering bug #10123 from Maxim Boguk,
although this error doesn't seem to explain that report.

Back-patch to all active branches.

10 years agoProperly build pg_recvlogical in the msvc build system
Magnus Hagander [Thu, 24 Apr 2014 07:30:44 +0000 (09:30 +0200)]
Properly build pg_recvlogical in the msvc build system

Michael Paquier

10 years agoFix incorrect pg_proc.proallargtypes entries for two built-in functions.
Tom Lane [Thu, 24 Apr 2014 01:21:05 +0000 (21:21 -0400)]
Fix incorrect pg_proc.proallargtypes entries for two built-in functions.

pg_sequence_parameters() and pg_identify_object() have had incorrect
proallargtypes entries since 9.1 and 9.3 respectively.  This was mostly
masked by the correct information in proargtypes, but a few operations
such as pg_get_function_arguments() (and thus psql's \df display) would
show the wrong data types for these functions' input parameters.

In HEAD, fix the wrong info, bump catversion, and add an opr_sanity
regression test to catch future mistakes of this sort.

In the back branches, just fix the wrong info so that installations
initdb'd with future minor releases will have the right data.  We
can't force an initdb, and it doesn't seem like a good idea to add
a regression test that will fail on existing installations.

Andres Freund

10 years agoAllow polymorphic aggregates to have non-polymorphic state data types.
Tom Lane [Wed, 23 Apr 2014 23:17:31 +0000 (19:17 -0400)]
Allow polymorphic aggregates to have non-polymorphic state data types.

Before 9.4, such an aggregate couldn't be declared, because its final
function would have to have polymorphic result type but no polymorphic
argument, which CREATE FUNCTION would quite properly reject.  The
ordered-set-aggregate patch found a workaround: allow the final function
to be declared as accepting additional dummy arguments that have types
matching the aggregate's regular input arguments.  However, we failed
to notice that this problem applies just as much to regular aggregates,
despite the fact that we had a built-in regular aggregate array_agg()
that was known to be undeclarable in SQL because its final function
had an illegal signature.  So what we should have done, and what this
patch does, is to decouple the extra-dummy-arguments behavior from
ordered-set aggregates and make it generally available for all aggregate
declarations.  We have to put this into 9.4 rather than waiting till
later because it slightly alters the rules for declaring ordered-set
aggregates.

The patch turned out a bit bigger than I'd hoped because it proved
necessary to record the extra-arguments option in a new pg_aggregate
column.  I'd thought we could just look at the final function's pronargs
at runtime, but that didn't work well for variadic final functions.
It's probably just as well though, because it simplifies life for pg_dump
to record the option explicitly.

While at it, fix array_agg() to have a valid final-function signature,
and add an opr_sanity test to notice future deviations from polymorphic
consistency.  I also marked the percentile_cont() aggregates as not
needing extra arguments, since they don't.

10 years agodoc: Fix DocBook table column count declaration
Peter Eisentraut [Wed, 23 Apr 2014 20:14:14 +0000 (16:14 -0400)]
doc: Fix DocBook table column count declaration

This was broken in 26cd1d7d9513b2b490efc746551ec5a786b56212.

10 years agoecpg: Add additional files to .gitignore
Peter Eisentraut [Wed, 23 Apr 2014 17:30:36 +0000 (13:30 -0400)]
ecpg: Add additional files to .gitignore

These are test files added by f9179685371b74bf4752bf3f87846e5625cf91fa.

10 years agoUpdate obsolete comments.
Heikki Linnakangas [Wed, 23 Apr 2014 11:39:12 +0000 (14:39 +0300)]
Update obsolete comments.

We no longer have a TLI field in the page header.

10 years agoFix typo, trance -> tranche, in docs.
Heikki Linnakangas [Wed, 23 Apr 2014 10:00:08 +0000 (13:00 +0300)]
Fix typo, trance -> tranche, in docs.

Amit Langote

10 years agoFix typos in comment.
Heikki Linnakangas [Wed, 23 Apr 2014 09:56:41 +0000 (12:56 +0300)]
Fix typos in comment.

10 years agoCleanup of new b-tree page deletion code.
Heikki Linnakangas [Wed, 23 Apr 2014 07:15:06 +0000 (10:15 +0300)]
Cleanup of new b-tree page deletion code.

When marking a branch as half-dead, a pointer to the top of the branch is
stored in the leaf block's hi-key. During normal operation, the high key
was left in place, and the block number was just stored in the ctid field
of the high key tuple, but in WAL replay, the high key was recreated as a
truncated tuple with zero columns. For the sake of easier debugging, also
truncate the tuple in normal operation, so that the page is identical
after WAL replay. Also, rename the 'downlink' field in the WAL record to
'topparent', as that seems like a more descriptive name. And make sure
it's set to invalid when unlinking the leaf page.

10 years agoFix documentation of FmgrInfo.fn_nargs.
Tom Lane [Wed, 23 Apr 2014 03:22:12 +0000 (23:22 -0400)]
Fix documentation of FmgrInfo.fn_nargs.

Some ancient comments claimed that fn_nargs could be -1 to indicate a
variable number of input arguments; but this was never implemented, and
is at variance with what we ultimately did with "variadic" functions.
Update the comments.

10 years agoFix broken logic in logical_heap_rewrite_flush_mappings().
Tom Lane [Wed, 23 Apr 2014 02:33:35 +0000 (22:33 -0400)]
Fix broken logic in logical_heap_rewrite_flush_mappings().

It's blatantly obvious that commit 4d0d607a454ee832574afd52a3c515099cc85eb3
wasn't tested.  The leak's real enough, though.

10 years agorevert 4d0d607a454ee832574afd52a3c515099cc85eb3
Bruce Momjian [Wed, 23 Apr 2014 02:21:54 +0000 (22:21 -0400)]
revert 4d0d607a454ee832574afd52a3c515099cc85eb3

Revert due to contrib/test_decoding regression failure

10 years agodoc: adjust 9970443640b4569cf72b3c8e84abe80bdf533c7f for "null string"
Bruce Momjian [Wed, 23 Apr 2014 00:33:12 +0000 (20:33 -0400)]
doc:  adjust 9970443640b4569cf72b3c8e84abe80bdf533c7f for "null string"

Report by Andrew Dunstan

10 years agodoc: improve wording of COPY commit 7ec73783d88a743799b0c262f1235f772497fb1d
Bruce Momjian [Tue, 22 Apr 2014 23:16:54 +0000 (19:16 -0400)]
doc:  improve wording of COPY commit 7ec73783d88a743799b0c262f1235f772497fb1d

10 years agodoc: mention CREATE MATERIALIZED VIEW AS can be EXPLAINed
Bruce Momjian [Tue, 22 Apr 2014 22:38:14 +0000 (18:38 -0400)]
doc:  mention CREATE MATERIALIZED VIEW AS can be EXPLAINed

Patch by Amit Langote

Report by

Backpatch through

10 years agodocs: add results for JSON operator examples
Bruce Momjian [Tue, 22 Apr 2014 22:19:07 +0000 (18:19 -0400)]
docs:  add results for JSON operator examples

Patch by Sehrope Sarkuni

10 years agobuild: add EXTRA_REGRESS_OPTS to all pg_regress invocations
Bruce Momjian [Tue, 22 Apr 2014 22:13:10 +0000 (18:13 -0400)]
build:  add EXTRA_REGRESS_OPTS to all pg_regress invocations

Patch by Christoph Berg

10 years agodocs: clearify use of pg_database.datistemplate
Bruce Momjian [Tue, 22 Apr 2014 22:10:14 +0000 (18:10 -0400)]
docs:  clearify use of pg_database.datistemplate

Patch by Rajeev rastogi

10 years agorelease memory used while flushing logical mappings
Bruce Momjian [Tue, 22 Apr 2014 22:05:44 +0000 (18:05 -0400)]
release memory used while flushing logical mappings

Patch by Ants Aasma

10 years agodoc: improve CREATE RULE event list
Bruce Momjian [Tue, 22 Apr 2014 21:54:42 +0000 (17:54 -0400)]
doc:  improve CREATE RULE event list

Patch by Fujii Masao

Report by Emanuel Calvo

10 years agoregression test: fix hot standby tests by using repeatable read
Bruce Momjian [Tue, 22 Apr 2014 21:23:58 +0000 (17:23 -0400)]
regression test:  fix hot standby tests by using repeatable read

Serializable transactions won't work on a Hot Standby.  Also fix
VACUUM/ANALYZE label mixup.

Patch by Martín Marqués

10 years agocopy: update docs for FORCE_NULL and FORCE_NOT_NULL combination
Bruce Momjian [Tue, 22 Apr 2014 20:06:37 +0000 (16:06 -0400)]
copy:  update docs for FORCE_NULL and FORCE_NOT_NULL combination

Also update regression tests

Patch by Michael Paquier

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

Forgot to update LSN of left sibling's page, when creating a new root.
I fixed this for regular insertions and page splits earlier, but missed
new root creation.

10 years agoFix Gin README.
Heikki Linnakangas [Tue, 22 Apr 2014 19:36:32 +0000 (22:36 +0300)]
Fix Gin README.

The README incorrectly claimed that GIN posting tree pages contain an array
of uncompressed items in addition to compressed posting lists. Earlier
versions of the GIN posting list compression patch worked that way, but not
the one that was committed.

10 years agodoc: Improve "replication slot" index entries
Peter Eisentraut [Tue, 22 Apr 2014 19:22:10 +0000 (15:22 -0400)]
doc: Improve "replication slot" index entries

Now that we have accumulated two different "replication slot" concepts,
make the index entries consistent.

10 years agoFix bug in new B-tree page deletion code.
Heikki Linnakangas [Tue, 22 Apr 2014 12:34:54 +0000 (15:34 +0300)]
Fix bug in new B-tree page deletion code.

When modifying a page, must hold an exclusive lock. A shared lock is
obviously not good enough.

10 years agoRetain original physical order of tuples in redo of b-tree splits.
Heikki Linnakangas [Tue, 22 Apr 2014 10:03:37 +0000 (13:03 +0300)]
Retain original physical order of tuples in redo of b-tree splits.

It makes no difference to the system, but minimizing the differences
between a master and standby makes debugging simpler.

10 years agoFix rm_desc routine of b-tree page delete records.
Heikki Linnakangas [Tue, 22 Apr 2014 10:02:52 +0000 (13:02 +0300)]
Fix rm_desc routine of b-tree page delete records.

A couple of typos from my refactoring of the page deletion patch.

10 years agoAvoid transient bogus page contents when creating a sequence.
Heikki Linnakangas [Tue, 22 Apr 2014 06:50:47 +0000 (09:50 +0300)]
Avoid transient bogus page contents when creating a sequence.

Don't use simple_heap_insert to insert the tuple to a sequence relation.
simple_heap_insert creates a heap insertion WAL record, and replaying that
will create a regular heap page without the special area containing the
sequence magic constant, which is wrong for a sequence. That was not a bug
because we always created a sequence WAL record after that, and replaying
that overwrote the bogus heap page, and the transient state could never be
seen by another backend because it was only done when creating a new
sequence relation. But it's simpler and cleaner to avoid that in the first
place.

10 years agopg_stat_statements forgot to let previous occupant of hook get control too.
Tom Lane [Mon, 21 Apr 2014 17:28:07 +0000 (13:28 -0400)]
pg_stat_statements forgot to let previous occupant of hook get control too.

pgss_post_parse_analyze() neglected to pass the call on to any earlier
occupant of the post_parse_analyze_hook.  There are no other users of that
hook in contrib/, and most likely none in the wild either, so this is
probably just a latent bug.  But it's a bug nonetheless, so back-patch
to 9.2 where this code was introduced.

10 years agoFix another typo.
Robert Haas [Sun, 20 Apr 2014 14:32:57 +0000 (16:32 +0200)]
Fix another typo.

Etsuro Fujita

10 years agoFix typo.
Robert Haas [Sun, 20 Apr 2014 14:30:55 +0000 (16:30 +0200)]
Fix typo.

Etsuro Fujita

10 years agodoc: CREATE DATABASE doesn't copy template database-level config params
Bruce Momjian [Sat, 19 Apr 2014 19:26:49 +0000 (15:26 -0400)]
doc: CREATE DATABASE doesn't copy template database-level config params

Report by Alexey Bashtanov

10 years agodoc: mention archive_command and recovery_command are exec'ed locally
Bruce Momjian [Sat, 19 Apr 2014 18:59:47 +0000 (14:59 -0400)]
doc: mention archive_command and recovery_command are exec'ed locally

Report by Craig Ringer

10 years agodocs: tablespaces cannot be accessed independently
Bruce Momjian [Sat, 19 Apr 2014 14:52:49 +0000 (10:52 -0400)]
docs:  tablespaces cannot be accessed independently

Mention impossibility of moving tablespaces, backing them up
independently, or the inadvisability of placing them on temporary
file systems.

Patch by Craig Ringer, adjustments by Ian Lawrence Warwick and me

10 years agolibpq: have PQconnectdbParams() and PQpingParams accept "" as default
Bruce Momjian [Sat, 19 Apr 2014 12:41:51 +0000 (08:41 -0400)]
libpq:  have PQconnectdbParams() and PQpingParams accept "" as default

Previously, these functions treated "" optin values as defaults in some
ways, but not in others, like when comparing to .pgpass.  Also, add
documentation to clarify that now "" and NULL use defaults, like
PQsetdbLogin() has always done.

BACKWARD INCOMPATIBILITY

Patch by Adrian Vondendriesch, docs by me

Report by Jeff Janes

10 years agoFix typo
Magnus Hagander [Fri, 18 Apr 2014 10:49:54 +0000 (12:49 +0200)]
Fix typo

Amit Langote

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