users/andresfreund/postgres.git
11 years agoFix off-by-one error in 2781b4bea7db357be59f9a5fd73ca1eb12ff5a79.
Robert Haas [Fri, 24 Oct 2014 12:17:00 +0000 (08:17 -0400)]
Fix off-by-one error in 2781b4bea7db357be59f9a5fd73ca1eb12ff5a79.

Spotted by Tom Lane.

11 years agopsql: complain if pg_dump custom-format is detected
Alvaro Herrera [Fri, 24 Oct 2014 10:14:09 +0000 (07:14 -0300)]
psql: complain if pg_dump custom-format is detected

Apparently, this is a very common mistake for users to make; it is
better to have it fail reasonably rather than throw potentially a large
number of errors.  Since we have a magic string at the start of the
file, we can detect the case easily and there's no other possible useful
behavior anyway.

Author: Craig Ringer

11 years agoUpdate README.tuplock
Alvaro Herrera [Thu, 23 Oct 2014 23:51:58 +0000 (20:51 -0300)]
Update README.tuplock

This file was documenting an older version of patch 0ac5ad5134; update
it to match what was really committed

Author: Florian Pflug

11 years agoIn type_sanity, check I/O functions of built-in types are not volatile.
Tom Lane [Thu, 23 Oct 2014 19:59:40 +0000 (15:59 -0400)]
In type_sanity, check I/O functions of built-in types are not volatile.

We have a project policy that I/O functions must not be volatile, as per
commit aab353a60b95aadc00f81da0c6d99bde696c4b75, but we weren't doing
anything to enforce that.  In most usage the marking of the function
doesn't matter as long as its behavior is sane --- but I/O casts can
expose the marking as user-visible behavior, as per today's complaint
from Joe Van Dyk about contrib/ltree.

This test as such will only protect us against future errors in built-in
data types.  To catch the same error in contrib or third-party types,
perhaps we should make CREATE TYPE complain?  But that's a separate
issue from enforcing the policy for built-in types.

11 years agoImprove ispell dictionary's defenses against bad affix files.
Tom Lane [Thu, 23 Oct 2014 17:11:28 +0000 (13:11 -0400)]
Improve ispell dictionary's defenses against bad affix files.

