]> granicus.if.org Git - postgresql/log
postgresql
12 years agoPL/pgSQL RETURN NEXT was leaking converted tuples, causing
Joe Conway [Thu, 10 May 2012 05:57:19 +0000 (22:57 -0700)]
PL/pgSQL RETURN NEXT was leaking converted tuples, causing
out of memory when looping through large numbers of rows.
Flag the converted tuples to be freed. Complaint and patch
by Joe.

12 years agoImprove tests for postmaster death in auxiliary processes.
Tom Lane [Thu, 10 May 2012 04:54:32 +0000 (00:54 -0400)]
Improve tests for postmaster death in auxiliary processes.

In checkpointer and walwriter, avoid calling PostmasterIsAlive unless
WaitLatch has reported WL_POSTMASTER_DEATH.  This saves a kernel call per
iteration of the process's outer loop, which is not all that much, but a
cycle shaved is a cycle earned.  I had already removed the unconditional
PostmasterIsAlive calls in bgwriter and pgstat in previous patches, but
forgot that WL_POSTMASTER_DEATH is supposed to be treated as untrustworthy
(per comment in unix_latch.c); so adjust those two cases to match.

There are a few other places where the same idea might be applied, but only
after substantial code rearrangement, so I didn't bother.

12 years agoUpdate 9.2 SSL release note links.
Bruce Momjian [Thu, 10 May 2012 04:32:08 +0000 (00:32 -0400)]
Update 9.2 SSL release note links.

12 years agoFurther tweaking of nomenclature in checkpointer.c.
Tom Lane [Thu, 10 May 2012 04:01:10 +0000 (00:01 -0400)]
Further tweaking of nomenclature in checkpointer.c.

Get rid of some more naming choices that only make sense if you know that
this code used to be in the bgwriter, as well as some stray comments
referencing the bgwriter.

12 years agoImprove control logic for bgwriter hibernation mode.
Tom Lane [Thu, 10 May 2012 03:36:01 +0000 (23:36 -0400)]
Improve control logic for bgwriter hibernation mode.

Commit 6d90eaaa89a007e0d365f49d6436f35d2392cfeb added a hibernation mode
to the bgwriter to reduce the server's idle-power consumption.  However,
its interaction with the detailed behavior of BgBufferSync's feedback
control loop wasn't very well thought out.  That control loop depends
primarily on the rate of buffer allocation, not the rate of buffer
dirtying, so the hibernation mode has to be designed to operate only when
no new buffer allocations are happening.  Also, the check for whether the
system is effectively idle was not quite right and would fail to detect
a constant low level of activity, thus allowing the bgwriter to go into
hibernation mode in a way that would let the cycle time vary quite a bit,
possibly further confusing the feedback loop.  To fix, move the wakeup
support from MarkBufferDirty and SetBufferCommitInfoNeedsSave into
StrategyGetBuffer, and prevent the bgwriter from entering hibernation mode
unless no buffer allocations have happened recently.

In addition, fix the delaying logic to remove the problem of possibly not
responding to signals promptly, which was basically caused by trying to use
the process latch's is_set flag for multiple purposes.  I can't prove it
but I'm suspicious that that hack was responsible for the intermittent
"postmaster does not shut down" failures we've been seeing in the buildfarm
lately.  In any case it did nothing to improve the readability or
robustness of the code.

In passing, express the hibernation sleep time as a multiplier on
BgWriterDelay, not a constant.  I'm not sure whether there's any value in
exposing the longer sleep time as an independently configurable setting,
but we can at least make it act like this for little extra code.

12 years agoPublish draft version of Postgres 9.2 release notes.
Bruce Momjian [Thu, 10 May 2012 02:25:43 +0000 (22:25 -0400)]
Publish draft version of Postgres 9.2 release notes.

12 years agoAdd make dependency so that postgres.bki is rebuilt in major version change
Peter Eisentraut [Wed, 9 May 2012 17:45:56 +0000 (20:45 +0300)]
Add make dependency so that postgres.bki is rebuilt in major version change

Every time since the current rule for postgres.bki was put in place
when we change the major version, people complain that their tests
fail in strange ways.  This is because the version number in
postgres.bki is not updated, because it has no dependency for that.
And you can't even force the rebuild manually if you don't happen to
know which file has the problem.  Fix that now before it will happen
again.

The only remaining problem with switching major versions, as far as
the regression tests are concerned, is that contrib needs to be
rebuilt.  But that's easily invoked, and in any case the failure modes
are more friendly if you forget that.

12 years agoSplit contrib documentation into extensions and programs
Peter Eisentraut [Wed, 9 May 2012 17:39:53 +0000 (20:39 +0300)]
Split contrib documentation into extensions and programs

Create separate appendixes for contrib extensions and other server
plugins on the one hand, and utility programs on the other.  Recast
the documentation of the latter as refentries, so that man pages are
generated.

12 years agoUpdate documentation to say that gmake check in contrib is supported
Peter Eisentraut [Wed, 9 May 2012 17:37:09 +0000 (20:37 +0300)]
Update documentation to say that gmake check in contrib is supported

12 years agoRename BgWriterShmem/Request to CheckpointerShmem/Request
Simon Riggs [Wed, 9 May 2012 13:23:45 +0000 (14:23 +0100)]
Rename BgWriterShmem/Request to CheckpointerShmem/Request

12 years agoRename BgWriterCommLock to CheckpointerCommLock
Simon Riggs [Wed, 9 May 2012 13:11:48 +0000 (14:11 +0100)]
Rename BgWriterCommLock to CheckpointerCommLock

12 years agoAvoid xid error from age() function when run on Hot Standby
Simon Riggs [Wed, 9 May 2012 12:56:24 +0000 (13:56 +0100)]
Avoid xid error from age() function when run on Hot Standby

12 years agoAdd another URL for HTML entity codes.
Bruce Momjian [Wed, 9 May 2012 03:17:43 +0000 (23:17 -0400)]
Add another URL for HTML entity codes.

