]> granicus.if.org Git - postgresql/log
postgresql
10 years agoFix broken support for event triggers as extension members.
Tom Lane [Mon, 30 Dec 2013 19:00:02 +0000 (14:00 -0500)]
Fix broken support for event triggers as extension members.

CREATE EVENT TRIGGER forgot to mark the event trigger as a member of its
extension, and pg_dump didn't pay any attention anyway when deciding
whether to dump the event trigger.  Per report from Moshe Jacobson.

Given the obvious lack of testing here, it's rather astonishing that
ALTER EXTENSION ADD/DROP EVENT TRIGGER work, but they seem to.

10 years agoFix alphabetization in catalogs.sgml.
Tom Lane [Mon, 30 Dec 2013 18:27:51 +0000 (13:27 -0500)]
Fix alphabetization in catalogs.sgml.

Some recent patches seem not to have grasped the concept that the catalogs
are described in alphabetical order.

10 years agoRemove dead code now that orindxpath.c is history.
Tom Lane [Mon, 30 Dec 2013 17:50:31 +0000 (12:50 -0500)]
Remove dead code now that orindxpath.c is history.

We don't need make_restrictinfo_from_bitmapqual() anymore at all.
generate_bitmap_or_paths() doesn't need to be exported, and we can
drop its rather klugy restriction_only flag.

10 years agoExtract restriction OR clauses whether or not they are indexable.
Tom Lane [Mon, 30 Dec 2013 17:24:37 +0000 (12:24 -0500)]
Extract restriction OR clauses whether or not they are indexable.

It's possible to extract a restriction OR clause from a join clause that
has the form of an OR-of-ANDs, if each sub-AND includes a clause that
mentions only one specific relation.  While PG has been aware of that idea
for many years, the code previously only did it if it could extract an
indexable OR clause.  On reflection, though, that seems a silly limitation:
adding a restriction clause can be a win by reducing the number of rows
that have to be filtered at the join step, even if we have to test the
clause as a plain filter clause during the scan.  This should be especially
useful for foreign tables, where the change can cut the number of rows that
have to be retrieved from the foreign server; but testing shows it can win
even on local tables.  Per a suggestion from Robert Haas.

As a heuristic, I made the code accept an extracted restriction clause
if its estimated selectivity is less than 0.9, which will probably result
in accepting extracted clauses just about always.  We might need to tweak
that later based on experience.

Since the code no longer has even a weak connection to Path creation,
remove orindxpath.c and create a new file optimizer/util/orclauses.c.

There's some additional janitorial cleanup of now-dead code that needs
to happen, but it seems like that's a fit subject for a separate commit.

10 years agoDon't attempt to limit target database for pg_restore.
Kevin Grittner [Sun, 29 Dec 2013 21:17:52 +0000 (15:17 -0600)]
Don't attempt to limit target database for pg_restore.

There was an apparent attempt to limit the target database for
pg_restore to version 7.1.0 or later.  Due to a leading zero this
was interpreted as an octal number, which allowed targets with
version numbers down to 2.87.36.  The lowest actual release above
that was 6.0.0, so that was effectively the limit.

Since the success of the restore attempt will depend primarily on
on what statements were generated by the dump run, we don't want
pg_restore trying to guess whether a given target should be allowed
based on version number.  Allow a connection to any version.  Since
it is very unlikely that anyone would be using a recent version of
pg_restore to restore to a pre-6.0 database, this has little to no
practical impact, but it makes the code less confusing to read.

Issue reported and initial patch suggestion from Joel Jacobson
based on an article by Andrey Karpov reporting on issues found by
PVS-Studio static code analyzer.  Final patch based on analysis by
Tom Lane.  Back-patch to all supported branches.

10 years agoUndo autoconf 2.69's attempt to #define _DARWIN_USE_64_BIT_INODE.
Tom Lane [Sun, 29 Dec 2013 17:57:45 +0000 (12:57 -0500)]
Undo autoconf 2.69's attempt to #define _DARWIN_USE_64_BIT_INODE.

Defining this symbol causes OS X 10.5 to use a buggy version of readdir(),
which can sometimes fail with EINVAL if the previously-fetched directory
entry has been deleted or renamed.  In later OS X versions that bug has
been repaired, but we still don't need the #define because it's on by
default.  So this is just an all-around bad idea, and we can do without it.

10 years agoUpdate grammar
Peter Eisentraut [Sun, 29 Dec 2013 01:54:23 +0000 (20:54 -0500)]
Update grammar

From: Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>

10 years agoFix whitespace
Peter Eisentraut [Sat, 28 Dec 2013 00:51:49 +0000 (19:51 -0500)]
Fix whitespace

10 years agoProperly detect invalid JSON numbers when generating JSON.
Andrew Dunstan [Fri, 27 Dec 2013 22:04:00 +0000 (17:04 -0500)]
Properly detect invalid JSON numbers when generating JSON.

Instead of looking for characters that aren't valid in JSON numbers, we
simply pass the output string through the JSON number parser, and if it
fails the string is quoted. This means among other things that money and
domains over money will be quoted correctly and generate valid JSON.

Fixes bug #8676 reported by Anderson Cristian da Silva.

Backpatched to 9.2 where JSON generation was introduced.

10 years agoFix misplaced right paren bugs in pgstatfuncs.c.
Kevin Grittner [Fri, 27 Dec 2013 21:26:24 +0000 (15:26 -0600)]
Fix misplaced right paren bugs in pgstatfuncs.c.

The bug would only show up if the C sockaddr structure contained
zero in the first byte for a valid address; otherwise it would
fail to fail, which is probably why it went unnoticed for so long.

Patch submitted by Joel Jacobson after seeing an article by Andrey
Karpov in which he reports finding this through static code
analysis using PVS-Studio.  While I was at it I moved a definition
of a local variable referenced in the buggy code to a more local
context.

Backpatch to all supported branches.

10 years agoFix whitespace
Peter Eisentraut [Fri, 27 Dec 2013 04:51:56 +0000 (23:51 -0500)]
Fix whitespace

10 years agoFix inadequately-tested code path in tuplesort_skiptuples().
Tom Lane [Tue, 24 Dec 2013 22:13:02 +0000 (17:13 -0500)]
Fix inadequately-tested code path in tuplesort_skiptuples().

Per report from Jeff Davis.

10 years agoFix ANALYZE failure on a column that's a domain over a range.
Tom Lane [Tue, 24 Dec 2013 03:18:12 +0000 (22:18 -0500)]
Fix ANALYZE failure on a column that's a domain over a range.

