]> granicus.if.org Git - postgresql/log
postgresql
11 years agoRemove leftover LWLockRelease() call
Alvaro Herrera [Fri, 9 Nov 2012 13:12:09 +0000 (10:12 -0300)]
Remove leftover LWLockRelease() call

This code was refactored in d5497b95 but an extra LWLockRelease call was
left behind.

Per report from Erik Rijkers

11 years agoXSLT stylesheet: Add slash to directory name
Peter Eisentraut [Fri, 9 Nov 2012 04:55:36 +0000 (23:55 -0500)]
XSLT stylesheet: Add slash to directory name

Some versions of the XSLT stylesheets don't handle the missing slash
correctly (they concatenate directory and file name without the slash).
This might never have worked correctly.

11 years agoFix WaitLatch() to return promptly when the requested timeout expires.
Tom Lane [Fri, 9 Nov 2012 01:04:48 +0000 (20:04 -0500)]
Fix WaitLatch() to return promptly when the requested timeout expires.

If the sleep is interrupted by a signal, we must recompute the remaining
time to wait; otherwise, a steady stream of non-wait-terminating interrupts
could delay return from WaitLatch indefinitely.  This has been shown to be
a problem for the autovacuum launcher, and there may well be other places
now or in the future with similar issues.  So we'd better make the function
robust, even though this'll add at least one gettimeofday call per wait.

Back-patch to 9.2.  We might eventually need to fix 9.1 as well, but the
code is quite different there, and the usage of WaitLatch in 9.1 is so
limited that it's not clearly important to do so.

Reported and diagnosed by Jeff Janes, though I rewrote his patch rather
heavily.

11 years agoRename ResolveNew() to ReplaceVarsFromTargetList(), and tweak its API.
Tom Lane [Thu, 8 Nov 2012 21:52:49 +0000 (16:52 -0500)]
Rename ResolveNew() to ReplaceVarsFromTargetList(), and tweak its API.

This function currently lacks the option to throw error if the provided
targetlist doesn't have any matching entry for a Var to be replaced.
Two of the four existing call sites would be better off with an error,
as would the usage in the pending auto-updatable-views patch, so it seems
past time to extend the API to support that.  To do so, replace the "event"
parameter (historically of type CmdType, though it was declared plain int)
with a special-purpose enum type.

It's unclear whether this function might be called by third-party code.
Since many C compilers wouldn't warn about a call site continuing to use
the old calling convention, rename the function to forcibly break any
such code that hasn't been updated.  The old name was none too well chosen
anyhow.

11 years agoDon't trash input list structure in does_not_exist_skipping().
Tom Lane [Thu, 8 Nov 2012 16:34:32 +0000 (11:34 -0500)]
Don't trash input list structure in does_not_exist_skipping().

The trigger and rule cases need to split up the input name list, but
they mustn't corrupt the passed-in data structure, since it could be part
of a cached utility-statement parsetree.  Per bug #7641.

11 years agoTeach pg_basebackup and pg_receivexlog to reply to server keepalives.
Heikki Linnakangas [Thu, 8 Nov 2012 08:25:58 +0000 (10:25 +0200)]
Teach pg_basebackup and pg_receivexlog to reply to server keepalives.

Without this, the connection will be killed after timeout if
wal_sender_timeout is set in the server.

Original patch by Amit Kapila, modified by me to fit recent changes in the
code.

11 years agoFix missing inclusions.
Tom Lane [Wed, 7 Nov 2012 23:05:43 +0000 (18:05 -0500)]
Fix missing inclusions.

Some platforms require including <netinet/in.h> and/or <arpa/inet.h> to
use htonl() and ntohl().  Per build failure locally.

11 years agoAdd URLs to document why DLLIMPORT is needed on Windows.
Bruce Momjian [Wed, 7 Nov 2012 20:01:18 +0000 (15:01 -0500)]
Add URLs to document why DLLIMPORT is needed on Windows.

Per email from Craig Ringer

11 years agoDon't try to use a unopened relation
Alvaro Herrera [Wed, 7 Nov 2012 19:23:39 +0000 (16:23 -0300)]
Don't try to use a unopened relation

Commit 4c9d0901 mistakenly introduced a call to
TransferPredicateLocksToHeapRelation() on an index relation that had
been closed a few lines above.  Moving up an index_open() call that's
below is enough to fix the problem.

Discovered by me while testing an unrelated patch.

11 years agoIn pg_upgrade docs, mention using base backup as part of rsync for
Bruce Momjian [Wed, 7 Nov 2012 18:36:08 +0000 (13:36 -0500)]
In pg_upgrade docs, mention using base backup as part of rsync for
logical replication upgrades.

Backpatch to 9.2.

11 years agoMake the streaming replication protocol messages architecture-independent.
Heikki Linnakangas [Wed, 7 Nov 2012 16:59:12 +0000 (18:59 +0200)]
Make the streaming replication protocol messages architecture-independent.

We used to send structs wrapped in CopyData messages, which works as long as
the client and server agree on things like endianess, timestamp format and
alignment. That's good enough for running a standby server, which has to run
on the same platform anyway, but it's useful for tools like pg_receivexlog
to work across platforms.

This breaks protocol compatibility of streaming replication, but we never
promised that to be compatible across versions, anyway.

11 years agoIn pg_upgrade, set synchronous_commit=off for the new cluster, to
Bruce Momjian [Tue, 6 Nov 2012 19:28:48 +0000 (14:28 -0500)]
In pg_upgrade, set synchronous_commit=off for the new cluster, to
improve performance when restoring the schema from the old cluster.

Backpatch to 9.2.

11 years agoFix handling of inherited check constraints in ALTER COLUMN TYPE.
Tom Lane [Mon, 5 Nov 2012 18:36:16 +0000 (13:36 -0500)]
Fix handling of inherited check constraints in ALTER COLUMN TYPE.

This case got broken in 8.4 by the addition of an error check that
complains if ALTER TABLE ONLY is used on a table that has children.
We do use ONLY for this situation, but it's okay because the necessary
recursion occurs at a higher level.  So we need to have a separate
flag to suppress recursion without making the error check.

Reported and patched by Pavan Deolasee, with some editorial adjustments by
me.  Back-patch to 8.4, since this is a regression of functionality that
worked in earlier branches.

11 years agoFix typo
Peter Eisentraut [Fri, 2 Nov 2012 02:58:36 +0000 (22:58 -0400)]
Fix typo

