]> granicus.if.org Git - postgresql/log
postgresql
11 years agoRemove dependency on the DLL of pythonxx.def file.
Andrew Dunstan [Wed, 6 Mar 2013 00:24:29 +0000 (19:24 -0500)]
Remove dependency on the DLL of pythonxx.def file.

This confused Cygwin's make because of the colon in the path. The
DLL isn't likely to change under us so preserving the dependency
doesn't gain us much, and it's useful to be able to do a native
Windows build with the Cygwin mingw toolset.

Noah Misch.

11 years agoFix to_char() to use ASCII-only case-folding rules where appropriate.
Tom Lane [Tue, 5 Mar 2013 18:02:30 +0000 (13:02 -0500)]
Fix to_char() to use ASCII-only case-folding rules where appropriate.

formatting.c used locale-dependent case folding rules in some code paths
where the result isn't supposed to be locale-dependent, for example
to_char(timestamp, 'DAY').  Since the source data is always just ASCII
in these cases, that usually didn't matter ... but it does matter in
Turkish locales, which have unusual treatment of "i" and "I".  To confuse
matters even more, the misbehavior was only visible in UTF8 encoding,
because in single-byte encodings we used pg_toupper/pg_tolower which
don't have locale-specific behavior for ASCII characters.  Fix by providing
intentionally ASCII-only case-folding functions and using these where
appropriate.  Per bug #7913 from Adnan Dursun.  Back-patch to all active
branches, since it's been like this for a long time.

11 years agoBump catversion because of new function in the materialized view patch.
Kevin Grittner [Tue, 5 Mar 2013 11:32:03 +0000 (05:32 -0600)]
Bump catversion because of new function in the materialized view patch.

11 years agoFix overflow check in tm2timestamp (this time for sure).
Tom Lane [Mon, 4 Mar 2013 20:13:31 +0000 (15:13 -0500)]
Fix overflow check in tm2timestamp (this time for sure).

I fixed this code back in commit 841b4a2d5, but didn't think carefully
enough about the behavior near zero, which meant it improperly rejected
1999-12-31 24:00:00.  Per report from Magnus Hagander.

11 years agopsql: Let \l accept a pattern
Peter Eisentraut [Mon, 4 Mar 2013 03:17:08 +0000 (22:17 -0500)]
psql: Let \l accept a pattern

reviewed by Satoshi Nagayasu

11 years agoRemove accidentally-committed .orig file.
Kevin Grittner [Mon, 4 Mar 2013 00:38:44 +0000 (18:38 -0600)]
Remove accidentally-committed .orig file.

11 years agoFix map_sql_value_to_xml_value() to treat domains like their base types.
Tom Lane [Mon, 4 Mar 2013 00:32:12 +0000 (19:32 -0500)]
Fix map_sql_value_to_xml_value() to treat domains like their base types.

This was already the case for domains over arrays, but not for domains
over certain built-in types such as boolean.  The special formatting
rules for those types should apply to domains over them as well.
Per discussion.

While this is a bug fix, it's also a behavioral change that seems likely
to trip up some applications.  So no back-patch.

Pavel Stehule

11 years agoAdd a materialized view relations.
Kevin Grittner [Mon, 4 Mar 2013 00:23:31 +0000 (18:23 -0600)]
Add a materialized view relations.

A materialized view has a rule just like a view and a heap and
other physical properties like a table.  The rule is only used to
populate the table, references in queries refer to the
materialized data.

This is a minimal implementation, but should still be useful in
many cases.  Currently data is only populated "on demand" by the
CREATE MATERIALIZED VIEW and REFRESH MATERIALIZED VIEW statements.
It is expected that future releases will add incremental updates
with various timings, and that a more refined concept of defining
what is "fresh" data will be developed.  At some point it may even
be possible to have queries use a materialized in place of
references to underlying tables, but that requires the other
above-mentioned features to be working first.

Much of the documentation work by Robert Haas.
Review by Noah Misch, Thom Brown, Robert Haas, Marko Tiikkaja
Security review by KaiGai Kohei, with a decision on how best to
implement sepgsql still pending.

11 years agoGet rid of any toast table when converting a table to a view.
Tom Lane [Mon, 4 Mar 2013 00:05:47 +0000 (19:05 -0500)]
Get rid of any toast table when converting a table to a view.

Also make sure other fields of the view's pg_class entry are appropriate
for a view; it shouldn't have relfrozenxid set for instance.

This ancient omission isn't believed to have any serious consequences in
versions 8.4-9.2, so no backpatch.  But let's fix it before it does bite
us in some serious way.  It's just luck that the case doesn't cause
problems for autovacuum.  (It did cause problems in 8.3, but that's out
of support.)

Andres Freund

11 years agoFix SQL function execution to be safe with long-lived FmgrInfos.
Tom Lane [Sun, 3 Mar 2013 22:39:58 +0000 (17:39 -0500)]
Fix SQL function execution to be safe with long-lived FmgrInfos.

fmgr_sql had been designed on the assumption that the FmgrInfo it's called
with has only query lifespan.  This is demonstrably unsafe in connection
with range types, as shown in bug #7881 from Andrew Gierth.  Fix things
so that we re-generate the function's cache data if the (sub)transaction
it was made in is no longer active.

Back-patch to 9.2.  This might be needed further back, but it's not clear
whether the case can realistically arise without range types, so for now
I'll desist from back-patching further.

11 years agodoc: Small tweak for consistency
Peter Eisentraut [Sun, 3 Mar 2013 13:58:34 +0000 (08:58 -0500)]
doc: Small tweak for consistency

submitted by "Lyle"

11 years agodoc: A few awkward phrasing fixes
Peter Eisentraut [Sun, 3 Mar 2013 13:49:49 +0000 (08:49 -0500)]
doc: A few awkward phrasing fixes

