]> granicus.if.org Git - postgresql/log
postgresql
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

11 years agoFix typo in comment
Magnus Hagander [Fri, 8 Feb 2013 10:45:42 +0000 (11:45 +0100)]
Fix typo in comment

Etsuro Fujita

11 years agodoc: Rewrite how to get the source code
Peter Eisentraut [Fri, 8 Feb 2013 04:19:18 +0000 (23:19 -0500)]
doc: Rewrite how to get the source code

Instead of hardcoding a specific link, give a general link to the
download section of the web site.  This gives the user more download
options and the sysadmins more flexibility.  Also, the previously
presented link didn't work for devel versions.

11 years agoFix performance issue in EXPLAIN (ANALYZE, TIMING OFF).
Tom Lane [Fri, 8 Feb 2013 03:53:00 +0000 (22:53 -0500)]
Fix performance issue in EXPLAIN (ANALYZE, TIMING OFF).

Commit af7914c6627bcf0b0ca614e9ce95d3f8056602bf, which added the TIMING
option to EXPLAIN, had an oversight: if the TIMING option is disabled
then control in InstrStartNode() goes through an elog(DEBUG2) call, which
typically does nothing but takes a noticeable amount of time to do it.
Tweak the logic to avoid that.

In HEAD, also change the elog(DEBUG2)'s in instrument.c to elog(ERROR).
It's not very clear why they weren't like that to begin with, but this
episode shows that not complaining more vociferously about misuse is
likely to do little except allow bugs to remain hidden.

While at it, adjust some code that was making possibly-dangerous
assumptions about flag bits being in the rightmost byte of the
instrument_options word.

Problem reported by Pavel Stehule (via Tomas Vondra).

11 years agoMake contrib/btree_gist's GiST penalty function a bit saner.
Tom Lane [Fri, 8 Feb 2013 00:13:59 +0000 (19:13 -0500)]
Make contrib/btree_gist's GiST penalty function a bit saner.

The previous coding supposed that the first differing bytes in two varlena
datums must have the same sign difference as their overall comparison
result.  This is obviously bogus for text strings in non-C locales, and
probably wrong for numeric, and even for bytea I think it was wrong on
machines where char is signed.  When the assumption failed, the function
could deliver a zero or negative penalty in situations where such a result
is quite ridiculous, leading the core GiST code to make very bad page-split
decisions.

To fix, take the absolute values of the byte-level differences.  Also,
switch the code to using unsigned char not just char, so that the behavior
will be consistent whether char is signed or not.

Per investigation of a trouble report from Tomas Vondra.  Back-patch to all
supported branches.

11 years agoFix erroneous range-union logic for varlena types in contrib/btree_gist.
Tom Lane [Thu, 7 Feb 2013 23:22:19 +0000 (18:22 -0500)]
Fix erroneous range-union logic for varlena types in contrib/btree_gist.

gbt_var_bin_union() failed to do the right thing when the existing range
needed to be widened at both ends rather than just one end.  This could
result in an invalid index in which keys that are present would not be
found by searches, because the searches would not think they need to
descend to the relevant leaf pages.  This error affected all the varlena
datatypes supported by btree_gist (text, bytea, bit, numeric).

Per investigation of a trouble report from Tomas Vondra.  (There is also
an issue in gbt_var_penalty(), but that should only result in inefficiency
not wrong answers.  I'm committing this separately so that we have a git
state in which it can be tested that bad penalty results don't produce
invalid indexes.)  Back-patch to all supported branches.

11 years agoRepair bugs in GiST page splitting code for multi-column indexes.
Tom Lane [Thu, 7 Feb 2013 22:44:02 +0000 (17:44 -0500)]
Repair bugs in GiST page splitting code for multi-column indexes.