11 years agoFix bogus handling of $(X) (i.e., ".exe") in isolationtester Makefile.
Tom Lane [Thu, 1 Nov 2012 23:48:53 +0000 (19:48 -0400)]
Fix bogus handling of $(X) (i.e., ".exe") in isolationtester Makefile.

I'm not sure why commit 1eb1dde049ccfffc42c80c2bcec14155c58bcc1f seems
to have made this start to fail on Cygwin when it never did before ---
but nonetheless, the coding was pretty bogus, and unlike the way we
handle $(X) anywhere else.  Per buildfarm.

11 years agoLimit the number of rel sets considered in consider_index_join_outer_rels.
Tom Lane [Thu, 1 Nov 2012 18:08:42 +0000 (14:08 -0400)]
Limit the number of rel sets considered in consider_index_join_outer_rels.

In bug #7626, Brian Dunavant exposes a performance problem created by
commit 3b8968f25232ad09001bf35ab4cc59f5a501193e: that commit attempted to
consider *all* possible combinations of indexable join clauses, but if said
clauses join to enough different relations, there's an exponential increase
in the number of outer-relation sets considered.

In Brian's example, all the clauses come from the same equivalence class,
which means it's redundant to use more than one of them in an indexscan
anyway.  So we can prevent the problem in this class of cases (which is
probably the majority of real examples) by rejecting combinations that
would only serve to add a known-redundant clause.

But that still leaves us exposed to exponential growth of planning time
when the query has a lot of non-equivalence join clauses that are usable
with the same index.  I chose to prevent such cases by setting an upper
limit on the number of relation sets considered, equal to ten times the
number of index clauses considered so far.  (This sliding limit still
allows new relsets to be added on as we move to additional index columns,
which is probably more important than considering even more combinations of
clauses for the previous column.)  This should keep the amount of work done
roughly linear rather than exponential in the apparent query complexity.
This part of the fix is pretty ad-hoc; but without a clearer idea of
real-world cases for which this would result in markedly inferior plans,
it's hard to see how to do better.

11 years agoHave make never delete intermediate files automatically
Peter Eisentraut [Thu, 1 Nov 2012 03:33:35 +0000 (23:33 -0400)]
Have make never delete intermediate files automatically

Several hacks in certain modes already thought this was a bad idea, so
just disable it globally.

11 years agoFix erroneous choice of timeline variable, too
Alvaro Herrera [Wed, 31 Oct 2012 19:50:09 +0000 (16:50 -0300)]
Fix erroneous choice of timeline variable, too

11 years agoDocument that TCP keepalive settings read as 0 on Unix-socket connections.
Tom Lane [Wed, 31 Oct 2012 18:26:20 +0000 (14:26 -0400)]
Document that TCP keepalive settings read as 0 on Unix-socket connections.

Per bug #7631 from Rob Johnson.  The code is operating as designed, but the
docs didn't explain it.

11 years agoFix erroneous choices of segNo variables
Alvaro Herrera [Wed, 31 Oct 2012 14:05:28 +0000 (11:05 -0300)]
Fix erroneous choices of segNo variables

Commit dfda6eba (which changed segment numbers to use a single 64 bit
variable instead of log/seg) introduced a couple of bogus choices of
exactly which log segment number variable to use in each case.

This is currently pretty harmless; in one place, the bogus number was
only being used in an error message for a pretty unlikely condition
(failure to fsync a WAL segment file).  In the other, it was using a
global variable instead of the local variable; but all callsites were
passing the value of the global variable anyway.

No need to backpatch because that commit is not on earlier branches.

11 years agoFix ALTER EXTENSION / SET SCHEMA
Alvaro Herrera [Wed, 31 Oct 2012 13:52:55 +0000 (10:52 -0300)]
Fix ALTER EXTENSION / SET SCHEMA

In its original conception, it was leaving some objects into the old
schema, but without their proper pg_depend entries; this meant that the
old schema could be dropped, causing future pg_dump calls to fail on the
affected database.  This was originally reported by Jeff Frost as #6704;
there have been other complaints elsewhere that can probably be traced
to this bug.

To fix, be more consistent about altering a table's subsidiary objects
along the table itself; this requires some restructuring in how tables
are relocated when altering an extension -- hence the new
AlterTableNamespaceInternal routine which encapsulates it for both the
ALTER TABLE and the ALTER EXTENSION cases.

There was another bug lurking here, which was unmasked after fixing the
previous one: certain objects would be reached twice via the dependency
graph, and the second attempt to move them would cause the entire
operation to fail.  Per discussion, it seems the best fix for this is to
do more careful tracking of objects already moved: we now maintain a
list of moved objects, to avoid attempting to do it twice for the same
object.

Authors: Alvaro Herrera, Dimitri Fontaine
Reviewed by Tom Lane

11 years agoPreserve intermediate .c files in coverage mode
Peter Eisentraut [Sun, 28 Oct 2012 14:35:46 +0000 (10:35 -0400)]
Preserve intermediate .c files in coverage mode

The introduction of the .y -> .c pattern rule causes some .c files such
as bootparse.c to be considered intermediate files in the .y -> .c -> .o
rule chain, which make would automatically delete.  But in coverage
mode, the processing tools such as genhtml need those files, so mark
them as "precious" so that make preserves them.

11 years agoThrow error if expiring tuple is again updated or deleted.
Kevin Grittner [Fri, 26 Oct 2012 19:55:36 +0000 (14:55 -0500)]
Throw error if expiring tuple is again updated or deleted.

This prevents surprising behavior when a FOR EACH ROW trigger
BEFORE UPDATE or BEFORE DELETE directly or indirectly updates or
deletes the the old row.  Prior to this patch the requested action
on the row could be silently ignored while all triggered actions
based on the occurence of the requested action could be committed.
One example of how this could happen is if the BEFORE DELETE
trigger for a "parent" row deleted "children" which had trigger
functions to update summary or status data on the parent.

This also prevents similar surprising problems if the query has a
volatile function which updates a target row while it is already
being updated.

There are related issues present in FOR UPDATE cursors and READ
COMMITTED queries which are not handled by this patch.  These
issues need further evalution to determine what change, if any, is
needed.

Where the new error messages are generated, in most cases the best
fix will be to move code from the BEFORE trigger to an AFTER
trigger.  Where this is not feasible, the trigger can avoid the
error by re-issuing the triggering statement and returning NULL.