Josh Kupershmidt

11 years agoExclude utils/probes.h and pg_trace.h from cpluspluscheck
Peter Eisentraut [Sat, 2 Mar 2013 03:43:47 +0000 (22:43 -0500)]
Exclude utils/probes.h and pg_trace.h from cpluspluscheck

They can include sys/sdt.h from SystemTap, which itself contains C++
code and so won't compile with a C++ compiler under extern "C" linkage.

11 years agoEliminate memory leaks in plperl's spi_prepare() function.
Tom Lane [Sat, 2 Mar 2013 02:33:34 +0000 (21:33 -0500)]
Eliminate memory leaks in plperl's spi_prepare() function.

Careless use of TopMemoryContext for I/O function data meant that repeated
use of spi_prepare and spi_freeplan would leak memory at the session level,
as per report from Christian Schröder.  In addition, spi_prepare
leaked a lot of transient data within the current plperl function's SPI
Proc context, which would be a problem for repeated use of spi_prepare
within a single plperl function call; and it wasn't terribly careful
about releasing permanent allocations in event of an error, either.

In passing, clean up some copy-and-pasteos in query-lookup error messages.

Alex Hunsaker and Tom Lane

11 years agoImprove pg_upgrade commentary on multixact change
Alvaro Herrera [Thu, 28 Feb 2013 19:29:17 +0000 (16:29 -0300)]
Improve pg_upgrade commentary on multixact change

Per gripe from Andres Freund

11 years agoFlush stderr and stdout in isolation tester.
Andrew Dunstan [Thu, 28 Feb 2013 00:13:07 +0000 (19:13 -0500)]
Flush stderr and stdout in isolation tester.

This is a possibly vain attempt to fix a buffering issue
observed for some MSVC builds.

11 years agoRemove spurious "the", and add a missing one.
Heikki Linnakangas [Wed, 27 Feb 2013 19:50:15 +0000 (21:50 +0200)]
Remove spurious "the", and add a missing one.

Thom Brown and me.

11 years agoFix MSVC build.
Heikki Linnakangas [Wed, 27 Feb 2013 19:31:41 +0000 (21:31 +0200)]
Fix MSVC build.

The new file in src/port needs to be listed in Mkvcbuild.pm as well.

11 years agoFix typo in "pg_xlogdump --help" and error message.
Heikki Linnakangas [Wed, 27 Feb 2013 19:27:01 +0000 (21:27 +0200)]
Fix typo in "pg_xlogdump --help" and error message.

Fujii Masao and me.

11 years agoCannot use WL_SOCKET_WRITEABLE without WL_SOCKET_READABLE.
Heikki Linnakangas [Wed, 27 Feb 2013 17:17:07 +0000 (19:17 +0200)]
Cannot use WL_SOCKET_WRITEABLE without WL_SOCKET_READABLE.

In copy-out mode, the frontend should not send any messages until the
backend has finished streaming, by sending a CopyDone message. I'm not sure
if it would be legal for the client to send a new query before receiving the
CopyDone message from the backend, but trying to support that would require
bigger changes to the backend code structure.

Fixes an assertion failure reported by Fujii Masao.

11 years agoAdd standard file header comment to quotes.c.
Heikki Linnakangas [Wed, 27 Feb 2013 16:42:40 +0000 (18:42 +0200)]
Add standard file header comment to quotes.c.

11 years agoAdd support for piping COPY to/from an external program.
Heikki Linnakangas [Wed, 27 Feb 2013 16:17:21 +0000 (18:17 +0200)]
Add support for piping COPY to/from an external program.

This includes backend "COPY TO/FROM PROGRAM '...'" syntax, and corresponding
psql \copy syntax. Like with reading/writing files, the backend version is
superuser-only, and in the psql version, the program is run in the client.

In the passing, the psql \copy STDIN/STDOUT syntax is subtly changed: if you
the stdin/stdout is quoted, it's now interpreted as a filename. For example,
"\copy foo from 'stdin'" now reads from a file called 'stdin', not from
standard input. Before this, there was no way to specify a filename called
stdin, stdout, pstdin or pstdout.

This creates a new function in pgport, wait_result_to_str(), which can
be used to convert the exit status of a process, as returned by wait(3),
to a human-readable string.

Etsuro Fujita, reviewed by Amit Kapila.

11 years agoAdd missing error check in regexp parser.
Tom Lane [Wed, 27 Feb 2013 15:40:03 +0000 (10:40 -0500)]
Add missing error check in regexp parser.

parseqatom() failed to check for an error return (NULL result) from its
recursive call to parsebranch(), and in consequence could crash with a
null-pointer dereference after an error return.  This bug has been there
since day one, but wasn't noticed before, probably because most error cases
in parsebranch() didn't actually lead to returning NULL.  Add the missing
error check, and also tweak parsebranch() to exit in a less indirect
fashion after a call to parseqatom() fails.

Report by Tomasz Karlik, fix by me.

11 years agoAdd missing .gitignore file.
Tom Lane [Tue, 26 Feb 2013 20:58:34 +0000 (15:58 -0500)]
Add missing .gitignore file.

11 years agoClean up "stopgap" implementation of timestamptz_to_str().
Tom Lane [Tue, 26 Feb 2013 20:50:22 +0000 (15:50 -0500)]
Clean up "stopgap" implementation of timestamptz_to_str().

Use correct type for "result", fix bogus strftime argument, don't use
unnecessary static variables, improve comments.

Andres Freund and Tom Lane

11 years agoInstall headers from the new src/include/common subdirectory.
Tom Lane [Tue, 26 Feb 2013 20:27:30 +0000 (15:27 -0500)]
Install headers from the new src/include/common subdirectory.

This got missed in commit 8396447cdbdff0b62914748de2fec04281dc9114.

Andres Freund

