]> granicus.if.org Git - postgresql/log
postgresql
11 years agoAllow background workers to be started dynamically.
Robert Haas [Tue, 16 Jul 2013 17:02:15 +0000 (13:02 -0400)]
Allow background workers to be started dynamically.

There is a new API, RegisterDynamicBackgroundWorker, which allows
an ordinary user backend to register a new background writer during
normal running.  This means that it's no longer necessary for all
background workers to be registered during processing of
shared_preload_libraries, although the option of registering workers
at that time remains available.

When a background worker exits and will not be restarted, the
slot previously used by that background worker is automatically
released and becomes available for reuse.  Slots used by background
workers that are configured for automatic restart can't (yet) be
released without shutting down the system.

This commit adds a new source file, bgworker.c, and moves some
of the existing control logic for background workers there.
Previously, there was little enough logic that it made sense to
keep everything in postmaster.c, but not any more.

This commit also makes the worker_spi contrib module into an
extension and adds a new function, worker_spi_launch, which can
be used to demonstrate the new facility.

11 years agoFix PQconninfoParse error message handling
Peter Eisentraut [Tue, 16 Jul 2013 00:04:14 +0000 (20:04 -0400)]
Fix PQconninfoParse error message handling

The returned error message already includes a newline, but the callers
were adding their own when printing it out.

11 years agoCheck get_tle_by_resno() result before deref
Stephen Frost [Mon, 15 Jul 2013 18:53:17 +0000 (14:53 -0400)]
Check get_tle_by_resno() result before deref