When considering a non-last column in a multi-column GiST index,
gistsplit.c tries to improve on the split chosen by the opclass-specific
pickSplit function by considering penalties for the next column.  However,
there were two bugs in this code: it failed to recompute the union keys for
the leftmost index columns, even though these might well change after
reassigning tuples; and it included the old union keys in the recomputation
for the columns it did recompute, so that those keys couldn't get smaller
even if they should.  The first problem could result in an invalid index
in which searches wouldn't find index entries that are in fact present;
the second would make the index less efficient to search.

Both of these errors were caused by misuse of gistMakeUnionItVec, whose
API was designed in a way that just begged such errors to be made.  There
is no situation in which it's safe or useful to compute the union keys for
a subset of the index columns, and there is no caller that wants any
previous union keys to be included in the computation; so the undocumented
choice to treat the union keys as in/out rather than pure output parameters
is a waste of code as well as being dangerous.

Hence, rather than just making a minimal patch, I've changed the API of
gistMakeUnionItVec to remove the "startkey" parameter (it now always
processes all index columns) and treat the attr/isnull arrays as purely
output parameters.

In passing, also get rid of a couple of unnecessary and dangerous uses
of static variables in gistutil.c.  It's remarkable that the one in
gistMakeUnionKey hasn't given us portability troubles before now, because
in addition to posing a re-entrancy hazard, it was unsafely assuming that
a static char[] array would have at least Datum alignment.

Per investigation of a trouble report from Tomas Vondra.  (There are also
some bugs in contrib/btree_gist to be fixed, but that seems like material
for a separate patch.)  Back-patch to all supported branches.

11 years agoFix possible failure to send final transaction counts to stats collector.
Tom Lane [Thu, 7 Feb 2013 19:44:00 +0000 (14:44 -0500)]
Fix possible failure to send final transaction counts to stats collector.

Normally, we suppress sending a tabstats message to the collector unless
there were some actual table stats to send.  However, during backend exit
we should force out the message if there are any transaction commit/abort
counts to send, else the session's last few commit/abort counts will never
get reported at all.  We had logic for this, but the short-circuit test
at the top of pgstat_report_stat() ignored the "force" flag, with the
consequence that session-ending transactions that touched no database-local
tables would not get counted.  Seems to be an oversight in my commit
641912b4d17fd214a5e5bae4e7bb9ddbc28b144b, which added the "force" flag.
That was back in 8.3, so back-patch to all supported versions.

11 years agoRely only on checkpoint 1 at end of recovery.
Simon Riggs [Thu, 7 Feb 2013 16:33:05 +0000 (16:33 +0000)]
Rely only on checkpoint 1 at end of recovery.
Searching for checkpoint 2 (previous) is not
correct in all cases.

Bug report from Heikki Linnakangas

11 years agoEnable building with Microsoft Visual Studio 2012.
Andrew Dunstan [Wed, 6 Feb 2013 19:52:29 +0000 (14:52 -0500)]
Enable building with Microsoft Visual Studio 2012.

Backpatch to release 9.2

Brar Piening and Noah Misch, reviewed by Craig Ringer.

11 years agoSplit out list of XLog resource managers
Alvaro Herrera [Tue, 5 Feb 2013 20:21:29 +0000 (17:21 -0300)]
Split out list of XLog resource managers

The new rmgrlist.h header, containing all necessary data
about built-in resource managers, allows other pieces of code to
access them.

In particular, this allows a future pg_xlogdump program to extract
rm_desc function pointers, without having to keep a duplicate list of
them.

11 years agoImprove error message wording
Alvaro Herrera [Wed, 6 Feb 2013 01:46:26 +0000 (22:46 -0300)]
Improve error message wording

The wording changes applied in 0ac5ad513 were universally disliked.

Per gripe from Andrew Dunstan

11 years agoPrevent execution of enum_recv() from SQL.
Tom Lane [Mon, 4 Feb 2013 21:25:01 +0000 (16:25 -0500)]
Prevent execution of enum_recv() from SQL.

This function was misdeclared to take cstring when it should take internal.
This at least allows crashing the server, and in principle an attacker
might be able to use the function to examine the contents of server memory.