12 years agoFix an issue in recent walwriter hibernation patch.
Tom Lane [Wed, 9 May 2012 03:05:58 +0000 (23:05 -0400)]
Fix an issue in recent walwriter hibernation patch.

Users of asynchronous-commit mode expect there to be a guaranteed maximum
delay before an async commit's WAL records get flushed to disk.  The
original version of the walwriter hibernation patch broke that.  Add an
extra shared-memory flag to allow async commits to kick the walwriter out
of hibernation mode, without adding any noticeable overhead in cases where
no action is needed.

12 years agoDocument how to find non-ASCII characters in the release notes.
Bruce Momjian [Wed, 9 May 2012 02:51:17 +0000 (22:51 -0400)]
Document how to find non-ASCII characters in the release notes.

12 years agoReduce idle power consumption of stats collector process.
Tom Lane [Wed, 9 May 2012 01:26:46 +0000 (21:26 -0400)]
Reduce idle power consumption of stats collector process.

Latch-ify the stats collector, so that it does not need an arbitrary wakeup
cycle to check for postmaster death.  The incremental savings in idle power
is pretty marginal, since we only had it waking every two seconds; but I
believe that this patch may also improve the collector's performance under
load, by reducing the number of kernel calls made per message when messages
are arriving constantly (we now avoid a select/poll call except when we
need to sleep).  The change also reduces the time needed for a normal
database shutdown on platforms where signals don't interrupt select().

12 years agoReduce idle power consumption of walwriter and checkpointer processes.
Tom Lane [Wed, 9 May 2012 00:03:26 +0000 (20:03 -0400)]
Reduce idle power consumption of walwriter and checkpointer processes.

This patch modifies the walwriter process so that, when it has not found
anything useful to do for many consecutive wakeup cycles, it extends its
sleep time to reduce the server's idle power consumption.  It reverts to
normal as soon as it's done any successful flushes.  It's still true that
during any async commit, backends check for completed, unflushed pages of
WAL and signal the walwriter if there are any; so that in practice the
walwriter can get awakened and returned to normal operation sooner than the
sleep time might suggest.

Also, improve the checkpointer so that it uses a latch and a computed delay
time to not wake up at all except when it has something to do, replacing a
previous hardcoded 0.5 sec wakeup cycle.  This also is primarily useful for
reducing the server's power consumption when idle.

In passing, get rid of the dedicated latch for signaling the walwriter in
favor of using its procLatch, since that comports better with possible
generic signal handlers using that latch.  Also, fix a pre-existing bug
with failure to save/restore errno in walwriter's signal handlers.

Peter Geoghegan, somewhat simplified by Tom

12 years agoTweak contrib --help output to match common style
Peter Eisentraut [Tue, 8 May 2012 18:55:05 +0000 (21:55 +0300)]
Tweak contrib --help output to match common style

Placeholders such as OPTION are typically kept in singular.

12 years agopsql: Add variable to control keyword case in tab completion
Peter Eisentraut [Tue, 8 May 2012 18:03:45 +0000 (21:03 +0300)]
psql: Add variable to control keyword case in tab completion

This adds the variable COMP_KEYWORD_CASE, which controls in what case
keywords are completed.  This is partially to let users configure the
change from commit 69f4f1c3576abc535871c6cfa95539e32a36120f, but it
also offers more behaviors than were available before.

12 years agoUpdate config.guess and config.sub
Peter Eisentraut [Tue, 8 May 2012 17:46:13 +0000 (20:46 +0300)]
Update config.guess and config.sub

12 years agoFix dependency tracking for src/port/%_srv.o files
Peter Eisentraut [Tue, 8 May 2012 17:08:53 +0000 (20:08 +0300)]
Fix dependency tracking for src/port/%_srv.o files

Because they use their own compilation rule, they don't use the
dependency tracking logic from Makefile.global.  To make sure that
dependency tracking works anyway for the *_srv.o files, depend on
their *.o siblings as well, which do have proper dependencies.  It's a
hack that might fail someday if there is a *_srv.o without a
corresponding *.o, but it works for now (and those would probably go
into src/backend/port/ anyway).

12 years agoFix misleading comments
Peter Eisentraut [Tue, 8 May 2012 16:35:22 +0000 (19:35 +0300)]
Fix misleading comments

Josh Kupershmidt

12 years agoRemove strdup, strtol, strtoul from libpgport
Peter Eisentraut [Mon, 7 May 2012 20:10:28 +0000 (23:10 +0300)]
Remove strdup, strtol, strtoul from libpgport

These should not be needed anymore, at least after the recent port
removals.  So let's see whether we can do without them.

12 years agoFix pg_config.h make rule
Peter Eisentraut [Mon, 7 May 2012 18:28:38 +0000 (21:28 +0300)]
Fix pg_config.h make rule

According to the Autoconf documentation, there should be a make rule

pg_config.h: stamp-h

so that with the right setup around this, a change in pg_config.h.in
will trigger a rebuild of everything that depends on pg_config.h.  But
this doesn't always work, sometimes you need to run make twice to get
everything up to date after a change of pg_config.h.in.

The fix is to write the rule as

pg_config.h: stamp-h ;

instead (with an empty command instead of no command).  This is what
Automake-generated makefiles effectively do, so it seems safe to be on
this side.

It's not actually clear why this is (apparently) more correct.  It's
been posted to
<http://lists.gnu.org/archive/html/help-make/2012-04/msg00058.html>
without response so far.

12 years agoMake "unexpected EOF" messages DEBUG1 unless in an open transaction
Magnus Hagander [Mon, 7 May 2012 16:39:37 +0000 (18:39 +0200)]
Make "unexpected EOF" messages DEBUG1 unless in an open transaction

"Unexpected EOF on client connection" without an open transaction
is mostly noise, so turn it into DEBUG1. With an open transaction it's
still indicating a problem, so keep those as ERROR, and change the message
to indicate that it happened in a transaction.