Documentation changes will be submitted in a separate patch.

Kevin Grittner and Tom Lane with input from Florian Pflug and
Robert Haas, based on problems encountered during conversion of
Wisconsin Circuit Court trigger logic to plpgsql triggers.

11 years agoPrefer actual constants to pseudo-constants in equivalence class machinery.
Tom Lane [Fri, 26 Oct 2012 18:19:34 +0000 (14:19 -0400)]
Prefer actual constants to pseudo-constants in equivalence class machinery.

generate_base_implied_equalities_const() should prefer plain Consts over
other em_is_const eclass members when choosing the "pivot" value that
all the other members will be equated to.  This makes it more likely that
the generated equalities will be useful in constraint-exclusion proofs.
Per report from Rushabh Lathia.

11 years agoIn pg_dump, dump SEQUENCE SET items in the data not pre-data section.
Tom Lane [Fri, 26 Oct 2012 16:12:42 +0000 (12:12 -0400)]
In pg_dump, dump SEQUENCE SET items in the data not pre-data section.

Represent a sequence's current value as a separate TableDataInfo dumpable
object, so that it can be dumped within the data section of the archive
rather than in pre-data.  This fixes an undesirable inconsistency between
the meanings of "--data-only" and "--section=data", and also fixes dumping
of sequences that are marked as extension configuration tables, as per a
report from Marko Kreen back in July.  The main cost is that we do one more
SQL query per sequence, but that's probably not very meaningful in most
databases.

Back-patch to 9.1, since it has the extension configuration issue even
though not the --section switch.

11 years agoTweak genericcostestimate's fudge factor for index size.
Tom Lane [Wed, 24 Oct 2012 20:25:40 +0000 (16:25 -0400)]
Tweak genericcostestimate's fudge factor for index size.

To provide some bias against using a large index when a small one would do
as well, genericcostestimate adds a "fudge factor", which for a long time
was random_page_cost * index_pages/10000.  However, this can grow to be the
dominant term in indexscan cost estimates when the index involved is large
enough, a behavior that was never intended.  Change to a ln(1 + n/10000)
formulation, which has nearly the same behavior up to a few hundred pages
but tails off significantly thereafter.  (A log curve seems correct on
first principles, since what we're trying to account for here is index
descent costs, which are typically logarithmic.)  Per bug #7619 from Niko
Kiirala.

Possibly this change should get back-patched, but I'm hesitant to mess with
cost estimates in stable branches.

11 years agoWhen converting a table to a view, remove its system columns.
Tom Lane [Wed, 24 Oct 2012 17:39:37 +0000 (13:39 -0400)]
When converting a table to a view, remove its system columns.

Views should not have any pg_attribute entries for system columns.
However, we forgot to remove such entries when converting a table to a
view.  This could lead to crashes later on, if someone attempted to
reference such a column, as reported by Kohei KaiGai.

Patch in HEAD only.  This bug has been there forever, but in the back
branches we will have to defend against existing mis-converted views,
so it doesn't seem worthwhile to change the conversion code too.

11 years agoAdd context info to OAT_POST_CREATE security hook
Alvaro Herrera [Tue, 23 Oct 2012 21:07:26 +0000 (18:07 -0300)]
Add context info to OAT_POST_CREATE security hook

... and have sepgsql use it to determine whether to check permissions
during certain operations.  Indexes that are being created as a result
of REINDEX, for instance, do not need to have their permissions checked;
they were already checked when the index was created.

Author: KaiGai Kohei, slightly revised by me

11 years agoCorrect predicate locking for DROP INDEX CONCURRENTLY.
Kevin Grittner [Sun, 21 Oct 2012 21:35:42 +0000 (16:35 -0500)]
Correct predicate locking for DROP INDEX CONCURRENTLY.

For the non-concurrent case there is an AccessExclusiveLock lock
on both the index and the heap at a time during which no other
process is using either, before which the index is maintained and
used for scans, and after which the index is no longer used or
maintained.  Predicate locks can safely be moved from the index to
the related heap relation under the protection of these locks.
This was done prior to the introductin of DROP INDEX CONCURRENTLY
and continues to be done for non-concurrent index drops.

For concurrent index drops, the predicate locks must be moved when
there are no index scans in progress on that index and no more can
subsequently start, and before heap inserts stop maintaining the
index.  As long as these conditions are guaranteed when the
TransferPredicateLocksToHeapRelation() function is called,
stronger locks are not needed for correctness.

Kevin Grittner based on questions by Tom Lane in reviewing the
DROP INDEX CONCURRENTLY patch and in cooperation with Andres
Freund and Simon Riggs.

11 years agoFix pg_dump's handling of DROP DATABASE commands in --clean mode.
Tom Lane [Sat, 20 Oct 2012 20:58:32 +0000 (16:58 -0400)]
Fix pg_dump's handling of DROP DATABASE commands in --clean mode.

In commit 4317e0246c645f60c39e6572644cff1cb03b4c65, I accidentally broke
this behavior while rearranging code to ensure that --create wouldn't
affect whether a DATABASE entry gets put into archive-format output.
Thus, 9.2 would issue a DROP DATABASE command in --clean mode, which is
either useless or dangerous depending on the usage scenario.
It should not do that, and no longer does.

A bright spot is that this refactoring makes it easy to allow the
combination of --clean and --create to work sensibly, ie, emit DROP
DATABASE then CREATE DATABASE before reconnecting.  Ordinarily we'd
consider that a feature addition and not back-patch it, but it seems
silly to not include the extra couple of lines required in the 9.2
version of the code.

Per report from Guillaume Lelarge, though this is slightly more extensive
than his proposed patch.

11 years agoPrevent overflow in pgbench's percent-done display.
Tom Lane [Sat, 20 Oct 2012 16:44:18 +0000 (12:44 -0400)]
Prevent overflow in pgbench's percent-done display.

Per Thom Brown.

11 years agoFix UtilityContainsQuery() to handle CREATE TABLE AS EXECUTE correctly.
Tom Lane [Fri, 19 Oct 2012 22:33:45 +0000 (18:33 -0400)]
Fix UtilityContainsQuery() to handle CREATE TABLE AS EXECUTE correctly.

The code seems to have been written to handle the pre-parse-analysis
representation, where an ExecuteStmt would appear directly under
CreateTableAsStmt.  But in reality the function is only run on
already-parse-analyzed statements, so there will be a Query node in
between.  We'd not noticed the bug because the function is generally
not used at all except in extended query protocol.