11 years agoRemove the check for COPY TO STDIN and COPY FROM STDOUT from ecpg.
Heikki Linnakangas [Tue, 26 Feb 2013 17:30:15 +0000 (19:30 +0200)]
Remove the check for COPY TO STDIN and COPY FROM STDOUT from ecpg.

The backend grammar treats STDIN and STDOUT completely interchangeable, so
that the above accepted. Arguably that was a mistake the backend grammar,
but it's not ecpg's business to second guess that.

11 years agodoc: Fix markup typo
Peter Eisentraut [Mon, 25 Feb 2013 22:58:14 +0000 (17:58 -0500)]
doc: Fix markup typo

11 years agoOnly quote libpq connection string values that need quoting.
Heikki Linnakangas [Mon, 25 Feb 2013 17:53:04 +0000 (19:53 +0200)]
Only quote libpq connection string values that need quoting.

There's no harm in excessive quoting per se, but it makes the strings nicer
to read. The values can get quite unwieldy, when they're first quoted within
within single-quotes when included in the connection string, and then all
the single-quotes are escaped when the connection string is passed as a
shell argument.

11 years agoAdd -d option to pg_dumpall, for specifying a connection string.
Heikki Linnakangas [Mon, 25 Feb 2013 17:39:10 +0000 (19:39 +0200)]
Add -d option to pg_dumpall, for specifying a connection string.

Like with pg_basebackup and pg_receivexlog, it's a bit strange to call the
option -d/--dbname, when in fact you cannot pass a database name in it.

Original patch by Amit Kapila, heavily modified by me.

11 years agoAdd -d/--dbname option to pg_dump.
Heikki Linnakangas [Mon, 25 Feb 2013 17:39:04 +0000 (19:39 +0200)]
Add -d/--dbname option to pg_dump.

You could already pass a database name just by passing it as the last
option, without -d. This is an alias for that, like the -d/--dbname option
in psql and many other client applications. For consistency.

11 years agoRedo MSVC build implementation for pg_xlogdump.
Andrew Dunstan [Mon, 25 Feb 2013 17:00:53 +0000 (12:00 -0500)]
Redo MSVC build implementation for pg_xlogdump.

The previous commit didn't work on MSVC editions earlier than
Visual Studio 2011, apparently. This works by copying files into the
contrib directory, and making provision to clean them up, which should
work on all editions.

11 years agoAdd -d option to pg_basebackup and pg_receivexlog, for connection string.
Heikki Linnakangas [Mon, 25 Feb 2013 12:48:27 +0000 (14:48 +0200)]
Add -d option to pg_basebackup and pg_receivexlog, for connection string.

Without this, there's no way to pass arbitrary libpq connection parameters
to these applications. It's a bit strange that the option is called
-d/--dbname, when in fact you can *not* pass a database name in it, but it's
consistent with other client applications where a connection string is also
passed using -d.

Original patch by Amit Kapila, heavily modified by me.

11 years agoProvide MSVC build setup for pg_xlogdump.
Andrew Dunstan [Mon, 25 Feb 2013 01:28:42 +0000 (20:28 -0500)]
Provide MSVC build setup for pg_xlogdump.

11 years agodoc: Remove PostgreSQL version number from xml2 deprecation notice
Peter Eisentraut [Sun, 24 Feb 2013 20:38:07 +0000 (15:38 -0500)]
doc: Remove PostgreSQL version number from xml2 deprecation notice

It is obviously no longer true.

11 years agoFix build of contrib/pg_xlogdump.
Tom Lane [Sun, 24 Feb 2013 13:58:00 +0000 (08:58 -0500)]
Fix build of contrib/pg_xlogdump.

rmgrdesc.c is not auto-generated now, though it apparently was the last
time the Makefile was updated.

11 years agoCorrect tense in log message
Peter Eisentraut [Sun, 24 Feb 2013 04:30:14 +0000 (23:30 -0500)]
Correct tense in log message

11 years agoRename postgres_fdw's use_remote_explain option to use_remote_estimate.
Tom Lane [Sat, 23 Feb 2013 17:20:48 +0000 (12:20 -0500)]
Rename postgres_fdw's use_remote_explain option to use_remote_estimate.

The new name was originally my typo, but per discussion it seems like a
better name anyway.  So make the code match the docs, not vice versa.

11 years agodoc: Add more compatibility information for triggers
Peter Eisentraut [Sat, 23 Feb 2013 05:28:33 +0000 (00:28 -0500)]
doc: Add more compatibility information for triggers

Louis-Claude Canon and Josh Kupershmidt

11 years agoAdd quotes to messages
Peter Eisentraut [Sat, 23 Feb 2013 04:33:07 +0000 (23:33 -0500)]
Add quotes to messages

11 years agocontrib/Makefile also needs updated
Alvaro Herrera [Fri, 22 Feb 2013 21:56:42 +0000 (18:56 -0300)]
contrib/Makefile also needs updated

Erik Rijkers

11 years agoFix some typos and grammatical mistakes
Alvaro Herrera [Fri, 22 Feb 2013 21:52:59 +0000 (18:52 -0300)]
Fix some typos and grammatical mistakes

... as well a update copyrights statements to 2013.

Noted by Thom Brown and Peter Geoghegan

11 years agoFix copy-and-pasteo
Alvaro Herrera [Fri, 22 Feb 2013 20:03:22 +0000 (17:03 -0300)]
Fix copy-and-pasteo

Harmless, but it's certainly better like this.

Noticed by Andres Freund

11 years agoAdd pg_xlogdump contrib program
Alvaro Herrera [Fri, 22 Feb 2013 19:46:24 +0000 (16:46 -0300)]
Add pg_xlogdump contrib program

This program relies on rm_desc backend routines and the xlogreader
infrastructure to emit human-readable rendering of WAL records.