12 years agoDocument that it is the pgsql version we are matching for psqlrc
Bruce Momjian [Mon, 7 May 2012 01:43:55 +0000 (21:43 -0400)]
Document that it is the pgsql version we are matching for psqlrc
version-specific files, not the server version.

12 years agoRevert typo fix 768c3affd44d1dcb4e43e2e006c642524714c2a4; I was wrong.
Bruce Momjian [Sun, 6 May 2012 12:10:55 +0000 (08:10 -0400)]
Revert typo fix 768c3affd44d1dcb4e43e2e006c642524714c2a4;  I was wrong.

12 years agoFix psql doc typo.
Bruce Momjian [Sat, 5 May 2012 15:59:53 +0000 (11:59 -0400)]
Fix psql doc typo.

12 years agoOverdue code review for transaction-level advisory locks patch.
Tom Lane [Fri, 4 May 2012 21:43:27 +0000 (17:43 -0400)]
Overdue code review for transaction-level advisory locks patch.

Commit 62c7bd31c8878dd45c9b9b2429ab7a12103f3590 had assorted problems, most
visibly that it broke PREPARE TRANSACTION in the presence of session-level
advisory locks (which should be ignored by PREPARE), as per a recent
complaint from Stephen Rees.  More abstractly, the patch made the
LockMethodData.transactional flag not merely useless but outright
dangerous, because in point of fact that flag no longer tells you anything
at all about whether a lock is held transactionally.  This fix therefore
removes that flag altogether.  We now rely entirely on the convention
already in use in lock.c that transactional lock holds must be owned by
some ResourceOwner, while session holds are never so owned.  Setting the
locallock struct's owner link to NULL thus denotes a session hold, and
there is no redundant marker for that.

PREPARE TRANSACTION now works again when there are session-level advisory
locks, and it is also able to transfer transactional advisory locks to the
prepared transaction, but for implementation reasons it throws an error if
we hold both types of lock on a single lockable object.  Perhaps it will be
worth improving that someday.

Assorted other minor cleanup and documentation editing, as well.

Back-patch to 9.1, except that in the 9.1 branch I did not remove the
LockMethodData.transactional flag for fear of causing an ABI break for
any external code that might be examining those structs.

12 years agodoc: Fix for too many brackets in command synopses on man pages
Peter Eisentraut [Thu, 3 May 2012 19:50:04 +0000 (22:50 +0300)]
doc: Fix for too many brackets in command synopses on man pages

The default for the choice attribute of the <arg> element is "opt",
which would normally put the argument inside brackets.  But the DSSSL
stylesheets contain a hack that treats <arg> directly inside <group>
specially, so that <group><arg>-x</arg><arg>-y</arg></group> comes out
as [ -x | -y ] rather than [ [-x] | [-y] ], which it would technically
be.  But when building man pages, this doesn't work, and so the
command synopses on the man pages contain lots of extra brackets.

By putting choice="opt" or choice="plain" explicitly on every <arg>
and <group> element, we avoid any toolchain dependencies like that,
and it also makes it clearer in the source code what is meant.

In passing, make some small corrections in the documentation about
which arguments are really optional or not.

12 years agoRemove BSD/OS (BSDi) port. There are no known users upgrading to
Bruce Momjian [Thu, 3 May 2012 14:58:44 +0000 (10:58 -0400)]
Remove BSD/OS (BSDi) port.  There are no known users upgrading to
Postgres 9.2, and perhaps no existing users either.

12 years agoMark git_changelog examples with the proper executable names.
Bruce Momjian [Thu, 3 May 2012 00:42:21 +0000 (20:42 -0400)]
Mark git_changelog examples with the proper executable names.

12 years agoAdd missing parenthesis in comment.
Robert Haas [Wed, 2 May 2012 18:30:58 +0000 (14:30 -0400)]
Add missing parenthesis in comment.

12 years agoPL/Python: Improve test coverage
Peter Eisentraut [Wed, 2 May 2012 18:09:03 +0000 (21:09 +0300)]
PL/Python: Improve test coverage

Add test cases for inline handler of plython2u (when using that
language name), and for result object element assignment.  There is
now at least one test case for every top-level functionality, except
plpy.Fatal (annoying to use in regression tests) and result object
slice retrieval and slice assignment (which are somewhat broken).

12 years agoPL/Python: Fix crash in functions returning SETOF and using SPI
Peter Eisentraut [Wed, 2 May 2012 17:59:51 +0000 (20:59 +0300)]
PL/Python: Fix crash in functions returning SETOF and using SPI

Allocate PLyResultObject.tupdesc in TopMemoryContext, because its
lifetime is the lifetime of the Python object and it shouldn't be
freed by some other memory context, such as one controlled by SPI.  We
trust that the Python object will clean up its own memory.

Before, this would crash the included regression test case by trying
to use memory that was already freed.

reported by Asif Naeem, analysis by Tom Lane

12 years agoEven more duplicate word removal, in the spirit of the season
Peter Eisentraut [Wed, 2 May 2012 17:14:39 +0000 (20:14 +0300)]
Even more duplicate word removal, in the spirit of the season

12 years agoAvoid repeated CLOG access from heap_hot_search_buffer.
Robert Haas [Wed, 2 May 2012 16:40:07 +0000 (12:40 -0400)]
Avoid repeated CLOG access from heap_hot_search_buffer.

At the time we check whether the tuple is dead to all running
transactions, we've already verified that it isn't visible to our
scan, setting hint bits if appropriate.  So there's no need to
recheck CLOG for the all-dead test we do just a moment later.
So, add HeapTupleIsSurelyDead() to test the appropriate condition
under the assumption that all relevant hit bits are already set.

Review by Tom Lane.

12 years agoFurther corrections from the department of redundancy department.
Robert Haas [Wed, 2 May 2012 15:11:25 +0000 (11:11 -0400)]
Further corrections from the department of redundancy department.

