]> granicus.if.org Git - postgresql/log
postgresql
12 years agoMention original ctags option name.
Bruce Momjian [Fri, 24 Feb 2012 21:19:18 +0000 (16:19 -0500)]
Mention original ctags option name.

12 years agoUpdate src/tools/make_ctags to avoid Exuberant tags option
Bruce Momjian [Fri, 24 Feb 2012 21:17:07 +0000 (16:17 -0500)]
Update src/tools/make_ctags to avoid Exuberant tags option
that has been renamed and undocumented since 2003;  instead, use the
documented option.  Add comments.

12 years agoPut Debian package list back in alphabetical order
Peter Eisentraut [Fri, 24 Feb 2012 18:40:29 +0000 (20:40 +0200)]
Put Debian package list back in alphabetical order

12 years agoAdd some enumeration commas, for consistency
Peter Eisentraut [Fri, 24 Feb 2012 09:04:45 +0000 (11:04 +0200)]
Add some enumeration commas, for consistency

12 years agoFix the general case of quantified regex back-references.
Tom Lane [Fri, 24 Feb 2012 06:40:18 +0000 (01:40 -0500)]
Fix the general case of quantified regex back-references.

Cases where a back-reference is part of a larger subexpression that
is quantified have never worked in Spencer's regex engine, because
he used a compile-time transformation that neglected the need to
check the back-reference match in iterations before the last one.
(That was okay for capturing parens, and we still do it if the
regex has *only* capturing parens ... but it's not okay for backrefs.)

To make this work properly, we have to add an "iteration" node type
to the regex engine's vocabulary of sub-regex nodes.  Since this is a
moderately large change with a fair risk of introducing new bugs of its
own, apply to HEAD only, even though it's a fix for a longstanding bug.

12 years agoCorrectly handle NULLs in JSON output.
Andrew Dunstan [Fri, 24 Feb 2012 04:44:16 +0000 (23:44 -0500)]
Correctly handle NULLs in JSON output.

Error reported by David Wheeler.

12 years agoLast-minute release note updates.
Tom Lane [Thu, 23 Feb 2012 22:47:52 +0000 (17:47 -0500)]
Last-minute release note updates.

Security: CVE-2012-0866, CVE-2012-0867, CVE-2012-0868

12 years agoConvert newlines to spaces in names written in pg_dump comments.
Tom Lane [Thu, 23 Feb 2012 20:53:09 +0000 (15:53 -0500)]
Convert newlines to spaces in names written in pg_dump comments.

pg_dump was incautious about sanitizing object names that are emitted
within SQL comments in its output script.  A name containing a newline
would at least render the script syntactically incorrect.  Maliciously
crafted object names could present a SQL injection risk when the script
is reloaded.

Reported by Heikki Linnakangas, patch by Robert Haas

Security: CVE-2012-0868

12 years agoRemove arbitrary limitation on length of common name in SSL certificates.
Tom Lane [Thu, 23 Feb 2012 20:48:04 +0000 (15:48 -0500)]
Remove arbitrary limitation on length of common name in SSL certificates.

Both libpq and the backend would truncate a common name extracted from a
certificate at 32 bytes.  Replace that fixed-size buffer with dynamically
allocated string so that there is no hard limit.  While at it, remove the
code for extracting peer_dn, which we weren't using for anything; and
don't bother to store peer_cn longer than we need it in libpq.

This limit was not so terribly unreasonable when the code was written,
because we weren't using the result for anything critical, just logging it.
But now that there are options for checking the common name against the
server host name (in libpq) or using it as the user's name (in the server),
this could result in undesirable failures.  In the worst case it even seems
possible to spoof a server name or user name, if the correct name is
exactly 32 bytes and the attacker can persuade a trusted CA to issue a
certificate in which that string is a prefix of the certificate's common
name.  (To exploit this for a server name, he'd also have to send the
connection astray via phony DNS data or some such.)  The case that this is
a realistic security threat is a bit thin, but nonetheless we'll treat it
as one.

Back-patch to 8.4.  Older releases contain the faulty code, but it's not
a security problem because the common name wasn't used for anything
interesting.

Reported and patched by Heikki Linnakangas

Security: CVE-2012-0867

12 years agoRequire execute permission on the trigger function for CREATE TRIGGER.
Tom Lane [Thu, 23 Feb 2012 20:38:56 +0000 (15:38 -0500)]
Require execute permission on the trigger function for CREATE TRIGGER.

This check was overlooked when we added function execute permissions to the
system years ago.  For an ordinary trigger function it's not a big deal,
since trigger functions execute with the permissions of the table owner,
so they couldn't do anything the user issuing the CREATE TRIGGER couldn't
have done anyway.  However, if a trigger function is SECURITY DEFINER,
that is not the case.  The lack of checking would allow another user to
install it on his own table and then invoke it with, essentially, forged
input data; which the trigger function is unlikely to realize, so it might
do something undesirable, for instance insert false entries in an audit log
table.

Reported by Dinesh Kumar, patch by Robert Haas

Security: CVE-2012-0866

12 years agoAllow MinGW builds to use standardly-named OpenSSL libraries.
Tom Lane [Thu, 23 Feb 2012 20:05:08 +0000 (15:05 -0500)]
Allow MinGW builds to use standardly-named OpenSSL libraries.

In the Fedora variant of MinGW, the openssl libraries have their normal
names, not libeay32 and libssleay32.  Adjust configure probes to allow
that, per bug #6486.

Tomasz Ostrowski

12 years agoRemove inappropriate quotes
Peter Eisentraut [Thu, 23 Feb 2012 10:51:33 +0000 (12:51 +0200)]
Remove inappropriate quotes

And adjust wording for consistency.

12 years agoFix build without OpenSSL
Peter Eisentraut [Thu, 23 Feb 2012 08:20:25 +0000 (10:20 +0200)]
Fix build without OpenSSL

This is a fixup for commit a445cb92ef5b3a31313ebce30e18cc1d6e0bdecb.

12 years agoDon't install hstore--1.0.sql any more.
Robert Haas [Thu, 23 Feb 2012 01:37:13 +0000 (20:37 -0500)]
Don't install hstore--1.0.sql any more.

Since the current version is 1.1, the 1.0 file isn't really needed.  We do
need the 1.0--1.1 upgrade file, so people on 1.0 can upgrade.

Per recent discussion on pgsql-hackers.

12 years agoMake EXPLAIN (BUFFERS) track blocks dirtied, as well as those written.
Robert Haas [Thu, 23 Feb 2012 01:33:05 +0000 (20:33 -0500)]
Make EXPLAIN (BUFFERS) track blocks dirtied, as well as those written.

Also expose the new counters through pg_stat_statements.

Patch by me.  Review by Fujii Masao and Greg Smith.

12 years agoFix typo in comment.
Robert Haas [Thu, 23 Feb 2012 00:44:52 +0000 (19:44 -0500)]
Fix typo in comment.

Sandro Santilli

12 years agoImprove wording of pg_upgrade logfile option:
Bruce Momjian [Wed, 22 Feb 2012 23:40:19 +0000 (18:40 -0500)]
Improve wording of pg_upgrade logfile option:

  -l, --logfile=FILENAME        log internal activity to file\n\

12 years agoDraft release notes for 9.1.3, 9.0.7, 8.4.11, 8.3.18.
Tom Lane [Wed, 22 Feb 2012 23:11:46 +0000 (18:11 -0500)]
Draft release notes for 9.1.3, 9.0.7, 8.4.11, 8.3.18.

12 years agoAdd parameters for controlling locations of server-side SSL files
Peter Eisentraut [Wed, 22 Feb 2012 21:40:46 +0000 (23:40 +0200)]
Add parameters for controlling locations of server-side SSL files

This allows changing the location of the files that were previously
hard-coded to server.crt, server.key, root.crt, root.crl.

server.crt and server.key continue to be the default settings and are
thus required to be present by default if SSL is enabled.  But the
settings for the server-side CA and CRL are now empty by default, and
if they are set, the files are required to be present.  This replaces
the previous behavior of ignoring the functionality if the files were
not found.

12 years agoREASSIGN OWNED: Support foreign data wrappers and servers
Alvaro Herrera [Tue, 21 Feb 2012 20:58:02 +0000 (17:58 -0300)]
REASSIGN OWNED: Support foreign data wrappers and servers

This was overlooked when implementing those kinds of objects, in commit
cae565e503c42a0942ca1771665243b4453c5770.

Per report from Pawel Casperek.

12 years agoDon't clear btpo_cycleid during _bt_vacuum_one_page.
Tom Lane [Tue, 21 Feb 2012 20:03:36 +0000 (15:03 -0500)]
Don't clear btpo_cycleid during _bt_vacuum_one_page.

When "vacuuming" a single btree page by removing LP_DEAD tuples, we are not
actually within a vacuum operation, but rather in an ordinary insertion
process that could well be running concurrently with a vacuum.  So clearing
the cycleid is incorrect, and could cause the concurrent vacuum to miss
removing tuples that it needs to remove.  This is a longstanding bug
introduced by commit e6284649b9e30372b3990107a082bc7520325676 of
2006-07-25.  I believe it explains Maxim Boguk's recent report of index
corruption, and probably some other previously unexplained reports.

In 9.0 and up this is a one-line fix; before that we need to introduce a
flag to tell _bt_delitems what to do.

12 years agoCosmetic cleanup for commit a760893dbda9934e287789d54bbd3c4ca3914ce0.
Tom Lane [Tue, 21 Feb 2012 19:14:16 +0000 (14:14 -0500)]
Cosmetic cleanup for commit a760893dbda9934e287789d54bbd3c4ca3914ce0.

Mostly, fixing overlooked comments.

12 years agoAvoid double close of file handle in syslogger on win32
Magnus Hagander [Tue, 21 Feb 2012 16:12:25 +0000 (17:12 +0100)]
Avoid double close of file handle in syslogger on win32

This causes an exception when running under a debugger or in particular
when running on a debug version of Windows.

Patch from MauMau

12 years agoFix typo, noticed by Will Crawford.
Andrew Dunstan [Tue, 21 Feb 2012 16:03:51 +0000 (11:03 -0500)]
Fix typo, noticed by Will Crawford.

12 years agopg_regress: Add application name setting
Peter Eisentraut [Tue, 21 Feb 2012 14:45:19 +0000 (16:45 +0200)]
pg_regress: Add application name setting

Set the PGAPPNAME environment variable in pg_regress so that it
identifies itself as such instead of "psql".

12 years agoDon't reject threaded Python on FreeBSD.
Tom Lane [Mon, 20 Feb 2012 21:21:28 +0000 (16:21 -0500)]
Don't reject threaded Python on FreeBSD.

According to Chris Rees, this has worked for awhile, and the current
FreeBSD port is removing the test anyway.

12 years agoFix a couple of cases of JSON output.
Andrew Dunstan [Mon, 20 Feb 2012 20:01:03 +0000 (15:01 -0500)]
Fix a couple of cases of JSON output.

First, as noted by Itagaki Takahiro, a datum of type JSON doesn't
need to be escaped. Second, ensure that numeric output not in
the form of a legal JSON number is quoted and escaped.

12 years agoFix regex back-references that are directly quantified with *.
Tom Lane [Mon, 20 Feb 2012 05:52:33 +0000 (00:52 -0500)]
Fix regex back-references that are directly quantified with *.

The syntax "\n*", that is a backref with a * quantifier directly applied
to it, has never worked correctly in Spencer's library.  This has been an
open bug in the Tcl bug tracker since 2005:
https://sourceforge.net/tracker/index.php?func=detail&aid=1115587&group_id=10894&atid=110894

The core of the problem is in parseqatom(), which first changes "\n*" to
"\n+|" and then applies repeat() to the NFA representing the backref atom.
repeat() thinks that any arc leading into its "rp" argument is part of the
sub-NFA to be repeated.  Unfortunately, since parseqatom() already created
the arc that was intended to represent the empty bypass around "\n+", this
arc gets moved too, so that it now leads into the state loop created by
repeat().  Thus, what was supposed to be an "empty" bypass gets turned into
something that represents zero or more repetitions of the NFA representing
the backref atom.  In the original example, in place of
^([bc])\1*$
we now have something that acts like
^([bc])(\1+|[bc]*)$
At runtime, the branch involving the actual backref fails, as it's supposed
to, but then the other branch succeeds anyway.

We could no doubt fix this by some rearrangement of the operations in
parseqatom(), but that code is plenty ugly already, and what's more the
whole business of converting "x*" to "x+|" probably needs to go away to fix
another problem I'll mention in a moment.  Instead, this patch suppresses
the *-conversion when the target is a simple backref atom, leaving the case
of m == 0 to be handled at runtime.  This makes the patch in regcomp.c a
one-liner, at the cost of having to tweak cbrdissect() a little.  In the
event I went a bit further than that and rewrote cbrdissect() to check all
the string-length-related conditions before it starts comparing characters.
It seems a bit stupid to possibly iterate through many copies of an
n-character backreference, only to fail at the end because the target
string's length isn't a multiple of n --- we could have found that out
before starting.  The existing coding could only be a win if integer
division is hugely expensive compared to character comparison, but I don't
know of any modern machine where that might be true.

This does not fix all the problems with quantified back-references.  In
particular, the code is still broken for back-references that appear within
a larger expression that is quantified (so that direct insertion of the
quantification limits into the BACKREF node doesn't apply).  I think fixing
that will take some major surgery on the NFA code, specifically introducing
an explicit iteration node type instead of trying to transform iteration
into concatenation of modified regexps.

Back-patch to all supported branches.  In HEAD, also add a regression test
case for this.  (It may seem a bit silly to create a regression test file
for just one test case; but I'm expecting that we will soon import a whole
bunch of regex regression tests from Tcl, so might as well create the
infrastructure now.)

12 years agoAdd caching of ctype.h/wctype.h results in regc_locale.c.
Tom Lane [Mon, 20 Feb 2012 02:01:13 +0000 (21:01 -0500)]
Add caching of ctype.h/wctype.h results in regc_locale.c.

While this doesn't save a huge amount of runtime, it still seems worth
doing, especially since I realized that the data copying I did in my first
draft was quite unnecessary.  In this version, once we have the results
cached, getting them back for re-use is really very cheap.

Also, remove the hard-wired limitation to not consider wctype.h results for
character codes above 255.  It turns out that we can't push the limit as
far up as I'd originally hoped, because the regex colormap code is not
efficient enough to cope very well with character classes containing many
thousand letters, which a Unicode locale is entirely capable of producing.
Still, we can push it up to U+7FF (which I chose as the limit of 2-byte
UTF8 characters), which will at least make Eastern Europeans happy pending
a better solution.  Thus, this commit resolves the specific complaint in
bug #6457, but not the more general issue that letters of non-western
alphabets are mostly not recognized as matching [[:alpha:]].

12 years agoCreate the beginnings of internals documentation for the regex code.
Tom Lane [Sun, 19 Feb 2012 23:57:38 +0000 (18:57 -0500)]
Create the beginnings of internals documentation for the regex code.

Create src/backend/regex/README to hold an implementation overview of
the regex package, and fill it in with some preliminary notes about
the code's DFA/NFA processing and colormap management.  Much more to
do there of course.

Also, improve some code comments around the colormap and cvec code.
No functional changes except to add one missing assert.

12 years agoImprove pretty printing of viewdefs.
Andrew Dunstan [Sun, 19 Feb 2012 16:43:46 +0000 (11:43 -0500)]
Improve pretty printing of viewdefs.

Some line feeds are added to target lists and from lists to make
them more readable. By default they wrap at 80 columns if possible,
but the wrap column is also selectable - if 0 it wraps after every
item.

Andrew Dunstan, reviewed by Hitoshi Harada.

12 years agoIn ecpglib rewrote code that used strtok_r to not use library functions
Michael Meskes [Sun, 19 Feb 2012 13:50:14 +0000 (14:50 +0100)]
In ecpglib rewrote code that used strtok_r to not use library functions
anymore. This way we don't have to worry which compiler on which OS offers
which version of strtok.

12 years agoUpdate expected/collate.linux.utf8.out for recent plpgsql changes.
Tom Lane [Sat, 18 Feb 2012 23:08:02 +0000 (18:08 -0500)]
Update expected/collate.linux.utf8.out for recent plpgsql changes.

This file was missed in commit 4c6cedd1b014abf2046886a9a92e10e18f0d658e.

12 years agogcc on Windows does not know about strtok_s.
Michael Meskes [Sat, 18 Feb 2012 16:20:53 +0000 (17:20 +0100)]
gcc on Windows does not know about strtok_s.

12 years agoWindows doesn't have strtok_r, so let's use strtok_s instead.
Michael Meskes [Sat, 18 Feb 2012 14:56:39 +0000 (15:56 +0100)]
Windows doesn't have strtok_r, so let's use strtok_s instead.

12 years agoMake sure all connection paramters are used in call to PQconnectdbParams.
Michael Meskes [Fri, 17 Feb 2012 13:53:22 +0000 (14:53 +0100)]
Make sure all connection paramters are used in call to PQconnectdbParams.

12 years agoSync regex code with Tcl 8.5.11.
Tom Lane [Sat, 18 Feb 2012 00:44:26 +0000 (19:44 -0500)]
Sync regex code with Tcl 8.5.11.

Sync our regex code with upstream changes since last time we did this,
which was Tcl 8.5.0 (see commit df1e965e12cdd48c11057ee6e15346ee2b8b02f5).

There are no functional changes here; the main point is just to lay down
a commit-log marker that somebody has looked at this recently, and to do
what we can to keep the two codebases comparable.

12 years agoFix longstanding error in contrib/intarray's int[] & int[] operator.
Tom Lane [Fri, 17 Feb 2012 01:00:11 +0000 (20:00 -0500)]
Fix longstanding error in contrib/intarray's int[] & int[] operator.

The array intersection code would give wrong results if the first entry of
the correct output array would be "1".  (I think only this value could be
at risk, since the previous word would always be a lower-bound entry with
that fixed value.)

Problem spotted by Julien Rouhaud, initial patch by Guillaume Lelarge,
cosmetic improvements by me.

12 years agoImprove statistics estimation to make some use of DISTINCT in sub-queries.
Tom Lane [Thu, 16 Feb 2012 22:33:28 +0000 (17:33 -0500)]
Improve statistics estimation to make some use of DISTINCT in sub-queries.

Formerly, we just punted when trying to estimate stats for variables coming
out of sub-queries using DISTINCT, on the grounds that whatever stats we
might have for underlying table columns would be inapplicable.  But if the
sub-query has only one DISTINCT column, we can consider its output variable
as being unique, which is useful information all by itself.  The scope of
this improvement is pretty narrow, but it costs nearly nothing, so we might
as well do it.  Per discussion with Andres Freund.

This patch differs from the draft I submitted yesterday in updating various
comments about vardata.isunique (to reflect its extended meaning) and in
tweaking the interaction with security_barrier views.  There does not seem
to be a reason why we can't use this sort of knowledge even when the
sub-query is such a view.

12 years agopg_dump: Miscellaneous tightening based on recent refactorings.
Robert Haas [Thu, 16 Feb 2012 18:24:19 +0000 (13:24 -0500)]
pg_dump: Miscellaneous tightening based on recent refactorings.

Use exit_horribly() and ExecuteSqlQueryForSingleRow() in various
places where it's equivalent, or nearly equivalent, to the prior
coding. Apart from being more compact, this also makes the error
messages for the wrong-number-of-tuples case more consistent.

12 years agopg_dump: Remove global connection pointer.
Robert Haas [Thu, 16 Feb 2012 18:00:24 +0000 (13:00 -0500)]
pg_dump: Remove global connection pointer.

Parallel pg_dump wants to have multiple ArchiveHandle objects, and
therefore multiple PGconns, in play at the same time.  This should
be just about the end of the refactoring that we need in order to
make that workable.

12 years agoRefactor pg_dump.c to avoid duplicating returns-one-row check.
Robert Haas [Thu, 16 Feb 2012 17:07:06 +0000 (12:07 -0500)]
Refactor pg_dump.c to avoid duplicating returns-one-row check.

Any patches apt to get broken have probably already been broken by the
error-handling cleanups I just did, so we might as well clean this up
at the same time.

12 years agoInvent on_exit_nicely for pg_dump.
Robert Haas [Thu, 16 Feb 2012 16:49:20 +0000 (11:49 -0500)]
Invent on_exit_nicely for pg_dump.

Per recent discussions on pgsql-hackers regarding parallel pg_dump.

12 years agoRun a portal's cleanup hook immediately when pushing it to FAILED state.
Tom Lane [Wed, 15 Feb 2012 21:18:34 +0000 (16:18 -0500)]
Run a portal's cleanup hook immediately when pushing it to FAILED state.

This extends the changes of commit 6252c4f9e201f619e5eebda12fa867acd4e4200e
so that we run the cleanup hook earlier for failure cases as well as
success cases.  As before, the point is to avoid an assertion failure from
an Assert I added in commit a874fe7b4c890d1fe3455215a83ca777867beadd, which
was meant to check that no user-written code can be called during portal
cleanup.  This fixes a case reported by Pavan Deolasee in which the Assert
could be triggered during backend exit (see the new regression test case),
and also prevents the possibility that the cleanup hook is run after
portions of the portal's state have already been recycled.  That doesn't
really matter in current usage, but it foreseeably could matter in the
future.

Back-patch to 9.1 where the Assert in question was added.

12 years agoFix VPATH builds, broken by my recent commit to speed up tuplesorting.
Robert Haas [Wed, 15 Feb 2012 20:52:44 +0000 (15:52 -0500)]
Fix VPATH builds, broken by my recent commit to speed up tuplesorting.

The relevant commit is 337b6f5ecf05b21b5e997986884d097d60e4e3d0.

12 years agoHave pg_upgrade output 'link' or 'copy' when reporting its status.
Bruce Momjian [Wed, 15 Feb 2012 19:22:54 +0000 (14:22 -0500)]
Have pg_upgrade output 'link' or 'copy' when reporting its status.

Idea from Peter.

12 years agosepgsql: Move some code from hooks.c to label.c
Robert Haas [Wed, 15 Feb 2012 18:54:26 +0000 (13:54 -0500)]
sepgsql: Move some code from hooks.c to label.c

This is some preliminary refactoring related to a pending patch
to allow sepgsql-enable sessions to make dynamic label transitions.
But this commit doesn't involve any functional change: it just puts
some bits of code in more logical places.

KaiGai Kohei

12 years agoSpeed up in-memory tuplesorting.
Robert Haas [Wed, 15 Feb 2012 17:13:32 +0000 (12:13 -0500)]
Speed up in-memory tuplesorting.

Per recent work by Peter Geoghegan, it's significantly faster to
tuplesort on a single sortkey if ApplySortComparator is inlined into
quicksort rather reached via a function pointer.  It's also faster
in general to have a version of quicksort which is specialized for
sorting SortTuple objects rather than objects of arbitrary size and
type.  This requires a couple of additional copies of the quicksort
logic, which in this patch are generate using a Perl script.  There
might be some benefit in adding further specializations here too,
but thus far it's not clear that those gains are worth their weight
in code footprint.

12 years agoMore regression tests for LEAKPROOF/NOT LEAKPROOF stuff.
Robert Haas [Wed, 15 Feb 2012 15:56:26 +0000 (10:56 -0500)]
More regression tests for LEAKPROOF/NOT LEAKPROOF stuff.

Along the way, move create_function_3 into a parallel schedule.

KaiGai Kohei

12 years agoMake CREATE/ALTER FUNCTION support NOT LEAKPROOF.
Robert Haas [Wed, 15 Feb 2012 15:45:08 +0000 (10:45 -0500)]
Make CREATE/ALTER FUNCTION support NOT LEAKPROOF.

Because it isn't good to be able to turn things on, and not off again.

12 years agosepgsql: Reword and fix typo in docs on DML permissions.
Robert Haas [Wed, 15 Feb 2012 14:57:56 +0000 (09:57 -0500)]
sepgsql: Reword and fix typo in docs on DML permissions.

Per report from Christoph Berg.

12 years agoFix pg_test_fsync Win32 problems reported by the build farm; add
Bruce Momjian [Wed, 15 Feb 2012 12:10:48 +0000 (07:10 -0500)]
Fix pg_test_fsync Win32 problems reported by the build farm;  add
comments about the alarm method used on Win32.

12 years agoTry to get pg_test_thread to compile on Windows by using a sleeper
Bruce Momjian [Wed, 15 Feb 2012 02:53:17 +0000 (21:53 -0500)]
Try to get pg_test_thread to compile on Windows by using a sleeper
thread.

12 years agoImprove fsync documentation by stating that -W _0_ turns of write
Bruce Momjian [Tue, 14 Feb 2012 22:41:57 +0000 (17:41 -0500)]
Improve fsync documentation by stating that -W _0_ turns of write
caching.

12 years agoPreserve column names in the execution-time tupledesc for a RowExpr.
Tom Lane [Tue, 14 Feb 2012 22:34:19 +0000 (17:34 -0500)]
Preserve column names in the execution-time tupledesc for a RowExpr.

The hstore and json datatypes both have record-conversion functions that
pay attention to column names in the composite values they're handed.
We used to not worry about inserting correct field names into tuple
descriptors generated at runtime, but given these examples it seems
useful to do so.  Observe the nicer-looking results in the regression
tests whose results changed.

catversion bump because there is a subtle change in requirements for stored
rule parsetrees: RowExprs from ROW() constructs now have to include field
names.

Andrew Dunstan and Tom Lane

12 years agoDocument random page cost is only 4x seqeuntial, and not 40x.
Bruce Momjian [Tue, 14 Feb 2012 21:54:54 +0000 (16:54 -0500)]
Document random page cost is only 4x seqeuntial, and not 40x.

12 years agoDocument that the pg_test_fsync defaults allow the program to complete
Bruce Momjian [Tue, 14 Feb 2012 16:14:15 +0000 (11:14 -0500)]
Document that the pg_test_fsync defaults allow the program to complete
in about 30 seconds.

12 years agoChange contrib/pg_test_fsync to control tests in terms of seconds per
Bruce Momjian [Tue, 14 Feb 2012 16:09:49 +0000 (11:09 -0500)]
Change contrib/pg_test_fsync to control tests in terms of seconds per
test, rather than a number of test cycles.  Changes -o/cycles option to
-s/seconds.

12 years agoRemove new, intermittently failing regression test.
Robert Haas [Tue, 14 Feb 2012 04:43:24 +0000 (23:43 -0500)]
Remove new, intermittently failing regression test.

Per buildfarm.

12 years agoFix new create_function_3 regression tests not to rely on tuple order.
Robert Haas [Tue, 14 Feb 2012 03:49:07 +0000 (22:49 -0500)]
Fix new create_function_3 regression tests not to rely on tuple order.

Per buildfarm.

12 years agoAllow LEAKPROOF functions for better performance of security views.
Robert Haas [Tue, 14 Feb 2012 03:20:27 +0000 (22:20 -0500)]
Allow LEAKPROOF functions for better performance of security views.

We don't normally allow quals to be pushed down into a view created
with the security_barrier option, but functions without side effects
are an exception: they're OK.  This allows much better performance in
common cases, such as when using an equality operator (that might
even be indexable).

There is an outstanding issue here with the CREATE FUNCTION / ALTER
FUNCTION syntax: there's no way to use ALTER FUNCTION to unset the
leakproof flag.  But I'm committing this as-is so that it doesn't
have to be rebased again; we can fix up the grammar in a future
commit.

KaiGai Kohei, with some wordsmithing by me.

12 years agoImprove labeling of pg_test_fsync open_sync test output.
Bruce Momjian [Tue, 14 Feb 2012 02:48:33 +0000 (21:48 -0500)]
Improve labeling of pg_test_fsync open_sync test output.

12 years agoDo not use the variable name when defining a varchar structure in ecpg.
Michael Meskes [Fri, 10 Feb 2012 02:58:57 +0000 (03:58 +0100)]
Do not use the variable name when defining a varchar structure in ecpg.

With a unique counter being added anyway, there is no need anymore to have the variable name listed, too.

12 years agoFix auto-explain JSON output to be valid JSON.
Andrew Dunstan [Mon, 13 Feb 2012 13:22:15 +0000 (08:22 -0500)]
Fix auto-explain JSON output to be valid JSON.

Problem reported by Peter Eisentraut.

Backpatched to release 9.0.

12 years agoFix heap_multi_insert to set t_self field in the caller's tuples.
Heikki Linnakangas [Mon, 13 Feb 2012 08:14:49 +0000 (10:14 +0200)]
Fix heap_multi_insert to set t_self field in the caller's tuples.

If tuples were toasted, heap_multi_insert didn't update the ctid on the
original tuples. This caused a failure if there was an after trigger
(including a foreign key), on the table, and a tuple got toasted.

Per off-list report and test case from Ted Phelps

12 years agoSilence warning about deprecated assignment to $[ in check_keywords.pl
Heikki Linnakangas [Mon, 13 Feb 2012 07:15:08 +0000 (09:15 +0200)]
Silence warning about deprecated assignment to $[ in check_keywords.pl

Alex Hunsaker

12 years agoFix I/O-conversion-related memory leaks in plpgsql.
Tom Lane [Sat, 11 Feb 2012 23:06:24 +0000 (18:06 -0500)]
Fix I/O-conversion-related memory leaks in plpgsql.

Datatype I/O functions are allowed to leak memory in CurrentMemoryContext,
since they are generally called in short-lived contexts.  However, plpgsql
calls such functions for purposes of type conversion, and was calling them
in its procedure context.  Therefore, any leaked memory would not be
recovered until the end of the plpgsql function.  If such a conversion
was done within a loop, quite a bit of memory could get consumed.  Fix by
calling such functions in the transient "eval_econtext", and adjust other
logic to match.  Back-patch to all supported versions.

Andres Freund, Jan UrbaƄski, Tom Lane

12 years agoFix oversight in pg_dump's handling of extension configuration tables.
Tom Lane [Fri, 10 Feb 2012 20:22:14 +0000 (15:22 -0500)]
Fix oversight in pg_dump's handling of extension configuration tables.

If an extension has not been selected to be dumped (perhaps because of
a --schema or --table switch), the contents of its configuration tables
surely should not get dumped either.  Per gripe from
Hubert Depesz Lubaczewski.

12 years agoFix brain fade in previous pg_dump patch.
Tom Lane [Fri, 10 Feb 2012 19:09:21 +0000 (14:09 -0500)]
Fix brain fade in previous pg_dump patch.

In pre-7.3 databases, pg_attribute.attislocal doesn't exist.  The easiest
way to make sure the new inheritance logic behaves sanely is to assume it's
TRUE, not FALSE.  This will result in printing child columns even when
they're not really needed.  We could work harder at trying to reconstruct a
value for attislocal, but there is little evidence that anyone still cares
about dumping from such old versions, so just do the minimum necessary to
have a valid dump.

I had this correct in the original draft of the patch, but for some
unaccountable reason decided it wasn't necessary to change the value.
Testing against an old server shows otherwise...

12 years agoFix pg_dump for better handling of inherited columns.
Tom Lane [Fri, 10 Feb 2012 18:28:05 +0000 (13:28 -0500)]
Fix pg_dump for better handling of inherited columns.

Revise pg_dump's handling of inherited columns, which was last looked at
seriously in 2001, to eliminate several misbehaviors associated with
inherited default expressions and NOT NULL flags.  In particular make sure
that a column is printed in a child table's CREATE TABLE command if and
only if it has attislocal = true; the former behavior would sometimes cause
a column to become marked attislocal when it was not so marked in the
source database.  Also, stop relying on textual comparison of default
expressions to decide if they're inherited; instead, don't use
default-expression inheritance at all, but just install the default
explicitly at each level of the hierarchy.  This fixes the
search-path-related misbehavior recently exhibited by Chester Young, and
also removes some dubious assumptions about the order in which ALTER TABLE
SET DEFAULT commands would be executed.

Back-patch to all supported branches.

12 years agoAdd ORDER BY to a query to prevent occasional regression test failures.
Tom Lane [Fri, 10 Feb 2012 07:33:00 +0000 (02:33 -0500)]
Add ORDER BY to a query to prevent occasional regression test failures.

Per buildfarm, we sometimes get row-ordering variations in the output.
This also makes this query look more like numerous other ones in the same
test file.

12 years agopsql: Support zero byte field and record separators
Peter Eisentraut [Thu, 9 Feb 2012 18:15:48 +0000 (20:15 +0200)]
psql: Support zero byte field and record separators

Add new psql settings and command-line options to support setting the
field and record separators for unaligned output to a zero byte, for
easier interfacing with other shell tools.

reviewed by Abhijit Menon-Sen

12 years agoAttempt to fix MSVC builds and other fls-related breakage.
Robert Haas [Thu, 9 Feb 2012 17:39:33 +0000 (12:39 -0500)]
Attempt to fix MSVC builds and other fls-related breakage.

Thanks to Andrew Dunstan for bringing this to my attention.

12 years agoAdd a comment to AdjustIntervalForTypmod to reduce chance of future bugs.
Robert Haas [Thu, 9 Feb 2012 17:22:21 +0000 (12:22 -0500)]
Add a comment to AdjustIntervalForTypmod to reduce chance of future bugs.

It's not entirely evident how the logic here relates to the
interval_transform function, so let's clue people in that they need to
check that if the rules change.

12 years agoImprove interval_transform function to detect a few more cases.
Robert Haas [Thu, 9 Feb 2012 17:21:57 +0000 (12:21 -0500)]
Improve interval_transform function to detect a few more cases.

Noah Misch, per a review comment from me.

12 years agoHave pg_receivexlog always send an invalid log position in status messages
Magnus Hagander [Thu, 9 Feb 2012 13:12:49 +0000 (14:12 +0100)]
Have pg_receivexlog always send an invalid log position in status messages

This prevents pg_basebackup and pg_receivexlog from becoming a synchronous
standby in case 'write' is used for synchronous_commit.

Fujii Masao

12 years agoAdd new keywords SNAPSHOT and TYPES to the keyword list in gram.y
Heikki Linnakangas [Thu, 9 Feb 2012 09:37:54 +0000 (11:37 +0200)]
Add new keywords SNAPSHOT and TYPES to the keyword list in gram.y

These were added to kwlist.h as unreserved keywords in separate patches,
but authors forgot to add them to the corresponding list in gram.y.
Because of that, even though they were supposed to be unreserved keywords,
they could not be used as identifiers. src/tools/check_keywords.pl is your
friend.

12 years agoThrow error sooner for unlogged GiST indexes.
Tom Lane [Wed, 8 Feb 2012 21:19:27 +0000 (16:19 -0500)]
Throw error sooner for unlogged GiST indexes.

Throwing an error only after we've built the main index fork is pretty
unfriendly when the table already contains data.  Per gripe from Jay
Levitt.

12 years agoFix up dumping conditions for extension configuration tables.
Tom Lane [Wed, 8 Feb 2012 20:23:00 +0000 (15:23 -0500)]
Fix up dumping conditions for extension configuration tables.

Various filters that were meant to prevent dumping of table data were not
being applied to extension config tables, notably --exclude-table-data and
--no-unlogged-table-data.  We also would bogusly try to dump data from
views, sequences, or foreign tables, should an extension try to claim they
were config tables.  Fix all that, and refactor/redocument to try to make
this a bit less fragile.  This reverts the implementation, though not the
feature, of commit 7b070e896ca835318c90b02c830a5c4844413b64, which had
broken config-table dumping altogether :-(.

It is still the case that the code will dump config-table data even if
--schema is specified.  That behavior was intentional, as per the comments
in getExtensionMembership, so I think it requires some more discussion
before we change it.

12 years agoCheck misplaced window functions before checking aggregate/group by sanity.
Tom Lane [Wed, 8 Feb 2012 18:15:02 +0000 (13:15 -0500)]
Check misplaced window functions before checking aggregate/group by sanity.

If somebody puts a window function in WHERE, we should complain about that
in so many words.  The previous coding tended to complain about the window
function's arguments instead, which is likely to be misleading to users who
are unclear on the semantics of window functions; as seen for example in
bug #6440 from Matyas Novak.

Just another example of how "add new code at the end" is frequently a bad
heuristic.

12 years agoSupport min/max index optimizations on boolean columns.
Tom Lane [Wed, 8 Feb 2012 17:41:48 +0000 (12:41 -0500)]
Support min/max index optimizations on boolean columns.

Since bool_and() is equivalent to min(), and bool_or() to max(), we might
as well let them be index-optimized in the same way.  The practical value
of this is debatable at best, but it seems nearly cost-free to enable it.
Code-wise, we need only adjust the entries in pg_aggregate.  There is a
measurable planning speed penalty for a query involving one of these
aggregates, but it is only a few percent in simple cases, so that seems
acceptable.

Marti Raudsepp, reviewed by Abhijit Menon-Sen

12 years agoMark some more I/O-conversion-invoking functions as stable not volatile.
Tom Lane [Wed, 8 Feb 2012 16:29:29 +0000 (11:29 -0500)]
Mark some more I/O-conversion-invoking functions as stable not volatile.

When written, textanycat, anytextcat, quote_literal, and quote_nullable
were marked volatile, because they could invoke arbitrary type-specific
output functions as part of casting their anyelement arguments to text.
Since then, we have defined a project policy that I/O functions must not
be volatile, as per commit aab353a60b95aadc00f81da0c6d99bde696c4b75.
So these functions can safely be downgraded to stable.  Most of the time
this makes no difference since they'll get inlined anyway, but as noted
by Andrew Dunstan, there are cases where the volatile marking prevents
optimizations that the planner does before function inlining.  (I think
I might have overlooked these functions in the earlier commit on the
grounds that inlining would make it moot, but not so --- tgl)

This change results in a change in the expected output of the json
regression tests, because the planner can now flatten a sub-select
that it failed to before.  The old output is preferable, but getting
that back will require some as-yet-unfinished work on RowExpr handling.

Marti Raudsepp

12 years agoAdd transform functions for various temporal typmod coercisions.
Robert Haas [Wed, 8 Feb 2012 14:33:02 +0000 (09:33 -0500)]
Add transform functions for various temporal typmod coercisions.

This enables ALTER TABLE to skip table and index rebuilds in some cases.

Noah Misch, with trivial changes by me.

12 years agoRename LWLockWaitUntilFree to LWLockAcquireOrWait.
Heikki Linnakangas [Wed, 8 Feb 2012 07:17:13 +0000 (09:17 +0200)]
Rename LWLockWaitUntilFree to LWLockAcquireOrWait.

LWLockAcquireOrWait makes it more clear that the lock is acquired if it's
free.

12 years agoFix typos pointed out by Noah Misch.
Robert Haas [Wed, 8 Feb 2012 02:40:36 +0000 (21:40 -0500)]
Fix typos pointed out by Noah Misch.

12 years agoAdd opensp as a requirement for building the docs on Debian --- tested
Bruce Momjian [Wed, 8 Feb 2012 01:30:11 +0000 (20:30 -0500)]
Add opensp as a requirement for building the docs on Debian --- tested
on Debian Squeeze.

12 years agopg_dump: Add some const qualifiers
Peter Eisentraut [Tue, 7 Feb 2012 21:20:29 +0000 (23:20 +0200)]
pg_dump: Add some const qualifiers

12 years agopg_regress: Use target-specific variable instead of overriding make rule
Peter Eisentraut [Tue, 7 Feb 2012 20:42:19 +0000 (22:42 +0200)]
pg_regress: Use target-specific variable instead of overriding make rule

Use a target-specific variable to add to CPPFLAGS instead of writing a
custom .c -> .o rule.  This will ensure that dependency tracking is
used when enabled.

12 years agoFix typo in comment.
Heikki Linnakangas [Tue, 7 Feb 2012 19:21:50 +0000 (21:21 +0200)]
Fix typo in comment.

12 years agoSupport fls().
Robert Haas [Tue, 7 Feb 2012 18:45:46 +0000 (13:45 -0500)]
Support fls().

The immediate impetus for this is that Noah Misch's patch to elide
unnecessary table and index rebuilds when changing typmod for temporal
types uses it; and this is extracted from that patch, with some
further commentary by me.  But it seems logically separate from the
remainder of the patch, so I'm committing it separately; this is not
the first time someone has wanted fls() in the backend and probably
won't be the last.

If we end up using this in more performance-critical spots it may be
worthwhile to add some architecture-specific optimizations to our
src/port version of fls() - e.g. any x86 platform can implement this
using the assembly instruction BSRL.  But performance won't matter
a bit for assessing typmod changes, so I'm not worried about that
right now.

12 years agoAdd a transform function for varbit typmod coercisions.
Robert Haas [Tue, 7 Feb 2012 17:41:42 +0000 (12:41 -0500)]
Add a transform function for varbit typmod coercisions.

This enables ALTER TABLE to skip table and index rebuilds when the
new type is unconstraint varbit, or when the allowable number of bits
is not decreasing.

Noah Misch, with review and a fix for an OID collision by me.

12 years agoAdd a transform function for numeric typmod coercisions.
Robert Haas [Tue, 7 Feb 2012 17:08:26 +0000 (12:08 -0500)]
Add a transform function for numeric typmod coercisions.

This enables ALTER TABLE to skip table and index rebuilds when a column
is changed to an unconstrained numeric, or when the scale is unchanged
and the precision does not decrease.

Noah Misch, with a few stylistic changes and a fix for an OID
collision by me.

12 years agoAdd TIMING option to EXPLAIN, to allow eliminating of timing overhead.
Robert Haas [Tue, 7 Feb 2012 16:23:04 +0000 (11:23 -0500)]
Add TIMING option to EXPLAIN, to allow eliminating of timing overhead.

Sometimes it may be useful to get actual row counts out of EXPLAIN
(ANALYZE) without paying the cost of timing every node entry/exit.
With this patch, you can say EXPLAIN (ANALYZE, TIMING OFF) to get that.

Tomas Vondra, reviewed by Eric Theise, with minor doc changes by me.

12 years agopg_dump: Further reduce reliance on global variables.
Robert Haas [Tue, 7 Feb 2012 15:07:02 +0000 (10:07 -0500)]
pg_dump: Further reduce reliance on global variables.

This is another round of refactoring to make things simpler for parallel
pg_dump.  pg_dump.c now issues SQL queries through the relevant Archive
object, rather than relying on the global variable g_conn.  This commit
isn't quite enough to get rid of g_conn entirely, but it makes a big
dent in its utilization and, along the way, manages to be slightly less
code than before.

12 years agocreateuser: Disable prompting by default
Peter Eisentraut [Tue, 7 Feb 2012 12:55:34 +0000 (14:55 +0200)]
createuser: Disable prompting by default

Do not prompt when options were not specified.  Assume --no-createdb,
--no-createrole, --no-superuser by default.

Also disable prompting for user name in dropdb, unless --interactive
was specified.

reviewed by Josh Kupershmidt

12 years agoWhen building with LWLOCK_STATS, initialize the stats in LWLockWaitUntilFree.
Heikki Linnakangas [Tue, 7 Feb 2012 07:38:25 +0000 (09:38 +0200)]
When building with LWLOCK_STATS, initialize the stats in LWLockWaitUntilFree.

If LWLockWaitUntilFree was called before the first LWLockAcquire call, you
would either crash because of access to uninitialized array or account the
acquisition incorrectly. LWLockConditionalAcquire doesn't have this problem
because it doesn't update the lwlock stats.

In practice, this never happens because there is no codepath where you would
call LWLockWaitUntilfree before LWLockAcquire after a new process is
launched. But that's just accidental, there's no guarantee that that's
always going to be true in the future.

Spotted by Jeff Janes.

12 years agoFix postmaster to attempt restart after a hot-standby crash.
Tom Lane [Mon, 6 Feb 2012 20:29:26 +0000 (15:29 -0500)]
Fix postmaster to attempt restart after a hot-standby crash.

The postmaster was coded to treat any unexpected exit of the startup
process (i.e., the WAL replay process) as a catastrophic crash, and not try
to restart it. This was OK so long as the startup process could not have
any sibling postmaster children.  However, if a hot-standby backend
crashes, we SIGQUIT the startup process along with everything else, and the
resulting exit is hardly "unexpected".  Treating it as such meant we failed
to restart a standby server after any child crash at all, not only a crash
of the WAL replay process as intended.  Adjust that.  Back-patch to 9.0
where hot standby was introduced.

12 years agoAllow the connection keyword array to carry all seven items in ecpglib.
Michael Meskes [Mon, 6 Feb 2012 19:46:48 +0000 (20:46 +0100)]
Allow the connection keyword array to carry all seven items in ecpglib.

12 years agoAvoid throwing ERROR during WAL replay of DROP TABLESPACE.
Tom Lane [Mon, 6 Feb 2012 19:43:58 +0000 (14:43 -0500)]
Avoid throwing ERROR during WAL replay of DROP TABLESPACE.

Although we will not even issue an XLOG_TBLSPC_DROP WAL record unless
removal of the tablespace's directories succeeds, that does not guarantee
that the same operation will succeed during WAL replay.  Foreseeable
reasons for it to fail include temp files created in the tablespace by Hot
Standby backends, wrong directory permissions on a standby server, etc etc.
The original coding threw ERROR if replay failed to remove the directories,
but that is a serious overreaction.  Throwing an error aborts recovery,
and worse means that manual intervention will be needed to get the database
to start again, since otherwise the same error will recur on subsequent
attempts to replay the same WAL record.  And the consequence of failing to
remove the directories is only that some probably-small amount of disk
space is wasted, so it hardly seems justified to throw an error.
Accordingly, arrange to report such failures as LOG messages and keep going
when a failure occurs during replay.

Back-patch to 9.0 where Hot Standby was introduced.  In principle such
problems can occur in earlier releases, but Hot Standby increases the odds
of trouble significantly.  Given the lack of field reports of such issues,
I'm satisfied with patching back as far as the patch applies easily.

12 years agopg_dump: Remove global Archive pointer.
Robert Haas [Mon, 6 Feb 2012 19:07:55 +0000 (14:07 -0500)]
pg_dump: Remove global Archive pointer.

Instead, everything that needs the Archive object now gets it as a
parameter.  This is necessary infrastructure for parallel pg_dump,
but is also amply justified by the ugliness of the current code
(though a lot more than this is needed to fix that problem).