Per report from Robert Haas and Rushabh Lathia.

11 years agoFix hash_search to avoid corruption of the hash table on out-of-memory.
Tom Lane [Fri, 19 Oct 2012 19:24:03 +0000 (15:24 -0400)]
Fix hash_search to avoid corruption of the hash table on out-of-memory.

An out-of-memory error during expand_table() on a palloc-based hash table
would leave a partially-initialized entry in the table.  This would not be
harmful for transient hash tables, since they'd get thrown away anyway at
transaction abort.  But for long-lived hash tables, such as the relcache
hash, this would effectively corrupt the table, leading to crash or other
misbehavior later.

To fix, rearrange the order of operations so that table enlargement is
attempted before we insert a new entry, rather than after adding it
to the hash table.

Problem discovered by Hitoshi Harada, though this is a bit different
from his proposed patch.

11 years agoFix ruleutils to print "INSERT INTO foo DEFAULT VALUES" correctly.
Tom Lane [Fri, 19 Oct 2012 17:39:51 +0000 (13:39 -0400)]
Fix ruleutils to print "INSERT INTO foo DEFAULT VALUES" correctly.

Per bug #7615 from Marko Tiikkaja.  Apparently nobody ever tried this
case before ...

11 years agoFix orphan on cancel of drop index concurrently.
Simon Riggs [Fri, 19 Oct 2012 08:56:29 +0000 (09:56 +0100)]
Fix orphan on cancel of drop index concurrently.
Canceling DROP INDEX CONCURRENTLY during
wait could allow an orphaned index to be
left behind which could not be dropped.

Backpatch to 9.2

Andres Freund, tested by Abhijit Menon-Sen

11 years agoFurther cleanup of catcache.c ilist changes.
Tom Lane [Thu, 18 Oct 2012 23:30:43 +0000 (19:30 -0400)]
Further cleanup of catcache.c ilist changes.

Remove useless duplicate initialization of bucket headers, don't use a
dlist_mutable_iter in a performance-critical path that doesn't need it,
make some other cosmetic changes for consistency's sake.

11 years agoRemove unnecessary "head" arguments from some dlist/slist functions.
Tom Lane [Thu, 18 Oct 2012 23:04:20 +0000 (19:04 -0400)]
Remove unnecessary "head" arguments from some dlist/slist functions.

dlist_delete, dlist_insert_after, dlist_insert_before, slist_insert_after
do not need access to the list header, and indeed insisting on that negates
one of the main advantages of a doubly-linked list.

In consequence, revert addition of "cache_bucket" field to CatCTup.

11 years agoCode review for inline-list patch.
Tom Lane [Thu, 18 Oct 2012 20:47:07 +0000 (16:47 -0400)]
Code review for inline-list patch.

Make foreach macros less syntactically dangerous, and fix some typos in
evidently-never-tested ones.  Add missing slist_next_node and
slist_head_node functions.  Fix broken dlist_check code.  Assorted comment
improvements.

11 years agoUse a more portable platform test.
Andrew Dunstan [Thu, 18 Oct 2012 20:14:11 +0000 (16:14 -0400)]
Use a more portable platform test.

11 years agoFurther tweaking of the readfile() function in pg_ctl.
Heikki Linnakangas [Thu, 18 Oct 2012 19:26:26 +0000 (22:26 +0300)]
Further tweaking of the readfile() function in pg_ctl.

Don't leak a file descriptor if the file is empty or we can't read its size.

Expect there to be a newline at the end of the last line, too. If there
isn't, ignore anything after the last newline. This makes it a tiny bit
more robust in case the file is appended to concurrently, so that we don't
return the last line if it hasn't been fully written yet. And this makes
the code a bit less obscure, anyway. Per Tom Lane's suggestion.

Backpatch to all supported branches.

11 years agoIsolation test for DROP INDEX CONCURRENTLY
Simon Riggs [Thu, 18 Oct 2012 18:41:40 +0000 (19:41 +0100)]
Isolation test for DROP INDEX CONCURRENTLY
for recent concurrent changes.

Abhijit Menon-Sen

11 years agoRe-think guts of DROP INDEX CONCURRENTLY.
Simon Riggs [Thu, 18 Oct 2012 17:58:30 +0000 (18:58 +0100)]
Re-think guts of DROP INDEX CONCURRENTLY.
Concurrent behaviour was flawed when using
a two-step process, so add an additional
phase of processing to ensure concurrency
for both SELECTs and INSERT/UPDATE/DELETEs.

Backpatch to 9.2

Andres Freund, tweaked by me

11 years agoFix planning of non-strict equivalence clauses above outer joins.
Tom Lane [Thu, 18 Oct 2012 16:28:45 +0000 (12:28 -0400)]
Fix planning of non-strict equivalence clauses above outer joins.

If a potential equivalence clause references a variable from the nullable
side of an outer join, the planner needs to take care that derived clauses
are not pushed to below the outer join; else they may use the wrong value
for the variable.  (The problem arises only with non-strict clauses, since
if an upper clause can be proven strict then the outer join will get
simplified to a plain join.)  The planner attempted to prevent this type
of error by checking that potential equivalence clauses aren't
outerjoin-delayed as a whole, but actually we have to check each side
separately, since the two sides of the clause will get moved around
separately if it's treated as an equivalence.  Bugs of this type can be
demonstrated as far back as 7.4, even though releases before 8.3 had only
a very ad-hoc notion of equivalence clauses.