Author: Andres Freund, with many reworks by Álvaro
Reviewed (in a much earlier version) by Peter Eisentraut

11 years agoFix some planning oversights in postgres_fdw.
Tom Lane [Fri, 22 Feb 2013 15:56:06 +0000 (10:56 -0500)]
Fix some planning oversights in postgres_fdw.

Include eval costs of local conditions in remote-estimate mode, and don't
assume the remote eval cost is zero in local-estimate mode.  (The best
we can do with that at the moment is to assume a seqscan, which may well
be wildly pessimistic ... but zero won't do at all.)

To get a reasonable local estimate, we need to know the relpages count
for the remote rel, so improve the ANALYZE code to fetch that rather
than just setting the foreign table's relpages field to zero.

11 years agoBlind attempt at fixing the non-MSVC Windows builds
Alvaro Herrera [Fri, 22 Feb 2013 14:51:15 +0000 (11:51 -0300)]
Blind attempt at fixing the non-MSVC Windows builds

Apparently, they need -DBUILDING_DLL for the Assert() declarations to
work correctly.

11 years agoFix whole-row references in postgres_fdw.
Tom Lane [Fri, 22 Feb 2013 14:21:50 +0000 (09:21 -0500)]
Fix whole-row references in postgres_fdw.

The optimization to not retrieve unnecessary columns wasn't smart enough.
Noted by Thom Brown.

11 years agoChange postgres_fdw to show casts as casts, not underlying function calls.
Tom Lane [Fri, 22 Feb 2013 12:30:21 +0000 (07:30 -0500)]
Change postgres_fdw to show casts as casts, not underlying function calls.

On reflection this method seems to be exposing an unreasonable amount of
implementation detail.  It wouldn't matter when talking to a remote server
of the identical Postgres version, but it seems likely to make things worse
not better if the remote is a different version with different casting
infrastructure.  Instead adopt ruleutils.c's policy of regurgitating the
cast as it was originally specified; including not showing it at all, if
it was implicit to start with.  (We must do that because for some datatypes
explicit and implicit casts have different semantics.)

11 years agoGet rid of postgres_fdw's assumption that remote type OIDs match ours.
Tom Lane [Fri, 22 Feb 2013 11:36:09 +0000 (06:36 -0500)]
Get rid of postgres_fdw's assumption that remote type OIDs match ours.

The only place we depended on that was in sending numeric type OIDs in
PQexecParams; but we can replace that usage with explicitly casting
each Param symbol in the query string, so that the types are specified
to the remote by name not OID.  This makes no immediate difference but
will be essential if we ever hope to support use of non-builtin types.

11 years agoFix thinko in previous commit.
Heikki Linnakangas [Fri, 22 Feb 2013 11:07:02 +0000 (13:07 +0200)]
Fix thinko in previous commit.

We must still initialize minRecoveryPoint if we start straight with archive
recovery, e.g when recovering from a normal base backup taken with
pg_start/stop_backup. Otherwise we never consider the system consistent.

11 years agoAdjust postgres_fdw's search path handling.
Tom Lane [Fri, 22 Feb 2013 11:03:46 +0000 (06:03 -0500)]
Adjust postgres_fdw's search path handling.

Set the remote session's search path to exactly "pg_catalog" at session
start, then schema-qualify only names that aren't in that schema.  This
greatly reduces clutter in the generated SQL commands, as seen in the
regression test changes.  Per discussion.

Also, rethink use of FirstNormalObjectId as the "built-in object" cutoff
--- FirstBootstrapObjectId is safer, since the former will accept
objects in information_schema for instance.

11 years agoIf recovery.conf is created after "pg_ctl stop -m i", do crash recovery.
Heikki Linnakangas [Fri, 22 Feb 2013 09:43:04 +0000 (11:43 +0200)]
If recovery.conf is created after "pg_ctl stop -m i", do crash recovery.

If you create a base backup using an atomic filesystem snapshot, and try to
perform PITR starting from that base backup, or if you just kill a master
server and create recovery.conf to put it into standby mode, we don't know
how far we need to recover before reaching consistency. Normally in crash
recovery, we replay all the WAL present in pg_xlog, and assume that we're
consistent after that. And normally in archive recovery, minRecoveryPoint,
backupEndRequired, or backupEndPoint is set in the control file, indicating
how far we need to replay to reach consistency. But if the server was
previously up and running normally, and you kill -9 it or take an atomic
filesystem snapshot, none of those fields are set in the control file.

The solution is to perform crash recovery first, replaying all the WAL in
pg_xlog. After that's done, we assume that the system is consistent like in
normal crash recovery, and switch to archive recovery mode after that.

Per report from Kyotaro HORIGUCHI. In his scenario, recovery.conf was
created after "pg_ctl stop -m i". I'm not sure we need to support that exact
scenario, but we should support backing up using a filesystem snapshot,
which looks identical.

This issue goes back to at least 9.0, where hot standby was introduced and
we started to track when consistency is reached. In 9.1 and 9.2, we would
open up for hot standby too early, and queries could briefly see an
inconsistent state. But 9.2 made it more visible, as we started to PANIC if
we see a reference to a non-existing page during recovery, if we've already
reached consistency. This is a fairly big patch, so back-patch to 9.2 only,
where the issue is more visible. We can consider back-patching further after
this has received some more testing in 9.2 and master.

11 years agoMove relpath() to libpgcommon
Alvaro Herrera [Fri, 22 Feb 2013 01:46:17 +0000 (22:46 -0300)]
Move relpath() to libpgcommon

This enables non-backend code, such as pg_xlogdump, to use it easily.
The previous location, in src/backend/catalog/catalog.c, made that
essentially impossible because that file depends on many backend-only
facilities; so this needs to live separately.

11 years agoRemove useless variable
Alvaro Herrera [Thu, 21 Feb 2013 14:46:46 +0000 (11:46 -0300)]
Remove useless variable

Per Jeff Janes

11 years agoNeed to decorate XactIsoLevel as PGDLLIMPORT for postgres_fdw.
Tom Lane [Thu, 21 Feb 2013 14:28:42 +0000 (09:28 -0500)]
Need to decorate XactIsoLevel as PGDLLIMPORT for postgres_fdw.

Per buildfarm.

11 years agoTeach MSVC build system about postgres_fdw.
Tom Lane [Thu, 21 Feb 2013 11:43:15 +0000 (06:43 -0500)]
Teach MSVC build system about postgres_fdw.

Per buildfarm.

11 years agoAdd postgres_fdw contrib module.
Tom Lane [Thu, 21 Feb 2013 10:26:23 +0000 (05:26 -0500)]
Add postgres_fdw contrib module.

There's still a lot of room for improvement, but it basically works,
and we need this to be present before we can do anything much with the
writable-foreign-tables patch.  So let's commit it and get on with testing.

Shigeru Hanada, reviewed by KaiGai Kohei and Tom Lane

11 years agoFix pg_dumpall with database names containing =
Heikki Linnakangas [Wed, 20 Feb 2013 15:08:54 +0000 (17:08 +0200)]
Fix pg_dumpall with database names containing =

If a database name contained a '=' character, pg_dumpall failed. The problem
was in the way pg_dumpall passes the database name to pg_dump on the
command line. If it contained a '=' character, pg_dump would interpret it
as a libpq connection string instead of a plain database name.

To fix, pass the database name to pg_dump as a connection string,
"dbname=foo", with the database name escaped if necessary.

Back-patch to all supported branches.

11 years agoDon't pass NULL to fprintf, if a bogus connection string is given to pg_dump.
Heikki Linnakangas [Wed, 20 Feb 2013 14:22:47 +0000 (16:22 +0200)]
Don't pass NULL to fprintf, if a bogus connection string is given to pg_dump.

Back-patch to all supported branches.

11 years agoFix yet another typo in comment.
Heikki Linnakangas [Wed, 20 Feb 2013 10:30:59 +0000 (12:30 +0200)]
Fix yet another typo in comment.

Etsuro Fujita

11 years agoMove ExceptionalCondition back to postgres.h
Alvaro Herrera [Mon, 18 Feb 2013 21:53:32 +0000 (18:53 -0300)]
Move ExceptionalCondition back to postgres.h

It needs to be defined in the backend even when assertions are not
enabled.  It's cleaner to put it back, than create a separate #ifdef
section in c.h.

Per trouble report from Jeff Janes

11 years agoSplit pgstat file in smaller pieces
Alvaro Herrera [Mon, 18 Feb 2013 20:56:08 +0000 (17:56 -0300)]
Split pgstat file in smaller pieces

We now write one file per database and one global file, instead of
having the whole thing in a single huge file.  This reduces the I/O that
must be done when partial data is required -- which is all the time,
because each process only needs information on its own database anyway.
Also, the autovacuum launcher does not need data about tables and
functions in each database; having the global stats for all DBs is
enough.

Catalog version bumped because we have a new subdir under PGDATA.

Author: Tomas Vondra.  Some rework by Álvaro
Testing by Jeff Janes
Other discussion by Heikki Linnakangas, Tom Lane.

11 years agoAdd ALTER ROLE ALL SET command
Peter Eisentraut [Mon, 18 Feb 2013 04:45:36 +0000 (23:45 -0500)]
Add ALTER ROLE ALL SET command

This generalizes the existing ALTER ROLE ... SET and ALTER DATABASE
... SET functionality to allow creating settings that apply to all users
in all databases.

reviewed by Pavel Stehule

11 years agoWarn about initdb using mount-points
Bruce Momjian [Sat, 16 Feb 2013 23:52:50 +0000 (18:52 -0500)]
Warn about initdb using mount-points

Add code to detect and warn about trying to initdb or create pg_xlog on
mount points.

11 years agoBetter fix for "unarchived WAL files get deleted on crash recovery" bug.
Heikki Linnakangas [Fri, 15 Feb 2013 17:33:31 +0000 (19:33 +0200)]
Better fix for "unarchived WAL files get deleted on crash recovery" bug.

Revert my earlier fix for the bug that unarchived WAL files get deleted on
crash recovery, commit c9cc7e05c6d82a9781883a016c70d95aa4923122. We create
a .done file for files streamed or restored from archive, so the WAL file
recycling logic used during normal operation works just as well during
archive recovery.

Per Fujii Masao's suggestion.

11 years agoForce archive_status of .done for xlogs created by dearchival/replication.
Simon Riggs [Wed, 8 Aug 2012 22:58:49 +0000 (23:58 +0100)]
Force archive_status of .done for xlogs created by dearchival/replication.

This is a forward-patch of commit 6f4b8a4f4f7a2d683ff79ab59d3693714b965e3d,
applied to 9.2 back in August. The plan was to do something else in master,
but it looks like it's not going to happen, so let's just apply the 9.2
solution to master as well.

Fujii Masao

11 years agoDon't delete unarchived WAL files during crash recovery.
Heikki Linnakangas [Fri, 15 Feb 2013 15:25:16 +0000 (17:25 +0200)]
Don't delete unarchived WAL files during crash recovery.

Bug reported by Jehan-Guillaume (ioguix) de Rorthais. This was introduced
with the change to keep WAL files restored from archive in pg_xlog, in 9.2.

11 years agopgindent: Fix order in instructions
Peter Eisentraut [Fri, 15 Feb 2013 02:40:05 +0000 (21:40 -0500)]
pgindent: Fix order in instructions

The previous order of steps didn't literally work, because git clean
-fdx would delete the downloaded typedefs.list.  Also, pgindent needs to
be called with a path when one is in at the top of the build tree.

11 years agoInvent pre-commit/pre-prepare/pre-subcommit events for xact callbacks.
Tom Lane [Fri, 15 Feb 2013 01:35:08 +0000 (20:35 -0500)]
Invent pre-commit/pre-prepare/pre-subcommit events for xact callbacks.

Currently it's only possible for loadable modules to get control during
post-commit cleanup of a transaction.  That doesn't work too well if they
want to do something that could throw an error; for example, an FDW might
need to issue a remote commit, which could well fail.  To improve matters,
extend the existing APIs for XactCallback and SubXactCallback functions
to provide new pre-commit events for this purpose.

The release notes will need to mention that existing callback functions
should be checked to make sure they don't do something unwanted when one
of the new event types occurs.  In the examples within our source tree,
contrib/sepgsql was fine but plpgsql had been a bit too cute.

11 years agopg_upgrade: conditionally create cluster delete script
Bruce Momjian [Thu, 14 Feb 2013 15:53:03 +0000 (10:53 -0500)]
pg_upgrade:  conditionally create cluster delete script

If users create tablespaces inside the old cluster directory, it is
impossible for the delete script to delete _only_ the old cluster files,
so don't create a script in that case, and issue a message to the user.

11 years agoFix pg_upgrade log file cleanup code
Bruce Momjian [Thu, 14 Feb 2013 05:04:15 +0000 (00:04 -0500)]
Fix pg_upgrade log file cleanup code

Recent pg_upgrade parallel improvements introduced a bug that prevented
cleanup of per-database log files.

11 years agodoc: Add make target to produce EPUB from DocBook
Peter Eisentraut [Thu, 14 Feb 2013 04:12:21 +0000 (23:12 -0500)]
doc: Add make target to produce EPUB from DocBook

11 years agoFix CVE-2013-0255 properly.
Tom Lane [Wed, 13 Feb 2013 21:20:01 +0000 (16:20 -0500)]
Fix CVE-2013-0255 properly.

Revert commit ab0f7b6089fd215f6ce6081e2e222c38d643a526 (in HEAD only)
in favor of the proper solution, which is to declare enum_recv() correctly
in the system catalogs.  It should be declared to take type "internal"
not "cstring".

Also improve the type_sanity regression test, which should have caught
this typo, so that it actually would.  Most of the relevant checks on
the signature of type I/O functions should not have been restricted to
basetypes/pseudotypes, as they should apply to any type's I/O functions.

11 years agoFix contrib/pg_trgm's similarity() function for trigram-free strings.
Tom Lane [Wed, 13 Feb 2013 19:07:06 +0000 (14:07 -0500)]
Fix contrib/pg_trgm's similarity() function for trigram-free strings.

Cases such as similarity('', '') produced a NaN result due to computing
0/0.  Per discussion, make it return zero instead.

This appears to be the basic cause of bug #7867 from Michele Baravalle,
although it remains unclear why her installation doesn't think Cyrillic
letters are letters.

Back-patch to all active branches.

11 years agoFix bogus when-to-deregister-from-listener-array logic.
Tom Lane [Wed, 13 Feb 2013 17:48:05 +0000 (12:48 -0500)]
Fix bogus when-to-deregister-from-listener-array logic.

Since a backend adds itself to the global listener array during
Exec_ListenPreCommit, it's inappropriate for it to remove itself during
Exec_UnlistenCommit or Exec_UnlistenAllCommit --- that leads to failure
when committing a transaction that did UNLISTEN then LISTEN, since we end
up not registered though we should be.  (This leads to missing later
notifications, or to Assert failures in assert-enabled builds.)  Instead
deal with deregistering at the bottom of AtCommit_Notify, when we know the
final state of the listenChannels list.

Also, simplify the representation of registration status by replacing the
transient backendHasExecutedInitialListen flag with an amRegisteredListener
flag.

Per report from Greg Sabino Mullane.  Back-patch to 9.0, where the problem
was introduced during the LISTEN/NOTIFY rewrite.

11 years agoUpdate visibility map in the second phase of vacuum.
Heikki Linnakangas [Wed, 13 Feb 2013 15:46:23 +0000 (17:46 +0200)]
Update visibility map in the second phase of vacuum.

There's a high chance that a page becomes all-visible when the second phase
of vacuum removes all the dead tuples on it, so it makes sense to check for
that. Otherwise the visibility map won't get updated until the next vacuum.

Pavan Deolasee, reviewed by Jeff Janes.

11 years agoRename "string" pstrdup argument to "in"
Alvaro Herrera [Tue, 12 Feb 2013 15:43:09 +0000 (12:43 -0300)]
Rename "string" pstrdup argument to "in"

The former name collides with a symbol also used in the isolation test's
parser, causing assorted failures in certain platforms.

11 years agoDon't build libpgcommon_srv.a just yet
Alvaro Herrera [Tue, 12 Feb 2013 15:21:27 +0000 (12:21 -0300)]
Don't build libpgcommon_srv.a just yet

It's empty, and some archivers do not support that case.

11 years agoCreate libpgcommon, and move pg_malloc et al to it
Alvaro Herrera [Tue, 12 Feb 2013 13:33:40 +0000 (10:33 -0300)]
Create libpgcommon, and move pg_malloc et al to it

libpgcommon is a new static library to allow sharing code among the
various frontend programs and backend; this lets us eliminate duplicate
implementations of common routines.  We avoid libpgport, because that's
intended as a place for porting issues; per discussion, it seems better
to keep them separate.

The first use case, and the only implemented by this patch, is pg_malloc
and friends, which many frontend programs were already using.

At the same time, we can use this to provide palloc emulation functions
for the frontend; this way, some palloc-using files in the backend can
also be used by the frontend cleanly.  To do this, we change palloc() in
the backend to be a function instead of a macro on top of
MemoryContextAlloc().  This was previously believed to cause loss of
performance, but this implementation has been tweaked by Tom and Andres
so that on modern compilers it provides a slight improvement over the
previous one.

This lets us clean up some places that were already with
localized hacks.

Most of the pg_malloc/palloc changes in this patch were authored by
Andres Freund. Zoltán Böszörményi also independently provided a form of
that.  libpgcommon infrastructure was authored by Álvaro.

11 years agoAdd noreturn attributes to some error reporting functions
Peter Eisentraut [Tue, 12 Feb 2013 12:13:22 +0000 (07:13 -0500)]
Add noreturn attributes to some error reporting functions

11 years agoSupport unlogged GiST index.
Heikki Linnakangas [Mon, 11 Feb 2013 20:50:15 +0000 (22:50 +0200)]
Support unlogged GiST index.

The reason this wasn't supported before was that GiST indexes need an
increasing sequence to detect concurrent page-splits. In a regular WAL-
logged GiST index, the LSN of the page-split record is used for that
purpose, and in a temporary index, we can get away with a backend-local
counter. Neither of those methods works for an unlogged relation.

To provide such an increasing sequence of numbers, create a "fake LSN"
counter that is saved and restored across shutdowns. On recovery, unlogged
relations are blown away, so the counter doesn't need to survive that
either.

Jeevan Chalke, based on discussions with Robert Haas, Tom Lane and me.

11 years agoFix checkpoint after fast promotion.
Heikki Linnakangas [Mon, 11 Feb 2013 20:16:56 +0000 (22:16 +0200)]
Fix checkpoint after fast promotion.

The intention was to request a regular online checkpoint immediately after
end of recovery, when performing "fast promotion". However, because the
checkpoint was requested before other backends were allowed to write WAL,
the checkpointer process performed a restartpoint rather than a checkpoint.

Delay the RequestCheckPoint call until after recovery has truly ended, so
that you get a real checkpoint.

11 years agoInclude previous TLI in end-of-recovery and shutdown checkpoint records.
Heikki Linnakangas [Mon, 11 Feb 2013 16:13:09 +0000 (18:13 +0200)]
Include previous TLI in end-of-recovery and shutdown checkpoint records.

This isn't used for anything but a sanity check at the moment, but it could
be highly valuable for debugging purposes. It could also be used to recreate
timeline history by traversing WAL, which seems useful.

11 years agoFurther cleanup of gistsplit.c.
Tom Lane [Sun, 10 Feb 2013 21:21:26 +0000 (16:21 -0500)]
Further cleanup of gistsplit.c.

After further reflection I was unconvinced that the existing coding is
guaranteed to return valid union datums in every code path for multi-column
indexes.  Fix that by forcing a gistunionsubkey() call at the end of the
recursion.  Having done that, we can remove some clearly-redundant calls
elsewhere.  This should be a little faster for multi-column indexes (since
the previous coding would uselessly do such a call for each column while
unwinding the recursion), as well as much harder to break.

Also, simplify the handling of cases where one side or the other of a
primary split contains only don't-care tuples.  The previous coding used a
very ugly hack in removeDontCares() that essentially forced one random
tuple to be treated as non-don't-care, providing a random initial choice of
seed datum for the secondary split.  It seems unlikely that that method
will give better-than-random splits.  Instead, treat such a split as
degenerate and just let the next column determine the split, the same way
that we handle fully degenerate cases where the two sides produce identical
union datums.

11 years agoRemove useless picksplit-doesn't-support-secondary-split log spam.
Tom Lane [Sun, 10 Feb 2013 18:07:40 +0000 (13:07 -0500)]
Remove useless picksplit-doesn't-support-secondary-split log spam.

This LOG message was put in over five years ago with the evident
expectation that we'd make all GiST opclasses support secondary split
directly.  However, no such thing ever happened, and indeed the number of
opclasses supporting it decreased to zero in 9.2.  The reason is that
improving on the default implementation isn't that easy --- the
opclass-specific code that did exist, before 9.2, doesn't appear to have
been any improvement over the default.

Hence, remove the message altogether.  There's certainly no point in
nagging users about this in released branches, but I doubt that we'll
ever implement complete opclass-specific support anyway.

11 years agoRemove vestigial secondary-split support in gist_box_picksplit().
Tom Lane [Sun, 10 Feb 2013 17:40:09 +0000 (12:40 -0500)]
Remove vestigial secondary-split support in gist_box_picksplit().

Not only is this implementation of secondary-split not better than the
default implementation in gistsplit.c, it's actually worse.  The gistsplit.c
code at least looks to see if switching the left and right sides would make
a better merge with the previously-split tuples, while this doesn't.

In any case it's rather useless to support secondary split only in an edge
case.  There used to be more complete support for it here (in chooseLR()),
but that was removed in commit 7f3bd86843e5aad84585a57d3f6b80db3c609916.
It appears to me though that the chooseLR() code was really isomorphic to
the default implementation, since it was still based on choosing the cheaper
way of adding two sub-split vectors that had been chosen without regard to
the primary split initially.  I think an implementation of secondary split
that could beat the default implementation would have to be pretty fully
integrated into the split algorithm, not plastered on at the end.

Back-patch to 9.2, but not further; previous branches have the chooseLR()
code which I don't feel a great need to mess with.  This is mainly so we
just have two behaviors and not three among the various branches (IOW, this
patch is cleanup for commit 7f3bd86843e5aad84585a57d3f6b80db3c609916's
incomplete removal of secondary-split support).

11 years agoDocument and clean up gistsplit.c.
Tom Lane [Sun, 10 Feb 2013 16:58:15 +0000 (11:58 -0500)]
Document and clean up gistsplit.c.

Improve comments, rename some variables and functions, slightly simplify
a couple of APIs, in an attempt to make this code readable by people other
than its original author.

Even though this is essentially just cosmetic, back-patch to all active
branches, because otherwise it's going to make back-patching future fixes
in this file very painful.

11 years agoReduce log level of picksplit-doesn't-support-secondary-split whining.
Tom Lane [Sat, 9 Feb 2013 17:17:55 +0000 (12:17 -0500)]
Reduce log level of picksplit-doesn't-support-secondary-split whining.

This was agreed to back in 2007, but never actually done.

Josh Hansen

11 years agoAdd an example of attaching a default value to an updatable view.
Tom Lane [Sat, 9 Feb 2013 16:43:48 +0000 (11:43 -0500)]
Add an example of attaching a default value to an updatable view.

This is probably the single most useful thing that ALTER VIEW can do,
particularly now that we have auto-updatable views.  So show an explicit
example.

11 years agopsql: Improve unaligned expanded output for zero rows
Peter Eisentraut [Sat, 9 Feb 2013 05:05:27 +0000 (00:05 -0500)]
psql: Improve unaligned expanded output for zero rows

This used to erroneously print an empty line.  Now it prints nothing.

11 years agopsql: Improve expanded print output in tuples-only mode
Peter Eisentraut [Sat, 9 Feb 2013 04:39:22 +0000 (23:39 -0500)]
psql: Improve expanded print output in tuples-only mode

When there are zero result rows, in expanded mode, "(No rows)" is
printed.  So far, there was no way to turn this off.  Now, when
tuples-only mode is turned on, nothing is printed in this case.

11 years agoAdd support for ALTER RULE ... RENAME TO.
Tom Lane [Sat, 9 Feb 2013 04:58:40 +0000 (23:58 -0500)]
Add support for ALTER RULE ... RENAME TO.

Ali Dar, reviewed by Dean Rasheed.

11 years agoSimplify box_overlap computations.
Tom Lane [Fri, 8 Feb 2013 23:26:08 +0000 (18:26 -0500)]
Simplify box_overlap computations.

Given the assumption that a box's high coordinates are not less than its
low coordinates, the tests in box_ov() are overly complicated and can be
reduced to about half as much work.  Since many other functions in
geo_ops.c rely on that assumption, there doesn't seem to be a good reason
not to use it here.

Per discussion of Alexander Korotkov's GiST fix, which was already using
the simplified logic (in a non-fuzzy form, but the equivalence holds just
as well for fuzzy).

11 years agoFix gist_box_same and gist_point_consistent to handle fuzziness correctly.
Tom Lane [Fri, 8 Feb 2013 23:03:17 +0000 (18:03 -0500)]
Fix gist_box_same and gist_point_consistent to handle fuzziness correctly.

While there's considerable doubt that we want fuzzy behavior in the
geometric operators at all (let alone as currently implemented), nobody is
stepping forward to redesign that stuff.  In the meantime it behooves us
to make sure that index searches agree with the behavior of the underlying
operators.  This patch fixes two problems in this area.

First, gist_box_same was using fuzzy equality, but it really needs to use
exact equality to prevent not-quite-identical upper index keys from being
treated as identical, which for example would prevent an existing upper
key from being extended by an amount less than epsilon.  This would result
in inconsistent indexes.  (The next release notes will need to recommend
that users reindex GiST indexes on boxes, polygons, circles, and points,
since all four opclasses use gist_box_same.)

Second, gist_point_consistent used exact comparisons for upper-page
comparisons in ~= searches, when it needs to use fuzzy comparisons to
ensure it finds all matches; and it used fuzzy comparisons for point <@ box
searches, when it needs to use exact comparisons because that's what the
<@ operator (rather inconsistently) does.

The added regression test cases illustrate all three misbehaviors.

Back-patch to all active branches.  (8.4 did not have GiST point_ops,
but it still seems prudent to apply the gist_box_same patch to it.)

Alexander Korotkov, reviewed by Noah Misch

11 years agoClean up c.h / postgres.h after Assert() move
Alvaro Herrera [Fri, 8 Feb 2013 15:13:34 +0000 (12:13 -0300)]
Clean up c.h / postgres.h after Assert() move

Per Tom

11 years agoFix Xmax freeze conditions
Alvaro Herrera [Fri, 8 Feb 2013 04:27:54 +0000 (01:27 -0300)]
Fix Xmax freeze conditions

I broke this in 0ac5ad5134; previously, freezing a tuple marked with an
IS_MULTI xmax was not necessary.

Per brokenness report from Jeff Janes.

11 years agodoc: Fix mistakes in the most recent set of release notes.
Tom Lane [Fri, 8 Feb 2013 15:41:15 +0000 (10:41 -0500)]
doc: Fix mistakes in the most recent set of release notes.

Improve description of the vacuum_freeze_table_age bug (it's much more
serious than we realized at the time the fix was committed), and correct
attribution of pg_upgrade -O/-o fix (Marti Raudsepp contributed that,
but Bruce forgot to credit him in the commit log).

No need to back-patch right now, it'll happen when the next set of
release notes are prepared.

11 years agoFix another typo in a comment
Magnus Hagander [Fri, 8 Feb 2013 14:14:40 +0000 (15:14 +0100)]
Fix another typo in a comment

Noted by Thom Brown

11 years agoExclude access/rmgrlist.h from cpluspluscheck
Peter Eisentraut [Fri, 8 Feb 2013 12:01:21 +0000 (07:01 -0500)]
Exclude access/rmgrlist.h from cpluspluscheck

It is not meant to be included standalone.

11 years agoscripts: Add build prerequisite on libpgport
Peter Eisentraut [Fri, 8 Feb 2013 11:43:54 +0000 (06:43 -0500)]
scripts: Add build prerequisite on libpgport

Without this, building in src/bin/scripts directly will fail if
libpgport wasn't built first.  Other bin components are handled the same
way.

Phil Sorber