The correct fix is to adjust the system catalog contents (and fix the
regression tests that should have caught this but failed to).  However,
asking users to correct the catalog contents in existing installations
is a pain, so as a band-aid fix for the back branches, install a check
in enum_recv() to make it throw error if called with a cstring argument.
We will later revert this in HEAD in favor of correcting the catalogs.

Our thanks to Sumit Soni (via Secunia SVCRP) for reporting this issue.

Security: CVE-2013-0255

11 years agoUpdate release notes for 9.2.3, 9.1.8, 9.0.12, 8.4.16, 8.3.23.
Tom Lane [Mon, 4 Feb 2013 20:50:42 +0000 (15:50 -0500)]
Update release notes for 9.2.3, 9.1.8, 9.0.12, 8.4.16, 8.3.23.

11 years agoReset vacuum_defer_cleanup_age to PGC_SIGHUP.
Simon Riggs [Mon, 4 Feb 2013 16:39:55 +0000 (16:39 +0000)]
Reset vacuum_defer_cleanup_age to PGC_SIGHUP.
Revert commit 84725aa5efe11688633b553e58113efce4181f2e

11 years agoReset master xmin when hot_standby_feedback disabled.
Simon Riggs [Mon, 4 Feb 2013 10:29:22 +0000 (10:29 +0000)]
Reset master xmin when hot_standby_feedback disabled.
If walsender has xmin of standby then ensure we
reset the value to 0 when we change from hot_standby_feedback=on
to hot_standby_feedback=off.

11 years agoPerform line wrapping and indenting by default in ruleutils.c.
Tom Lane [Sun, 3 Feb 2013 20:56:45 +0000 (15:56 -0500)]
Perform line wrapping and indenting by default in ruleutils.c.

This patch changes pg_get_viewdef() and allied functions so that
PRETTY_INDENT processing is always enabled.  Per discussion, only the
PRETTY_PAREN processing (that is, stripping of "unnecessary" parentheses)
poses any real forward-compatibility risk, so we may as well make dump
output look as nice as we safely can.

Also, set the default wrap length to zero (i.e, wrap after each SELECT
or FROM list item), since there's no very principled argument for the
former default of 80-column wrapping, and most people seem to agree this
way looks better.

Marko Tiikkaja, reviewed by Jeevan Chalke, further hacking by Tom Lane

11 years agoPL/Python: Add result object str handler
Peter Eisentraut [Sun, 3 Feb 2013 05:31:01 +0000 (00:31 -0500)]
PL/Python: Add result object str handler

This is intended so that say plpy.debug(rv) prints something useful for
debugging query execution results.

reviewed by Steve Singer

11 years agoCreate a psql command \gset to store query results into psql variables.
Tom Lane [Sat, 2 Feb 2013 22:06:38 +0000 (17:06 -0500)]
Create a psql command \gset to store query results into psql variables.

This eases manipulation of query results in psql scripts.

Pavel Stehule, reviewed by Piyush Newe, Shigeru Hanada, and Tom Lane

11 years agoPrevent "\g filename" from affecting subsequent commands after an error.
Tom Lane [Sat, 2 Feb 2013 19:21:24 +0000 (14:21 -0500)]
Prevent "\g filename" from affecting subsequent commands after an error.

In the previous coding, psql's state variable saying that output should
go to a file was only reset after successful completion of a query
returning tuples.  Thus for example,

regression=# select 1/0
regression-# \g somefile
ERROR:  division by zero
regression=# select 1/2;
regression=#

... huh, I wonder where that output went.  Even more oddly, the state
was not reset even if it's the file that's causing the failure:

regression=# select 1/2 \g /foo
/foo: Permission denied
regression=# select 1/2;
/foo: Permission denied
regression=# select 1/2;
/foo: Permission denied

This seems to me not to satisfy the principle of least surprise.
\g is certainly not documented in a way that suggests its effects are
at all persistent.