Don't crash if an ispell dictionary definition contains flags but not
any compound affixes.  (This isn't a security issue since only superusers
can install affix files, but still it's a bad thing.)

Also, be more careful about detecting whether an affix-file FLAG command
is old-format (ispell) or new-format (myspell/hunspell).  And change the
error message about mixed old-format and new-format commands into something
intelligible.

Per bug #11770 from Emre Hasegeli.  Back-patch to all supported branches.

11 years agoPerform less setup work for AFTER triggers at transaction start.
Robert Haas [Thu, 23 Oct 2014 16:33:02 +0000 (12:33 -0400)]
Perform less setup work for AFTER triggers at transaction start.

Testing reveals that the memory allocation we do at transaction start
has small but measurable overhead on simple transactions.  To cut
down on that overhead, defer some of that work to the point when
AFTER triggers are first used, thus avoiding it altogether if they
never are.

Patch by me.  Review by Andres Freund.

11 years agoRemove the unused argument of PSQLexec().
Fujii Masao [Thu, 23 Oct 2014 13:33:56 +0000 (22:33 +0900)]
Remove the unused argument of PSQLexec().

This commit simply removes the second argument of PSQLexec that was
set to the same value everywhere. Comments and code blocks related
to this parameter are removed.

Noticed by Heikki Linnakangas, reviewed by Michael Paquier

11 years agoAdd a function to get the authenticated user ID.
Robert Haas [Thu, 23 Oct 2014 12:18:45 +0000 (08:18 -0400)]
Add a function to get the authenticated user ID.

Previously, this was not exposed outside of miscinit.c.  It is needed
for the pending pg_background patch, and will also be needed for
parallelism.  Without it, there's no way for a background worker to
re-create the exact authentication environment that was present in the
process that started it, which could lead to security exposures.

11 years agoPrevent the already-archived WAL file from being archived again.
Fujii Masao [Thu, 23 Oct 2014 07:21:27 +0000 (16:21 +0900)]
Prevent the already-archived WAL file from being archived again.

Previously the archive recovery always created .ready file for
the last WAL file of the old timeline at the end of recovery even when
it's restored from the archive and has .done file. That is, there was
the case where the WAL file had both .ready and .done files.
This caused the already-archived WAL file to be archived again.

This commit prevents the archive recovery from creating .ready file
for the last WAL file if it has .done file, in order to prevent it from
being archived again.

This bug was added when cascading replication feature was introduced,
i.e., the commit 5286105800c7d5902f98f32e11b209c471c0c69c.
So, back-patch to 9.2, where cascading replication was added.

Reviewed by Michael Paquier

11 years agoMinimize calls of pg_class_aclcheck to minimum necessary
Peter Eisentraut [Thu, 23 Oct 2014 01:41:43 +0000 (21:41 -0400)]
Minimize calls of pg_class_aclcheck to minimum necessary

In a couple of code paths, pg_class_aclcheck is called in succession
with multiple different modes set.  This patch combines those modes to
have a single call of this function and reduce a bit process overhead
for permission checking.

Author: Michael Paquier <michael@otacoo.com>
Reviewed-by: Fabrízio de Royes Mello <fabriziomello@gmail.com>
11 years agoAdd tests for sequence privileges
Peter Eisentraut [Thu, 23 Oct 2014 01:39:07 +0000 (21:39 -0400)]
Add tests for sequence privileges

11 years agoEnsure libpq reports a suitable error message on unexpected socket EOF.
Tom Lane [Wed, 22 Oct 2014 22:41:44 +0000 (18:41 -0400)]
Ensure libpq reports a suitable error message on unexpected socket EOF.

The EOF-detection logic in pqReadData was a bit confused about who should
set up the error message in case the kernel gives us read-ready-but-no-data
rather than ECONNRESET or some other explicit error condition.  Since the
whole point of this situation is that the lower-level functions don't know
there's anything wrong, pqReadData itself must set up the message.  But
keep the assumption that if an errno was reported, a message was set up at
lower levels.

Per bug #11712 from Marko Tiikkaja.  It's been like this for a very long
time, so back-patch to all supported branches.

11 years agoSmall code cleanup.
Michael Meskes [Wed, 22 Oct 2014 08:35:36 +0000 (10:35 +0200)]
Small code cleanup.

Declare static variable as static and external as extern.

11 years agoUpdate comment.
Heikki Linnakangas [Wed, 22 Oct 2014 12:39:28 +0000 (15:39 +0300)]
Update comment.

The _bt_tuplecompare() function mentioned in comment hasn't existed for a
long time.

Peter Geoghegan

11 years agoMinGW: Use -static-libgcc when linking a DLL.
Noah Misch [Wed, 22 Oct 2014 02:55:47 +0000 (22:55 -0400)]
MinGW: Use -static-libgcc when linking a DLL.

When commit 846e91e0223cf9f2821c3ad4dfffffbb929cb027 switched the linker
driver from dlltool/dllwrap to gcc, it became possible for linking to
choose shared libgcc.  Backends having loaded a module dynamically
linked to libgcc can exit abnormally, which the postmaster treats like a
crash.  Resume use of static libgcc exclusively, like 9.3 and earlier.
Back-patch to 9.4.

11 years agoMinGW: Link with shell32.dll instead of shfolder.dll.
Noah Misch [Wed, 22 Oct 2014 02:55:43 +0000 (22:55 -0400)]
MinGW: Link with shell32.dll instead of shfolder.dll.

This improves consistency with the MSVC build.  On buildfarm member
narwhal, since commit 846e91e0223cf9f2821c3ad4dfffffbb929cb027,
shfolder.dll:SHGetFolderPath() crashes when dblink calls it by way of
pqGetHomeDirectory().  Back-patch to 9.4, where that commit first
appeared.  How it caused this regression remains a mystery.  This is a
partial revert of commit 889f03812916b146ae504c0fad5afdc7bf2e8a2a, which
adopted shfolder.dll for Windows NT 4.0 compatibility.  PostgreSQL 8.2
dropped support for that operating system.

11 years agoUpdate expected/sequence_1.out.
Tom Lane [Tue, 21 Oct 2014 22:25:58 +0000 (18:25 -0400)]
Update expected/sequence_1.out.

The last three updates to the sequence regression test have all forgotten
to touch the alternate expected-output file.  Sigh.

Michael Paquier

11 years agoAllow input format xxxx-xxxx-xxxx for macaddr type
Peter Eisentraut [Tue, 21 Oct 2014 20:16:39 +0000 (16:16 -0400)]
Allow input format xxxx-xxxx-xxxx for macaddr type

Author: Herwin Weststrate <herwin@quarantainenet.nl>
Reviewed-by: Ali Akbar <the.apaan@gmail.com>
11 years agodoc: Check DocBook XML validity during the build
Peter Eisentraut [Tue, 21 Oct 2014 18:46:38 +0000 (14:46 -0400)]
doc: Check DocBook XML validity during the build

Building the documentation with XSLT does not check the DTD, like a
DSSSL build would.  One can often get away with having invalid XML, but
the stylesheets might then create incorrect output, as they are not
designed to handle that.  Therefore, check the validity of the XML
against the DTD, using xmllint, during the build.

Add xmllint detection to configure, and add some documentation.

xmllint comes with libxml2, which is already in use, but it might be in
a separate package, such as libxml2-utils on Debian.

Reviewed-by: Fabien COELHO <coelho@cri.ensmp.fr>
11 years agodoc: Update Red Hat documentation tools information
Peter Eisentraut [Tue, 21 Oct 2014 14:43:09 +0000 (10:43 -0400)]
doc: Update Red Hat documentation tools information

The old text was written in ancient times when RPM packages could be
shared more or less freely across a plethora of RPM-based Linux
distributions.  This isn't really the case anymore, so just make this
information more concrete for the Red Hat family.

11 years agodoc: Update FreeBSD documentation tools information
Peter Eisentraut [Tue, 21 Oct 2014 14:32:28 +0000 (10:32 -0400)]
doc: Update FreeBSD documentation tools information

based on patch from Dag-Erling Smørgrav <des@des.no>

11 years agoDon't duplicate log_checkpoint messages for both of restart and checkpoints.
Andres Freund [Mon, 20 Oct 2014 23:01:56 +0000 (01:01 +0200)]
Don't duplicate log_checkpoint messages for both of restart and checkpoints.

The duplication originated in cdd46c765, where restartpoints were
introduced.

In LogCheckpointStart's case the duplication actually lead to the
compiler's format string checking not to be effective because the
format string wasn't constant.

Arguably these messages shouldn't be elog(), but ereport() style
messages. That'd even allow to translate the messages... But as
there's more mistakes of that kind in surrounding code, it seems
better to change that separately.

11 years agoRenumber CHECKPOINT_* flags.
Andres Freund [Mon, 20 Oct 2014 22:20:08 +0000 (00:20 +0200)]
Renumber CHECKPOINT_* flags.

Commit 7dbb6069382 added a new CHECKPOINT_FLUSH_ALL flag. As that
commit needed to be backpatched I didn't change the numeric values of
the existing flags as that could lead to nastly problems if any
external code issued checkpoints. That's not a concern on master, so
renumber them there.

Also add a comment about CHECKPOINT_FLUSH_ALL above
CreateCheckPoint().

11 years agoFlush unlogged table's buffers when copying or moving databases.
Andres Freund [Mon, 20 Oct 2014 21:43:46 +0000 (23:43 +0200)]
Flush unlogged table's buffers when copying or moving databases.

CREATE DATABASE and ALTER DATABASE .. SET TABLESPACE copy the source
database directory on the filesystem level. To ensure the on disk
state is consistent they block out users of the affected database and
force a checkpoint to flush out all data to disk. Unfortunately, up to
now, that checkpoint didn't flush out dirty buffers from unlogged
relations.

That bug means there could be leftover dirty buffers in either the
template database, or the database in its old location. Leading to
problems when accessing relations in an inconsistent state; and to
possible problems during shutdown in the SET TABLESPACE case because
buffers belonging files that don't exist anymore are flushed.

This was reported in bug #10675 by Maxim Boguk.

Fix by Pavan Deolasee, modified somewhat by me. Reviewed by MauMau and
Fujii Masao.

Backpatch to 9.1 where unlogged tables were introduced.

11 years agopg_test_fsync: Update output format
Peter Eisentraut [Mon, 20 Oct 2014 19:34:59 +0000 (15:34 -0400)]
pg_test_fsync: Update output format

Apparently, computers are now a bit faster than when this was first
added, so we need to make room for a digit or two in the ops/sec format.

While we're at it, adjust some of the other output for a more consistent
line length.

11 years agoCorrect volatility markings of a few json functions.
Andrew Dunstan [Mon, 20 Oct 2014 18:55:35 +0000 (14:55 -0400)]
Correct volatility markings of a few json functions.

json_agg and json_object_agg and their associated transition functions
should have been marked as stable rather than immutable, as they call IO
functions indirectly. Changing this probably isn't going to make much
difference, as you can't use an aggregate function in an index
expression, but we should be correct nevertheless.

json_object, on the other hand, should be marked immutable rather than
stable, as it does not call IO functions.

As discussed on -hackers, this change is being made without bumping the
catalog version, as we don't want to do that at this stage of the  cycle,
and  the changes are very unlikely to affect anyone.

11 years agoFix mishandling of FieldSelect-on-whole-row-Var in nested lateral queries.
Tom Lane [Mon, 20 Oct 2014 16:23:42 +0000 (12:23 -0400)]
Fix mishandling of FieldSelect-on-whole-row-Var in nested lateral queries.

If an inline-able SQL function taking a composite argument is used in a
LATERAL subselect, and the composite argument is a lateral reference,
the planner could fail with "variable not found in subplan target list",
as seen in bug #11703 from Karl Bartel.  (The outer function call used in
the bug report and in the committed regression test is not really necessary
to provoke the bug --- you can get it if you manually expand the outer
function into "LATERAL (SELECT inner_function(outer_relation))", too.)