Thom Brown

12 years agoMore duplicate word removal.
Robert Haas [Wed, 2 May 2012 13:27:34 +0000 (09:27 -0400)]
More duplicate word removal.

12 years agoRemove duplicate words in comments.
Heikki Linnakangas [Wed, 2 May 2012 07:20:27 +0000 (10:20 +0300)]
Remove duplicate words in comments.

Found these with grep -r "for for ".

12 years agoKill some remaining references to SVR4 and univel.
Tom Lane [Wed, 2 May 2012 04:29:17 +0000 (00:29 -0400)]
Kill some remaining references to SVR4 and univel.

Both terms still appear in a few places, but I thought it best to leave
those alone in context.

12 years agoTweak psql to print row counts when \x auto chooses non-expanded output.
Robert Haas [Tue, 1 May 2012 20:03:45 +0000 (16:03 -0400)]
Tweak psql to print row counts when \x auto chooses non-expanded output.

Noah Misch

12 years agoRemove dead ports
Peter Eisentraut [Tue, 1 May 2012 19:11:12 +0000 (22:11 +0300)]
Remove dead ports

Remove the following ports:

- dgux
- nextstep
- sunos4
- svr4
- ultrix4
- univel

These are obsolete and not worth rescuing.  In most cases, there is
circumstantial evidence that they wouldn't work anymore anyway.

12 years agoImprove markup of cmdsynopsis elements
Peter Eisentraut [Mon, 30 Apr 2012 18:15:48 +0000 (21:15 +0300)]
Improve markup of cmdsynopsis elements

Add more markup in particular so that the command options appear
consistently in monospace in the HTML output.

On the vacuumdb reference page, remove listing all the possible
options in the synopsis.  They have become too many now; we have the
detailed options list for that.

12 years agoFix display of <command> elements on man pages
Peter Eisentraut [Mon, 30 Apr 2012 18:12:28 +0000 (21:12 +0300)]
Fix display of <command> elements on man pages

We had changed this from the default bold to monospace for all output
formats, but for man pages, this creates visual inconsistencies, so
revert to the default for man pages.

12 years agoConverge all SQL-level statistics timing values to float8 milliseconds.
Tom Lane [Mon, 30 Apr 2012 18:02:47 +0000 (14:02 -0400)]
Converge all SQL-level statistics timing values to float8 milliseconds.

This patch adjusts the core statistics views to match the decision already
taken for pg_stat_statements, that values representing elapsed time should
be represented as float8 and measured in milliseconds.  By using float8,
we are no longer tied to a specific maximum precision of timing data.
(Internally, it's still microseconds, but we could now change that without
needing changes at the SQL level.)

The columns affected are
pg_stat_bgwriter.checkpoint_write_time
pg_stat_bgwriter.checkpoint_sync_time
pg_stat_database.blk_read_time
pg_stat_database.blk_write_time
pg_stat_user_functions.total_time
pg_stat_user_functions.self_time
pg_stat_xact_user_functions.total_time
pg_stat_xact_user_functions.self_time

The first four of these are new in 9.2, so there is no compatibility issue
from changing them.  The others require a release note comment that they
are now double precision (and can show a fractional part) rather than
bigint as before; also their underlying statistics functions now match
the column definitions, instead of returning bigint microseconds.

12 years agoMark ReThrowError() with attribute noreturn
Peter Eisentraut [Mon, 30 Apr 2012 17:22:28 +0000 (20:22 +0300)]
Mark ReThrowError() with attribute noreturn

All related functions were already so marked.

12 years agoRemove duplicate word in comment.
Robert Haas [Mon, 30 Apr 2012 17:14:46 +0000 (13:14 -0400)]
Remove duplicate word in comment.

Noted by Peter Geoghegan.

12 years agoAdd comments suggesting usage of git_changelog to generate release notes.
Bruce Momjian [Mon, 30 Apr 2012 15:05:34 +0000 (11:05 -0400)]
Add comments suggesting usage of git_changelog to generate release notes.

12 years agoRename I/O timing statistics columns to blk_read_time and blk_write_time.
Tom Lane [Sun, 29 Apr 2012 22:13:33 +0000 (18:13 -0400)]
Rename I/O timing statistics columns to blk_read_time and blk_write_time.

This seems more consistent with the pre-existing choices for names of
other statistics columns.  Rename assorted internal identifiers to match.

12 years agoRename track_iotiming GUC to track_io_timing.
Tom Lane [Sun, 29 Apr 2012 20:23:54 +0000 (16:23 -0400)]
Rename track_iotiming GUC to track_io_timing.

This spelling seems significantly more readable to me.

12 years agoFurther editorialization on the new documentation for statistics views.
Tom Lane [Sun, 29 Apr 2012 19:35:57 +0000 (15:35 -0400)]
Further editorialization on the new documentation for statistics views.

Get rid of the per-column documentation of underlying functions, which did
far more to clutter the view descriptions than it did to be helpful, and
was rather incomplete and typo-ridden anyway.  Instead suggest that people
consult the definitions of the standard views to see the underlying
functions.

The older functions for obtaining individual facts about backends are now
somewhat obsoleted by pg_stat_get_activity, which means that they are not
documented by any standard view.  So I put that information into a separate
table.  (Maybe we should just deprecate them instead?)

In passing, fix a couple more documentation errors.

12 years agoChange return type of ExceptionalCondition to void and mark it noreturn
Peter Eisentraut [Sun, 29 Apr 2012 18:07:35 +0000 (21:07 +0300)]
Change return type of ExceptionalCondition to void and mark it noreturn

In ancient times, it was thought that this wouldn't work because of
TrapMacro/AssertMacro, but changing those to use a comma operator
appears to work without compiler warnings.

12 years agoSimplify makefile rule
Peter Eisentraut [Sun, 29 Apr 2012 17:59:12 +0000 (20:59 +0300)]
Simplify makefile rule