To fix, adjust the code so that the flag is reset at exit from SendQuery
no matter what happened.

Noted while reviewing the \gset patch, which had comparable issues.
Arguably this is a bug fix, but I'll refrain from back-patching for now.

11 years agoMark vacuum_defer_cleanup_age as PGC_POSTMASTER.
Simon Riggs [Sat, 2 Feb 2013 18:49:54 +0000 (18:49 +0000)]
Mark vacuum_defer_cleanup_age as PGC_POSTMASTER.

Following bug analysis of #7819 by Tom Lane

11 years agoAdjust COPY FREEZE error message to be more accurate and consistent.
Bruce Momjian [Sat, 2 Feb 2013 17:56:14 +0000 (12:56 -0500)]
Adjust COPY FREEZE error message to be more accurate and consistent.

Per suggestions from Noah and Tom.

11 years agodoc: Tiny whitespace fix
Peter Eisentraut [Sat, 2 Feb 2013 02:44:22 +0000 (21:44 -0500)]
doc: Tiny whitespace fix

11 years agoMove Assert() definitions to c.h
Alvaro Herrera [Fri, 1 Feb 2013 20:50:04 +0000 (17:50 -0300)]
Move Assert() definitions to c.h

This way, they can be used by frontend and backend code.  We already
supported that, but doing it this way allows us to mix true frontend
files with backend files compiled in frontend environment.

Author: Andres Freund

11 years agoFix typo in freeze_table_age implementation
Alvaro Herrera [Fri, 1 Feb 2013 15:00:40 +0000 (12:00 -0300)]
Fix typo in freeze_table_age implementation

The original code used freeze_min_age instead of freeze_table_age.  The
main consequence of this mistake is that lowering freeze_min_age would
cause full-table scans to occur much more frequently, which causes
serious issues because the number of writes required is much larger.
That feature (freeze_min_age) is supposed to affect only how soon tuples
are frozen; some pages should still be skipped due to the visibility
map.

Backpatch to 8.4, where the freeze_table_age feature was introduced.

Report and patch from Andres Freund

11 years agoFill tuple before HeapSatisfiesHOTAndKeyUpdate
Alvaro Herrera [Fri, 1 Feb 2013 13:43:09 +0000 (10:43 -0300)]
Fill tuple before HeapSatisfiesHOTAndKeyUpdate

Failing to do this results in almost all updates to system catalogs
being non-HOT updates, because the OID column would differ (not having
been set for the new tuple), which is an indexed column.

While at it, make sure to set the tableoid early in both old and new
tuples as well.  This isn't of much consequence, since that column is
seldom (never?) indexed.

Report and patch from Andres Freund.

11 years agoAdd CREATE RECURSIVE VIEW syntax
Peter Eisentraut [Fri, 1 Feb 2013 03:31:58 +0000 (22:31 -0500)]
Add CREATE RECURSIVE VIEW syntax

This is specified in the SQL standard.  The CREATE RECURSIVE VIEW
specification is transformed into a normal CREATE VIEW statement with a
WITH RECURSIVE clause.

reviewed by Abhijit Menon-Sen and Stephen Frost

11 years agoPL/Tcl: Fix compiler warnings with Tcl 8.6
Peter Eisentraut [Fri, 1 Feb 2013 03:08:53 +0000 (22:08 -0500)]
PL/Tcl: Fix compiler warnings with Tcl 8.6

Some constification was added in the Tcl APIs, so add the modifiers in
PL/Tcl as well.

11 years agoRestrict infomask bits to set on multixacts
Alvaro Herrera [Thu, 31 Jan 2013 22:12:35 +0000 (19:12 -0300)]
Restrict infomask bits to set on multixacts

We must only set the bit(s) for the strongest lock held in the tuple;
otherwise, a multixact containing members with exclusive lock and
key-share lock will behave as though only a share lock is held.

