Simon Riggs [Wed, 9 May 2012 12:56:24 +0000 (13:56 +0100)]
Avoid xid error from age() function when run on Hot Standby
Bruce Momjian [Wed, 9 May 2012 03:17:43 +0000 (23:17 -0400)]
Add another URL for HTML entity codes.
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.
Bruce Momjian [Wed, 9 May 2012 02:51:17 +0000 (22:51 -0400)]
Document how to find non-ASCII characters in the release notes.
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().
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
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.
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.
Peter Eisentraut [Tue, 8 May 2012 17:46:13 +0000 (20:46 +0300)]
Update config.guess and config.sub
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).
Peter Eisentraut [Tue, 8 May 2012 16:35:22 +0000 (19:35 +0300)]
Fix misleading comments
Josh Kupershmidt
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.
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.
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.
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.
Bruce Momjian [Sun, 6 May 2012 12:10:55 +0000 (08:10 -0400)]
Bruce Momjian [Sat, 5 May 2012 15:59:53 +0000 (11:59 -0400)]
Fix psql doc typo.
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.
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.
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.
Bruce Momjian [Thu, 3 May 2012 00:42:21 +0000 (20:42 -0400)]
Mark git_changelog examples with the proper executable names.
Robert Haas [Wed, 2 May 2012 18:30:58 +0000 (14:30 -0400)]
Add missing parenthesis in comment.
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).
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
Peter Eisentraut [Wed, 2 May 2012 17:14:39 +0000 (20:14 +0300)]
Even more duplicate word removal, in the spirit of the season
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.
Robert Haas [Wed, 2 May 2012 15:11:25 +0000 (11:11 -0400)]
Further corrections from the department of redundancy department.
Thom Brown
Robert Haas [Wed, 2 May 2012 13:27:34 +0000 (09:27 -0400)]
More duplicate word removal.
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 ".
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.
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
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.
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.
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.
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.
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.
Robert Haas [Mon, 30 Apr 2012 17:14:46 +0000 (13:14 -0400)]
Remove duplicate word in comment.
Noted by Peter Geoghegan.
Bruce Momjian [Mon, 30 Apr 2012 15:05:34 +0000 (11:05 -0400)]
Add comments suggesting usage of git_changelog to generate release notes.
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.
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.
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.
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.
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.
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.
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.
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.
Peter Eisentraut [Sat, 28 Apr 2012 10:34:06 +0000 (13:34 +0300)]
PL/Python: Update list of supported environment variables
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.
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
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.
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.
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.
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.
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
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
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.)
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.
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.
Robert Haas [Wed, 25 Apr 2012 19:32:15 +0000 (15:32 -0400)]
Remove prototype for nonexistent function.
Tom Lane [Wed, 25 Apr 2012 18:28:58 +0000 (14:28 -0400)]
Another trivial comment-typo fix.
Peter Eisentraut [Wed, 25 Apr 2012 18:11:59 +0000 (21:11 +0300)]
PL/Python: Improve error messages
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.
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.
Peter Eisentraut [Tue, 24 Apr 2012 18:16:07 +0000 (21:16 +0300)]
Fix minor stylistic issue
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.
Robert Haas [Tue, 24 Apr 2012 12:15:45 +0000 (08:15 -0400)]
Another typographical correction.
Noted by Guillaume Smet.
Robert Haas [Tue, 24 Apr 2012 02:43:09 +0000 (22:43 -0400)]
Lots of doc corrections.
Josh Kupershmidt
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).
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.
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.
Peter Eisentraut [Sun, 22 Apr 2012 16:23:47 +0000 (19:23 +0300)]
Fix some typos
Josh Kupershmidt
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
Robert Haas [Wed, 18 Apr 2012 14:45:18 +0000 (10:45 -0400)]
Fix copyfuncs/equalfuncs support for ReassignOwnedStmt.
Noah Misch
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
Robert Haas [Wed, 18 Apr 2012 14:09:41 +0000 (10:09 -0400)]
Doc clarification for synchronous_commit.
Fujii Masao
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
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.
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.
Peter Eisentraut [Mon, 16 Apr 2012 19:40:54 +0000 (22:40 +0300)]
Add compatibility information for prepared transaction commands
Peter Eisentraut [Mon, 16 Apr 2012 12:36:40 +0000 (15:36 +0300)]
Fix typo
Kyotaro HORIGUCHI
Heikki Linnakangas [Mon, 16 Apr 2012 09:58:37 +0000 (12:58 +0300)]
Install plpgsql.h to to include/server at "make install".
The header file is needed by any module that wants to use the PL/pgSQL
instrumentation plugin interface. Most notably, the pldebugger plugin needs
this. With this patch, it can be built using pgxs, without having the full
server source tree available.
Peter Eisentraut [Mon, 16 Apr 2012 08:30:32 +0000 (11:30 +0300)]
PL/Python: Improve documentation of nrows() method
Clarify that nrows() is the number of rows processed, versus the
number of rows returned, which can be obtained using len. Also add
tests about that.
Peter Eisentraut [Sun, 15 Apr 2012 17:23:08 +0000 (20:23 +0300)]
PL/Python: Fix crash when colnames() etc. called without result set
The result object methods colnames() etc. would crash when called
after a command that did not produce a result set. Now they throw an
exception.
discovery and initial patch by Jean-Baptiste Quenot
Tatsuo Ishii [Sun, 15 Apr 2012 00:12:51 +0000 (09:12 +0900)]
Add missing descriptions about '--timeout' and '--mode' to help
message. They are already implemented in the source code.
Suggestions about the message formatting from Tom Lane.
Robert Haas [Sat, 14 Apr 2012 14:53:22 +0000 (10:53 -0400)]
Rename synchronous_commit='write' to 'remote_write'.
Fujii Masao, per discussion on pgsql-hackers
Robert Haas [Sat, 14 Apr 2012 12:04:11 +0000 (08:04 -0400)]
pg_size_pretty(numeric)
The output of the new pg_xlog_location_diff function is of type numeric,
since it could theoretically overflow an int8 due to signedness; this
provides a convenient way to format such values.
Fujii Masao, with some beautification by me.
Tatsuo Ishii [Sat, 14 Apr 2012 09:40:35 +0000 (18:40 +0900)]
Add description of long options for '-c', '-D', '-l' and '-s'. Per
discussion of hackers list on 2012/3/10 "missing description initdb
manual".
Peter Eisentraut [Sat, 14 Apr 2012 06:29:54 +0000 (09:29 +0300)]
Update contrib/README
Remove lots of outdated information that is duplicated by the
better-maintained SGML documentation. In particular, remove the
outdated listing of contrib modules. Update the installation
instructions to mention CREATE EXTENSION, but don't go into too much
detail.
Peter Eisentraut [Sat, 14 Apr 2012 06:08:08 +0000 (09:08 +0300)]
Document that VALUES can be used in WITH
Peter Eisentraut [Fri, 13 Apr 2012 22:05:34 +0000 (01:05 +0300)]
Fix typo
Etsuro Fujita
Robert Haas [Fri, 13 Apr 2012 20:42:24 +0000 (16:42 -0400)]
Add Peter Geoghegan as additional author of pg_stat_statements.