Instead of writing out the .c -> .o rule, use the default one, so that
dependency tracking can be used.

12 years agoMake a copy-editing pass over the new documentation for statistics views.
Tom Lane [Sun, 29 Apr 2012 17:24:44 +0000 (13:24 -0400)]
Make a copy-editing pass over the new documentation for statistics views.

Fix a bunch of typos, improve markup, make wording more uniform, rearrange
some material.  No substantive changes.

12 years agoAdjust timing units in pg_stat_statements.
Tom Lane [Sat, 28 Apr 2012 20:03:57 +0000 (16:03 -0400)]
Adjust timing units in pg_stat_statements.

Display total time and I/O timings in milliseconds, for consistency with
the units used for timings in the core statistics views.  The columns
remain of float8 type, so that sub-msec precision is available.  (At some
point we will probably want to convert the core views to use float8 type
for the same reason, but this patch does not touch that issue.)

This is a release-note-requiring change in the meaning of the total_time
column.  The I/O timing columns are new as of 9.2, so there is no
compatibility impact from redefining them.

Do some minor copy-editing in the documentation, too.

12 years agoClear I/O timing counters after sending them to the stats collector.
Tom Lane [Sat, 28 Apr 2012 19:11:13 +0000 (15:11 -0400)]
Clear I/O timing counters after sending them to the stats collector.

This oversight caused the reported times to accumulate in an O(N^2)
fashion the longer a backend runs.

12 years agoPL/Python: Update list of supported environment variables
Peter Eisentraut [Sat, 28 Apr 2012 10:34:06 +0000 (13:34 +0300)]
PL/Python: Update list of supported environment variables

12 years agoFix printing of whole-row Vars at top level of a SELECT targetlist.
Tom Lane [Fri, 27 Apr 2012 23:49:18 +0000 (19:49 -0400)]
Fix printing of whole-row Vars at top level of a SELECT targetlist.

Normally whole-row Vars are printed as "tabname.*".  However, that does not
work at top level of a targetlist, because per SQL standard the parser will
think that the "*" should result in column-by-column expansion; which is
not at all what a whole-row Var implies.  We used to just print the table
name in such cases, which works most of the time; but it fails if the table
name matches a column name available anywhere in the FROM clause.  This
could lead for instance to a view being interpreted differently after dump
and reload.  Adding parentheses doesn't fix it, but there is a reasonably
simple kluge we can use instead: attach a no-op cast, so that the "*" isn't
syntactically at top level anymore.  This makes the printing of such
whole-row Vars a lot more consistent with other Vars, and may indeed fix
more cases than just the reported one; I'm suspicious that cases involving
schema qualification probably didn't work properly before, either.

Per bug report and fix proposal from Abbas Butt, though this patch is quite
different in detail from his.

Back-patch to all supported versions.

12 years agoAdd options to git_changelog for use in major release note creation:
Bruce Momjian [Fri, 27 Apr 2012 21:15:41 +0000 (17:15 -0400)]
Add options to git_changelog for use in major release note creation:

--details-after
--master-only
--oldest-first

12 years agoFix syslogger's rotation disable/re-enable logic.
Tom Lane [Fri, 27 Apr 2012 04:12:42 +0000 (00:12 -0400)]
Fix syslogger's rotation disable/re-enable logic.

If it fails to open a new log file, the syslogger assumes there's something
wrong with its parameters (such as log_directory), and stops attempting
automatic time-based or size-based log file rotations.  Sending it SIGHUP
is supposed to start that up again.  However, the original coding for that
was really bogus, involving clobbering a couple of GUC variables and hoping
that SIGHUP processing would restore them.  Get rid of that technique in
favor of maintaining a separate flag showing we've turned rotation off.
Per report from Mark Kirkwood.

Also, the syslogger will automatically attempt to create the log_directory
directory if it doesn't exist, but that was only happening at startup.
For consistency and ease of use, it should do the same whenever the value
of log_directory is changed by SIGHUP.

Back-patch to all supported branches.

12 years agoPrevent index-only scans from returning wrong answers under Hot Standby.
Robert Haas [Fri, 27 Apr 2012 00:00:21 +0000 (20:00 -0400)]
Prevent index-only scans from returning wrong answers under Hot Standby.

The alternative of disallowing index-only scans in HS operation was
discussed, but the consensus was that it was better to treat marking
a page all-visible as a recovery conflict for snapshots that could still
fail to see XIDs on that page.  We may in the future try to soften this,
so that we simply force index scans to do heap fetches in cases where
this may be an issue, rather than throwing a hard conflict.

12 years agoImprove documentation around historical calendar rules.
Tom Lane [Thu, 26 Apr 2012 22:28:52 +0000 (18:28 -0400)]
Improve documentation around historical calendar rules.