This bug was introduced in commit 0ac5ad5134, somewhere along
development, when we allowed a singleton FOR SHARE lock to be
implemented without a MultiXact by using a multi-bit pattern.
I overlooked that GetMultiXactIdHintBits() needed to be tweaked as well.
Previously, we could have the bits for FOR KEY SHARE and FOR UPDATE
simultaneously set and it wouldn't cause a problem.

Per report from digoal@126.com

11 years agopgrowlocks: fix bogus lock strength output
Alvaro Herrera [Thu, 31 Jan 2013 22:11:34 +0000 (19:11 -0300)]
pgrowlocks: fix bogus lock strength output

Per report from digoal@126.com

11 years agopg_upgrade docs: mention modification of postgresql.conf in new cluster
Bruce Momjian [Thu, 31 Jan 2013 21:32:35 +0000 (16:32 -0500)]
pg_upgrade docs: mention modification of postgresql.conf in new cluster

Mention it might be necessary to modify postgresql.conf in the new
cluster to match the old cluster.

Backpatch to 9.2.

Suggested by user.

11 years agoSwitch timelines if we crash soon after promotion.
Simon Riggs [Thu, 31 Jan 2013 19:29:32 +0000 (19:29 +0000)]
Switch timelines if we crash soon after promotion.
Previous patch to skip checkpoints at end of recovery didn't
correctly perform crash recovery, fumbling the timeline switch.
Now we record the minRecoveryPointTLI of the newly selected
timeline, so that we crash recover to the correct timeline.

Bug report from Fujii Masao, investigated by me.

11 years agoReject nonzero day fields in AT TIME ZONE INTERVAL functions.
Tom Lane [Thu, 31 Jan 2013 17:12:23 +0000 (12:12 -0500)]
Reject nonzero day fields in AT TIME ZONE INTERVAL functions.

It's not sensible for an interval that's used as a time zone value to be
larger than a day.  When we changed the interval type to contain a separate
day field, check_timezone() was adjusted to reject nonzero day values, but
timetz_izone(), timestamp_izone(), and timestamptz_izone() evidently were
overlooked.

While at it, make the error messages for these three cases consistent.

11 years agoProperly zero-pad the day-of-year part of the win32 build number
Magnus Hagander [Thu, 31 Jan 2013 14:03:24 +0000 (15:03 +0100)]
Properly zero-pad the day-of-year part of the win32 build number

This ensure the version number increases over time. The first three digits
in the version number is still set to the actual PostgreSQL version
number, but the last one is intended to be an ever increasing build number,
which previosly failed when it changed between 1, 2 and 3 digits long values.

Noted by Deepak

11 years agoAdd --aggregate-interval option.
Tatsuo Ishii [Thu, 31 Jan 2013 06:53:58 +0000 (15:53 +0900)]
Add --aggregate-interval option.

The new option specifies length of aggregation interval (in
seconds). May be used only together with -l. With this option, the log
contains per-interval summary (number of transactions, min/max latency
and two additional fields useful for variance estimation).

Patch contributed by Tomas Vondra, reviewed by Pavel Stehule. Slight
change by Tatsuo Ishii, suggested by Robert Hass to emit an error
message indicating that the option is not currently supported on
Windows.

11 years agoDon't use spi_priv.h in plpython.
Tom Lane [Thu, 31 Jan 2013 01:11:58 +0000 (20:11 -0500)]
Don't use spi_priv.h in plpython.

There may once have been a reason to violate modularity like that,
but it doesn't appear that there is anymore.

11 years agoFix plpgsql's reporting of plan-time errors in possibly-simple expressions.
Tom Lane [Thu, 31 Jan 2013 01:02:23 +0000 (20:02 -0500)]
Fix plpgsql's reporting of plan-time errors in possibly-simple expressions.

exec_simple_check_plan and exec_eval_simple_expr attempted to call
GetCachedPlan directly.  This meant that if an error was thrown during
planning, the resulting context traceback would not include the line
normally contributed by _SPI_error_callback.  This is already inconsistent,
but just to be really odd, a re-execution of the very same expression
*would* show the additional context line, because we'd already have cached
the plan and marked the expression as non-simple.