In addition, we neglected to account for the possibility that such clauses
might have nonempty nullable_relids even when not outerjoin-delayed; so the
equivalence-class machinery lacked logic to compute correct nullable_relids
values for clauses it constructs.  This oversight was harmless before 9.2
because we were only using RestrictInfo.nullable_relids for OR clauses;
but as of 9.2 it could result in pushing constructed equivalence clauses
to incorrect places.  (This accounts for bug #7604 from Bill MacArthur.)

Fix the first problem by adding a new test check_equivalence_delay() in
distribute_qual_to_rels, and fix the second one by adding code in
equivclass.c and called functions to set correct nullable_relids for
generated clauses.  Although I believe the second part of this is not
currently necessary before 9.2, I chose to back-patch it anyway, partly to
keep the logic similar across branches and partly because it seems possible
we might find other reasons why we need valid values of nullable_relids in
the older branches.

Add regression tests illustrating these problems.  In 9.0 and up, also
add test cases checking that we can push constants through outer joins,
since we've broken that optimization before and I nearly broke it again
with an overly simplistic patch for this problem.

11 years agopg_dump: Output functions deterministically sorted
Alvaro Herrera [Wed, 17 Oct 2012 21:31:42 +0000 (18:31 -0300)]
pg_dump: Output functions deterministically sorted

Implementation idea from Tom Lane

Author: Joel Jacobson
Reviewed by Joachim Wieland

11 years agoRevert tests for drop index concurrently.
Simon Riggs [Thu, 18 Oct 2012 14:27:12 +0000 (15:27 +0100)]
Revert tests for drop index concurrently.

11 years agoAdd isolation tests for DROP INDEX CONCURRENTLY.
Simon Riggs [Thu, 18 Oct 2012 12:37:09 +0000 (13:37 +0100)]
Add isolation tests for DROP INDEX CONCURRENTLY.
Backpatch to 9.2 to ensure bugs are fixed.

Abhijit Menon-Sen

11 years agoClose un-owned SMgrRelations at transaction end.
Tom Lane [Wed, 17 Oct 2012 16:38:21 +0000 (12:38 -0400)]
Close un-owned SMgrRelations at transaction end.

If an SMgrRelation is not "owned" by a relcache entry, don't allow it to
live past transaction end.  This design allows the same SMgrRelation to be
used for blind writes of multiple blocks during a transaction, but ensures
that we don't hold onto such an SMgrRelation indefinitely.  Because an
SMgrRelation typically corresponds to open file descriptors at the fd.c
level, leaving it open when there's no corresponding relcache entry can
mean that we prevent the kernel from reclaiming deleted disk space.
(While CacheInvalidateSmgr messages usually fix that, there are cases
where they're not issued, such as DROP DATABASE.  We might want to add
some more sinval messaging for that, but I'd be inclined to keep this
type of logic anyway, since allowing VFDs to accumulate indefinitely
for blind-written relations doesn't seem like a good idea.)

This code replaces a previous attempt towards the same goal that proved
to be unreliable.  Back-patch to 9.1 where the previous patch was added.

11 years agoRevert "Use "transient" files for blind writes, take 2".
Tom Lane [Wed, 17 Oct 2012 16:37:08 +0000 (12:37 -0400)]
Revert "Use "transient" files for blind writes, take 2".

This reverts commit fba105b1099f4f5fa7283bb17cba6fed2baa8d0c.
That approach had problems with the smgr-level state not tracking what
we really want to happen, and with the VFD-level state not tracking the
smgr-level state very well either.  In consequence, it was still possible
to hold kernel file descriptors open for long-gone tables (as in recent
report from Tore Halset), and yet there were also cases of FDs being closed
undesirably soon.  A replacement implementation will follow.

11 years agoEmbedded list interface
Alvaro Herrera [Tue, 16 Oct 2012 20:36:30 +0000 (17:36 -0300)]
Embedded list interface

Provide a common implementation of embedded singly-linked and
doubly-linked lists.  "Embedded" in the sense that the nodes'
next/previous pointers exist within some larger struct; this design
choice reduces memory allocation overhead.

Most of the implementation uses inlineable functions (where supported),
for performance.

Some existing uses of both types of lists have been converted to the new
code, for demonstration purposes.  Other uses can (and probably will) be
converted in the future.  Since dllist.c is unused after this conversion,
it has been removed.

Author: Andres Freund
Some tweaks by me
Reviewed by Tom Lane, Peter Geoghegan

11 years agoFix typo in previous commit
Simon Riggs [Wed, 17 Oct 2012 09:29:30 +0000 (10:29 +0100)]
Fix typo in previous commit

11 years agoClarify hash index caution and copy to CREATE INDEX docs
Simon Riggs [Wed, 17 Oct 2012 07:14:29 +0000 (08:14 +0100)]
Clarify hash index caution and copy to CREATE INDEX docs

11 years agoWhen outputting the session id in log_line_prefix (%c) or in CSV log
Bruce Momjian [Tue, 16 Oct 2012 16:37:59 +0000 (12:37 -0400)]
When outputting the session id in log_line_prefix (%c) or in CSV log
output mode, cause the hex digits after the period to always be at least
four hex digits, with zero-padding.

11 years agoalter_generic regression test cannot run concurrently with privileges test.
Tom Lane [Mon, 15 Oct 2012 16:18:52 +0000 (12:18 -0400)]
alter_generic regression test cannot run concurrently with privileges test.

... because the latter plays games with the privileges for language SQL.
It looks like running alter_generic in parallel with "misc" is OK though.

Also, adjust serial_schedule to maintain the same test ordering (up to
parallelism) as parallel_schedule.

11 years agoFix typo in comment.
Heikki Linnakangas [Mon, 15 Oct 2012 10:01:31 +0000 (13:01 +0300)]
Fix typo in comment.

Fujii Masao

11 years agoRemove comment that is no longer true.
Heikki Linnakangas [Mon, 15 Oct 2012 08:02:02 +0000 (11:02 +0300)]
Remove comment that is no longer true.

AddToDataDirLockFile() supports out-of-order updates of the lockfile
nowadays.

11 years agoFix race condition in pg_ctl reading postmaster.pid.
Heikki Linnakangas [Sat, 13 Oct 2012 09:48:14 +0000 (12:48 +0300)]
Fix race condition in pg_ctl reading postmaster.pid.

If postmaster changed postmaster.pid while pg_ctl was reading it, pg_ctl
could overrun the buffer it allocated for the file. Fix by reading the
whole file to memory with one read() call.

initdb contains an identical copy of the readfile() function, but the files
that initdb reads are static, not modified concurrently. Nevertheless, add
a simple bounds-check there, if only to silence static analysis tools.

Per report from Dave Vitek. Backpatch to all supported branches.

11 years agoSplit up process latch initialization for more-fail-soft behavior.
Tom Lane [Mon, 15 Oct 2012 02:59:56 +0000 (22:59 -0400)]
Split up process latch initialization for more-fail-soft behavior.

In the previous coding, new backend processes would attempt to create their
self-pipe during the OwnLatch call in InitProcess.  However, pipe creation
could fail if the kernel is short of resources; and the system does not
recover gracefully from a FATAL error right there, since we have armed the
dead-man switch for this process and not yet set up the on_shmem_exit
callback that would disarm it.  The postmaster then forces an unnecessary
database-wide crash and restart, as reported by Sean Chittenden.

There are various ways we could rearrange the code to fix this, but the
simplest and sanest seems to be to split out creation of the self-pipe into
a new function InitializeLatchSupport, which must be called from a place
where failure is allowed.  For most processes that gets called in
InitProcess or InitAuxiliaryProcess, but processes that don't call either
but still use latches need their own calls.

Back-patch to 9.1, which has only a part of the latch logic that 9.2 and
HEAD have, but nonetheless includes this bug.

11 years agoFix oversight in new code for printing rangetable aliases.
Tom Lane [Fri, 12 Oct 2012 20:14:11 +0000 (16:14 -0400)]
Fix oversight in new code for printing rangetable aliases.

In commit 11e131854f8231a21613f834c40fe9d046926387, I missed the case of
a CTE RTE that doesn't have a user-defined alias, but does have an
alias assigned by set_rtable_names().  Per report from Peter Eisentraut.

While at it, refactor slightly to reduce code duplication.

11 years agoIn our source code, make a copy of getopt's 'optarg' string arguments,
Bruce Momjian [Fri, 12 Oct 2012 17:35:40 +0000 (13:35 -0400)]
In our source code, make a copy of getopt's 'optarg' string arguments,
rather than just storing a pointer.

11 years agoGet rid of COERCE_DONTCARE.
Tom Lane [Fri, 12 Oct 2012 17:35:00 +0000 (13:35 -0400)]
Get rid of COERCE_DONTCARE.

We don't need this hack any more.

11 years agoFix unportable format string.
Tom Lane [Fri, 12 Oct 2012 17:22:11 +0000 (13:22 -0400)]
Fix unportable format string.

Per compiler warning.

11 years agoMake equal() ignore CoercionForm fields for better planning with casts.
Tom Lane [Fri, 12 Oct 2012 16:10:49 +0000 (12:10 -0400)]
Make equal() ignore CoercionForm fields for better planning with casts.

This change ensures that the planner will see implicit and explicit casts
as equivalent for all purposes, except in the minority of cases where
there's actually a semantic difference (as reflected by having a 3-argument
cast function).  In particular, this fixes cases where the EquivalenceClass
machinery failed to consider two references to a varchar column as
equivalent if one was implicitly cast to text but the other was explicitly
cast to text, as seen in bug #7598 from Vaclav Juza.  We have had similar
bugs before in other parts of the planner, so I think it's time to fix this
problem at the core instead of continuing to band-aid around it.

Remove set_coercionform_dontcare(), which represents the band-aid
previously in use for allowing matching of index and constraint expressions
with inconsistent cast labeling.  (We can probably get rid of
COERCE_DONTCARE altogether, but I don't think removing that enum value in
back branches would be wise; it's possible there's third party code
referring to it.)

Back-patch to 9.2.  We could go back further, and might want to once this
has been tested more; but for the moment I won't risk destabilizing plan
choices in long-since-stable branches.

11 years agoUnbreak MSVC builds after recent Makefile refactoring.
Andrew Dunstan [Thu, 11 Oct 2012 16:36:42 +0000 (12:36 -0400)]
Unbreak MSVC builds after recent Makefile refactoring.

Based on a suggestion by Peter Eisentraut.

11 years agoFix cross-type case in partial row matching for hashed subplans.
Tom Lane [Thu, 11 Oct 2012 16:20:56 +0000 (12:20 -0400)]
Fix cross-type case in partial row matching for hashed subplans.

When hashing a subplan like "WHERE (a, b) NOT IN (SELECT x, y FROM ...)",
findPartialMatch() attempted to match rows using the hashtable's internal
equality operators, which of course are for x and y's datatypes.  What we
need to use are the potentially cross-type operators for a=x, b=y, etc.
Failure to do that leads to wrong answers or even crashes.  The scope for
problems is limited to cases where we have different types with compatible
hash functions (else we'd not be using a hashed subplan), but for example
int4 vs int8 can cause the problem.

Per bug #7597 from Bo Jensen.  This has been wrong since the hashed-subplan
code was written, so patch all the way back.

11 years agoImprove replication connection timeouts.
Heikki Linnakangas [Thu, 11 Oct 2012 14:39:52 +0000 (17:39 +0300)]
Improve replication connection timeouts.

Rename replication_timeout to wal_sender_timeout, and add a new setting
called wal_receiver_timeout that does the same at the walreceiver side.
There was previously no timeout in walreceiver, so if the network went down,
for example, the walreceiver could take a long time to notice that the
connection was lost. Now with the two settings, both sides of a replication
connection will detect a broken connection similarly.

It is no longer necessary to manually set wal_receiver_status_interval to
a value smaller than the timeout. Both wal sender and receiver now
automatically send a "ping" message if more than 1/2 of the configured
timeout has elapsed, and it hasn't received any messages from the other end.

Amit Kapila, heavily edited by me.

11 years agoRefactor flex and bison make rules
Peter Eisentraut [Thu, 11 Oct 2012 10:57:04 +0000 (06:57 -0400)]
Refactor flex and bison make rules

Numerous flex and bison make rules have appeared in the source tree
over time, and they are all virtually identical, so we can replace
them by pattern rules with some variables for customization.

Users of pgxs will also be able to benefit from this.

11 years agoRemove _FORTIFY_SOURCE
Peter Eisentraut [Thu, 11 Oct 2012 01:42:38 +0000 (21:42 -0400)]
Remove _FORTIFY_SOURCE

Apparently, on some glibc versions this causes warnings when
optimization is not enabled.

Altogether, there appear to be too many incompatibilities surrounding
this.

11 years agoRemove configure-option-dependent test cases from dblink tests.
Tom Lane [Thu, 11 Oct 2012 00:14:26 +0000 (20:14 -0400)]
Remove configure-option-dependent test cases from dblink tests.

The HINTs generated for these error cases vary across builds.  We
could try to work around that, but the test cases aren't really useful
enough to justify taking any trouble.

Per buildfarm.

11 years agoUpdate obsolete comment.
Tom Lane [Wed, 10 Oct 2012 21:04:37 +0000 (17:04 -0400)]
Update obsolete comment.

We no longer use GetNewOidWithIndex on pg_largeobject; rather,
pg_largeobject_metadata's regular OID column is considered the repository
of OIDs for large objects.  The special functionality is still needed for
TOAST tables however.

11 years agoCreate an improved FDW option validator function for contrib/dblink.
Tom Lane [Wed, 10 Oct 2012 20:53:08 +0000 (16:53 -0400)]
Create an improved FDW option validator function for contrib/dblink.

dblink now has its own validator function dblink_fdw_validator(), which is
better than the core function postgresql_fdw_validator() because it gets
the list of legal options from libpq instead of having a hard-wired list.

Make the dblink extension module provide a standard foreign data wrapper
dblink_fdw that encapsulates use of this validator, and recommend use of
that wrapper instead of making up wrappers on the fly.

Unfortunately, because ad-hoc wrappers *were* recommended practice
previously, it's not clear when we can get rid of postgresql_fdw_validator
without causing upgrade problems.  But this is a step in the right
direction.

Shigeru Hanada, reviewed by KaiGai Kohei

11 years agoUpdate obsolete text in fdwhandler.sgml.
Tom Lane [Wed, 10 Oct 2012 17:54:38 +0000 (13:54 -0400)]
Update obsolete text in fdwhandler.sgml.

Etsuro Fujita, with some wording adjustment by me.

11 years agoIn pg_upgrade, issue proper error message when we can't open PG_VERSION.
Bruce Momjian [Wed, 10 Oct 2012 17:53:00 +0000 (13:53 -0400)]
In pg_upgrade, issue proper error message when we can't open PG_VERSION.

Backpatch to 9.2.

11 years agoSet procost to 10 for each of the pg_foo_is_visible() functions.
Tom Lane [Wed, 10 Oct 2012 16:19:25 +0000 (12:19 -0400)]
Set procost to 10 for each of the pg_foo_is_visible() functions.

The idea here is to make sure the planner will evaluate these functions
last not first among the filter conditions in psql pattern search and
tab-completion queries.  We've discussed this several times, and there
was consensus to do it back in August, but we didn't want to do it just
before a release.  Now seems like a safer time.

No catversion bump, since this catalog change doesn't create a backend
incompatibility nor any regression test result changes.

11 years agoFix PGXS support for building loadable modules on AIX.
Tom Lane [Wed, 10 Oct 2012 01:04:06 +0000 (21:04 -0400)]
Fix PGXS support for building loadable modules on AIX.

Building a shlib on AIX requires use of the mkldexport.sh script, but we
failed to install that, preventing its use from non-source-tree contexts.
Also, Makefile.aix had the wrong idea about where to find the installed
copy of the postgres.imp symbol file used by AIX.

Per report from John Pierce.  Patch all the way back, since this has been
broken since the beginning of PGXS.

11 years agoRemove unnecessary overhead in backend's large-object operations.
Tom Lane [Tue, 9 Oct 2012 20:38:00 +0000 (16:38 -0400)]
Remove unnecessary overhead in backend's large-object operations.

Do read/write permissions checks at most once per large object descriptor,
not once per lo_read or lo_write call as before.  The repeated tests were
quite useless in the read case since the snapshot-based tests were
guaranteed to produce the same answer every time.  In the write case,
the extra tests could in principle detect revocation of write privileges
after a series of writes has started --- but there's a race condition there
anyway, since we'd check privileges before performing and certainly before
committing the write.  So there's no real advantage to checking every
single time, and we might as well redefine it as "only check the first
time".

On the same reasoning, remove the LargeObjectExists checks in inv_write
and inv_truncate.  We already checked existence when the descriptor was
opened, and checking again doesn't provide any real increment of safety
that would justify the cost.

11 years agoFix silly bug in previous refactoring.
Heikki Linnakangas [Tue, 9 Oct 2012 16:33:12 +0000 (19:33 +0300)]
Fix silly bug in previous refactoring.

I extracted the refactoring patch from a larger patch that contained other
changes too, but missed one unintentional change and didn't test enough...

11 years agoPut the logic to wait for WAL in standby mode to a separate function.
Heikki Linnakangas [Tue, 9 Oct 2012 16:20:17 +0000 (19:20 +0300)]
Put the logic to wait for WAL in standby mode to a separate function.

This is just refactoring with no user-visible effect, to make the code more
readable.

11 years agorestore permission bits
Alvaro Herrera [Tue, 9 Oct 2012 15:08:13 +0000 (12:08 -0300)]
restore permission bits

11 years agoRename USE_INLINE to PG_USE_INLINE
Alvaro Herrera [Tue, 9 Oct 2012 14:10:10 +0000 (11:10 -0300)]
Rename USE_INLINE to PG_USE_INLINE

The former name was too likely to conflict with symbols from external
headers; and, as seen in recent buildfarm failures in member spoonbill,
it has now happened at least in plpython.

11 years agoRemove stray newline in comment.
Heikki Linnakangas [Tue, 9 Oct 2012 10:05:59 +0000 (13:05 +0300)]
Remove stray newline in comment.

11 years agoUse tablespace_option consistently on doc page
Simon Riggs [Tue, 9 Oct 2012 07:29:37 +0000 (08:29 +0100)]
Use tablespace_option consistently on doc page

Fujii Masao

11 years agoAdd microsecs/op display to pg_test_fsync utility
Simon Riggs [Tue, 9 Oct 2012 07:15:23 +0000 (08:15 +0100)]
Add microsecs/op display to pg_test_fsync utility

e.g. fsync  2103.613 ops/sec (   475 microsecs/op)

Peter Geoghegan

11 years agoFix lo_import and lo_export to return useful error messages more often.
Tom Lane [Tue, 9 Oct 2012 01:52:34 +0000 (21:52 -0400)]
Fix lo_import and lo_export to return useful error messages more often.

I found that these functions tend to return -1 while leaving an empty error
message string in the PGconn, if they suffer some kind of I/O error on the
file.  The reason is that lo_close, which thinks it's executed a perfectly
fine SQL command, clears the errorMessage.  The minimum-change workaround
is to reorder operations here so that we don't fill the errorMessage until
after lo_close.

11 years agoFix lo_export usage in example programs.
Tom Lane [Tue, 9 Oct 2012 01:18:46 +0000 (21:18 -0400)]
Fix lo_export usage in example programs.

lo_export returns -1, not zero, on failure.

11 years agoFix lo_read, lo_write, lo_truncate to cope with "size_t" length parameters.
Tom Lane [Tue, 9 Oct 2012 01:12:27 +0000 (21:12 -0400)]
Fix lo_read, lo_write, lo_truncate to cope with "size_t" length parameters.

libpq defines these functions as accepting "size_t" lengths ... but the
underlying backend functions expect signed int32 length parameters, and so
will misinterpret any value exceeding INT_MAX.  Fix the libpq side to throw
error rather than possibly doing something unexpected.

This is a bug of long standing, but I doubt it's worth back-patching.  The
problem is really pretty academic anyway with lo_read/lo_write, since any
caller expecting sane behavior would have to have provided a multi-gigabyte
buffer.  It's slightly more pressing with lo_truncate, but still we haven't
supported large objects over 2GB until now.

11 years agoRemove generation of repl_gram.h
Peter Eisentraut [Tue, 9 Oct 2012 00:36:46 +0000 (20:36 -0400)]
Remove generation of repl_gram.h

It was apparently never necessary.

11 years agoCode review for 64-bit-large-object patch.
Tom Lane [Mon, 8 Oct 2012 22:24:06 +0000 (18:24 -0400)]
Code review for 64-bit-large-object patch.

Fix broken-on-bigendian-machines byte-swapping functions, add missed update
of alternate regression expected file, improve error reporting, remove some
unnecessary code, sync testlo64.c with current testlo.c (it seems to have
been cloned from a very old copy of that), assorted cosmetic improvements.

11 years agoFix thinko in previous commit
Alvaro Herrera [Mon, 8 Oct 2012 20:34:33 +0000 (17:34 -0300)]
Fix thinko in previous commit

Since postgres.h includes palloc.h, definitions that affect the latter
must be present before the former is included.

Per buildfarm results

11 years agoAdd support for easily declaring static inline functions
Alvaro Herrera [Mon, 8 Oct 2012 19:12:27 +0000 (16:12 -0300)]
Add support for easily declaring static inline functions

We already had those, but they forced modules to spell out the function
bodies twice.  Eliminate some duplicates we had already grown.

Extracted from a somewhat larger patch from Andres Freund.

11 years agoAdd #define for UUIDOID.
Robert Haas [Mon, 8 Oct 2012 14:15:15 +0000 (10:15 -0400)]
Add #define for UUIDOID.

Phil Sorber and Thom Brown. Reviewed by Albe Laurenz.

11 years agoSay ANALYZE, not VACUUM, in error message on analyze in hot standby.
Heikki Linnakangas [Mon, 8 Oct 2012 11:17:27 +0000 (14:17 +0300)]
Say ANALYZE, not VACUUM, in error message on analyze in hot standby.

Tomonaru Katsumata

11 years agoFix walsender handling of postmaster shutdown, to not go into endless loop.
Heikki Linnakangas [Mon, 8 Oct 2012 10:22:04 +0000 (13:22 +0300)]
Fix walsender handling of postmaster shutdown, to not go into endless loop.

This bug was introduced by my patch to use the regular die/quickdie signal
handlers in walsender processes. I tried to make walsender exit at next
CHECK_FOR_INTERRUPTS() by setting ProcDiePending, but that's not enough, you
need to set InterruptPending too. On second thoght, it was not a very good
way to make walsender exit anyway, so use proc_exit(0) instead.

Also, send a CommandComplete message before exiting; that's what we did
before, and you get a nicer error message in the standby that way.

Reported by Thom Brown.

11 years agoAutoconfiscate selection of 64-bit int type for 64-bit large object API.
Tom Lane [Mon, 8 Oct 2012 01:52:07 +0000 (21:52 -0400)]
Autoconfiscate selection of 64-bit int type for 64-bit large object API.

Get rid of the fundamentally indefensible assumption that "long long int"
exists and is exactly 64 bits wide on every platform Postgres runs on.
Instead let the configure script select the type to use for "pg_int64".

This is a bit of a pain in the rear since we do not want to pollute client
namespace with all the random symbols that pg_config.h defines; instead
we have to create a separate generated header file, "pg_config_ext.h".
But now that the infrastructure is there, we might have the ability to
add some other stuff that's long been wanting in this area.

11 years agoFix typo in previous MSC commit.
Andrew Dunstan [Sun, 7 Oct 2012 23:56:26 +0000 (19:56 -0400)]
Fix typo in previous MSC commit.

11 years agoImprove documentation about large-object functions.
Tom Lane [Sun, 7 Oct 2012 23:16:28 +0000 (19:16 -0400)]
Improve documentation about large-object functions.

Copy-editing for previous patch, plus fixing some longstanding markup
issues and oversights (like not mentioning that failures will set the
PQerrorMessage string).

11 years agoQuiet a few MSC compiler warnings.
Andrew Dunstan [Sun, 7 Oct 2012 21:31:10 +0000 (17:31 -0400)]
Quiet a few MSC compiler warnings.

11 years agoFix compiling errors on Windows platform. Fix wrong usage of
Tatsuo Ishii [Sun, 7 Oct 2012 14:30:31 +0000 (23:30 +0900)]
Fix compiling errors on Windows platform. Fix wrong usage of
INT64CONST macro. Fix lo_hton64 and lo_ntoh64 not to use int32_t and
uint32_t.

11 years agoBump up catalog vesion due to 64-bit large object API functions
Tatsuo Ishii [Sun, 7 Oct 2012 00:36:20 +0000 (09:36 +0900)]
Bump up catalog vesion due to 64-bit large object API functions
addition.

11 years agoAdd API for 64-bit large object access. Now users can access up to
Tatsuo Ishii [Sat, 6 Oct 2012 23:36:48 +0000 (08:36 +0900)]
Add API for 64-bit large object access.  Now users can access up to
4TB large objects (standard 8KB BLCKSZ case).  For this purpose new
libpq API lo_lseek64, lo_tell64 and lo_truncate64 are added.  Also
corresponding new backend functions lo_lseek64, lo_tell64 and
lo_truncate64 are added. inv_api.c is changed to handle 64-bit
offsets.

Patch contributed by Nozomi Anzai (backend side) and Yugo Nagata
(frontend side, docs, regression tests and example program). Reviewed
by Kohei Kaigai. Committed by Tatsuo Ishii with minor editings.

11 years agoImprove LDAP authentication documentation
Peter Eisentraut [Sat, 6 Oct 2012 01:20:06 +0000 (21:20 -0400)]
Improve LDAP authentication documentation

Use the terms "simple bind" and "search+bind" consistently do
distinguish the two modes (better than first mode and second mode in
any case).  They were already used in some places, now it's just more
prominent.

Split up the list of options into one for common options and one for
each mode, for clarity.

Add configuration examples for either mode.