Most other range operations seem to work all right on domains,
but this one not so much, at least not since commit 918eee0c.
Per bug #8684 from Brett Neumeier.

10 years agoRevise documentation for new freezing method.
Robert Haas [Tue, 24 Dec 2013 01:32:29 +0000 (20:32 -0500)]
Revise documentation for new freezing method.

Commit 37484ad2aacef5ec794f4dd3d5cf814475180a78 invalidated a good
chunk of documentation, so patch it up to reflect the new state of
play.  Along the way, patch remaining documentation references to
FrozenXID to say instead FrozenTransactionId, so that they match the
way we actually spell it in the code.

10 years agoFix portability issue in ordered-set patch.
Tom Lane [Tue, 24 Dec 2013 01:24:07 +0000 (20:24 -0500)]
Fix portability issue in ordered-set patch.

Overly compact coding in makeOrderedSetArgs() led to a platform dependency:
if the compiler chose to execute the subexpressions in the wrong order,
list_length() might get applied to an already-modified List, giving a
value we didn't want.  Per buildfarm.

10 years agoSupport ordered-set (WITHIN GROUP) aggregates.
Tom Lane [Mon, 23 Dec 2013 21:11:35 +0000 (16:11 -0500)]
Support ordered-set (WITHIN GROUP) aggregates.

This patch introduces generic support for ordered-set and hypothetical-set
aggregate functions, as well as implementations of the instances defined in
SQL:2008 (percentile_cont(), percentile_disc(), rank(), dense_rank(),
percent_rank(), cume_dist()).  We also added mode() though it is not in the
spec, as well as versions of percentile_cont() and percentile_disc() that
can compute multiple percentile values in one pass over the data.

Unlike the original submission, this patch puts full control of the sorting
process in the hands of the aggregate's support functions.  To allow the
support functions to find out how they're supposed to sort, a new API
function AggGetAggref() is added to nodeAgg.c.  This allows retrieval of
the aggregate call's Aggref node, which may have other uses beyond the
immediate need.  There is also support for ordered-set aggregates to
install cleanup callback functions, so that they can be sure that
infrastructure such as tuplesort objects gets cleaned up.

In passing, make some fixes in the recently-added support for variadic
aggregates, and make some editorial adjustments in the recent FILTER
additions for aggregates.  Also, simplify use of IsBinaryCoercible() by
allowing it to succeed whenever the target type is ANY or ANYELEMENT.
It was inconsistent that it dealt with other polymorphic target types
but not these.

Atri Sharma and Andrew Gierth; reviewed by Pavel Stehule and Vik Fearing,
and rather heavily editorialized upon by Tom Lane

10 years agoChange the way we mark tuples as frozen.
Robert Haas [Sun, 22 Dec 2013 20:49:09 +0000 (15:49 -0500)]
Change the way we mark tuples as frozen.

Instead of changing the tuple xmin to FrozenTransactionId, the combination
of HEAP_XMIN_COMMITTED and HEAP_XMIN_INVALID, which were previously never
set together, is now defined as HEAP_XMIN_FROZEN.  A variety of previous
proposals to freeze tuples opportunistically before vacuum_freeze_min_age
is reached have foundered on the objection that replacing xmin by
FrozenTransactionId might hinder debugging efforts when things in this
area go awry; this patch is intended to solve that problem by keeping
the XID around (but largely ignoring the value to which it is set).

Third-party code that checks for HEAP_XMIN_INVALID on tuples where
HEAP_XMIN_COMMITTED might be set will be broken by this change.  To fix,
use the new accessor macros in htup_details.h rather than consulting the
bits directly.  HeapTupleHeaderGetXmin has been modified to return
FrozenTransactionId when the infomask bits indicate that the tuple is
frozen; use HeapTupleHeaderGetRawXmin when you already know that the
tuple isn't marked commited or frozen, or want the raw value anyway.
We currently do this in routines that display the xmin for user consumption,
in tqual.c where it's known to be safe and important for the avoidance of
extra cycles, and in the function-caching code for various procedural
languages, which shouldn't invalidate the cache just because the tuple
gets frozen.

Robert Haas and Andres Freund

10 years agoRename wal_log_hintbits to wal_log_hints, per discussion on pgsql-hackers.
Fujii Masao [Fri, 20 Dec 2013 18:33:16 +0000 (03:33 +0900)]
Rename wal_log_hintbits to wal_log_hints, per discussion on pgsql-hackers.

Sawada Masahiko

10 years agoAvoid useless palloc during transaction commit
Alvaro Herrera [Fri, 20 Dec 2013 15:37:30 +0000 (12:37 -0300)]
Avoid useless palloc during transaction commit

We can allocate the initial relations-to-drop array when first needed,
instead of at function entry; this avoids allocating it when the
function is not going to do anything, which is most of the time.

Backpatch to 9.3, where this behavior was introduced by commit
279628a0a7cf5.

There's more that could be done here, such as possible reworking of the
code to avoid having to palloc anything, but that doesn't sound as
backpatchable as this relatively minor change.

Per complaint from Noah Misch in
20131031145234.GA621493@tornado.leadboat.com

10 years agopg_prewarm, a contrib module for prewarming relationd data.
Robert Haas [Fri, 20 Dec 2013 13:08:01 +0000 (08:08 -0500)]
pg_prewarm, a contrib module for prewarming relationd data.

Patch by me.  Review by Álvaro Herrera, Amit Kapila, Jeff Janes,
Gurjeet Singh, and others.

10 years agoisolationtester: Ensure stderr is unbuffered, too
Alvaro Herrera [Fri, 20 Dec 2013 01:09:30 +0000 (22:09 -0300)]
isolationtester: Ensure stderr is unbuffered, too

10 years agoMove pg_upgrade_support global variables to their own include file
Bruce Momjian [Thu, 19 Dec 2013 21:10:01 +0000 (16:10 -0500)]
Move pg_upgrade_support global variables to their own include file

Previously their declarations were spread around to avoid accidental
access.

10 years agoMake stdout unbuffered
Alvaro Herrera [Thu, 19 Dec 2013 20:26:27 +0000 (17:26 -0300)]
Make stdout unbuffered

This ensures that all stdout output is flushed immediately, to match
stderr.  This eliminates the need for fflush(stdout) calls sprinkled all
over the place.

Per Daniel Wood in message 519A79C6.90308@salesforce.com

10 years agoOptimize updating a row that's locked by same xid
Alvaro Herrera [Thu, 19 Dec 2013 19:39:59 +0000 (16:39 -0300)]
Optimize updating a row that's locked by same xid

