]> granicus.if.org Git - postgresql/log
postgresql
9 years agoAdd new psql help topics, accessible to both --help and \?.
Andres Freund [Tue, 9 Sep 2014 20:19:14 +0000 (22:19 +0200)]
Add new psql help topics, accessible to both --help and \?.

Add --help=<topic> for the commandline, and \? <topic> as a backslash
command, to show more help than the invocations without parameters
do. "commands", "variables" and "options" currently exist as help
topics describing, respectively, backslash commands, psql variables,
and commandline switches. Without parameters the help commands show
their previous topic.

Some further wordsmithing or extending of the added help content might
be needed; but there seems little benefit delaying the overall feature
further.

Author: Pavel Stehule, editorialized by many

Reviewed-By: Andres Freund, Petr Jelinek, Fujii Masao, MauMau, Abhijit
    Menon-Sen and Erik Rijkers.

Discussion: CAFj8pRDVGuC-nXBfe2CK8vpyzd2Dsr9GVpbrATAnZO=2YQ0s2Q@mail.gmail.com,
    CAFj8pRA54AbTv2RXDTRxiAd8hy8wxmoVLqhJDRCwEnhdd7OUkw@mail.gmail.com

9 years agoChange the spinlock primitives to function as compiler barriers.
Robert Haas [Tue, 9 Sep 2014 21:45:20 +0000 (17:45 -0400)]
Change the spinlock primitives to function as compiler barriers.

Previously, they functioned as barriers against CPU reordering but not
compiler reordering, an odd API that required extensive use of volatile
everywhere that spinlocks are used.  That's error-prone and has negative
implications for performance, so change it.

In theory, this makes it safe to remove many of the uses of volatile
that we currently have in our code base, but we may find that there are
some bugs in this effort when we do.  In the long run, though, this
should make for much more maintainable code.

Patch by me.  Review by Andres Freund.

9 years agoAdd width_bucket(anyelement, anyarray).
Tom Lane [Tue, 9 Sep 2014 19:34:10 +0000 (15:34 -0400)]
Add width_bucket(anyelement, anyarray).

This provides a convenient method of classifying input values into buckets
that are not necessarily equal-width.  It works on any sortable data type.

The choice of function name is a bit debatable, perhaps, but showing that
there's a relationship to the SQL standard's width_bucket() function seems
more attractive than the other proposals.

Petr Jelinek, reviewed by Pavel Stehule

9 years agodoc: Reflect renaming of Mac OS X to OS X
Peter Eisentraut [Tue, 9 Sep 2014 17:56:29 +0000 (13:56 -0400)]
doc: Reflect renaming of Mac OS X to OS X

bug #10528

9 years agoAllow empty content in xml type
Peter Eisentraut [Tue, 9 Sep 2014 15:34:52 +0000 (11:34 -0400)]
Allow empty content in xml type

The xml type previously rejected "content" that is empty or consists
only of spaces.  But the SQL/XML standard allows that, so change that.
The accepted values for XML "documents" are not changed.

Reviewed-by: Ali Akbar <the.apaan@gmail.com>
9 years agoMove ALTER ... ALL IN to ProcessUtilitySlow
Stephen Frost [Tue, 9 Sep 2014 14:52:10 +0000 (10:52 -0400)]
Move ALTER ... ALL IN to ProcessUtilitySlow

Now that ALTER TABLE .. ALL IN TABLESPACE has replaced the previous
ALTER TABLESPACE approach, it makes sense to move the calls down in
to ProcessUtilitySlow where the rest of ALTER TABLE is handled.

This also means that event triggers will support ALTER TABLE .. ALL
(which was the impetus for the original change, though it has other
good qualities also).

Álvaro Herrera

Back-patch to 9.4 as the original rework was.

9 years agoFix typo in solaris spinlock fix.
Andres Freund [Tue, 9 Sep 2014 11:57:38 +0000 (13:57 +0200)]
Fix typo in solaris spinlock fix.

07968dbfaad03 missed part of the S_UNLOCK define when building for
sparcv8+.

9 years agoFix spinlock implementation for some !solaris sparc platforms.
Andres Freund [Mon, 8 Sep 2014 22:47:32 +0000 (00:47 +0200)]
Fix spinlock implementation for some !solaris sparc platforms.

Some Sparc CPUs can be run in various coherence models, ranging from
RMO (relaxed) over PSO (partial) to TSO (total). Solaris has always
run CPUs in TSO mode while in userland, but linux didn't use to and
the various *BSDs still don't. Unfortunately the sparc TAS/S_UNLOCK
were only correct under TSO. Fix that by adding the necessary memory
barrier instructions. On sparcv8+, which should be all relevant CPUs,
these are treated as NOPs if the current consistency model doesn't
require the barriers.

Discussion: 20140630222854.GW26930@awork2.anarazel.de

Will be backpatched to all released branches once a few buildfarm
cycles haven't shown up problems. As I've no access to sparc, this is
blindly written.

9 years agoFix psql \s to work with recent libedit, and add pager support.
Tom Lane [Mon, 8 Sep 2014 20:09:45 +0000 (16:09 -0400)]
Fix psql \s to work with recent libedit, and add pager support.