Get rid of section 8.5.6 (Date/Time Internals), which appears to confuse
people more than it helps, and anyway discussion of Postgres' internal
datetime calculation methods seems pretty out of place here.  Instead,
make datatype.sgml just say that we follow the Gregorian calendar (a bit
of specification not previously present anywhere in that chapter :-()
and link to the History of Units appendix for more info.  Do some mild
editorialization on that appendix, too, to make it clearer that we are
following proleptic Gregorian calendar rules rather than anything more
historically accurate.

Per a question from Florence Cousin and subsequent discussion in
pgsql-docs.

12 years agoFix oversight in recent parameterized-path patch.
Tom Lane [Thu, 26 Apr 2012 18:17:13 +0000 (14:17 -0400)]
Fix oversight in recent parameterized-path patch.

bitmap_scan_cost_est() has to be able to cope with a BitmapOrPath, but
I'd taken a shortcut that didn't work for that case.  Noted by Heikki.
Add some regression tests since this area is evidently under-covered.

12 years agoPL/Python: Accept strings in functions returning composite types
Peter Eisentraut [Thu, 26 Apr 2012 18:03:48 +0000 (21:03 +0300)]
PL/Python: Accept strings in functions returning composite types

Before 9.1, PL/Python functions returning composite types could return
a string and it would be parsed using record_in.  The 9.1 changes made
PL/Python only expect dictionaries, tuples, or objects supporting
getattr as output of composite functions, resulting in a regression
and a confusing error message, as the strings were interpreted as
sequences and the code for transforming lists to database tuples was
used.  Fix this by treating strings separately as before, before
checking for the other types.

The reason why it's important to support string to database tuple
conversion is that trigger functions on tables with composite columns
get the composite row passed in as a string (from record_out).
Without supporting converting this back using record_in, this makes it
impossible to implement pass-through behavior for these columns, as
PL/Python no longer accepts strings for composite values.

A better solution would be to fix the code that transforms composite
inputs into Python objects to produce dictionaries that would then be
correctly interpreted by the Python->PostgreSQL counterpart code.  But
that would be too invasive to backpatch to 9.1, and it is too late in
the 9.2 cycle to attempt it.  It should be revisited in the future,
though.

Reported as bug #6559 by Kirill Simonov.

Jan Urbański

12 years agopsql: Tab completion updates
Peter Eisentraut [Thu, 26 Apr 2012 17:07:40 +0000 (20:07 +0300)]
psql: Tab completion updates

Add/complete support for:

- ALTER DOMAIN / VALIDATE CONSTRAINT
- ALTER DOMAIN / RENAME
- ALTER DOMAIN / RENAME CONSTRAINT
- ALTER TABLE / RENAME CONSTRAINT

12 years agoModify create_index regression test to avoid intermittent failures.
Tom Lane [Thu, 26 Apr 2012 02:57:48 +0000 (22:57 -0400)]
Modify create_index regression test to avoid intermittent failures.

We have been seeing intermittent buildfarm failures due to a query
sometimes not using an index-only scan plan, because a background
auto-ANALYZE prevented the table's all-visible bits from being set
immediately, thereby causing the estimated cost of an index-only scan
to go up considerably.  Adjust the test case so that a bitmap index scan is
preferred instead, which serves equally well for the purpose the test case
is actually meant for.  (Of course, it would be better to eliminate the
interference from auto-ANALYZE, but I see no low-risk way to do that,
so any such fix will have to be left for 9.3 or later.)

12 years agoFix planner's handling of RETURNING lists in writable CTEs.
Tom Lane [Thu, 26 Apr 2012 00:20:33 +0000 (20:20 -0400)]
Fix planner's handling of RETURNING lists in writable CTEs.

setrefs.c failed to do "rtoffset" adjustment of Vars in RETURNING lists,
which meant they were left with the wrong varnos when the RETURNING list
was in a subquery.  That was never possible before writable CTEs, of
course, but now it's broken.  The executor fails to notice any problem
because ExecEvalVar just references the ecxt_scantuple for any normal
varno; but EXPLAIN breaks when the varno is wrong, as illustrated in a
recent complaint from Bartosz Dmytrak.

Since the eventual rtoffset of the subquery is not known at the time
we are preparing its plan node, the previous scheme of executing
set_returning_clause_references() at that time cannot handle this
adjustment.  Fortunately, it turns out that we don't really need to do it
that way, because all the needed information is available during normal
setrefs.c execution; we just have to dig it out of the ModifyTable node.
So, do that, and get rid of the kluge of early setrefs processing of
RETURNING lists.  (This is a little bit of a cheat in the case of inherited
UPDATE/DELETE, because we are not passing a "root" struct that corresponds
exactly to what the subplan was built with.  But that doesn't matter, and
anyway this is less ugly than early setrefs processing was.)

Back-patch to 9.1, where the problem became possible to hit.

12 years agoFix edge-case behavior of pg_next_dst_boundary().
Tom Lane [Wed, 25 Apr 2012 21:25:12 +0000 (17:25 -0400)]
Fix edge-case behavior of pg_next_dst_boundary().

Due to rather sloppy thinking (on my part, I'm afraid) about the
appropriate behavior for boundary conditions, pg_next_dst_boundary() gave
undefined, platform-dependent results when the input time is exactly the
last recorded DST transition time for the specified time zone, as a result
of fetching values one past the end of its data arrays.

Change its specification to be that it always finds the next DST boundary
*after* the input time, and adjust code to match that.  The sole existing
caller, DetermineTimeZoneOffset, doesn't actually care about this
distinction, since it always uses a probe time earlier than the instant
that it does care about.  So it seemed best to me to change the API to make
the result=1 and result=0 cases more consistent, specifically to ensure
that the "before" outputs always describe the state at the given time,
rather than hacking the code to obey the previous API comment exactly.

Per bug #6605 from Sergey Burladyan.  Back-patch to all supported versions.

12 years agoRemove prototype for nonexistent function.
Robert Haas [Wed, 25 Apr 2012 19:32:15 +0000 (15:32 -0400)]
Remove prototype for nonexistent function.

12 years agoAnother trivial comment-typo fix.
Tom Lane [Wed, 25 Apr 2012 18:28:58 +0000 (14:28 -0400)]
Another trivial comment-typo fix.

12 years agoPL/Python: Improve error messages
Peter Eisentraut [Wed, 25 Apr 2012 18:11:59 +0000 (21:11 +0300)]
PL/Python: Improve error messages

12 years agoStandardize indentation of XSL files
Peter Eisentraut [Tue, 24 Apr 2012 18:40:07 +0000 (21:40 +0300)]
Standardize indentation of XSL files

Predominant standard is two spaces, so adjust outliers to that.

12 years agoentab: Improve makefile
Peter Eisentraut [Tue, 24 Apr 2012 18:20:55 +0000 (21:20 +0300)]
entab: Improve makefile

A few simplifications and stylistic improvements, found while grepping
around for makefile problems elsewhere.

12 years agoFix minor stylistic issue
Peter Eisentraut [Tue, 24 Apr 2012 18:16:07 +0000 (21:16 +0300)]
Fix minor stylistic issue

12 years agoCasts to or from a domain type are ignored; warn and document.
Robert Haas [Tue, 24 Apr 2012 13:20:53 +0000 (09:20 -0400)]
Casts to or from a domain type are ignored; warn and document.

Prohibiting this outright would break dumps taken from older versions
that contain such casts, which would create far more pain than is
justified here.

Per report by Jaime Casanova and subsequent discussion.

12 years agoAnother typographical correction.
Robert Haas [Tue, 24 Apr 2012 12:15:45 +0000 (08:15 -0400)]
Another typographical correction.

Noted by Guillaume Smet.

12 years agoLots of doc corrections.
Robert Haas [Tue, 24 Apr 2012 02:43:09 +0000 (22:43 -0400)]
Lots of doc corrections.

Josh Kupershmidt

12 years agoRearrange lazy_scan_heap to avoid visibility map race conditions.
Robert Haas [Tue, 24 Apr 2012 02:08:06 +0000 (22:08 -0400)]
Rearrange lazy_scan_heap to avoid visibility map race conditions.

We must set the visibility map bit before releasing our exclusive lock
on the heap page; otherwise, someone might clear the heap page bit
before we set the visibility map bit, leading to a situation where the
visibility map thinks the page is all-visible but it's really not.

This problem has existed since 8.4, but it wasn't critical before we
had index-only scans, since the worst case scenario was that the page
wouldn't get vacuumed until the next scan_all vacuum.

Along the way, a couple of minor, related improvements: (1) if we
pause the heap scan to do an index vac cycle, release any visibility
map page we're holding, since really long-running pins are not good
for a variety of reasons; and (2) warn if we see a page that's marked
all-visible in the visibility map but not on the page level, since
that should never happen any more (it was allowed in previous
releases, but not in 9.2).

12 years agoReduce hash size for compute_array_stats, compute_tsvector_stats.
Robert Haas [Tue, 24 Apr 2012 02:05:41 +0000 (22:05 -0400)]
Reduce hash size for compute_array_stats, compute_tsvector_stats.

The size is only a hint, but a big hint chews up a lot of memory without
apparently improving performance much.

Analysis and patch by Noah Misch.

12 years agoMinor improvements for CHECK NO INHERIT documentation.
Robert Haas [Tue, 24 Apr 2012 01:59:17 +0000 (21:59 -0400)]
Minor improvements for CHECK NO INHERIT documentation.

Fix typo spotted by Thom Brown, and improve wording in another area
where Thom spotted a typo.

12 years agoFix some typos
Peter Eisentraut [Sun, 22 Apr 2012 16:23:47 +0000 (19:23 +0300)]
Fix some typos

Josh Kupershmidt

12 years agoUse fuzzy not exact cost comparison for the final tie-breaker in add_path.
Tom Lane [Sat, 21 Apr 2012 04:51:14 +0000 (00:51 -0400)]
Use fuzzy not exact cost comparison for the final tie-breaker in add_path.

Instead of an exact cost comparison, use a fuzzy comparison with 1e-10
delta after all other path metrics have proved equal.  This is to avoid
having platform-specific roundoff behaviors determine the choice when
two paths are really the same to our cost estimators.  Adjust the
recently-added test case that made it obvious we had a problem here.

12 years agoRecast "ONLY" column CHECK constraints as NO INHERIT
Alvaro Herrera [Sat, 21 Apr 2012 02:46:20 +0000 (23:46 -0300)]
Recast "ONLY" column CHECK constraints as NO INHERIT

The original syntax wasn't universally loved, and it didn't allow its
usage in CREATE TABLE, only ALTER TABLE.  It now works everywhere, and
it also allows using ALTER TABLE ONLY to add an uninherited CHECK
constraint, per discussion.

The pg_constraint column has accordingly been renamed connoinherit.

This commit partly reverts some of the changes in
61d81bd28dbec65a6b144e0cd3d0bfe25913c3ac, particularly some pg_dump and
psql bits, because now pg_get_constraintdef includes the necessary NO
INHERIT within the constraint definition.

Author: Nikhil Sontakke
Some tweaks by me

12 years agoAdjust join_search_one_level's handling of clauseless joins.
Tom Lane [Sat, 21 Apr 2012 00:10:46 +0000 (20:10 -0400)]
Adjust join_search_one_level's handling of clauseless joins.

For an initial relation that lacks any join clauses (that is, it has to be
cartesian-product-joined to the rest of the query), we considered only
cartesian joins with initial rels appearing later in the initial-relations
list.  This creates an undesirable dependency on FROM-list order.  We would
never fail to find a plan, but perhaps we might not find the best available
plan.  Noted while discussing the logic with Amit Kapila.

Improve the comments a bit in this area, too.

Arguably this is a bug fix, but given the lack of complaints from the
field I'll refrain from back-patching.

12 years agoRevise parameterized-path mechanism to fix assorted issues.
Tom Lane [Thu, 19 Apr 2012 19:52:46 +0000 (15:52 -0400)]
Revise parameterized-path mechanism to fix assorted issues.

This patch adjusts the treatment of parameterized paths so that all paths
with the same parameterization (same set of required outer rels) for the
same relation will have the same rowcount estimate.  We cache the rowcount
estimates to ensure that property, and hopefully save a few cycles too.
Doing this makes it practical for add_path_precheck to operate without
a rowcount estimate: it need only assume that paths with different
parameterizations never dominate each other, which is close enough to
true anyway for coarse filtering, because normally a more-parameterized
path should yield fewer rows thanks to having more join clauses to apply.

In add_path, we do the full nine yards of comparing rowcount estimates
along with everything else, so that we can discard parameterized paths that
don't actually have an advantage.  This fixes some issues I'd found with
add_path rejecting parameterized paths on the grounds that they were more
expensive than not-parameterized ones, even though they yielded many fewer
rows and hence would be cheaper once subsequent joining was considered.

To make the same-rowcounts assumption valid, we have to require that any
parameterized path enforce *all* join clauses that could be obtained from
the particular set of outer rels, even if not all of them are useful for
indexing.  This is required at both base scans and joins.  It's a good
thing anyway since the net impact is that join quals are checked at the
lowest practical level in the join tree.  Hence, discard the original
rather ad-hoc mechanism for choosing parameterization joinquals, and build
a better one that has a more principled rule for when clauses can be moved.
The original rule was actually buggy anyway for lack of knowledge about
which relations are part of an outer join's outer side; getting this right
requires adding an outer_relids field to RestrictInfo.

12 years agoUntabify DSSSL and XSL files and add to check-tabs target
Peter Eisentraut [Thu, 19 Apr 2012 19:38:14 +0000 (22:38 +0300)]
Untabify DSSSL and XSL files and add to check-tabs target

Like with SGML files, using tabs in these files is confusing and
unnecessary.

12 years agoRemove bogus comment from HeapTupleSatisfiesNow.
Robert Haas [Wed, 18 Apr 2012 15:50:45 +0000 (11:50 -0400)]
Remove bogus comment from HeapTupleSatisfiesNow.

This has been wrong for a really long time.  We don't use two-phase
locking to protect against serialization anomalies.

Per discussion on pgsql-hackers about 2011-03-07; original report
by Dan Ports.

12 years agoFinish rename of FastPathStrongLocks to FastPathStrongRelationLocks.
Robert Haas [Wed, 18 Apr 2012 15:29:34 +0000 (11:29 -0400)]
Finish rename of FastPathStrongLocks to FastPathStrongRelationLocks.

Commit 8e5ac74c1249820ca55481223a95b9124b4a4f95 tried to do this renaming,
but I relied on gcc to tell me where I needed to make changes, instead of
grep.

Noted by Jeff Davis.

12 years agoTighten up error recovery for fast-path locking.
Robert Haas [Wed, 18 Apr 2012 15:17:30 +0000 (11:17 -0400)]
Tighten up error recovery for fast-path locking.

The previous code could cause a backend crash after BEGIN; SAVEPOINT a;
LOCK TABLE foo (interrupted by ^C or statement timeout); ROLLBACK TO
SAVEPOINT a; LOCK TABLE foo, and might have leaked strong-lock counts
in other situations.

Report by Zoltán Böszörményi; patch review by Jeff Davis.

12 years agoFix incorrect comment in SetBufferCommitInfoNeedsSave().
Robert Haas [Wed, 18 Apr 2012 14:55:40 +0000 (10:55 -0400)]
Fix incorrect comment in SetBufferCommitInfoNeedsSave().

Noah Misch spotted the fact that the old comment is in fact incorrect, due
to memory ordering hazards.

12 years agoAfter PageSetAllVisible, use MarkBufferDirty.
Robert Haas [Wed, 18 Apr 2012 14:49:37 +0000 (10:49 -0400)]
After PageSetAllVisible, use MarkBufferDirty.

Previously, we used SetBufferCommitInfoNeedsSave, but that's really
intended for dirty-marks we can theoretically afford to lose, such as
hint bits.  As for 9.2, the PD_ALL_VISIBLE mustn't be lost in this
way, since we could then end up with a heap page that isn't
all-visible and a visibility map page that is all visible, causing
index-only scans to return wrong answers.

12 years agoFix copyfuncs/equalfuncs support for ReassignOwnedStmt.
Robert Haas [Wed, 18 Apr 2012 14:45:18 +0000 (10:45 -0400)]
Fix copyfuncs/equalfuncs support for ReassignOwnedStmt.

Noah Misch

12 years agoFix various infelicities in node functions.
Robert Haas [Wed, 18 Apr 2012 14:43:16 +0000 (10:43 -0400)]
Fix various infelicities in node functions.

Mostly, this consists of adding support for fields which exist in the
structure but aren't handled by copy/equal/outfuncs; but the create
foreign table case can actually produce garbage output.

Noah Misch

12 years agoDoc clarification for synchronous_commit.
Robert Haas [Wed, 18 Apr 2012 14:09:41 +0000 (10:09 -0400)]
Doc clarification for synchronous_commit.

Fujii Masao

12 years agopsql: Add tab completion for CREATE/ALTER ROLE name WITH
Peter Eisentraut [Wed, 18 Apr 2012 13:55:01 +0000 (16:55 +0300)]
psql: Add tab completion for CREATE/ALTER ROLE name WITH

Previously, the use of the optional key word WITH was not supported.

Josh Kupershmidt

12 years agoDon't override arguments set via options with positional arguments.
Andrew Dunstan [Tue, 17 Apr 2012 22:30:34 +0000 (18:30 -0400)]
Don't override arguments set via options with positional arguments.

A number of utility programs were rather careless about paremeters
that can be set via both an option argument and a positional
argument. This leads to results which can violate the Principal
Of Least Astonishment. These changes refuse to use positional
arguments to override settings that have been made via positional
arguments. The changes are backpatched to all live branches.

12 years agoDon't wait for the commit record to be replicated if we wrote no WAL.
Heikki Linnakangas [Tue, 17 Apr 2012 13:28:31 +0000 (16:28 +0300)]
Don't wait for the commit record to be replicated if we wrote no WAL.

When using synchronous replication, we waited for the commit record to be
replicated, but if we our transaction didn't write any other WAL records,
that's not required because we don't even flush the WAL locally to disk in
that case. This lead to long waits when committing a transaction that only
modified a temporary table. Bug spotted by Thom Brown.

12 years agoAdd compatibility information for prepared transaction commands
Peter Eisentraut [Mon, 16 Apr 2012 19:40:54 +0000 (22:40 +0300)]
Add compatibility information for prepared transaction commands

12 years agoFix typo
Peter Eisentraut [Mon, 16 Apr 2012 12:36:40 +0000 (15:36 +0300)]
Fix typo

Kyotaro HORIGUCHI