Updating or locking a row that was already locked by the same
transaction under the same Xid caused a MultiXact to be created; but
this is unnecessary, because there's no usefulness in being able to
differentiate two locks by the same transaction.  In particular, if a
transaction executed SELECT FOR UPDATE followed by an UPDATE that didn't
modify columns of the key, we would dutifully represent the resulting
combination as a multixact -- even though a single key-update is
sufficient.

Optimize the case so that only the strongest of both locks/updates is
represented in Xmax.  This can save some Xmax's from becoming
MultiXacts, which can be a significant optimization.

This missed optimization opportunity was spotted by Andres Freund while
investigating a bug reported by Oliver Seemann in message
CANCipfpfzoYnOz5jj=UZ70_R=CwDHv36dqWSpwsi27vpm1z5sA@mail.gmail.com
and also directly as a performance regression reported by Dong Ye in
message
d54b8387.000012d8.00000010@YED-DEVD1.vmware.com
Reportedly, this patch fixes the performance regression.

Since the missing optimization was reported as a significant performance
regression from 9.2, backpatch to 9.3.

Andres Freund, tweaked by Álvaro Herrera

10 years agoAdd tab completion for ALTER SYSTEM SET in psql.
Fujii Masao [Thu, 19 Dec 2013 17:33:27 +0000 (02:33 +0900)]
Add tab completion for ALTER SYSTEM SET in psql.

10 years agoFix typo in docs for min_recovery_apply_delay.
Fujii Masao [Thu, 19 Dec 2013 10:22:29 +0000 (19:22 +0900)]
Fix typo in docs for min_recovery_apply_delay.

Bernd Helmle

10 years agoUpgrade to Autoconf 2.69
Peter Eisentraut [Thu, 19 Dec 2013 01:53:23 +0000 (20:53 -0500)]
Upgrade to Autoconf 2.69

10 years agoFix compiler warning.
Robert Haas [Wed, 18 Dec 2013 18:31:35 +0000 (13:31 -0500)]
Fix compiler warning.

get_user_name returns const char *, but we were assigning the result
to a char * variable.

10 years agoAllow on-detach callbacks for dynamic shared memory segments.
Robert Haas [Wed, 18 Dec 2013 17:57:20 +0000 (12:57 -0500)]
Allow on-detach callbacks for dynamic shared memory segments.

Just as backends must clean up their shared memory state (releasing
lwlocks, buffer pins, etc.) before exiting, they must also perform
any similar cleanups related to dynamic shared memory segments they
have mapped before unmapping those segments.  So add a mechanism to
ensure that.

Existing on_shmem_exit hooks include both "user level" cleanup such
as transaction abort and removal of leftover temporary relations and
also "low level" cleanup that forcibly released leftover shared
memory resources.  On-detach callbacks should run after the first
group but before the second group, so create a new before_shmem_exit
function for registering the early callbacks and keep on_shmem_exit
for the regular callbacks.  (An earlier draft of this patch added an
additional argument to on_shmem_exit, but that had a much larger
footprint and probably a substantially higher risk of breaking third
party code for no real gain.)

Patch by me, reviewed by KaiGai Kohei and Andres Freund.

10 years agoFix incorrect error message reported for non-existent users
Bruce Momjian [Wed, 18 Dec 2013 17:16:16 +0000 (12:16 -0500)]
Fix incorrect error message reported for non-existent users

Previously, lookups of non-existent user names could return "Success";
it will now return "User does not exist" by resetting errno.  This also
centralizes the user name lookup code in libpgport.

Report and analysis by Nicolas Marchildon;  patch by me

10 years agoDon't ignore tuple locks propagated by our updates
Alvaro Herrera [Wed, 18 Dec 2013 16:31:27 +0000 (13:31 -0300)]
Don't ignore tuple locks propagated by our updates

If a tuple was locked by transaction A, and transaction B updated it,
the new version of the tuple created by B would be locked by A, yet
visible only to B; due to an oversight in HeapTupleSatisfiesUpdate, the
lock held by A wouldn't get checked if transaction B later deleted (or
key-updated) the new version of the tuple.  This might cause referential
integrity checks to give false positives (that is, allow deletes that
should have been rejected).

This is an easy oversight to have made, because prior to improved tuple
locks in commit 0ac5ad5134f it wasn't possible to have tuples created by
our own transaction that were also locked by remote transactions, and so
locks weren't even considered in that code path.

It is recommended that foreign keys be rechecked manually in bulk after
installing this update, in case some referenced rows are missing with
some referencing row remaining.

Per bug reported by Daniel Wood in
CAPweHKe5QQ1747X2c0tA=5zf4YnS2xcvGf13Opd-1Mq24rF1cQ@mail.gmail.com

10 years agoAdd ALTER SYSTEM command to edit the server configuration file.
Tatsuo Ishii [Wed, 18 Dec 2013 14:42:44 +0000 (23:42 +0900)]
Add ALTER SYSTEM command to edit the server configuration file.

Patch contributed by Amit Kapila. Reviewed by Hari Babu, Masao Fujii,
Boszormenyi Zoltan, Andres Freund, Greg Smith and others.

10 years agoComment: COPY comment improvement
Bruce Momjian [Tue, 17 Dec 2013 17:51:16 +0000 (12:51 -0500)]
Comment:  COPY comment improvement

Etsuro Fujita

10 years agoRework tuple freezing protocol
Alvaro Herrera [Mon, 16 Dec 2013 14:29:50 +0000 (11:29 -0300)]
Rework tuple freezing protocol

Tuple freezing was broken in connection to MultiXactIds; commit
8e53ae025de9 tried to fix it, but didn't go far enough.  As noted by
Noah Misch, freezing a tuple whose Xmax is a multi containing an aborted
update might cause locks in the multi to go ignored by later
transactions.  This is because the code depended on a multixact above
their cutoff point not having any lock-only member older than the cutoff
point for Xids, which is easily defeated in READ COMMITTED transactions.

The fix for this involves creating a new MultiXactId when necessary.
But this cannot be done during WAL replay, and moreover multixact
examination requires using CLOG access routines which are not supposed
to be used during WAL replay either; so tuple freezing cannot be done
with the old freeze WAL record.  Therefore, separate the freezing
computation from its execution, and change the WAL record to carry all
necessary information.  At WAL replay time, it's easy to re-execute
freezing because we don't need to re-compute the new infomask/Xmax
values but just take them from the WAL record.