When creating a sort to support a group by, we need to look up the
target entry in the target list by the resno using get_tle_by_resno().
This particular code-path didn't check the result prior to attempting
to dereference it, while all other callers did.  While I can't see a
way for this usage of get_tle_by_resno() to fail (you can't ask for
a column to be sorted on which isn't included in the group by), it's
probably best to check that we didn't end up with a NULL somehow
anyway than risk the segfault.

I'm willing to back-patch this if others feel it's necessary, but my
guess is new features are what might tickle this rather than anything
existing.

Missing check spotted by the Coverity scanner.

11 years agoTab completion for \lo_import
Robert Haas [Mon, 15 Jul 2013 18:29:17 +0000 (14:29 -0400)]
Tab completion for \lo_import

Josh Kupershmidt

11 years agoAssert that syscache lookups don't happen outside transactions.
Robert Haas [Mon, 15 Jul 2013 17:31:36 +0000 (13:31 -0400)]
Assert that syscache lookups don't happen outside transactions.

Andres Freund

11 years agoRegression tests for LOCK TABLE.
Robert Haas [Mon, 15 Jul 2013 16:29:34 +0000 (12:29 -0400)]
Regression tests for LOCK TABLE.

Robins Tharakan, reviewed by Szymon Guz, substantially revised by me.

11 years agovacuumlo: Use a cursor to limit client-side memory usage.
Robert Haas [Mon, 15 Jul 2013 14:48:44 +0000 (10:48 -0400)]
vacuumlo: Use a cursor to limit client-side memory usage.

This prevents the client from gobbling up too much memory when the
number of large objects to be removed is very large.

Andrew Dunstan, reviewed by Josh Kupershmidt

11 years agoCorrect off-by-one when reading from pipe
Stephen Frost [Mon, 15 Jul 2013 14:42:27 +0000 (10:42 -0400)]
Correct off-by-one when reading from pipe

In pg_basebackup.c:reached_end_position(), we're reading from an
internal pipe with our own background process but we're possibly
reading more bytes than will actually fit into our buffer due to
an off-by-one error.  As we're reading from an internal pipe
there's no real risk here, but it's good form to not depend on
such convenient arrangements.

Bug spotted by the Coverity scanner.

Back-patch to 9.2 where this showed up.

11 years agoCheck version before allocating PQExpBuffer
Stephen Frost [Mon, 15 Jul 2013 01:17:59 +0000 (21:17 -0400)]
Check version before allocating PQExpBuffer

In pg_dump.c:getEventTriggers, check what major version we are on
before calling createPQExpBuffer() to avoid leaking that bit of
memory.

Leak discovered by the Coverity scanner.

Back-patch to 9.3 where support for dumping event triggers was
added.

11 years agoDocument the OVER keyword as being unreserved.
Noah Misch [Sun, 14 Jul 2013 23:49:02 +0000 (19:49 -0400)]
Document the OVER keyword as being unreserved.

It became so in commit 5893ffa79c03824f34ae3d37f211381fd1c17283.

David Fetter, extracted from a larger patch.

11 years agoFix resource leak in initdb -X option
Stephen Frost [Sun, 14 Jul 2013 21:44:29 +0000 (17:44 -0400)]
Fix resource leak in initdb -X option

When creating the symlink for the xlog directory, free the string
which stores the link location.  Not really an issue but it doesn't
hurt to be good about this- prior cleanups have fixed similar
issues.

Leak found by the Coverity scanner.

Not back-patching as I don't see it being worth the code churn.

11 years agoBe sure to close() file descriptor on error case
Stephen Frost [Sun, 14 Jul 2013 21:30:43 +0000 (17:30 -0400)]
Be sure to close() file descriptor on error case

In receivelog.c:writeTimeLineHistoryFile(), we were not properly
closing the open'd file descriptor in error cases.  While this
wouldn't matter much if we were about to exit due to such an
error, that's not the case with pg_receivexlog as it can be a
long-running process and these errors are non-fatal.

This resource leak was found by the Coverity scanner.

Back-patch to 9.3 where this issue first appeared.

11 years agoEnsure 64bit arithmetic when calculating tapeSpace
Stephen Frost [Sun, 14 Jul 2013 20:26:16 +0000 (16:26 -0400)]
Ensure 64bit arithmetic when calculating tapeSpace

In tuplesort.c:inittapes(), we calculate tapeSpace by first figuring
out how many 'tapes' we can use (maxTapes) and then multiplying the
result by the tape buffer overhead for each.  Unfortunately, when
we are on a system with an 8-byte long, we allow work_mem to be
larger than 2GB and that allows maxTapes to be large enough that the
32bit arithmetic can overflow when multiplied against the buffer
overhead.

When this overflow happens, we end up adding the overflow to the
amount of space available, causing the amount of memory allocated to
be larger than work_mem.

Note that to reach this point, you have to set work mem to at least
24GB and be sorting a set which is at least that size.  Given that a
user who can set work_mem to 24GB could also set it even higher, if
they were looking to run the system out of memory, this isn't
considered a security issue.

This overflow risk was found by the Coverity scanner.

Back-patch to all supported branches, as this issue has existed
since before 8.4.

11 years agopg_isready: Message improvement
Peter Eisentraut [Sun, 14 Jul 2013 19:53:56 +0000 (15:53 -0400)]
pg_isready: Message improvement

11 years agopg_receivexlog - Exit on failure to parse
Stephen Frost [Sun, 14 Jul 2013 19:31:23 +0000 (15:31 -0400)]
pg_receivexlog - Exit on failure to parse

In streamutil.c:GetConnection(), upgrade failure to parse the
connection string to an exit(1) instead of simply returning NULL.
Most callers already immediately exited, but pg_receivexlog would
loop on this case, continually trying to re-parse the connection
string (which can't be changed after pg_receivexlog has started).

GetConnection() was already expected to exit(1) in some cases
(eg: failure to allocate memory or if unable to determine the
integer_datetimes flag), so this change shouldn't surprise anyone.

Began looking at this due to the Coverity scanner complaining that
we were leaking err_msg in this case- no longer an issue since we
just exit(1) immediately.

11 years agoDuring parallel pg_dump, free commands from master
Stephen Frost [Sun, 14 Jul 2013 18:35:26 +0000 (14:35 -0400)]
During parallel pg_dump, free commands from master

The command strings read by the child processes during parallel
pg_dump, after being read and handled, were not being free'd.
This patch corrects this relatively minor memory leak.

Leak found by the Coverity scanner.

Back patch to 9.3 where parallel pg_dump was introduced.

11 years agoAdd session_preload_libraries configuration parameter
Peter Eisentraut [Thu, 13 Jun 2013 02:28:24 +0000 (22:28 -0400)]
Add session_preload_libraries configuration parameter

This is like shared_preload_libraries except that it takes effect at
backend start and can be changed without a full postmaster restart.  It
is like local_preload_libraries except that it is still only settable by
a superuser.  This can be a better way to load modules such as
auto_explain.

Since there are now three preload parameters, regroup the documentation
a bit.  Put all parameters into one section, explain common
functionality only once, update the descriptions to reflect current and
future realities.

Reviewed-by: Dimitri Fontaine <dimitri@2ndQuadrant.fr>
11 years agoSwitch user ID to the object owner when populating a materialized view.
Noah Misch [Fri, 12 Jul 2013 22:21:22 +0000 (18:21 -0400)]
Switch user ID to the object owner when populating a materialized view.

This makes superuser-issued REFRESH MATERIALIZED VIEW safe regardless of
the object's provenance.  REINDEX is an earlier example of this pattern.
As a downside, functions called from materialized views must tolerate
running in a security-restricted operation.  CREATE MATERIALIZED VIEW
need not change user ID.  Nonetheless, avoid creation of materialized
views that will invariably fail REFRESH by making it, too, start a
security-restricted operation.

Back-patch to 9.3 so materialized views have this from the beginning.

Reviewed by Kevin Grittner.

11 years agoMake comments reflect that omission of SPI_gettypmod() is intentional.
Noah Misch [Fri, 12 Jul 2013 22:07:46 +0000 (18:07 -0400)]
Make comments reflect that omission of SPI_gettypmod() is intentional.

11 years agopg_dump: Formatting cleanup of new messages
Peter Eisentraut [Fri, 12 Jul 2013 01:48:09 +0000 (21:48 -0400)]
pg_dump: Formatting cleanup of new messages

11 years agopg_upgrade: document possible pg_hba.conf options
Bruce Momjian [Thu, 11 Jul 2013 13:43:22 +0000 (09:43 -0400)]
pg_upgrade: document possible pg_hba.conf options
Previously, pg_upgrade docs recommended using .pgpass if using MD5
authentication to avoid being prompted for a password.  Turns out pg_ctl
never prompts for a password, so MD5 requires .pgpass --- document that.
Also recommend 'peer' for authentication too.
Backpatch back to 9.1.

11 years agodoc: Replace link to pgFouine with pgBadger
Peter Eisentraut [Thu, 11 Jul 2013 02:40:41 +0000 (22:40 -0400)]
doc: Replace link to pgFouine with pgBadger

From: Ian Lawrence Barwick <barwick@gmail.com>

11 years agoAdd coverage/ to .gitignore
Peter Eisentraut [Wed, 10 Jul 2013 01:12:17 +0000 (21:12 -0400)]
Add coverage/ to .gitignore

11 years agoFix lack of message pluralization
Peter Eisentraut [Wed, 10 Jul 2013 00:49:44 +0000 (20:49 -0400)]
Fix lack of message pluralization

11 years agoFix memory barrier support on icc on ia64, 2nd attempt.
Heikki Linnakangas [Tue, 9 Jul 2013 08:31:26 +0000 (11:31 +0300)]
Fix memory barrier support on icc on ia64, 2nd attempt.

Itanium doesn't have the mfence instruction - that's a 386 thing. Use the
"mf" instruction instead.

This reverts the previous commit to add "#include <emmintrinsic.h>"; the
problem was not with a missing #include.

11 years agoAdd #include needed for _mm_mfence() intrinsic on ia64.
Heikki Linnakangas [Tue, 9 Jul 2013 07:23:18 +0000 (10:23 +0300)]
Add #include needed for _mm_mfence() intrinsic on ia64.

Hopefully this fixes the build failure on buildfarm member dugong.

11 years agoFix bool abuse
Peter Eisentraut [Tue, 9 Jul 2013 02:42:39 +0000 (22:42 -0400)]
Fix bool abuse

path_encode's "closed" argument used to take three values: TRUE, FALSE,
or -1, while being of type bool.  Replace that with a three-valued enum
for more clarity.

11 years agoFix mention of htup.h in pageinspect docs
Alvaro Herrera [Mon, 8 Jul 2013 21:11:55 +0000 (17:11 -0400)]
Fix mention of htup.h in pageinspect docs

It's htup_details.h now.

Jeff Janes

11 years agoFix Windows build.
Heikki Linnakangas [Mon, 8 Jul 2013 14:28:48 +0000 (17:28 +0300)]
Fix Windows build.

Was broken by my xloginsert scaling patch. XLogCtl global variable needs
to be initialized in each process, as it's not inherited by fork() on
Windows.

11 years agoFix pg_test_fsync, broken by xloginsert scaling patch.
Heikki Linnakangas [Mon, 8 Jul 2013 10:01:11 +0000 (13:01 +0300)]
Fix pg_test_fsync, broken by xloginsert scaling patch.

I didn't realize that ALIGNOF_XLOG_BUFFER was used in pg_test_fsync.

11 years agoImprove scalability of WAL insertions.
Heikki Linnakangas [Mon, 8 Jul 2013 08:23:56 +0000 (11:23 +0300)]
Improve scalability of WAL insertions.

This patch replaces WALInsertLock with a number of WAL insertion slots,
allowing multiple backends to insert WAL records to the WAL buffers
concurrently. This is particularly useful for parallel loading large amounts
of data on a system with many CPUs.

This has one user-visible change: switching to a new WAL segment with
pg_switch_xlog() now fills the remaining unused portion of the segment with
zeros. This potentially adds some overhead, but it has been a very common
practice by DBA's to clear the "tail" of the segment with an external
pg_clearxlogtail utility anyway, to make the WAL files compress better.
With this patch, it's no longer necessary to do that.

This patch adds a new GUC, xloginsert_slots, to tune the number of WAL
insertion slots. Performance testing suggests that the default, 8, works
pretty well for all kinds of worklods, but I left the GUC in place to allow
others with different hardware to test that easily. We might want to remove
that before release.

Reviewed by Andres Freund.

11 years agoFix planning of parameterized appendrel paths with expensive join quals.
Tom Lane [Mon, 8 Jul 2013 02:37:24 +0000 (22:37 -0400)]
Fix planning of parameterized appendrel paths with expensive join quals.

The code in set_append_rel_pathlist() for building parameterized paths
for append relations (inheritance and UNION ALL combinations) supposed
that the cheapest regular path for a child relation would still be cheapest
when reparameterized.  Which might not be the case, particularly if the
added join conditions are expensive to compute, as in a recent example from
Jeff Janes.  Fix it to compare child path costs *after* reparameterizing.
We can short-circuit that if the cheapest pre-existing path is already
parameterized correctly, which seems likely to be true often enough to be
worth checking for.

Back-patch to 9.2 where parameterized paths were introduced.

11 years agopg_isready: Make --help output more consistent with other utilities
Peter Eisentraut [Sun, 7 Jul 2013 20:01:29 +0000 (16:01 -0400)]
pg_isready: Make --help output more consistent with other utilities

11 years agopg_resetxlog: Make --help consistent with man page
Peter Eisentraut [Sun, 7 Jul 2013 19:56:23 +0000 (15:56 -0400)]
pg_resetxlog: Make --help consistent with man page

Use "MXID" as placeholder for -m option, instead of just "XID".

11 years agopg_upgrade: document link options
Bruce Momjian [Sun, 7 Jul 2013 19:57:26 +0000 (15:57 -0400)]
pg_upgrade:  document link options
Document that tablespaces and pg_xlog can be on different file systems
for pg_upgrade --link mode.
Backpatch to 9.3.

11 years agoFix include-guard
Magnus Hagander [Sun, 7 Jul 2013 11:36:20 +0000 (13:36 +0200)]
Fix include-guard

Looks like a cut/paste error in the original addition of the file.

Andres Freund

11 years agopgbench: Silence compiler warning
Peter Eisentraut [Sun, 7 Jul 2013 11:25:39 +0000 (07:25 -0400)]
pgbench: Silence compiler warning

Explicitly ignore return value from write(), to silence warning.  This
warning only appeared under --disable-thread-safety.

11 years agoPL/Python: Make regression tests pass with older Python versions
Peter Eisentraut [Sun, 7 Jul 2013 00:36:19 +0000 (20:36 -0400)]
PL/Python: Make regression tests pass with older Python versions

Avoid output formatting differences by printing str() instead of repr()
of the value.

11 years agoHandle posix_fallocate() errors.
Jeff Davis [Sat, 6 Jul 2013 20:46:04 +0000 (13:46 -0700)]
Handle posix_fallocate() errors.

On some platforms, posix_fallocate() is available but may still return
EINVAL if the underlying filesystem does not support it.  So, in case
of an error, fall through to the alternate implementation that just
writes zeros.

Per buildfarm failure and analysis by Tom Lane.

11 years agoAlso escape double quotes for ECPG's #line statement.
Michael Meskes [Sat, 6 Jul 2013 20:08:53 +0000 (22:08 +0200)]
Also escape double quotes for ECPG's #line statement.

11 years agoRename a function to avoid naming conflict in parallel regression tests.
Tom Lane [Sat, 6 Jul 2013 15:16:50 +0000 (11:16 -0400)]
Rename a function to avoid naming conflict in parallel regression tests.

Commit 31a891857a128828d47d93c63e041f3b69cbab70 added some tests in
plpgsql.sql that used a function rather unthinkingly named "foo()".
However, rangefuncs.sql has some much older tests that create a function
of that name, and since these test scripts run in parallel, there is a
chance of failures if the timing is just right.  Use another name to
avoid that.  Per buildfarm (failure seen today on "hamerkop", but
probably it's happened before and not been noticed).

11 years agoPL/Python: Convert numeric to Decimal
Peter Eisentraut [Sat, 6 Jul 2013 02:41:25 +0000 (22:41 -0400)]
PL/Python: Convert numeric to Decimal

The old implementation converted PostgreSQL numeric to Python float,
which was always considered a shortcoming.  Now numeric is converted to
the Python Decimal object.  Either the external cdecimal module or the
standard library decimal module are supported.

From: Szymon Guz <mabewlun@gmail.com>
From: Ronan Dunklau <rdunklau@gmail.com>
Reviewed-by: Steve Singer <steve@ssinger.info>
11 years agoUpdate messages, comments and documentation for materialized views.
Noah Misch [Fri, 5 Jul 2013 19:25:51 +0000 (15:25 -0400)]
Update messages, comments and documentation for materialized views.

All instances of the verbiage lagging the code.  Back-patch to 9.3,
where materialized views were introduced.

11 years agoUse posix_fallocate() for new WAL files, where available.
Jeff Davis [Fri, 5 Jul 2013 19:30:29 +0000 (12:30 -0700)]
Use posix_fallocate() for new WAL files, where available.

This function is more efficient than actually writing out zeroes to
the new file, per microbenchmarks by Jon Nelson. Also, it may reduce
the likelihood of WAL file fragmentation.

Jon Nelson, with review by Andres Freund, Greg Smith and me.

11 years agoRemove stray | character
Magnus Hagander [Fri, 5 Jul 2013 14:21:08 +0000 (16:21 +0200)]
Remove stray | character

Erikjan Rijkers

11 years agoFix spelling error
Magnus Hagander [Fri, 5 Jul 2013 14:19:16 +0000 (16:19 +0200)]
Fix spelling error

Reported by Kevin Hale Boyes

11 years agoExpose the estimation of number of changed tuples since last analyze
Magnus Hagander [Fri, 5 Jul 2013 13:02:09 +0000 (15:02 +0200)]
Expose the estimation of number of changed tuples since last analyze

This value, now pg_stat_all_tables.n_mod_since_analyze, was already
tracked and used by autovacuum, but not exposed to the user.

Mark Kirkwood, review by Laurenz Albe

11 years agoApploed patch by MauMau <maumau307@gmail.com> to escape filenames in #line statements.
Michael Meskes [Fri, 5 Jul 2013 09:07:16 +0000 (11:07 +0200)]
Apploed patch by MauMau <maumau307@gmail.com> to escape filenames in #line statements.

11 years agoUse type "int64" for memory accounting in tuplesort.c/tuplestore.c.
Noah Misch [Fri, 5 Jul 2013 03:09:54 +0000 (23:09 -0400)]
Use type "int64" for memory accounting in tuplesort.c/tuplestore.c.

Commit 263865a48973767ce8ed7b7788059a38a24a9f37 switched tuplesort.c and
tuplestore.c variables representing memory usage from type "long" to
type "Size".  This was unnecessary; I thought doing so avoided overflow
scenarios on 64-bit Windows, but guc.c already limited work_mem so as to
prevent the overflow.  It was also incomplete, not touching the logic
that assumed a signed data type.  Change the affected variables to
"int64".  This is perfect for 64-bit platforms, and it reduces the need
to contemplate platform-specific overflow scenarios.  It also puts us
close to being able to support work_mem over 2 GiB on 64-bit Windows.

Per report from Andres Freund.

11 years agoFix typo in comment.
Fujii Masao [Thu, 4 Jul 2013 17:47:49 +0000 (02:47 +0900)]
Fix typo in comment.

Michael Paquier

11 years agoAdd C comment about \copy bug in CSV mode
Bruce Momjian [Thu, 4 Jul 2013 17:09:52 +0000 (13:09 -0400)]
Add C comment about \copy bug in CSV mode
Comment: This code erroneously assumes '\.' on a line alone inside a
quoted CSV string terminates the \copy.
http://www.postgresql.org/message-id/E1TdNVQ-0001ju-GO@wrigleys.postgresql.org

11 years agoAdd contrib function references in the doc index
Bruce Momjian [Thu, 4 Jul 2013 15:33:08 +0000 (11:33 -0400)]
Add contrib function references in the doc index
Backpatch to 9.3.
Idea from Craig Ringer

11 years agoAdd new GUC, max_worker_processes, limiting number of bgworkers.
Robert Haas [Thu, 4 Jul 2013 15:24:24 +0000 (11:24 -0400)]
Add new GUC, max_worker_processes, limiting number of bgworkers.

In 9.3, there's no particular limit on the number of bgworkers;
instead, we just count up the number that are actually registered,
and use that to set MaxBackends.  However, that approach causes
problems for Hot Standby, which needs both MaxBackends and the
size of the lock table to be the same on the standby as on the
master, yet it may not be desirable to run the same bgworkers in
both places.  9.3 handles that by failing to notice the problem,
which will probably work fine in nearly all cases anyway, but is
not theoretically sound.

A further problem with simply counting the number of registered
workers is that new workers can't be registered without a
postmaster restart.  This is inconvenient for administrators,
since bouncing the postmaster causes an interruption of service.
Moreover, there are a number of applications for background
processes where, by necessity, the background process must be
started on the fly (e.g. parallel query).  While this patch
doesn't actually make it possible to register new background
workers after startup time, it's a necessary prerequisite.

Patch by me.  Review by Michael Paquier.

11 years agodocs: Clarify flag dependencies for background workers.
Robert Haas [Thu, 4 Jul 2013 15:11:56 +0000 (11:11 -0400)]
docs: Clarify flag dependencies for background workers.

BGWORKER_BACKEND_DATABASE_CONNECTION can only be used if
BGWORKER_SHMEM_ACCESS is also used.

Michael Paquier, with some tweaks by me.

11 years agodoc: Fix typo in event trigger documentation
Peter Eisentraut [Thu, 4 Jul 2013 14:27:33 +0000 (10:27 -0400)]
doc: Fix typo in event trigger documentation

From: Dimitri Fontaine <dimitri@2ndQuadrant.fr>

11 years agodoc: Add event trigger C API documentation
Peter Eisentraut [Thu, 4 Jul 2013 01:06:20 +0000 (21:06 -0400)]
doc: Add event trigger C API documentation

From: Dimitri Fontaine <dimitri@2ndQuadrant.fr>

11 years agoInstall all a Makefile's extension controls, not just the first.
Andrew Dunstan [Wed, 3 Jul 2013 23:03:31 +0000 (19:03 -0400)]
Install all a Makefile's extension controls, not just the first.

Bug introduced by commit 6697aa2bc25c83b88d6165340348a31328c35de6 and
reported by Robert Haas.

11 years agoGet rid of pg_class.reltoastidxid.
Fujii Masao [Wed, 3 Jul 2013 18:24:09 +0000 (03:24 +0900)]
Get rid of pg_class.reltoastidxid.

Treat TOAST index just the same as normal one and get the OID
of TOAST index from pg_index but not pg_class.reltoastidxid.
This change allows us to handle multiple TOAST indexes, and
which is required infrastructure for upcoming
REINDEX CONCURRENTLY feature.

Patch by Michael Paquier, reviewed by Andres Freund and me.

11 years agopg_buffercache: document column meanings
Bruce Momjian [Wed, 3 Jul 2013 18:19:44 +0000 (14:19 -0400)]
pg_buffercache: document column meanings
Improve documentation for usagecount and relforknumber.
Backpatch to 9.3.
Suggestion from Satoshi Nagayasu

11 years agoRevert "Hopefully-portable regression tests for CREATE/ALTER/DROP COLLATION."
Robert Haas [Wed, 3 Jul 2013 17:27:50 +0000 (13:27 -0400)]
Revert "Hopefully-portable regression tests for CREATE/ALTER/DROP COLLATION."

This reverts commit 263645305b8f14a3821e04dffa96fa7c1bc2ae86.

The buildfarm is sad.

11 years agoHopefully-portable regression tests for CREATE/ALTER/DROP COLLATION.
Robert Haas [Wed, 3 Jul 2013 16:24:26 +0000 (12:24 -0400)]
Hopefully-portable regression tests for CREATE/ALTER/DROP COLLATION.

The collate.linux.utf8 test covers some of the same territory, but
isn't portable and so probably does not get run often, or on
non-Linux platforms.  If this approach turns out to be sufficiently
portable, we may want to look at trimming the redundant tests out
of that file to avoid duplication.

Robins Tharakan, reviewed by Michael Paquier and Fabien Coelho,
with further changes and cleanup by me.

11 years agoFix handling of auto-updatable views on inherited tables.
Tom Lane [Wed, 3 Jul 2013 16:26:19 +0000 (12:26 -0400)]
Fix handling of auto-updatable views on inherited tables.

An INSERT into such a view should work just like an INSERT into its base
table, ie the insertion should go directly into that table ... not be
duplicated into each child table, as was happening before, per bug #8275
from Rushabh Lathia.  On the other hand, the current behavior for
UPDATE/DELETE seems reasonable: the update/delete traverses the child
tables, or not, depending on whether the view specifies ONLY or not.
Add some regression tests covering this area.

Dean Rasheed

11 years agoUnbreak postmaster restart-after-crash sequence
Alvaro Herrera [Wed, 3 Jul 2013 15:04:21 +0000 (11:04 -0400)]
Unbreak postmaster restart-after-crash sequence

In patch 82233ce7ea42, AbortStartTime wasn't being reset appropriately
after the restart sequence, causing subsequent iterations through
ServerLoop to malfunction.

11 years agoRegression tests for LISTEN/NOTIFY/UNLISTEN/pg_notify.
Robert Haas [Wed, 3 Jul 2013 15:06:45 +0000 (11:06 -0400)]
Regression tests for LISTEN/NOTIFY/UNLISTEN/pg_notify.

Robins Tharakan, reviewed by Szymon Guz

11 years agoAdditional regression tests for CREATE OPERATOR.
Robert Haas [Wed, 3 Jul 2013 14:48:26 +0000 (10:48 -0400)]
Additional regression tests for CREATE OPERATOR.

Robins Tharakan, reviewed by Szymon Guz

11 years agoExpose object name error fields in PL/pgSQL.
Noah Misch [Wed, 3 Jul 2013 11:29:23 +0000 (07:29 -0400)]
Expose object name error fields in PL/pgSQL.

Specifically, permit attaching them to the error in RAISE and retrieving
them from a caught error in GET STACKED DIAGNOSTICS.  RAISE enforces
nothing about the content of the fields; for its purposes, they are just
additional string fields.  Consequently, clarify in the protocol and
libpq documentation that the usual relationships between error fields,
like a schema name appearing wherever a table name appears, are not
universal.  This freedom has other applications; consider a FDW
propagating an error from an RDBMS having no schema support.

Back-patch to 9.3, where core support for the error fields was
introduced.  This prevents the confusion of having a release where libpq
exposes the fields and PL/pgSQL does not.

Pavel Stehule, lexical revisions by Noah Misch.

11 years agodoc: Remove i18ngurus.com link
Peter Eisentraut [Wed, 3 Jul 2013 00:32:09 +0000 (20:32 -0400)]
doc: Remove i18ngurus.com link

The web site is dead, and the Wayback Machine shows that it didn't have
much useful content before.

11 years agoAdd #include to make header file independent
Peter Eisentraut [Wed, 3 Jul 2013 00:19:52 +0000 (20:19 -0400)]
Add #include to make header file independent

11 years agodoc: Arrange See Also links in more consistent order
Peter Eisentraut [Wed, 3 Jul 2013 00:12:58 +0000 (20:12 -0400)]
doc: Arrange See Also links in more consistent order

11 years agopg_restore: Error about incompatible options
Peter Eisentraut [Wed, 3 Jul 2013 00:07:35 +0000 (20:07 -0400)]
pg_restore: Error about incompatible options

This mirrors the equivalent error cases in pg_dump.

11 years agoAdd support for multiple kinds of external toast datums.
Robert Haas [Tue, 2 Jul 2013 17:35:14 +0000 (13:35 -0400)]
Add support for multiple kinds of external toast datums.

To that end, support tags rather than lengths for external datums.
As an example of how this can be used, add support or "indirect"
tuples which point to some externally allocated memory containing
a toast tuple.  Similar infrastructure could be used for other
purposes, including, perhaps, support for alternative compression
algorithms.

Andres Freund, reviewed by Hitoshi Harada and myself

11 years agoMention extra_float_digits in floating point docs
Alvaro Herrera [Tue, 2 Jul 2013 16:21:16 +0000 (12:21 -0400)]
Mention extra_float_digits in floating point docs

Make it easier for readers of the FP docs to find out about possibly
truncated values.

Per complaint from Tom Duffey in message
F0E0F874-C86F-48D1-AA2A-0C5365BF5118@trillitech.com

Author: Albe Laurenz
Reviewed by: Abhijit Menon-Sen

11 years agoSilence compiler warning in assertion-enabled builds.
Heikki Linnakangas [Tue, 2 Jul 2013 14:23:42 +0000 (17:23 +0300)]
Silence compiler warning in assertion-enabled builds.

With -Wtype-limits, gcc correctly points out that size_t can never be < 0.
Backpatch to 9.3 and 9.2. It's been like this forever, but in <= 9.1 you got
a lot other warnings with -Wtype-limits anyway (at least with my version of
gcc).

Andres Freund

11 years agopg_upgrade: revert changing '' to ""
Bruce Momjian [Tue, 2 Jul 2013 14:29:27 +0000 (10:29 -0400)]
pg_upgrade:  revert changing '' to ""
On the command line, GUC option strings are handled by the guc parser,
not by the shell parser, so '' is the proper way to represent a
zero-length string.  This reverts commit
3132a9b7ab3d76c15f88cfa29792fd888e7a959e.

11 years agoUse an MVCC snapshot, rather than SnapshotNow, for catalog scans.
Robert Haas [Tue, 2 Jul 2013 13:47:01 +0000 (09:47 -0400)]
Use an MVCC snapshot, rather than SnapshotNow, for catalog scans.

SnapshotNow scans have the undesirable property that, in the face of
concurrent updates, the scan can fail to see either the old or the new
versions of the row.  In many cases, we work around this by requiring
DDL operations to hold AccessExclusiveLock on the object being
modified; in some cases, the existing locking is inadequate and random
failures occur as a result.  This commit doesn't change anything
related to locking, but will hopefully pave the way to allowing lock
strength reductions in the future.

The major issue has held us back from making this change in the past
is that taking an MVCC snapshot is significantly more expensive than
using a static special snapshot such as SnapshotNow.  However, testing
of various worst-case scenarios reveals that this problem is not
severe except under fairly extreme workloads.  To mitigate those
problems, we avoid retaking the MVCC snapshot for each new scan;
instead, we take a new snapshot only when invalidation messages have
been processed.  The catcache machinery already requires that
invalidation messages be sent before releasing the related heavyweight
lock; else other backends might rely on locally-cached data rather
than scanning the catalog at all.  Thus, making snapshot reuse
dependent on the same guarantees shouldn't break anything that wasn't
already subtly broken.

Patch by me.  Review by Michael Paquier and Andres Freund.

11 years agoFix regression test make dependencies
Peter Eisentraut [Tue, 2 Jul 2013 01:10:36 +0000 (21:10 -0400)]
Fix regression test make dependencies

The dependencies on the spi and dummy_seclabel contrib modules were
incomplete, because they did not pick up automatically generated
dependencies on header files.  This will manifest itself especially when
switching major versions, where the contrib modules would not be
recompiled to contain the new version number, leading to regression test
failures.

To fix this, use the submake approach already in use elsewhere, so that
the contrib modules are built using their full rules.

11 years agopg_dump docs: use escaped double-quotes, for Windows
Bruce Momjian [Mon, 1 Jul 2013 18:52:56 +0000 (14:52 -0400)]
pg_dump docs:  use escaped double-quotes, for Windows
On Unix, you can embed double-quotes in single-quotes, and via versa.
However, on Windows, you can only escape double-quotes in double-quotes,
so use that in the pg_dump -t/table example.
Backpatch to 9.3.
Report from Mike Toews

11 years agoAdd a convenience routine makeFuncCall to reduce duplication.
Robert Haas [Mon, 1 Jul 2013 18:41:33 +0000 (14:41 -0400)]
Add a convenience routine makeFuncCall to reduce duplication.

David Fetter and Andrew Gierth, reviewed by Jeevan Chalke

11 years agopg_upgrade: use "" rather than '', for Windows
Bruce Momjian [Mon, 1 Jul 2013 18:45:45 +0000 (14:45 -0400)]
pg_upgrade:  use "" rather than '', for Windows
If we ever support unix sockets on Windows, we should use "" rather than
'' for zero-length strings on the command-line, so use that.

11 years agoAdd timezone offset output option to to_char()
Bruce Momjian [Mon, 1 Jul 2013 17:40:18 +0000 (13:40 -0400)]
Add timezone offset output option to to_char()
Add ability for to_char() to output the timezone's UTC offset (OF).  We
already have the ability to return the timezone abbeviation (TZ/tz).
Per request from Andrew Dunstan

11 years agoImprove support for building PGXS modules with VPATH.
Andrew Dunstan [Mon, 1 Jul 2013 16:53:05 +0000 (12:53 -0400)]
Improve support for building PGXS modules with VPATH.

A VPATH build will be performed when the module's make file path is not
the current directory or when USE_VPATH is set.

This will assist packagers and others who prefer to build without
polluting the source directories.

There is still a bit of work to do here, notably documentation, but it's
probably a good idea to commit what we have so far and let people test
it out on their modules.

Cédric Villemain, with an addition from me.

11 years agoUpdate LSB URL in pg_ctl
Bruce Momjian [Mon, 1 Jul 2013 16:46:13 +0000 (12:46 -0400)]
Update LSB URL in pg_ctl
Update Linux Standard Base Core Specification 3.1 URL mention in pg_ctl
comments.

11 years agoRemove undocumented -h (help) option
Bruce Momjian [Mon, 1 Jul 2013 16:40:02 +0000 (12:40 -0400)]
Remove undocumented -h (help) option
The -h option was not supported by many tools, and not documented, so
remove them for consistency from pg_upgrade, pg_test_fsync, and
pg_test_timing.

11 years agoOptimize pglz compressor for small inputs.
Heikki Linnakangas [Mon, 1 Jul 2013 08:00:14 +0000 (11:00 +0300)]
Optimize pglz compressor for small inputs.

The pglz compressor has a significant startup cost, because it has to
initialize to zeros the history-tracking hash table. On a 64-bit system, the
hash table was 64kB in size. While clearing memory is pretty fast, for very
short inputs the relative cost of that was quite large.

This patch alleviates that in two ways. First, instead of storing pointers
in the hash table, store 16-bit indexes into the hist_entries array. That
slashes the size of the hash table to 1/2 or 1/4 of the original, depending
on the pointer width. Secondly, adjust the size of the hash table based on
input size. For very small inputs, you don't need a large hash table to
avoid collisions.

Review by Amit Kapila.

11 years agoRetry short writes when flushing WAL.
Heikki Linnakangas [Mon, 1 Jul 2013 06:36:00 +0000 (09:36 +0300)]
Retry short writes when flushing WAL.

We don't normally bother retrying when the number of bytes written by
write() is short of what was requested. It is generally assumed that a
write() to disk doesn't return short, unless you run out of disk space.
While writing the WAL, however, it seems prudent to try a bit harder,
because a failure leads to PANIC. The write() is also much larger than most
write()s in the backend (up to wal_buffers), so there's more room for
surprises.

Also retry on EINTR. All signals used in the backend are flagged SA_RESTART
nowadays, so it shouldn't happen, but better to be defensive.

11 years agoFix cpluspluscheck in checksum code
Peter Eisentraut [Sun, 30 Jun 2013 14:25:43 +0000 (10:25 -0400)]
Fix cpluspluscheck in checksum code

C++ is more picky about comparing signed and unsigned integers.

11 years agoecpg: Consistently use mm_strdup()
Peter Eisentraut [Sun, 30 Jun 2013 02:14:56 +0000 (22:14 -0400)]
ecpg: Consistently use mm_strdup()

mm_strdup() is provided to check errors from strdup(), but some places
were failing to use it.

11 years agoInline ginCompareItemPointers function for speed.
Heikki Linnakangas [Sat, 29 Jun 2013 09:54:02 +0000 (12:54 +0300)]
Inline ginCompareItemPointers function for speed.

ginCompareItemPointers function is called heavily in gin index scans -
inlining it speeds up some kind of queries a lot.

11 years agoChange errcode for lock_timeout to match NOWAIT
Simon Riggs [Fri, 28 Jun 2013 23:57:25 +0000 (00:57 +0100)]
Change errcode for lock_timeout to match NOWAIT

Set errcode to ERRCODE_LOCK_NOT_AVAILABLE

Zoltán Bsöszörményi

11 years agoALTER TABLE ... ALTER CONSTRAINT for FKs
Simon Riggs [Fri, 28 Jun 2013 23:27:30 +0000 (00:27 +0100)]
ALTER TABLE ... ALTER CONSTRAINT for FKs

Allow constraint attributes to be altered,
so the default setting of NOT DEFERRABLE
can be altered to DEFERRABLE and back.

Review by Abhijit Menon-Sen

11 years agoAssert that ALTER TABLE subcommands have pass set
Simon Riggs [Fri, 28 Jun 2013 23:26:46 +0000 (00:26 +0100)]
Assert that ALTER TABLE subcommands have pass set

11 years agopg_upgrade: pass username to analyze script
Bruce Momjian [Fri, 28 Jun 2013 23:11:51 +0000 (19:11 -0400)]
pg_upgrade:  pass username to analyze script
If -U (user) is specified, pass the username into the created analyze
script.
Per request from Ray Stell

11 years agopg_upgrade: remove -h option
Bruce Momjian [Fri, 28 Jun 2013 22:10:13 +0000 (18:10 -0400)]
pg_upgrade:  remove -h option
-h (help) is not needed;  pg_upgrade already supports --help and -?,
which is consistent with other tools.

11 years agopg_upgrade: trim down --help and doc option descriptions
Bruce Momjian [Fri, 28 Jun 2013 22:01:46 +0000 (18:01 -0400)]
pg_upgrade:  trim down --help and doc option descriptions
Previous code had old/new prefixes on option values, e.g.
--old-datadir=OLDDATADIR.  Remove them, for simplicity;  now:
--old-datadir=DATADIR.  Also update docs to do the same.

11 years agoSend SIGKILL to children if they don't die quickly in immediate shutdown
Alvaro Herrera [Fri, 28 Jun 2013 21:20:53 +0000 (17:20 -0400)]
Send SIGKILL to children if they don't die quickly in immediate shutdown

On immediate shutdown, or during a restart-after-crash sequence,
postmaster used to send SIGQUIT (and then abandon ship if shutdown); but
this is not a good strategy if backends don't die because of that
signal.  (This might happen, for example, if a backend gets tangled
trying to malloc() due to gettext(), as in an example illustrated by
MauMau.)  This causes problems when later trying to restart the server,
because some processes are still attached to the shared memory segment.

Instead of just abandoning such backends to their fates, we now have
postmaster hang around for a little while longer, send a SIGKILL after
some reasonable waiting period, and then exit.  This makes immediate
shutdown more reliable.

There is disagreement on whether it's best for postmaster to exit after
sending SIGKILL, or to stick around until all children have reported
death.  If this controversy is resolved differently than what this patch
implements, it's an easy change to make.

Bug reported by MauMau in message 20DAEA8949EC4E2289C6E8E58560DEC0@maumau

MauMau and Álvaro Herrera

11 years agopg_upgrade: change -u to -U, for consistency
Bruce Momjian [Fri, 28 Jun 2013 21:27:02 +0000 (17:27 -0400)]
pg_upgrade:  change -u to -U, for consistency
Change -u (user) option to -U, for consistency with other tools like
pg_dump and psql.  Also expand --user to --username, again for
consistency.
BACKWARD INCOMPATIBILITY

11 years agoMake the OVER keyword unreserved.
Robert Haas [Fri, 28 Jun 2013 14:18:00 +0000 (10:18 -0400)]
Make the OVER keyword unreserved.

This results in a slightly less specific error message when OVER
is used in a context where we don't accept window functions, but
per discussion, it's worth it to get the benefit of not needing
to reserve this keyword any more.  This same refactoring will
also let us avoid reserving some other keywords that we expect
to add in upcoming patches (specifically, IGNORE, RESPECT, and
FILTER).

Troels Nielsen, with minor changes by me

11 years agoDefine Trap and TrapMacro even in non-cassert builds.
Robert Haas [Fri, 28 Jun 2013 13:30:38 +0000 (09:30 -0400)]
Define Trap and TrapMacro even in non-cassert builds.

In some cases, the use of these macros may be preferable to Assert()
or AssertMacro(), since this way the caller can set the trap message.

Andres Freund and Robert Haas

11 years agoTrack spinlock delay in microsecond granularity.
Heikki Linnakangas [Fri, 28 Jun 2013 09:30:55 +0000 (12:30 +0300)]
Track spinlock delay in microsecond granularity.

On many platforms the OS will round the sleep time to millisecond
resolution, but there is no reason for us to pre-emptively round the
argument to pg_usleep.

When the delay was measured in milliseconds and started from 1 ms, it
sometimes took many attempts until the logic that increases the delay by
multiplying with a random value between 1 and 2 actually managed to bump it
from 1 ms to 2 ms. That lead to a sequence of 1 ms waits until the delay
started to increase. This wasn't really a problem but it looked odd if you
observed the waits. There is no measurable difference in performance, but
it's more readable this way.

Jeff Janes

11 years agoUpdate pg_resetxlog's documentation on multixacts
Alvaro Herrera [Thu, 27 Jun 2013 19:31:04 +0000 (15:31 -0400)]
Update pg_resetxlog's documentation on multixacts

I added some more functionality to it in 0ac5ad5134f27 but neglected to
add it to the docs.

Per Peter Eisentraut in message
1367112171.32604.4.camel@vanquo.pezone.net