The cause of this is that we generate the reltargetlist for the referenced
relation before doing eval_const_expressions() on the lateral sub-select's
expressions (cf find_lateral_references()), so what's scheduled to be
emitted by the referenced relation is a whole-row Var, not the simplified
single-column Var produced by optimizing the function's FieldSelect on the
whole-row Var.  Then setrefs.c fails to match up that lateral reference to
what's available from the outer scan.

Preserving the FieldSelect optimization in such cases would require either
major planner restructuring (to recursively do expression simplification
on sub-selects much earlier) or some amazingly ugly kluge to change the
reltargetlist of a possibly-already-planned relation.  It seems better
just to skip the optimization when the Var is from an upper query level;
the case is not so common that it's likely anyone will notice a few
wasted cycles.

AFAICT this problem only occurs for uplevel LATERAL references, so
back-patch to 9.3 where LATERAL was added.

11 years agoFix file-identification comment in contrib/pgcrypto/pgcrypto--1.2.sql.
Tom Lane [Mon, 20 Oct 2014 14:53:57 +0000 (10:53 -0400)]
Fix file-identification comment in contrib/pgcrypto/pgcrypto--1.2.sql.

Cosmetic oversight in commit 32984d8fc3dbb90a3fafb69fece0134f1ea790f9.

Marko Tiikkaja

11 years agoFix typos.