The problem is easy to demonstrate in 9.2 and HEAD because planning of a
cached plan doesn't occur at all until GetCachedPlan is done.  In earlier
versions, it could only be an issue if initial planning had succeeded, then
a replan was forced (already somewhat improbable for a simple expression),
and the replan attempt failed.  Since the issue is mainly cosmetic in older
branches anyway, it doesn't seem worth the risk of trying to fix it there.
It is worth fixing in 9.2 since the instability of the context printout can
affect the results of GET STACKED DIAGNOSTICS, as per a recent discussion
on pgsql-novice.

To fix, introduce a SPI function that wraps GetCachedPlan while installing
the correct callback function.  Use this instead of calling GetCachedPlan
directly from plpgsql.

Also introduce a wrapper function for extracting a SPI plan's
CachedPlanSource list.  This lets us stop including spi_priv.h in
pl_exec.c, which was never a very good idea from a modularity standpoint.

In passing, fix a similar inconsistency that could occur in SPI_cursor_open,
which was also calling GetCachedPlan without setting up a context callback.

11 years agoFix grammar for subscripting or field selection from a sub-SELECT result.
Tom Lane [Wed, 30 Jan 2013 19:16:16 +0000 (14:16 -0500)]
Fix grammar for subscripting or field selection from a sub-SELECT result.

Such cases should work, but the grammar failed to accept them because of
our ancient precedence hacks to convince bison that extra parentheses
around a sub-SELECT in an expression are unambiguous.  (Formally, they
*are* ambiguous, but we don't especially care whether they're treated as
part of the sub-SELECT or part of the expression.  Bison cares, though.)
Fix by adding a redundant-looking production for this case.

This is a fine example of why fixing shift/reduce conflicts via
precedence declarations is more dangerous than it looks: you can easily
cause the parser to reject cases that should work.

This has been wrong since commit 3db4056e22b0c6b2adc92543baf8408d2894fe91
or maybe before, and apparently some people have been working around it
by inserting no-op casts.  That method introduces a dump/reload hazard,
as illustrated in bug #7838 from Jan Mate.  Hence, back-patch to all
active branches.

11 years agopg_regress: Allow overriding diff options
Peter Eisentraut [Wed, 30 Jan 2013 03:58:38 +0000 (22:58 -0500)]
pg_regress: Allow overriding diff options

By setting the environment variable PG_REGRESS_DIFF_OPTS, custom diff
options can be passed.

reviewed by Jeevan Chalke

11 years agoentab: Fix some compiler warnings
Peter Eisentraut [Wed, 30 Jan 2013 03:21:21 +0000 (22:21 -0500)]
entab: Fix some compiler warnings

11 years agoProvide database object names as separate fields in error messages.
Tom Lane [Tue, 29 Jan 2013 22:06:26 +0000 (17:06 -0500)]
Provide database object names as separate fields in error messages.

This patch addresses the problem that applications currently have to
extract object names from possibly-localized textual error messages,
if they want to know for example which index caused a UNIQUE_VIOLATION
failure.  It adds new error message fields to the wire protocol, which
can carry the name of a table, table column, data type, or constraint
associated with the error.  (Since the protocol spec has always instructed
clients to ignore unrecognized field types, this should not create any
compatibility problem.)

Support for providing these new fields has been added to just a limited set
of error reports (mainly, those in the "integrity constraint violation"
SQLSTATE class), but we will doubtless add them to more calls in future.

Pavel Stehule, reviewed and extensively revised by Peter Geoghegan, with
additional hacking by Tom Lane.

11 years agoAllow pgbench to use a scale larger than 21474.
Heikki Linnakangas [Tue, 29 Jan 2013 09:49:40 +0000 (11:49 +0200)]
Allow pgbench to use a scale larger than 21474.