psql's \s (print command history) doesn't work at all with recent libedit
versions when printing to the terminal, because libedit tries to do an
fchmod() on the target file which will fail if the target is /dev/tty.
(We'd already noted this in the context of the target being /dev/null.)
Even before that, it didn't work pleasantly, because libedit likes to
encode the command history file (to ensure successful reloading), which
renders it nigh unreadable, not to mention significantly different-looking
depending on exactly which libedit version you have.  So let's forget using
write_history() for this purpose, and instead print the data ourselves,
using logic similar to that used to iterate over the history for newline
encoding/decoding purposes.

While we're at it, insert the ability to use the pager when \s is printing
to the terminal.  This has been an acknowledged shortcoming of \s for many
years, so while you could argue it's not exactly a back-patchable bug fix
it still seems like a good improvement.  Anyone who's seriously annoyed
at this can use "\s /dev/tty" or local equivalent to get the old behavior.

Experimentation with this showed that the history iteration logic was
actually rather broken when used with libedit.  It turns out that with
libedit you have to use previous_history() not next_history() to advance
to more recent history entries.  The easiest and most robust fix for this
seems to be to make a run-time test to verify which function to call.
We had not noticed this because libedit doesn't really need the newline
encoding logic: its own encoding ensures that command entries containing
newlines are reloaded correctly (unlike libreadline).  So the effective
behavior with recent libedits was that only the oldest history entry got
newline-encoded or newline-decoded.  However, because of yet other bugs in
history_set_pos(), some old versions of libedit allowed the existing loop
logic to reach entries besides the oldest, which means there may be libedit
~/.psql_history files out there containing encoded newlines in more than
just the oldest entry.  To ensure we can reload such files, it seems
appropriate to back-patch this fix, even though that will result in some
incompatibility with older psql versions (ie, multiline history entries
written by a psql with this fix will look corrupted to a psql without it,
if its libedit is reasonably up to date).

Stepan Rutz and Tom Lane

9 years agoDocumentation fix: sum(float4) returns float4, not float8.
Tom Lane [Mon, 8 Sep 2014 02:40:41 +0000 (22:40 -0400)]
Documentation fix: sum(float4) returns float4, not float8.

The old claim is from my commit d06ebdb8d3425185d7e641d15e45908658a0177d of
2000-07-17, but it seems to have been a plain old thinko; sum(float4) has
been distinct from sum(float8) since Berkeley days.  Noted by KaiGai Kohei.

While at it, mention the existence of sum(money), which is also of
embarrassingly ancient vintage.

9 years agoTab completion for ALTER .. ALL IN TABLESPACE
Stephen Frost [Sun, 7 Sep 2014 12:04:35 +0000 (08:04 -0400)]
Tab completion for ALTER .. ALL IN TABLESPACE

Update the tab completion for the changes made in
3c4cf080879b386d4ed1814667aca025caafe608, which rework 'MOVE ALL' to be
'ALTER .. ALL IN TABLESPACE'.

Fujii Masao

Back-patch to 9.4, as the original change was.

9 years agodocs: Improve pg_isready details about username/dbname
Bruce Momjian [Sat, 6 Sep 2014 16:43:11 +0000 (12:43 -0400)]
docs:  Improve pg_isready details about username/dbname

Report by Erik Rijkers

Backpatch through 9.4

9 years agoProperly document that -r is only honored from the command-line.
Bruce Momjian [Sat, 6 Sep 2014 15:10:52 +0000 (11:10 -0400)]
Properly document that -r is only honored from the command-line.

This is for postgres/postmaster options.

Report by Tom Lane

Backpatch through 9.4

9 years agoReport timezone offset in pg_dump/pg_dumpall
Bruce Momjian [Fri, 5 Sep 2014 23:22:31 +0000 (19:22 -0400)]
Report timezone offset in pg_dump/pg_dumpall

Use consistent format for all such displays.

Report by Gavin Flower

9 years agopg_upgrade: preserve the timestamp epoch
Bruce Momjian [Fri, 5 Sep 2014 23:19:41 +0000 (19:19 -0400)]
pg_upgrade:  preserve the timestamp epoch

This is useful for replication tools like Slony and Skytools.

Report by Sergey Konoplev

9 years agoClarify documentation about "peer" rows in window functions
Bruce Momjian [Fri, 5 Sep 2014 22:59:41 +0000 (18:59 -0400)]
Clarify documentation about "peer" rows in window functions

Peer rows are matching rows when ORDER BY is specified.

Report by arnaud.mouronval@gmail.com, David G Johnston

9 years agoRename C variables in formatting.c, for clarity
Bruce Momjian [Fri, 5 Sep 2014 13:52:31 +0000 (09:52 -0400)]
Rename C variables in formatting.c, for clarity

Also add C comments.  This should help future debugging of this
notorious file.

9 years agoAssorted message fixes and improvements
Peter Eisentraut [Fri, 5 Sep 2014 05:20:33 +0000 (01:20 -0400)]
Assorted message fixes and improvements

9 years agoAdd tab-completion for reloptions like user_catalog_table.
Fujii Masao [Fri, 5 Sep 2014 02:40:08 +0000 (11:40 +0900)]
Add tab-completion for reloptions like user_catalog_table.

Back-patch to 9.4 where user_catalog_table was added.

Review by Michael Paquier

9 years agodoc: Remove dead link
Peter Eisentraut [Thu, 4 Sep 2014 18:11:23 +0000 (14:11 -0400)]
doc: Remove dead link

The link to the NIST web page about DES standards leads to nowhere, and
according to archive.org has been forwarded to an unrelated page for
many years.  Therefore, just remove that link.  More up to date
information can be found via Wikipedia, for example.

9 years agoFix segmentation fault that an empty prepared statement could cause.
Fujii Masao [Thu, 4 Sep 2014 17:17:57 +0000 (02:17 +0900)]
Fix segmentation fault that an empty prepared statement could cause.

Back-patch to all supported branches.

Per bug #11335 from Haruka Takatsuka

9 years agoUpdate comment to reflect commit 1d41739e5a04b0e93304d24d864b6bfa3efc45f2.
Robert Haas [Thu, 4 Sep 2014 16:17:10 +0000 (12:17 -0400)]
Update comment to reflect commit 1d41739e5a04b0e93304d24d864b6bfa3efc45f2.

Peter Geoghegan

9 years agoAllow \watch to display query execution time if \timing is enabled.
Fujii Masao [Thu, 4 Sep 2014 03:31:48 +0000 (12:31 +0900)]
Allow \watch to display query execution time if \timing is enabled.

Previously \watch could not display the query execution time even
when \timing was enabled because it used PSQLexec instead of
SendQuery and that function didn't support \timing. This patch
introduces PSQLexecWatch and changes \watch so as to use it, instead.
PSQLexecWatch is the function to run the query, print its results and
display how long it took (only when \timing is enabled).

This patch also changes --echo-hidden so that it doesn't print
the query that \watch executes. Since \watch cannot execute
backslash command queries, they should not be printed even
when --echo-hidden is set.

Patch by me, review by Heikki Linnakangas and Michael Paquier

9 years agoUpdate URL reference material in /contrib/isn docs
Bruce Momjian [Wed, 3 Sep 2014 21:22:20 +0000 (17:22 -0400)]
Update URL reference material in /contrib/isn docs

Report by Peter Eisentraut

9 years agoDocument use of partial indexes for partial unique constraints
Bruce Momjian [Wed, 3 Sep 2014 18:32:57 +0000 (14:32 -0400)]
Document use of partial indexes for partial unique constraints

Report by Tomáš Greif

Backpatch through 9.4

9 years agoIssue clearer notice when inherited merged columns are moved
Bruce Momjian [Wed, 3 Sep 2014 15:54:31 +0000 (11:54 -0400)]
Issue clearer notice when inherited merged columns are moved

CREATE TABLE INHERIT moves user-specified columns to the location of the
inherited column.

Report by Fatal Majid

9 years agoCheck number of parameters in RAISE statement at compile time.
Heikki Linnakangas [Tue, 2 Sep 2014 12:53:06 +0000 (15:53 +0300)]
Check number of parameters in RAISE statement at compile time.

The number of % parameter markers in RAISE statement should match the number
of parameters given. We used to check that at execution time, but we have
all the information needed at compile time, so let's check it at compile
time instead. It's generally better to find mistakes earlier.

Marko Tiikkaja, reviewed by Fabien Coelho

9 years agoRefactor per-page logic common to all redo routines to a new function.
Heikki Linnakangas [Wed, 13 Aug 2014 12:39:08 +0000 (15:39 +0300)]
Refactor per-page logic common to all redo routines to a new function.

Every redo routine uses the same idiom to determine what to do to a page:
check if there's a backup block for it, and if not read, the buffer if the
block exists, and check its LSN. Refactor that into a common function,
XLogReadBufferForRedo, making all the redo routines shorter and more
readable.

This has no user-visible effect, and makes no changes to the WAL format.

Reviewed by Andres Freund, Alvaro Herrera, Michael Paquier.

9 years agoSilence warning on new versions of clang.
Heikki Linnakangas [Tue, 2 Sep 2014 11:22:42 +0000 (14:22 +0300)]
Silence warning on new versions of clang.

Andres Freund

9 years agoAdd psql PROMPT variable showing which line of a statement is being edited.
Andres Freund [Tue, 2 Sep 2014 11:05:48 +0000 (13:05 +0200)]
Add psql PROMPT variable showing which line of a statement is being edited.

The new %l substitution shows the line number inside a (potentially
multi-line) statement starting from one.

Author: Sawada Masahiko, heavily editorialized by me.
Reviewed-By: Jeevan Chalke, Alvaro Herrera
9 years agoSupport ALTER SYSTEM RESET command.
Fujii Masao [Tue, 2 Sep 2014 07:06:58 +0000 (16:06 +0900)]
Support ALTER SYSTEM RESET command.

This patch allows us to execute ALTER SYSTEM RESET command to
remove the configuration entry from postgresql.auto.conf.

Vik Fearing, reviewed by Amit Kapila and me.

9 years agoFix unportable use of isspace().
Tom Lane [Mon, 1 Sep 2014 22:37:45 +0000 (18:37 -0400)]
Fix unportable use of isspace().

Introduced in commit 11a020eb6.

9 years agoAdd skip-empty-xacts option to test_decoding for use in the regression tests.
Andres Freund [Mon, 1 Sep 2014 11:42:43 +0000 (13:42 +0200)]
Add skip-empty-xacts option to test_decoding for use in the regression tests.

The regression tests for contrib/test_decoding regularly failed on
postgres instances that were very slow. Either because the hardware
itself was slow or because very expensive debugging options like
CLOBBER_CACHE_ALWAYS were used.

The reason they failed was just that some additional transactions were
decoded. Analyze and vacuum, triggered by autovac.

To fix just add a option to test_decoding to only display transactions
in which a change was actually displayed. That's not pretty because it
removes information from the tests; but better than constantly failing
tests in very likely harmless ways.

Backpatch to 9.4 where logical decoding was introduced.

Discussion: 20140629142511.GA26930@awork2.anarazel.de

9 years agoAdd valgrind suppression for padding bytes in twophase records.
Andres Freund [Mon, 1 Sep 2014 10:19:00 +0000 (12:19 +0200)]
Add valgrind suppression for padding bytes in twophase records.

9 years agoFix s/pluggins/plugins/ typo in two comments.
Andres Freund [Mon, 1 Sep 2014 10:01:29 +0000 (12:01 +0200)]
Fix s/pluggins/plugins/ typo in two comments.

Michael Paquier

9 years agoDeclare lwlock.c's LWLockAcquireCommon() as a static inline.
Andres Freund [Sun, 31 Aug 2014 22:16:55 +0000 (00:16 +0200)]
Declare lwlock.c's LWLockAcquireCommon() as a static inline.

68a2e52bbaf98f136 has introduced LWLockAcquireCommon() containing the
previous contents of LWLockAcquire() plus added functionality. The
latter then calls it, just like LWLockAcquireWithVar(). Because the
majority of callers don't need the added functionality, declare the
common code as inline. The compiler then can optimize away the unused
code. Doing so is also useful when looking at profiles, to
differentiate the users.

Backpatch to 9.4, the first branch to contain LWLockAcquireCommon().

9 years agoProtect definition of SpinlockSemaArray, just like its declaration.
Andres Freund [Sun, 31 Aug 2014 22:03:53 +0000 (00:03 +0200)]
Protect definition of SpinlockSemaArray, just like its declaration.

Found via clang's -Wmissing-variable-declarations.

9 years agoDeclare two variables in snapbuild.c as static.
Andres Freund [Sun, 31 Aug 2014 21:53:12 +0000 (23:53 +0200)]
Declare two variables in snapbuild.c as static.

Neither is accessed externally, I just seem to have missed the static
when writing the code.

9 years agodoc: Various typo/grammar fixes
Kevin Grittner [Sat, 30 Aug 2014 15:52:36 +0000 (10:52 -0500)]
doc: Various typo/grammar fixes

Errors detected using Topy (https://github.com/intgr/topy), all
changes verified by hand and some manual tweaks added.

Marti Raudsepp

Individual changes backpatched, where applicable, as far as 9.0.

9 years agoAgain update C comments for pg_attribute.attislocal
Bruce Momjian [Sat, 30 Aug 2014 14:24:34 +0000 (10:24 -0400)]
Again update C comments for pg_attribute.attislocal

9 years agoMake backend local tracking of buffer pins memory efficient.
Andres Freund [Sat, 30 Aug 2014 12:03:21 +0000 (14:03 +0200)]
Make backend local tracking of buffer pins memory efficient.

Since the dawn of time (aka Postgres95) multiple pins of the same
buffer by one backend have been optimized not to modify the shared
refcount more than once. This optimization has always used a NBuffer
sized array in each backend keeping track of a backend's pins.

That array (PrivateRefCount) was one of the biggest per-backend memory
allocations, depending on the shared_buffers setting. Besides the
waste of memory it also has proven to be a performance bottleneck when
assertions are enabled as we make sure that there's no remaining pins
left at the end of transactions. Also, on servers with lots of memory
and a correspondingly high shared_buffers setting the amount of random
memory accesses can also lead to poor cpu cache efficiency.

Because of these reasons a backend's buffers pins are now kept track
of in a small statically sized array that overflows into a hash table
when necessary. Benchmarks have shown neutral to positive performance
results with considerably lower memory usage.

Patch by me, review by Robert Haas.

Discussion: 20140321182231.GA17111@alap3.anarazel.de

9 years agoUpdate C comment for pg_attribute.attislocal
Bruce Momjian [Fri, 29 Aug 2014 23:01:04 +0000 (19:01 -0400)]
Update C comment for pg_attribute.attislocal

Indicates if column has ever been local/non-inherited

9 years agopg_is_xlog_replay_paused(): remove super-user-only restriction
Bruce Momjian [Fri, 29 Aug 2014 13:05:35 +0000 (09:05 -0400)]
pg_is_xlog_replay_paused():  remove super-user-only restriction

Also update docs to mention which function are super-user-only.

Report by sys-milan@statpro.com

Backpatch through 9.4

9 years agoFix bug in compressed GIN data leaf page splitting code.
Heikki Linnakangas [Fri, 29 Aug 2014 11:19:34 +0000 (14:19 +0300)]
Fix bug in compressed GIN data leaf page splitting code.

The list of posting lists it's dealing with can contain placeholders for
deleted posting lists. The placeholders are kept around so that they can
be WAL-logged, but we must be careful to not try to access them.

This fixes bug #11280, reported by Mårten Svantesson. Backpatch to 9.4,
where the compressed data leaf page code was added.

10 years agoAssorted message improvements
Peter Eisentraut [Fri, 29 Aug 2014 04:01:34 +0000 (00:01 -0400)]
Assorted message improvements

10 years agodoc: Revert ALTER TABLESPACE summary line
Peter Eisentraut [Fri, 29 Aug 2014 03:59:03 +0000 (23:59 -0400)]
doc: Revert ALTER TABLESPACE summary line

It was changed when ALTER TABLESPACE / MOVE was added but then not
updated when that was moved back out.

10 years agoAdd min and max aggregates for inet/cidr data types.
Tom Lane [Fri, 29 Aug 2014 02:37:58 +0000 (22:37 -0400)]
Add min and max aggregates for inet/cidr data types.

Haribabu Kommi, reviewed by Muhammad Asif Naeem

10 years agoAlways use our getaddrinfo.c on Windows.
Noah Misch [Fri, 29 Aug 2014 00:36:27 +0000 (20:36 -0400)]
Always use our getaddrinfo.c on Windows.

Commit a16bac36eca8158cbf78987e95376f610095f792 let "configure" detect
the system getaddrinfo() when building under 64-bit MinGW-w64.  However,
src/include/port/win32/sys/socket.h assumes all native Windows
configurations use our replacement.  This change placates buildfarm
member jacana until we establish a plan for getaddrinfo() on Windows.

10 years agoFix citext upgrade script for disallowance of oidvector element assignment.
Tom Lane [Thu, 28 Aug 2014 22:21:05 +0000 (18:21 -0400)]
Fix citext upgrade script for disallowance of oidvector element assignment.

In commit 45e02e3232ac7cc5ffe36f7986159b5e0b1f6fdc, we intentionally
disallowed updates on individual elements of oidvector columns.  While that
still seems like a sane idea in the abstract, we (I) forgot that citext's
"upgrade from unpackaged" script did in fact perform exactly such updates,
in order to fix the problem that citext indexes should have a collation
but would not in databases dumped or upgraded from pre-9.1 installations.

Even if we wanted to add casts to allow such updates, there's no practical
way to do so in the back branches, so the only real alternative is to make
citext's kluge even klugier.  In this patch, I cast the oidvector to text,
fix its contents with regexp_replace, and cast back to oidvector.  (Ugh!)

Since the aforementioned commit went into all active branches, we have to
fix this in all branches that contain the now-broken update script.

Per report from Eric Malm.

10 years agoRevert "Allow units to be specified in relation option setting value."
Fujii Masao [Thu, 28 Aug 2014 20:10:47 +0000 (05:10 +0900)]
Revert "Allow units to be specified in relation option setting value."

This reverts commit e23014f3d40f7d2c23bc97207fd28efbe5ba102b.

As the side effect of the reverted commit, when the unit is
specified, the reloption was stored in the catalog with the unit.
This broke pg_dump (specifically, it prevented pg_dump from
outputting restorable backup regarding the reloption) and
turned the buildfarm red. Revert the commit until the fixed
version is ready.

10 years agoAllow escaping of option values for options passed at connection start.
Andres Freund [Thu, 28 Aug 2014 11:59:29 +0000 (13:59 +0200)]
Allow escaping of option values for options passed at connection start.

This is useful to allow to set GUCs to values that include spaces;
something that wasn't previously possible. The primary case motivating
this is the desire to set default_transaction_isolation to 'repeatable
read' on a per connection basis, but other usecases like seach_path do
also exist.

This introduces a slight backward incompatibility: Previously a \ in
an option value would have been passed on literally, now it'll be
taken as an escape.

The relevant mailing list discussion starts with
20140204125823.GJ12016@awork2.anarazel.de.

10 years agoAllow units to be specified in relation option setting value.
Fujii Masao [Thu, 28 Aug 2014 06:55:50 +0000 (15:55 +0900)]
Allow units to be specified in relation option setting value.

This introduces an infrastructure which allows us to specify the units
like ms (milliseconds) in integer relation option, like GUC parameter.
Currently only autovacuum_vacuum_cost_delay reloption can accept
the units.

Reviewed by Michael Paquier

10 years agoAllow multibyte characters as escape in SIMILAR TO and SUBSTRING.
Jeff Davis [Thu, 28 Aug 2014 04:07:36 +0000 (21:07 -0700)]
Allow multibyte characters as escape in SIMILAR TO and SUBSTRING.

Previously, only a single-byte character was allowed as an
escape. This patch allows it to be a multi-byte character, though it
still must be a single character.

Reviewed by Heikki Linnakangas and Tom Lane.

10 years agoFix FOR UPDATE NOWAIT on updated tuple chains
Alvaro Herrera [Wed, 27 Aug 2014 23:15:18 +0000 (19:15 -0400)]
Fix FOR UPDATE NOWAIT on updated tuple chains

If SELECT FOR UPDATE NOWAIT tries to lock a tuple that is concurrently
being updated, it might fail to honor its NOWAIT specification and block
instead of raising an error.

Fix by adding a no-wait flag to EvalPlanQualFetch which it can pass down
to heap_lock_tuple; also use it in EvalPlanQualFetch itself to avoid
blocking while waiting for a concurrent transaction.

Authors: Craig Ringer and Thomas Munro, tweaked by Álvaro
http://www.postgresql.org/message-id/51FB6703.9090801@2ndquadrant.com

Per Thomas Munro in the course of his SKIP LOCKED feature submission,
who also provided one of the isolation test specs.

Backpatch to 9.4, because that's as far back as it applies without
conflicts (although the bug goes all the way back).  To that branch also
backpatch Thomas Munro's new NOWAIT test cases, committed in master by
Heikki as commit 9ee16b49f0aac819bd4823d9b94485ef608b34e8 .

10 years agoAdd header comments to receivelog.h and streamutil.h.
Fujii Masao [Wed, 27 Aug 2014 10:31:48 +0000 (19:31 +0900)]
Add header comments to receivelog.h and streamutil.h.

This commit also adds the include guards to those header files.

Michael Paquier

10 years agoFix Var handling for security barrier views
Stephen Frost [Wed, 27 Aug 2014 03:08:41 +0000 (23:08 -0400)]
Fix Var handling for security barrier views

In some cases, not all Vars were being correctly marked as having been
modified for updatable security barrier views, which resulted in invalid
plans (eg: when security barrier views were created over top of
inheiritance structures).

In passing, be sure to update both varattno and varonattno, as _equalVar
won't consider the Vars identical otherwise.  This isn't known to cause
any issues with updatable security barrier views, but was noticed as
missing while working on RLS and makes sense to get fixed.

Back-patch to 9.4 where updatable security barrier views were
introduced.

10 years agodoc: Document valid checkpoint_timeout range
Peter Eisentraut [Wed, 27 Aug 2014 02:43:37 +0000 (22:43 -0400)]
doc: Document valid checkpoint_timeout range

Author: Fabien COELHO <coelho@cri.ensmp.fr>

10 years agoFix whitespace
Peter Eisentraut [Tue, 26 Aug 2014 21:26:45 +0000 (17:26 -0400)]
Fix whitespace

10 years agoFix typo in b34e37bfefbed1bf9396dde18f308d8b96fd176c.
Robert Haas [Tue, 26 Aug 2014 19:58:50 +0000 (15:58 -0400)]
Fix typo in b34e37bfefbed1bf9396dde18f308d8b96fd176c.

Spotted by Peter Geoghegan.

10 years agoFix superuser concurrent refresh of matview owned by another.
Kevin Grittner [Tue, 26 Aug 2014 14:56:26 +0000 (09:56 -0500)]
Fix superuser concurrent refresh of matview owned by another.

Use SECURITY_LOCAL_USERID_CHANGE while building temporary tables;
only escalate to SECURITY_RESTRICTED_OPERATION while potentially
running user-supplied code.  The more secure mode was preventing
temp table creation.  Add regression tests to cover this problem.

This fixes Bug #11208 reported by Bruno Emanuel de Andrade Silva.

Backpatch to 9.4, where the bug was introduced.

10 years agoMark IsBinaryUpgrade as PGDLLIMPORT to fix windows builds after a7ae1dc.
Andres Freund [Tue, 26 Aug 2014 13:25:18 +0000 (15:25 +0200)]
Mark IsBinaryUpgrade as PGDLLIMPORT to fix windows builds after a7ae1dc.

Author: David Rowley

10 years agoImplement IF NOT EXISTS for CREATE SEQUENCE.
Heikki Linnakangas [Tue, 26 Aug 2014 13:05:18 +0000 (16:05 +0300)]
Implement IF NOT EXISTS for CREATE SEQUENCE.

Fabrízio de Royes Mello

10 years agoSpecify the port in dblink and postgres_fdw tests.
Andres Freund [Tue, 26 Aug 2014 10:21:06 +0000 (12:21 +0200)]
Specify the port in dblink and postgres_fdw tests.

That allows to run those tests against a postmaster listening on a
nonstandard port without requiring to export PGPORT in postmaster's
environment.

This still doesn't support connecting to a nondefault host without
configuring it in postmaster's environment. That's harder and less
frequently used though. So this is a useful step.

10 years agoDon't hardcode contrib_regression dbname in postgres_fdw and dblink tests.
Andres Freund [Tue, 26 Aug 2014 00:54:53 +0000 (02:54 +0200)]
Don't hardcode contrib_regression dbname in postgres_fdw and dblink tests.

That allows parallel installcheck to succeed inside contrib/. The
output is not particularly pretty unless make's -O option to
synchronize the output is used.

There's other tests, outside contrib, that use a hardcoded,
non-unique, database name. Those prohibit paralell installcheck to be
used across more directories; but that's something for a separate
patch.

10 years agoShow schema names in pg_dump verbose output.
Heikki Linnakangas [Tue, 26 Aug 2014 08:50:48 +0000 (11:50 +0300)]
Show schema names in pg_dump verbose output.

Fabrízio de Royes Mello, reviewed by Michael Paquier

10 years agopg_upgrade: prevent automatic oid assignment
Bruce Momjian [Tue, 26 Aug 2014 02:19:05 +0000 (22:19 -0400)]
pg_upgrade:  prevent automatic oid assignment

Prevent automatic oid assignment when in binary upgrade mode.  Also
throw an error when contrib/pg_upgrade_support functions are called when
not in binary upgrade mode.

This prevent automatically-assigned oids from conflicting with later
pre-assigned oids coming from the old cluster.  It also makes sure oids
are preserved in call important cases.

10 years agorename macro isTempOrToastNamespace to isTempOrTempToastNamespace
Bruce Momjian [Tue, 26 Aug 2014 01:28:19 +0000 (21:28 -0400)]
rename macro isTempOrToastNamespace to isTempOrTempToastNamespace

Done for clarity

10 years agopg_upgrade: use CTE query rather than temp table
Bruce Momjian [Tue, 26 Aug 2014 01:22:08 +0000 (21:22 -0400)]
pg_upgrade:  use CTE query rather than temp table

Now that 8.3 is not supported, we can use a CTE and not temp tables.
This allows for auto-oid assignment protection in a future patch.

10 years agopg_upgrade docs: update docs for 8.3 support removal
Bruce Momjian [Tue, 26 Aug 2014 00:11:48 +0000 (20:11 -0400)]
pg_upgrade docs:  update docs for 8.3 support removal

10 years agorevert "Throw error for ALTER TABLE RESET of an invalid option"
Bruce Momjian [Tue, 26 Aug 2014 00:07:37 +0000 (20:07 -0400)]
revert "Throw error for ALTER TABLE RESET of an invalid option"

Reverts commits 73d78e11a0f7183c80b93eefbbb6026fe9664015 and
b0488e5c4fbfdce8acc989bdc17d9f0ec09ac281.  Also reverts pg_upgrade
changes.

10 years agopg_upgrade: remove support for 8.3 old clusters
Bruce Momjian [Tue, 26 Aug 2014 00:05:07 +0000 (20:05 -0400)]
pg_upgrade:  remove support for 8.3 old clusters

This trims down the code, and is in preparation for hardening pg_upgrade
against auto-oid assignment.

10 years agopg_upgrade: add SET log_min_error_statement = warning
Bruce Momjian [Mon, 25 Aug 2014 21:24:33 +0000 (17:24 -0400)]
pg_upgrade:  add SET log_min_error_statement = warning

Add to commit 73d78e11a0f7183c80b93eefbbb6026fe9664015

10 years agoThrow error for ALTER TABLE RESET of an invalid option
Bruce Momjian [Mon, 25 Aug 2014 21:06:40 +0000 (17:06 -0400)]
Throw error for ALTER TABLE RESET of an invalid option

Also adjust pg_upgrade to not use this method for optional TOAST table
creation.

Patch by Fabrízio de Royes Mello

10 years agopg_ctl, pg_upgrade: allow multiple -o/-O options, append them
Bruce Momjian [Mon, 25 Aug 2014 20:30:26 +0000 (16:30 -0400)]
pg_ctl, pg_upgrade:  allow multiple -o/-O options, append them

Report by Pavel Raiskup

10 years agoupgrade docs: highlight pg_upgrade, warn about globals preservation
Bruce Momjian [Mon, 25 Aug 2014 19:34:51 +0000 (15:34 -0400)]
upgrade docs:  highlight pg_upgrade, warn about globals preservation

Also, remove OID preservation mention, mention non-text dump formats

Backpatch through 9.4

10 years agoRevert XactLockTableWait context setup in conditional multixact wait
Alvaro Herrera [Mon, 25 Aug 2014 19:33:17 +0000 (15:33 -0400)]
Revert XactLockTableWait context setup in conditional multixact wait

There's no point in setting up a context error callback when doing
conditional lock acquisition, because we never actually wait and so the
user wouldn't be able to see the context message anywhere.  In fact,
this is more in line with what ConditionalXactLockTableWait is doing.

Backpatch to 9.4, where this was added.

10 years agoUse newly added InvalidCommandId instead of 0
Alvaro Herrera [Mon, 25 Aug 2014 19:32:30 +0000 (15:32 -0400)]
Use newly added InvalidCommandId instead of 0

The symbol was added by 71901ab6d; the original code was introduced by
6868ed749.  Development of both overlapped which is why we apparently
failed to notice.

This is a (very slight) behavior change, so I'm not backpatching this to
9.4 for now, even though the symbol does exist there.

10 years agoDefineType: return base type OID, not its array
Alvaro Herrera [Mon, 25 Aug 2014 19:32:26 +0000 (15:32 -0400)]
DefineType: return base type OID, not its array

Event triggers want to know the OID of the interesting object created,
which is the main type.  The array created as part of the operation is
just a subsidiary object which is not of much interest.

10 years agoHave CREATE TABLE AS and REFRESH return an OID
Alvaro Herrera [Mon, 25 Aug 2014 19:32:18 +0000 (15:32 -0400)]
Have CREATE TABLE AS and REFRESH return an OID

Other DDL commands are already returning the OID, which is required for
future additional event trigger work.  This is merely making these
commands in line with the rest of utility command support.

10 years agoMore psprintf goodness
Alvaro Herrera [Mon, 25 Aug 2014 19:32:15 +0000 (15:32 -0400)]
More psprintf goodness

10 years agoOops, forgot to "git add" one last change
Alvaro Herrera [Mon, 25 Aug 2014 19:32:06 +0000 (15:32 -0400)]
Oops, forgot to "git add" one last change

10 years agoEditorial review of SET UNLOGGED
Alvaro Herrera [Mon, 25 Aug 2014 17:50:19 +0000 (13:50 -0400)]
Editorial review of SET UNLOGGED

Add a succint comment explaining why it's correct to change the
persistence in this way.  Also s/loggedness/persistence/ because native
speakers didn't like the latter term.

Fabrízio and Álvaro

10 years agoAdd regression tests for SELECT FOR UPDATE/SHARE NOWAIT.
Heikki Linnakangas [Mon, 25 Aug 2014 17:12:01 +0000 (20:12 +0300)]
Add regression tests for SELECT FOR UPDATE/SHARE NOWAIT.

Thomas Munro

10 years agoFix typos in some error messages thrown by extension scripts when fed to psql.
Andres Freund [Mon, 25 Aug 2014 16:30:37 +0000 (18:30 +0200)]
Fix typos in some error messages thrown by extension scripts when fed to psql.

Some of the many error messages introduced in 458857cc missed 'FROM
unpackaged'. Also e016b724 and 45ffeb7e forgot to quote extension
version numbers.

Backpatch to 9.1, just like 458857cc which introduced the messages. Do
so because the error messages thrown when the wrong command is copy &
pasted aren't easy to understand.

10 years agoDon't track DEALLOCATE in pg_stat_statements.
Heikki Linnakangas [Mon, 25 Aug 2014 16:13:24 +0000 (19:13 +0300)]
Don't track DEALLOCATE in pg_stat_statements.

We also don't track PREPARE, nor do we track planning time in general, so
let's ignore DEALLOCATE as well for consistency.

Backpatch to 9.4, but not further than that. Although it seems unlikely that
anyone is relying on the current behavior, this is a behavioral change.

Fabien Coelho

10 years agoFix another ancient memory-leak bug in relcache.c.
Tom Lane [Sun, 24 Aug 2014 15:56:52 +0000 (11:56 -0400)]
Fix another ancient memory-leak bug in relcache.c.

CheckConstraintFetch() leaked a cstring in the caller's context for each
CHECK constraint expression it copied into the relcache.  Ordinarily that
isn't problematic, but it can be during CLOBBER_CACHE testing because so
many reloads can happen during a single query; so complicate the code
slightly to allow freeing the cstring after use.  Per testing on buildfarm
member barnacle.

This is exactly like the leak fixed in AttrDefaultFetch() by commit
078b2ed291c758e7125d72c3a235f128d40a232b.  (Yes, this time I did look for
other instances of the same coding pattern :-(.)  Like that patch, no
back-patch, since it seems unlikely that there's any problem except under
very artificial test conditions.

BTW, it strikes me that both of these places would require further work
comparable to commit ab8c84db2f7af008151b848cf1d6a4672a39eecd, if we ever
supported defaults or check constraints on system catalogs: they both
assume they are copying into an empty relcache data structure, and that
conceivably wouldn't be the case during recursive reloading of a system
catalog.  This does not seem worth worrying about for the moment, since
there is no near-term prospect of supporting any such thing.  So I'll
just note the possibility for the archives' sake.

10 years agodoc: Improve pg_restore help output
Peter Eisentraut [Sat, 23 Aug 2014 04:23:34 +0000 (00:23 -0400)]
doc: Improve pg_restore help output

Add a note that some options can be specified multiple times to select
multiple objects to restore.  This replaces the somewhat confusing use
of plurals in the option descriptions themselves.

10 years agoImplement ALTER TABLE .. SET LOGGED / UNLOGGED
Alvaro Herrera [Fri, 22 Aug 2014 18:27:00 +0000 (14:27 -0400)]
Implement ALTER TABLE .. SET LOGGED / UNLOGGED

This enables changing permanent (logged) tables to unlogged and
vice-versa.

(Docs for ALTER TABLE / SET TABLESPACE got shuffled in an order that
hopefully makes more sense than the original.)

Author: Fabrízio de Royes Mello
Reviewed by: Christoph Berg, Andres Freund, Thom Brown
Some tweaking by Álvaro Herrera

10 years agoFix outdated comment
Alvaro Herrera [Fri, 22 Aug 2014 17:55:34 +0000 (13:55 -0400)]
Fix outdated comment

10 years agoFix corner-case behaviors in JSON/JSONB field extraction operators.
Tom Lane [Fri, 22 Aug 2014 17:17:58 +0000 (13:17 -0400)]
Fix corner-case behaviors in JSON/JSONB field extraction operators.

Cause the path extraction operators to return their lefthand input,
not NULL, if the path array has no elements.  This seems more consistent
since the case ought to correspond to applying the simple extraction
operator (->) zero times.

Cause other corner cases in field/element/path extraction to return NULL
rather than failing.  This behavior is arguably more useful than throwing
an error, since it allows an expression index using these operators to be
built even when not all values in the column are suitable for the
extraction being indexed.  Moreover, we already had multiple
inconsistencies between the path extraction operators and the simple
extraction operators, as well as inconsistencies between the JSON and
JSONB code paths.  Adopt a uniform rule of returning NULL rather than
throwing an error when the JSON input does not have a structure that
permits the request to be satisfied.

Back-patch to 9.4.  Update the release notes to list this as a behavior
change since 9.3.

10 years agoFix newly introduced misspelling of existence in pg_buffercache.
Andres Freund [Fri, 22 Aug 2014 07:25:47 +0000 (09:25 +0200)]
Fix newly introduced misspelling of existence in pg_buffercache.

Peter Geoghegan

10 years agoFix comment in pg_basebackup.
Heikki Linnakangas [Fri, 22 Aug 2014 10:45:38 +0000 (13:45 +0300)]
Fix comment in pg_basebackup.

The option is called --tablespace-mapping, not --tablespace.

Amit Kapila

10 years agoChange the way pg_basebackup's tablespace mapping is implemented.
Heikki Linnakangas [Fri, 22 Aug 2014 07:16:26 +0000 (10:16 +0300)]
Change the way pg_basebackup's tablespace mapping is implemented.

Previously, we would first create the symlinks the way they are in the
original system, and at the end replace them with the mapped symlinks.
That never really made much sense, so now we create the symlink pointing
to the correct location to begin with, so that there's no need to fix
them at the end.

The old coding didn't work correctly on Windows, because Windows junction
points look more like directories than files, and ought to be removed with
rmdir rather than unlink. Also, it incorrectly used "%d" rather than "%u"
to print an Oid, but that's gone now.

Report and patch by Amit Kapila, with minor changes by me. Reviewed by
MauMau. Backpatch to 9.4, where the --tablespace feature was added.

10 years agoFix whitespace
Peter Eisentraut [Fri, 22 Aug 2014 01:37:41 +0000 (21:37 -0400)]
Fix whitespace

10 years agoRework 'MOVE ALL' to 'ALTER .. ALL IN TABLESPACE'
Stephen Frost [Thu, 21 Aug 2014 23:06:17 +0000 (19:06 -0400)]
Rework 'MOVE ALL' to 'ALTER .. ALL IN TABLESPACE'

As 'ALTER TABLESPACE .. MOVE ALL' really didn't change the tablespace
but instead changed objects inside tablespaces, it made sense to
rework the syntax and supporting functions to operate under the
'ALTER (TABLE|INDEX|MATERIALIZED VIEW)' syntax and to be in
tablecmds.c.

Pointed out by Alvaro, who also suggested the new syntax.

Back-patch to 9.4.

10 years agoAdd pinning_backends column to the pg_buffercache extension.
Andres Freund [Thu, 21 Aug 2014 22:28:37 +0000 (00:28 +0200)]
Add pinning_backends column to the pg_buffercache extension.

The new column shows how many backends have a buffer pinned. That can
be useful during development or to diagnose production issues
e.g. caused by vacuum waiting for cleanup locks.

To handle upgrades transparently - the extension might be used in
views - deal with callers expecting the old number of columns.

Reviewed by Fujii Masao and Rajeev rastogi.

10 years agoAdd #define INT64_MODIFIER for the printf length modifier for 64-bit ints.
Heikki Linnakangas [Thu, 21 Aug 2014 06:56:44 +0000 (09:56 +0300)]
Add #define INT64_MODIFIER for the printf length modifier for 64-bit ints.

We have had INT64_FORMAT and UINT64_FORMAT for a long time, but that's not
good enough if you want something more exotic, like "%20lld".

Abhijit Menon-Sen, per Andres Freund's suggestion.

10 years agoMore regression test cases for json/jsonb extraction operators.
Tom Lane [Wed, 20 Aug 2014 23:05:05 +0000 (19:05 -0400)]
More regression test cases for json/jsonb extraction operators.

Cover some cases I omitted before, such as null and empty-string
elements in the path array.  This exposes another inconsistency:
json_extract_path complains about empty path elements but
jsonb_extract_path does not.

10 years agoFix core dump in jsonb #> operator, and add regression test cases.
Tom Lane [Wed, 20 Aug 2014 20:48:35 +0000 (16:48 -0400)]
Fix core dump in jsonb #> operator, and add regression test cases.

jsonb's #> operator segfaulted (dereferencing a null pointer) if the RHS
was a zero-length array, as reported in bug #11207 from Justin Van Winkle.
json's #> operator returns NULL in such cases, so for the moment let's
make jsonb act likewise.

Also add a bunch of regression test queries memorializing the -> and #>
operators' behavior for this and other corner cases.

There is a good argument for changing some of these behaviors, as they
are not very consistent with each other, and throwing an error isn't
necessarily a desirable behavior for operators that are likely to be
used in indexes.  However, everybody can agree that a core dump is the
Wrong Thing, and we need test cases even if we decide to change their
expected output later.

10 years agopg_upgrade: adjust logging to use QUERY_ALLOC lengths
Bruce Momjian [Wed, 20 Aug 2014 17:03:58 +0000 (13:03 -0400)]
pg_upgrade:  adjust logging to use QUERY_ALLOC lengths

Allows the logging to print the entire text of failed queries, rather
than a truncated version.