While at it, restructure the coding to ensure all page changes occur in
a single critical section without much room for failures.  The previous
coding wasn't using a critical section, without any explanation as to
why this was acceptable.

In replication scenarios using the 9.3 branch, standby servers must be
upgraded before their master, so that they are prepared to deal with the
new WAL record once the master is upgraded; failure to do so will cause
WAL replay to die with a PANIC message.  Later upgrade of the standby
will allow the process to continue where it left off, so there's no
disruption of the data in the standby in any case.  Standbys know how to
deal with the old WAL record, so it's okay to keep the master running
the old code for a while.

In master, the old freeze WAL record is gone, for cleanliness' sake;
there's no compatibility concern there.

Backpatch to 9.3, where the original bug was introduced and where the
previous fix was backpatched.

Álvaro Herrera and Andres Freund

10 years agoMark variables 'static' where possible. Move GinFuzzySearchLimit to ginget.c
Heikki Linnakangas [Mon, 16 Dec 2013 09:27:30 +0000 (11:27 +0200)]
Mark variables 'static' where possible. Move GinFuzzySearchLimit to ginget.c

Per "clang -Wmissing-variable-declarations" output, posted by Andres Freund.
I didn't silence all those warnings, though, only the most obvious cases.

10 years agoAdd "SHIFT_JIS" as an accepted encoding name for locale checking.
Tatsuo Ishii [Sun, 15 Dec 2013 01:33:06 +0000 (10:33 +0900)]
Add "SHIFT_JIS" as an accepted encoding name for locale checking.

When locale is "ja_JP.SJIS", nl_langinfo(CODESET) returns "SHIFT_JIS"
on some platforms, at least on RedHat Linux. So the encoding/locale
match table (encoding_match_list) needs the entry. Otherwise client
encoding is set to SQL_ASCII.

Back patch to all supported branches.

10 years agoAllow empty target list in SELECT.
Tom Lane [Sun, 15 Dec 2013 01:23:26 +0000 (20:23 -0500)]
Allow empty target list in SELECT.

This fixes a problem noted as a followup to bug #8648: if a query has a
semantically-empty target list, e.g. SELECT * FROM zero_column_table,
ruleutils.c will dump it as a syntactically-empty target list, which was
not allowed.  There doesn't seem to be any reliable way to fix this by
hacking ruleutils (note in particular that the originally zero-column table
might since have had columns added to it); and even if we had such a fix,
it would do nothing for existing dump files that might contain bad syntax.
The best bet seems to be to relax the syntactic restriction.

Also, add parse-analysis errors for SELECT DISTINCT with no columns (after
*-expansion) and RETURNING with no columns.  These cases previously
produced unexpected behavior because the parsed Query looked like it had
no DISTINCT or RETURNING clause, respectively.  If anyone ever offers
a plausible use-case for this, we could work a bit harder on making the
situation distinguishable.

Arguably this is a bug fix that should be back-patched, but I'm worried
that there may be client apps or PLs that expect "SELECT ;" to throw a
syntax error.  The issue doesn't seem important enough to risk changing
behavior in minor releases.

10 years agoFix inherited UPDATE/DELETE with UNION ALL subqueries.
Tom Lane [Sat, 14 Dec 2013 22:33:53 +0000 (17:33 -0500)]
Fix inherited UPDATE/DELETE with UNION ALL subqueries.

Fix an oversight in commit b3aaf9081a1a95c245fd605dcf02c91b3a5c3a29: we do
indeed need to process the planner's append_rel_list when copying RTE
subqueries, because if any of them were flattenable UNION ALL subqueries,
the append_rel_list shows which subquery RTEs were pulled up out of which
other ones.  Without this, UNION ALL subqueries aren't correctly inserted
into the update plans for inheritance child tables after the first one,
typically resulting in no update happening for those child table(s).
Per report from Victor Yegorov.

Experimentation with this case also exposed a fault in commit
a7b965382cf0cb30aeacb112572718045e6d4be7: if an inherited UPDATE/DELETE
was proven totally dummy by constraint exclusion, we might arrive at
add_rtes_to_flat_rtable with root->simple_rel_array being NULL.  This
should be interpreted as not having any RelOptInfos.  I chose to code
the guard as a check against simple_rel_array_size, so as to also
provide some protection against indexing off the end of the array.

Back-patch to 9.2 where the faulty code was added.

10 years agoFix typo
Alvaro Herrera [Fri, 13 Dec 2013 20:26:58 +0000 (17:26 -0300)]
Fix typo

10 years agoRework MultiXactId cache code
Alvaro Herrera [Fri, 13 Dec 2013 20:16:25 +0000 (17:16 -0300)]
Rework MultiXactId cache code

The original performs too poorly; in some scenarios it shows way too
high while profiling.  Try to make it a bit smarter to avoid excessive
cosst.  In particular, make it have a maximum size, and have entries be
sorted in LRU order; once the max size is reached, evict the oldest
entry to avoid it from growing too large.

Per complaint from Andres Freund in connection with new tuple freezing
code.

10 years agoAdd HOLD/RESUME_INTERRUPTS in HandleCatchupInterrupt/HandleNotifyInterrupt.
Tom Lane [Fri, 13 Dec 2013 19:05:14 +0000 (14:05 -0500)]
Add HOLD/RESUME_INTERRUPTS in HandleCatchupInterrupt/HandleNotifyInterrupt.

This prevents a possible longjmp out of the signal handler if a timeout
or SIGINT occurs while something within the handler has transiently set
ImmediateInterruptOK.  For safety we must hold off the timeout or cancel
error until we're back in mainline, or at least till we reach the end of
the signal handler when ImmediateInterruptOK was true at entry.  This
syncs these functions with the logic now present in handle_sig_alarm.

AFAICT there is no live bug here in 9.0 and up, because I don't think we
currently can wait for any heavyweight lock inside these functions, and
there is no other code (except read-from-client) that will turn on
ImmediateInterruptOK.  However, that was not true pre-9.0: in older
branches ProcessIncomingNotify might block trying to lock pg_listener, and
then a SIGINT could lead to undesirable control flow.  It might be all
right anyway given the relatively narrow code ranges in which NOTIFY
interrupts are enabled, but for safety's sake I'm back-patching this.

10 years agoFix more instances of "the the" in comments.
Heikki Linnakangas [Fri, 13 Dec 2013 17:58:48 +0000 (19:58 +0200)]
Fix more instances of "the the" in comments.

Plus one instance of "to to" in the docs.