Beyond 21474, the number of accounts exceed the range for int4. Change the
initialization code to use bigint for account id columns when scale is large
enough, and switch to using int64s for the variables in pgbench code. The
threshold where we switch to bigints is set at 20000, because that's easier
to remember and document than 21474, and ensures that there is some headroom
when int4s are used.

Greg Smith, with various changes by Euler Taveira de Oliveira, Gurjeet
Singh and Satoshi Nagayasu.

11 years agoSkip truncating ON COMMIT DELETE ROWS temp tables, if the transaction hasn't
Heikki Linnakangas [Tue, 29 Jan 2013 08:40:22 +0000 (10:40 +0200)]
Skip truncating ON COMMIT DELETE ROWS temp tables, if the transaction hasn't
touched any temporary tables.

We could try harder, and keep track of whether we've inserted to any temp
tables, rather than accessed them, and which temp tables have been inserted
to. But this is dead simple, and already covers many interesting scenarios.

11 years agoFast promote mode skips checkpoint at end of recovery.
Simon Riggs [Tue, 29 Jan 2013 00:06:15 +0000 (00:06 +0000)]
Fast promote mode skips checkpoint at end of recovery.
pg_ctl promote -m fast will skip the checkpoint at end of recovery so that we
can achieve very fast failover when the apply delay is low. Write new WAL record
XLOG_END_OF_RECOVERY to allow us to switch timeline correctly for downstream log
readers. If we skip synchronous end of recovery checkpoint we request a normal
spread checkpoint so that the window of re-recovery is low.

Simon Riggs and Kyotaro Horiguchi, with input from Fujii Masao.
Review by Heikki Linnakangas

11 years agoREASSIGN OWNED: handle shared objects, too
Alvaro Herrera [Mon, 28 Jan 2013 21:03:23 +0000 (18:03 -0300)]
REASSIGN OWNED: handle shared objects, too

Give away ownership of shared objects (databases, tablespaces) along
with local objects, per original code intention.  Try to make the
documentation clearer, too.

Per discussion about DROP OWNED's brokenness, in bug #7748.

This is not backpatched because it'd require some refactoring of the
ALTER/SET OWNER code for databases and tablespaces.

11 years agoDROP OWNED: don't try to drop tablespaces/databases
Alvaro Herrera [Mon, 28 Jan 2013 20:46:47 +0000 (17:46 -0300)]
DROP OWNED: don't try to drop tablespaces/databases

My "fix" for bugs #7578 and #6116 on DROP OWNED at fe3b5eb08a1 not only
misstated that it applied to REASSIGN OWNED (which it did not affect),
but it also failed to fix the problems fully, because I didn't test the
case of owned shared objects.  Thus I created a new bug, reported by
Thomas Kellerer as #7748, which would cause DROP OWNED to fail with a
not-for-user-consumption error message.  The code would attempt to drop
the database, which not only fails to work because the underlying code
does not support that, but is a pretty dangerous and undesirable thing
to be doing as well.

This patch fixes that bug by having DROP OWNED only attempt to process
shared objects when grants on them are found, ignoring ownership.

Backpatch to 8.3, which is as far as the previous bug was backpatched.

11 years agoHandle SPIErrors raised directly in PL/Python code.
Heikki Linnakangas [Mon, 28 Jan 2013 07:40:20 +0000 (09:40 +0200)]
Handle SPIErrors raised directly in PL/Python code.

If a PL/Python function raises an SPIError (or one if its subclasses)
directly with python's raise statement, treat it the same as an SPIError
generated internally. In particular, if the user sets the sqlstate
attribute, preserve that.

Oskari Saarenmaa and Jan Urbański, reviewed by Karl O. Pinc.

11 years agoMade ecpglib use translated messages.
Michael Meskes [Sun, 27 Jan 2013 12:48:12 +0000 (13:48 +0100)]
Made ecpglib use translated messages.

Bug reported and fixed by Chen Huajun <chenhj@cn.fujitsu.com>.