10 years agoDon't let timeout interrupts happen unless ImmediateInterruptOK is set.
Tom Lane [Fri, 13 Dec 2013 16:50:15 +0000 (11:50 -0500)]
Don't let timeout interrupts happen unless ImmediateInterruptOK is set.

Serious oversight in commit 16e1b7a1b7f7ffd8a18713e83c8cd72c9ce48e07:
we should not allow an interrupt to take control away from mainline code
except when ImmediateInterruptOK is set.  Just to be safe, let's adopt
the same save-clear-restore dance that's been used for many years in
HandleCatchupInterrupt and HandleNotifyInterrupt, so that nothing bad
happens if a timeout handler invokes code that tests or even manipulates
ImmediateInterruptOK.

Per report of "stuck spinlock" failures from Christophe Pettus, though
many other symptoms are possible.  Diagnosis by Andres Freund.

10 years agoAdd GUC to enable WAL-logging of hint bits, even with checksums disabled.
Heikki Linnakangas [Fri, 13 Dec 2013 14:26:14 +0000 (16:26 +0200)]
Add GUC to enable WAL-logging of hint bits, even with checksums disabled.

WAL records of hint bit updates is useful to tools that want to examine
which pages have been modified. In particular, this is required to make
the pg_rewind tool safe (without checksums).

This can also be used to test how much extra WAL-logging would occur if
you enabled checksums, without actually enabling them (which you can't
currently do without re-initdb'ing).

Sawada Masahiko, docs by Samrat Revagade. Reviewed by Dilip Kumar, with
further changes by me.

10 years agoFix double "the" in the documentation
Magnus Hagander [Fri, 13 Dec 2013 14:01:56 +0000 (15:01 +0100)]
Fix double "the" in the documentation

Erik Rijkers

10 years agoFix WAL-logging of setting the visibility map bit.
Heikki Linnakangas [Fri, 13 Dec 2013 11:52:47 +0000 (13:52 +0200)]
Fix WAL-logging of setting the visibility map bit.

The operation that removes the remaining dead tuples from the page must
be WAL-logged before the setting of the VM bit. Otherwise, if you replay
the WAL to between those two records, you end up with the VM bit set, but
the dead tuples are still there.

Backpatch to 9.3, where this bug was introduced.

10 years agoconfigure: Allow adding a custom string to PG_VERSION
Peter Eisentraut [Fri, 13 Dec 2013 02:53:21 +0000 (21:53 -0500)]
configure: Allow adding a custom string to PG_VERSION

This can be used to mark custom built binaries with an extra version
string such as a git describe identifier or distribution package release
version.

From: Oskari Saarenmaa <os@ohmu.fi>

10 years agoFix ancient docs/comments thinko: XID comparison is mod 2^32, not 2^31.
Tom Lane [Thu, 12 Dec 2013 17:39:48 +0000 (12:39 -0500)]
Fix ancient docs/comments thinko: XID comparison is mod 2^32, not 2^31.

Pointed out by Gianni Ciolli.

10 years agoImprove EXPLAIN to print the grouping columns in Agg and Group nodes.
Tom Lane [Thu, 12 Dec 2013 16:24:38 +0000 (11:24 -0500)]
Improve EXPLAIN to print the grouping columns in Agg and Group nodes.

Per request from Kevin Grittner.

10 years agoNew autovacuum_work_mem parameter
Simon Riggs [Thu, 12 Dec 2013 11:42:39 +0000 (11:42 +0000)]
New autovacuum_work_mem parameter

If autovacuum_work_mem is set, autovacuum workers now use
this parameter in preference to maintenance_work_mem.

Peter Geoghegan

10 years agoAllow time delayed standbys and recovery
Simon Riggs [Thu, 12 Dec 2013 10:53:20 +0000 (10:53 +0000)]
Allow time delayed standbys and recovery

Set min_recovery_apply_delay to force a delay in recovery apply for commit and
restore point WAL records. Other records are replayed immediately. Delay is
measured between WAL record time and local standby time.

Robert Haas, Fabrízio de Royes Mello and Simon Riggs
Detailed review by Mitsumasa Kondo

10 years agoFix progress logging when scale factor is large.
Tatsuo Ishii [Thu, 12 Dec 2013 10:01:01 +0000 (19:01 +0900)]
Fix progress logging when scale factor is large.

Integer overflow showed minus percent and minus remaining time something like this.
  239300000 of 3800000000 tuples (-48%) done (elapsed 226.86 s, remaining -696.10 s).

10 years agoDisplay old and new values in pg_resetxlog -n output.
Heikki Linnakangas [Thu, 12 Dec 2013 09:54:57 +0000 (11:54 +0200)]
Display old and new values in pg_resetxlog -n output.

For extra clarity.

Rajeev Rastogi, reviewed by Amit Kapila

10 years agoRemove bogus executable permissions on xlog.c.
Tom Lane [Thu, 12 Dec 2013 03:12:25 +0000 (22:12 -0500)]
Remove bogus executable permissions on xlog.c.

Apparently fat-fingered in 1a3d104475ce01326fc00601ed66ac4d658e37e5.
Noted by Peter Geoghegan.

10 years agoAdd a regression test case for plpython function returning setof RECORD.
Tom Lane [Wed, 11 Dec 2013 22:22:47 +0000 (17:22 -0500)]
Add a regression test case for plpython function returning setof RECORD.

We had coverage for functions returning setof a named composite type,
but not for anonymous records, which is a somewhat different code path.
In view of recent crash report from Sergey Konoplev, this seems worth
testing, though I doubt there's any deterministic bug here today.

10 years agoRegression tests for SCHEMA commands
Simon Riggs [Wed, 11 Dec 2013 20:45:15 +0000 (20:45 +0000)]
Regression tests for SCHEMA commands

Hari Babu Kommi reviewed by David Rowley

10 years agoRegression tests for ALTER TABLESPACE RENAME,OWNER
Simon Riggs [Wed, 11 Dec 2013 20:42:58 +0000 (20:42 +0000)]
Regression tests for ALTER TABLESPACE RENAME,OWNER

Hari Babu Kommi reviewed by David Rowley

10 years agoTweak placement of explicit ANALYZE commands in the regression tests.
Tom Lane [Wed, 11 Dec 2013 20:08:33 +0000 (15:08 -0500)]
Tweak placement of explicit ANALYZE commands in the regression tests.

Make the COPY test, which loads most of the large static tables used in
the tests, also explicitly ANALYZE those tables.  This allows us to get
rid of various ad-hoc, and rather redundant, ANALYZE commands that had
gotten stuck into various test scripts over time to ensure we got
consistent plan choices.  (We could have done a database-wide ANALYZE,
but that would cause stats to get attached to the small static tables
too, which results in plan changes compared to the historical behavior.
I'm not sure that's a good idea, so not going that far for now.)

Back-patch to 9.0, since 9.0 and 9.1 are currently sometimes failing
regression tests for lack of an "ANALYZE tenk1" in the subselect test.
There's no need for this in 8.4 since we didn't print any plans back
then.

10 years agoUnder wal_level=logical, when saving old tuples, always save OID.
Robert Haas [Wed, 11 Dec 2013 18:17:44 +0000 (13:17 -0500)]
Under wal_level=logical, when saving old tuples, always save OID.

There's no real point in not doing this.  It doesn't cost anything
in performance or space.  So let's go wild.

Andres Freund, with substantial editing as to style by me.

10 years agoAdd table name to VACUUM statement in matview.c.
Kevin Grittner [Wed, 11 Dec 2013 14:53:03 +0000 (08:53 -0600)]
Add table name to VACUUM statement in matview.c.

The test only needs the one table to be vacuumed.  Vacuuming the
database may affect other tests.

Per gripe from Tom Lane.  Back-patch to 9.3, where the test was
was added.

10 years agoPL/Perl: Add event trigger support
Peter Eisentraut [Wed, 11 Dec 2013 13:11:59 +0000 (08:11 -0500)]
PL/Perl: Add event trigger support

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

10 years agoAdd a new option, -g, to createuser, to add membership in a role.
Robert Haas [Wed, 11 Dec 2013 12:50:36 +0000 (07:50 -0500)]
Add a new option, -g, to createuser, to add membership in a role.

Chistopher Browne, reviewed by Sameer Thakur, Amit Kapila, and
Peter Eisentraut.

10 years agodoc: Fix DocBook table column count declaration
Peter Eisentraut [Wed, 11 Dec 2013 02:46:43 +0000 (21:46 -0500)]
doc: Fix DocBook table column count declaration

This was broken in d6464fdc0a591662e5e5ee1b0303932e89cb027c.

10 years agoAdd a new reloption, user_catalog_table.
Robert Haas [Wed, 11 Dec 2013 00:17:34 +0000 (19:17 -0500)]
Add a new reloption, user_catalog_table.

When this reloption is set and wal_level=logical is configured,
we'll record the CIDs stamped by inserts, updates, and deletes to
the table just as we would for an actual catalog table.  This will
allow logical decoding to use historical MVCC snapshots to access
such tables just as they access ordinary catalog tables.

Replication solutions built around the logical decoding machinery
will likely need to set this operation for their configuration
tables; it might also be needed by extensions which perform table
access in their output functions.

Andres Freund, reviewed by myself and others.

10 years agoAdd new wal_level, logical, sufficient for logical decoding.
Robert Haas [Tue, 10 Dec 2013 23:33:45 +0000 (18:33 -0500)]
Add new wal_level, logical, sufficient for logical decoding.

When wal_level=logical, we'll log columns from the old tuple as
configured by the REPLICA IDENTITY facility added in commit
07cacba983ef79be4a84fcd0e0ca3b5fcb85dd65.  This makes it possible
a properly-configured logical replication solution to correctly
follow table updates even if they change the chosen key columns,
or, with REPLICA IDENTITY FULL, even if the table has no key at
all.  Note that updates which do not modify the replica identity
column won't log anything extra, making the choice of a good key
(i.e. one that will rarely be changed) important to performance
when wal_level=logical is configured.

Each insert, update, or delete to a catalog table will also log
the CMIN and/or CMAX values of stamped by the current transaction.
This is necessary because logical decoding will require access to
historical snapshots of the catalog in order to decode some data
types, and the CMIN/CMAX values that we may need in order to judge
row visibility may have been overwritten by the time we need them.

Andres Freund, reviewed in various versions by myself, Heikki
Linnakangas, KONDO Mitsumasa, and many others.

10 years agoFix possible crash with nested SubLinks.
Tom Lane [Tue, 10 Dec 2013 21:10:17 +0000 (16:10 -0500)]
Fix possible crash with nested SubLinks.

An expression such as WHERE (... x IN (SELECT ...) ...) IN (SELECT ...)
could produce an invalid plan that results in a crash at execution time,
if the planner attempts to flatten the outer IN into a semi-join.
This happens because convert_testexpr() was not expecting any nested
SubLinks and would wrongly replace any PARAM_SUBLINK Params belonging
to the inner SubLink.  (I think the comment denying that this case could
happen was wrong when written; it's certainly been wrong for quite a long
time, since very early versions of the semijoin flattening logic.)

Per report from Teodor Sigaev.  Back-patch to all supported branches.

10 years agoRename TABLE() to ROWS FROM().
Noah Misch [Tue, 10 Dec 2013 14:34:37 +0000 (09:34 -0500)]
Rename TABLE() to ROWS FROM().

SQL-standard TABLE() is a subset of UNNEST(); they deal with arrays and
other collection types.  This feature, however, deals with set-returning
functions.  Use a different syntax for this feature to keep open the
possibility of implementing the standard TABLE().

10 years agopgcrypto docs: update cpu type used in duration testing
Bruce Momjian [Mon, 9 Dec 2013 21:12:24 +0000 (16:12 -0500)]
pgcrypto docs: update cpu type used in duration testing

10 years agopgcrypto docs: update encryption timings and add relative times
Bruce Momjian [Mon, 9 Dec 2013 21:10:47 +0000 (16:10 -0500)]
pgcrypto docs:  update encryption timings and add relative times

Miles Elam

10 years agoFixups for dsm.c's file descriptor handling.
Robert Haas [Mon, 9 Dec 2013 16:12:33 +0000 (11:12 -0500)]
Fixups for dsm.c's file descriptor handling.

Per complaint from Tom Lane.

10 years agoFix pg_stat_statements build on 32-bit systems
Magnus Hagander [Sun, 8 Dec 2013 10:59:07 +0000 (11:59 +0100)]
Fix pg_stat_statements build on 32-bit systems

Peter Geoghegan

10 years agoFix performance regression in dblink connection speed.
Joe Conway [Sun, 8 Dec 2013 01:00:26 +0000 (17:00 -0800)]
Fix performance regression in dblink connection speed.

Previous commit e5de601267d98c5d60df6de8d436685c7105d149 modified dblink
to ensure client encoding matched the server. However the added
PQsetClientEncoding() call added significant overhead. Restore original
performance in the common case where client encoding already matches
server encoding by doing nothing in that case. Applies to all active
branches.

Issue reported and work sponsored by Zonar Systems.

10 years agoFix a couple of typos
Magnus Hagander [Sat, 7 Dec 2013 22:08:17 +0000 (23:08 +0100)]
Fix a couple of typos

Noted by Peter Geoghegan

10 years agoSSL: Support ECDH key exchange
Peter Eisentraut [Sat, 7 Dec 2013 20:11:44 +0000 (15:11 -0500)]
SSL: Support ECDH key exchange

This sets up ECDH key exchange, when compiling against OpenSSL that
supports EC.  Then the ECDHE-RSA and ECDHE-ECDSA cipher suites can be
used for SSL connections.  The latter one means that EC keys are now
usable.

The reason for EC key exchange is that it's faster than DHE and it
allows to go to higher security levels where RSA will be horribly slow.

There is also new GUC option ssl_ecdh_curve that specifies the curve
name used for ECDH.  It defaults to "prime256v1", which is the most
common curve in use in HTTPS.

From: Marko Kreen <markokr@gmail.com>
Reviewed-by: Adrian Klaver <adrian.klaver@gmail.com>
10 years agoExpose qurey ID in pg_stat_statements view.
Fujii Masao [Sat, 7 Dec 2013 17:06:02 +0000 (02:06 +0900)]
Expose qurey ID in pg_stat_statements view.

The query ID is the internal hash identifier of the statement,
and was not available in pg_stat_statements view so far.

Daniel Farina, Sameer Thakur and Peter Geoghegan, reviewed by me.

10 years agoSSL: Add configuration option to prefer server cipher order
Peter Eisentraut [Sat, 7 Dec 2013 13:04:27 +0000 (08:04 -0500)]
SSL: Add configuration option to prefer server cipher order

By default, OpenSSL (and SSL/TLS in general) lets the client cipher
order take priority.  This is OK for browsers where the ciphers were
tuned, but few PostgreSQL client libraries make the cipher order
configurable.  So it makes sense to have the cipher order in
postgresql.conf take priority over client defaults.

This patch adds the setting "ssl_prefer_server_ciphers" that can be
turned on so that server cipher order is preferred.  Per discussion,
this now defaults to on.

From: Marko Kreen <markokr@gmail.com>
Reviewed-by: Adrian Klaver <adrian.klaver@gmail.com>
10 years agodocs: update partition encryption options
Bruce Momjian [Fri, 6 Dec 2013 14:47:39 +0000 (09:47 -0500)]
docs: update partition encryption options

Text from Adam Vande More

10 years agodocs: clarify SSL certificate authority chain docs
Bruce Momjian [Fri, 6 Dec 2013 14:42:08 +0000 (09:42 -0500)]
docs: clarify SSL certificate authority chain docs

Previously, the requirements of how intermediate certificates were
handled and their chain to root certificates was unclear.

10 years agoFix improper abort during update chain locking
Alvaro Herrera [Thu, 5 Dec 2013 20:47:51 +0000 (17:47 -0300)]
Fix improper abort during update chain locking

In 247c76a98909, I added some code to do fine-grained checking of
MultiXact status of locking/updating transactions when traversing an
update chain.  There was a thinko in that patch which would have the
traversing abort, that is return HeapTupleUpdated, when the other
transaction is a committed lock-only.  In this case we should ignore it
and return success instead.  Of course, in the case where there is a
committed update, HeapTupleUpdated is the correct return value.

A user-visible symptom of this bug is that in REPEATABLE READ and
SERIALIZABLE transaction isolation modes spurious serializability errors
can occur:
  ERROR:  could not serialize access due to concurrent update

In order for this to happen, there needs to be a tuple that's key-share-
locked and also updated, and the update must abort; a subsequent
transaction trying to acquire a new lock on that tuple would abort with
the above error.  The reason is that the initial FOR KEY SHARE is seen
as committed by the new locking transaction, which triggers this bug.
(If the UPDATE commits, then the serialization error is correctly
reported.)

When running a query in READ COMMITTED mode, what happens is that the
locking is aborted by the HeapTupleUpdated return value, then
EvalPlanQual fetches the newest version of the tuple, which is then the
only version that gets locked.  (The second time the tuple is checked
there is no misbehavior on the committed lock-only, because it's not
checked by the code that traverses update chains; so no bug.) Only the
newest version of the tuple is locked, not older ones, but this is
harmless.

The isolation test added by this commit illustrates the desired
behavior, including the proper serialization errors that get thrown.

Backpatch to 9.3.

10 years agoClear retry flags properly in replacement OpenSSL sock_write function.
Tom Lane [Thu, 5 Dec 2013 17:48:28 +0000 (12:48 -0500)]
Clear retry flags properly in replacement OpenSSL sock_write function.

Current OpenSSL code includes a BIO_clear_retry_flags() step in the
sock_write() function.  Either we failed to copy the code correctly, or
they added this since we copied it.  In any case, lack of the clear step
appears to be the cause of the server lockup after connection loss reported
in bug #8647 from Valentine Gogichashvili.  Assume that this is correct
coding for all OpenSSL versions, and hence back-patch to all supported
branches.

Diagnosis and patch by Alexander Kukushkin.

10 years agoAvoid resetting Xmax when it's a multi with an aborted update
Alvaro Herrera [Thu, 5 Dec 2013 15:21:55 +0000 (12:21 -0300)]
Avoid resetting Xmax when it's a multi with an aborted update

HeapTupleSatisfiesUpdate can very easily "forget" tuple locks while
checking the contents of a multixact and finding it contains an aborted
update, by setting the HEAP_XMAX_INVALID bit.  This would lead to
concurrent transactions not noticing any previous locks held by
transactions that might still be running, and thus being able to acquire
subsequent locks they wouldn't be normally able to acquire.

This bug was introduced in commit 1ce150b7bb; backpatch this fix to 9.3,
like that commit.

This change reverts the change to the delete-abort-savept isolation test
in 1ce150b7bb, because that behavior change was caused by this bug.

Noticed by Andres Freund while investigating a different issue reported
by Noah Misch.

10 years agobuild: pass EXTRA_REGRESS_OPTS to secondary regression tests
Bruce Momjian [Wed, 4 Dec 2013 15:14:45 +0000 (10:14 -0500)]
build:  pass EXTRA_REGRESS_OPTS to secondary regression tests

Christoph Berg

10 years agodoc: split long query into multiple lines
Bruce Momjian [Wed, 4 Dec 2013 15:03:13 +0000 (10:03 -0500)]
doc: split long query into multiple lines

Report from Erik Rijkers

10 years agoFix whitespace
Peter Eisentraut [Wed, 4 Dec 2013 03:57:08 +0000 (22:57 -0500)]
Fix whitespace

10 years agoDon't include unused space in LOG_NEWPAGE records.
Heikki Linnakangas [Tue, 3 Dec 2013 22:10:47 +0000 (00:10 +0200)]
Don't include unused space in LOG_NEWPAGE records.

This is the same trick we use when taking a full page image of a buffer
passed to XLogInsert.

10 years agoFix full-page writes of internal GIN pages.
Heikki Linnakangas [Tue, 3 Dec 2013 20:13:16 +0000 (22:13 +0200)]
Fix full-page writes of internal GIN pages.

Insertion to a non-leaf GIN page didn't make a full-page image of the page,
which is wrong. The code used to do it correctly, but was changed (commit
853d1c3103fa961ae6219f0281885b345593d101) because the redo-routine didn't
track incomplete splits correctly when the page was restored from a full
page image. Of course, that was not right way to fix it, the redo routine
should've been fixed instead. The redo-routine was surreptitiously fixed
in 2010 (commit 4016bdef8aded77b4903c457050622a5a1815c16), so all we need
to do now is revert the code that creates the record to its original form.

This doesn't change the format of the WAL record.

Backpatch to all supported versions.

10 years agoC comment: again update comment for pg_fe_sendauth for error cases
Bruce Momjian [Tue, 3 Dec 2013 16:42:18 +0000 (11:42 -0500)]
C comment:  again update comment for pg_fe_sendauth for error cases

10 years agoUpdate C comment for pg_fe_getauthname
Bruce Momjian [Tue, 3 Dec 2013 16:33:46 +0000 (11:33 -0500)]
Update C comment for pg_fe_getauthname

This function no longer takes an argument.

10 years agolibpq: change PQconndefaults() to ignore invalid service files
Bruce Momjian [Tue, 3 Dec 2013 16:11:56 +0000 (11:11 -0500)]
libpq:  change PQconndefaults() to ignore invalid service files

Previously missing or invalid service files returned NULL.  Also fix
pg_upgrade to report "out of memory" for a null return from
PQconndefaults().

Patch by Steve Singer, rewritten by me

10 years agodoc: Refine documentation about recovery command exist status
Peter Eisentraut [Tue, 3 Dec 2013 03:31:41 +0000 (22:31 -0500)]
doc: Refine documentation about recovery command exist status

Add more documentation about how different exit codes and signals are
handled in each case.

Reviewed-by: Peter Geoghegan <pg@heroku.com>
10 years agoReport exit code from external recovery commands properly
Peter Eisentraut [Wed, 13 Nov 2013 11:38:18 +0000 (06:38 -0500)]
Report exit code from external recovery commands properly

When an external recovery command such as restore_command or
archive_cleanup_command fails, report the exit code properly,
distinguishing signals and normal exists, using the existing
wait_result_to_str() facility, instead of just reporting the return
value from system().

Reviewed-by: Peter Geoghegan <pg@heroku.com>
10 years agoFix crash in assign_collations_walker for EXISTS with empty SELECT list.
Tom Lane [Tue, 3 Dec 2013 01:28:45 +0000 (20:28 -0500)]
Fix crash in assign_collations_walker for EXISTS with empty SELECT list.

We (I think I, actually) forgot about this corner case while coding
collation resolution.  Per bug #8648 from Arjen Nienhuis.

10 years agoUpdate release notes for 9.3.2, 9.2.6, 9.1.11, 9.0.15, 8.4.19.
Tom Lane [Mon, 2 Dec 2013 20:53:55 +0000 (15:53 -0500)]
Update release notes for 9.3.2, 9.2.6, 9.1.11, 9.0.15, 8.4.19.

10 years agodoc: update wording of ineffective SET and ABORT commands
Bruce Momjian [Mon, 2 Dec 2013 17:51:28 +0000 (12:51 -0500)]
doc:  update wording of ineffective SET and ABORT commands

Wording by Alvaro Herrera

10 years agoImprove draft release notes.
Tom Lane [Mon, 2 Dec 2013 17:17:46 +0000 (12:17 -0500)]
Improve draft release notes.

Per suggestions from Andres Freund.  Also fix spelling of
Sergey Burladyan's name.

10 years agoIncrease git_changelog's timestamp_slop from 10 min to 1 day.
Tom Lane [Mon, 2 Dec 2013 16:33:43 +0000 (11:33 -0500)]
Increase git_changelog's timestamp_slop from 10 min to 1 day.

Many committers seem to now be using a work flow in which back-patched
commits are timestamped minutes or even hours apart in different branches
(most likely because they commit in one branch before starting work on
the next one).  git_changelog was failing to merge its reports in such
cases, so increase the max time it's willing to merge commits across.
I considered getting rid of the limit altogether, but that produces
some odd results in terms of how the merged commit gets sorted relative
to unrelated commits.

10 years agoFlag mmap implemenation of dynamic shared memory as resize-capable.
Robert Haas [Mon, 2 Dec 2013 16:18:54 +0000 (11:18 -0500)]
Flag mmap implemenation of dynamic shared memory as resize-capable.

Error noted by Heikki Linnakangas

10 years agoMake NUM_TOCHAR_prepare and NUM_TOCHAR_finish macros declare "len".
Robert Haas [Mon, 2 Dec 2013 15:51:06 +0000 (10:51 -0500)]
Make NUM_TOCHAR_prepare and NUM_TOCHAR_finish macros declare "len".

Remove the variable from the enclosing scopes so that nothing can be
relying on it.  The net result of this refactoring is that we get rid
of a few unnecessary strlen() calls.

Original patch from Greg Jaskiewicz, substantially expanded by me.

10 years agoAvoid out-of-bounds read in errfinish if error_stack_depth < 0.
Robert Haas [Mon, 2 Dec 2013 15:40:33 +0000 (10:40 -0500)]
Avoid out-of-bounds read in errfinish if error_stack_depth < 0.

If errordata_stack_depth < 0, we won't find that out and correct the
problem until CHECK_STACK_DEPTH() is invoked.  In the meantime,
elevel will be set based on an invalid read.  This is probably
harmless in practice, but it seems cleaner this way.

Xi Wang

10 years agoTranslation updates
Peter Eisentraut [Mon, 2 Dec 2013 05:09:43 +0000 (00:09 -0500)]
Translation updates