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

12 years agoInstall plpgsql.h to to include/server at "make install".
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.

12 years agoPL/Python: Improve documentation of nrows() method
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.

12 years agoPL/Python: Fix crash when colnames() etc. called without result set
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

12 years agoAdd missing descriptions about '--timeout' and '--mode' to help
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.

12 years agoRename synchronous_commit='write' to 'remote_write'.
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

12 years agopg_size_pretty(numeric)
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.

12 years agoAdd description of long options for '-c', '-D', '-l' and '-s'. Per
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".

12 years agoUpdate contrib/README
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.

12 years agoDocument that VALUES can be used in WITH
Peter Eisentraut [Sat, 14 Apr 2012 06:08:08 +0000 (09:08 +0300)]
Document that VALUES can be used in WITH

12 years agoFix typo
Peter Eisentraut [Fri, 13 Apr 2012 22:05:34 +0000 (01:05 +0300)]
Fix typo

Etsuro Fujita

12 years agoAdd Peter Geoghegan as additional author of pg_stat_statements.
Robert Haas [Fri, 13 Apr 2012 20:42:24 +0000 (16:42 -0400)]
Add Peter Geoghegan as additional author of pg_stat_statements.

12 years agoRemove the "last ditch" code path in join_search_one_level().
Tom Lane [Fri, 13 Apr 2012 20:03:16 +0000 (16:03 -0400)]
Remove the "last ditch" code path in join_search_one_level().

So far as I can tell, it is no longer possible for this heuristic to do
anything useful, because the new weaker definition of
have_relevant_joinclause means that any relation with a joinclause must be
considered joinable to at least one other relation.  It would still be
possible for the code block to be entered, for example if there are join
order restrictions that prevent any join of the current level from being
formed; but in that case it's just a waste of cycles to attempt to form
cartesian joins, since the restrictions will still apply.

Furthermore, IMO the existence of this code path can mask bugs elsewhere;
we would have noticed the problem with cartesian joins a lot sooner if
this code hadn't compensated for it in the simplest case.

Accordingly, let's remove it and see what happens.  I'm committing this
separately from the prerequisite changes in have_relevant_joinclause,
just to make the question easier to revisit if there is some fault in
my logic.

12 years agoWeaken the planner's tests for relevant joinclauses.
Tom Lane [Fri, 13 Apr 2012 19:32:34 +0000 (15:32 -0400)]
Weaken the planner's tests for relevant joinclauses.

We should be willing to cross-join two small relations if that allows us
to use an inner indexscan on a large relation (that is, the potential
indexqual for the large table requires both smaller relations).  This
worked in simple cases but fell apart as soon as there was a join clause
to a fourth relation, because the existence of any two-relation join clause
caused the planner to not consider clauseless joins between other base
relations.  The added regression test shows an example case adapted from
a recent complaint from Benoit Delbosc.

Adjust have_relevant_joinclause, have_relevant_eclass_joinclause, and
has_relevant_eclass_joinclause to consider that a join clause mentioning
three or more relations is sufficient grounds for joining any subset of
those relations, even if we have to do so via a cartesian join.  Since such
clauses are relatively uncommon, this shouldn't affect planning speed on
typical queries; in fact it should help a bit, because the latter two
functions in particular get significantly simpler.

Although this is arguably a bug fix, I'm not going to risk back-patching
it, since it might have currently-unforeseen consequences.

12 years agoRename bytea_agg to string_agg and add delimiter argument
Peter Eisentraut [Fri, 13 Apr 2012 18:36:59 +0000 (21:36 +0300)]
Rename bytea_agg to string_agg and add delimiter argument

Per mailing list discussion, we would like to keep the bytea functions
parallel to the text functions, so rename bytea_agg to string_agg,
which already exists for text.

Also, to satisfy the rule that we don't want aggregate functions of
the same name with a different number of arguments, add a delimiter
argument, just like string_agg for text already has.

12 years agoConsistently quote encoding and locale names in messages
Peter Eisentraut [Fri, 13 Apr 2012 17:37:07 +0000 (20:37 +0300)]
Consistently quote encoding and locale names in messages

12 years agoGrammar corrections.
Robert Haas [Fri, 13 Apr 2012 16:47:23 +0000 (12:47 -0400)]
Grammar corrections.

Christoph Berg

12 years agoFix typo in comment.
Robert Haas [Fri, 13 Apr 2012 12:54:13 +0000 (08:54 -0400)]
Fix typo in comment.

12 years agoUpdate lazy_scan_heap header comment.
Robert Haas [Fri, 13 Apr 2012 12:49:59 +0000 (08:49 -0400)]
Update lazy_scan_heap header comment.

The previous comment described how things worked in PostgreSQL 8.2
and prior.

12 years agoAssorted spelling corrections.
Tom Lane [Thu, 12 Apr 2012 14:43:39 +0000 (10:43 -0400)]
Assorted spelling corrections.

Thom Brown

12 years agoFix cost estimation for indexscan filter conditions.
Tom Lane [Thu, 12 Apr 2012 00:24:17 +0000 (20:24 -0400)]
Fix cost estimation for indexscan filter conditions.

cost_index's method for estimating per-tuple costs of evaluating filter
conditions (a/k/a qpquals) was completely wrong in the presence of derived
indexable conditions, such as range conditions derived from a LIKE clause.
This was largely masked in common cases as a result of all simple operator
clauses having about the same costs, but it could show up in a big way when
dealing with functional indexes containing expensive functions, as seen for
example in bug #6579 from Istvan Endredy.  Rejigger the calculation to give
sane answers when the indexquals aren't a subset of the baserestrictinfo
list.  As a side benefit, we now do the calculation properly for cases
involving join clauses (ie, parameterized indexscans), which we always
overestimated before.

There are still cases where this is an oversimplification, such as clauses
that can be dropped because they are implied by a partial index's
predicate.  But we've never accounted for that in cost estimates before,
and I'm not convinced it's worth the cycles to try to do so.

12 years agoSilently ignore any nonexistent schemas that are listed in search_path.
Tom Lane [Wed, 11 Apr 2012 15:29:22 +0000 (11:29 -0400)]
Silently ignore any nonexistent schemas that are listed in search_path.

Previously we attempted to throw an error or at least warning for missing
schemas, but this was done inconsistently because of implementation
restrictions (in many cases, GUC settings are applied outside transactions
so that we can't do system catalog lookups).  Furthermore, there were
exceptions to the rule even in the beginning, and we'd been poking more
and more holes in it as time went on, because it turns out that there are
lots of use-cases for having some irrelevant items in a common search_path
value.  It seems better to just adopt a philosophy similar to what's always
been done with Unix PATH settings, wherein nonexistent or unreadable
directories are silently ignored.

This commit also fixes the documentation to point out that schemas for
which the user lacks USAGE privilege are silently ignored.  That's always
been true but was previously not documented.

This is mostly in response to Robert Haas' complaint that 9.1 started to
throw errors or warnings for missing schemas in cases where prior releases
had not.  We won't adopt such a significant behavioral change in a back
branch, so something different will be needed in 9.1.

12 years agoAccept postgres:// URIs in libpq connection functions
Alvaro Herrera [Wed, 11 Apr 2012 06:59:32 +0000 (03:59 -0300)]
Accept postgres:// URIs in libpq connection functions

postgres:// URIs are an attempt to "stop the bleeding" in this general
area that has been said to occur due to external projects adopting their
own syntaxes.  The syntaxes supported by this patch:

 postgres://[user[:pwd]@][unix-socket][:port[/dbname]][?param1=value1&...]
 postgres://[user[:pwd]@][net-location][:port][/dbname][?param1=value1&...]

should be enough to cover most interesting cases without having to
resort to "param=value" pairs, but those are provided for the cases that
need them regardless.

libpq documentation has been shuffled around a bit, to avoid stuffing
all the format details into the PQconnectdbParams description, which was
already a bit overwhelming.  The list of keywords has moved to its own
subsection, and the details on the URI format live in another subsection.

This includes a simple test program, as requested in discussion, to
ensure that interesting corner cases continue to work appropriately in
the future.

Author: Alexander Shulgin
Some tweaking by Álvaro Herrera, Greg Smith, Daniel Farina, Peter Eisentraut
Reviewed by Robert Haas, Alexey Klyukin (offlist), Heikki Linnakangas,
Marko Kreen, and others

Oh, it also supports postgresql:// but that's probably just an accident.

12 years agoMake pg_tablespace_location(0) return the database's default tablespace.
Tom Lane [Wed, 11 Apr 2012 01:42:46 +0000 (21:42 -0400)]
Make pg_tablespace_location(0) return the database's default tablespace.

This definition is convenient when applying the function to the
reltablespace column of pg_class, since that's what zero means there;
and it doesn't interfere with any other plausible use of the function.
Per gripe from Bruce Momjian.

12 years agoFix pg_upgrade to properly upgrade a table that is stored in the cluster
Bruce Momjian [Tue, 10 Apr 2012 23:57:14 +0000 (19:57 -0400)]
Fix pg_upgrade to properly upgrade a table that is stored in the cluster
default tablespace, but part of a database that is in a user-defined
tablespace.  Caused "file not found" error during upgrade.

Per bug report from Ants Aasma.

Backpatch to 9.1 and 9.0.

12 years agoNLS: Initialize Project-Id-Version field by xgettext
Peter Eisentraut [Tue, 10 Apr 2012 18:26:17 +0000 (21:26 +0300)]
NLS: Initialize Project-Id-Version field by xgettext

Since xgettext provides options to do this now, we might as well use
them.

12 years agopsql: Improve tab completion of WITH
Peter Eisentraut [Tue, 10 Apr 2012 17:35:39 +0000 (20:35 +0300)]
psql: Improve tab completion of WITH

Only match when WITH is the first word, as WITH may appear in many
other contexts.

Josh Kupershmidt

12 years agoMeasure epoch of timestamp-without-time-zone from local not UTC midnight.
Tom Lane [Tue, 10 Apr 2012 16:04:42 +0000 (12:04 -0400)]
Measure epoch of timestamp-without-time-zone from local not UTC midnight.

This patch reverts commit 191ef2b407f065544ceed5700e42400857d9270f
and thereby restores the pre-7.3 behavior of EXTRACT(EPOCH FROM
timestamp-without-tz).  Per discussion, the more recent behavior was
misguided on a couple of grounds: it makes it hard to get a
non-timezone-aware epoch value for a timestamp, and it makes this one
case dependent on the value of the timezone GUC, which is incompatible
with having timestamp_part() labeled as immutable.

The other behavior is still available (in all releases) by explicitly
casting the timestamp to timestamp with time zone before applying EXTRACT.

This will need to be called out as an incompatible change in the 9.2
release notes.  Although having mutable behavior in a function marked
immutable is clearly a bug, we're not going to back-patch such a change.

12 years agoPoint the URL to PL/py directly to the page about the procedural language.
Heikki Linnakangas [Tue, 10 Apr 2012 06:46:44 +0000 (09:46 +0300)]
Point the URL to PL/py directly to the page about the procedural language.

It used to point to a top-level page that contains client-side tools as
well. It was hard to find the procedural language there.

12 years agoFix typos in docs, some words were doubled.
Heikki Linnakangas [Tue, 10 Apr 2012 06:30:58 +0000 (09:30 +0300)]
Fix typos in docs, some words were doubled.

Thom Brown

12 years agoAdjust various references to GEQO being non-deterministic.
Tom Lane [Tue, 10 Apr 2012 00:49:01 +0000 (20:49 -0400)]
Adjust various references to GEQO being non-deterministic.

It's still non-deterministic in some sense ... but given fixed settings
and identical planning problems, it will now always choose the same plan,
so we probably shouldn't tar it with that brush.  Per bug #6565 from
Guillaume Cottenceau.  Back-patch to 9.0 where the behavior was fixed.

12 years agoRe-add documentation recommendation to use gzip/gunzip for archive file
Bruce Momjian [Mon, 9 Apr 2012 18:50:48 +0000 (14:50 -0400)]
Re-add documentation recommendation to use gzip/gunzip for archive file
storage.

12 years agoUpdate documentation to more clearly label the streaming replication option.
Bruce Momjian [Mon, 9 Apr 2012 18:40:16 +0000 (14:40 -0400)]
Update documentation to more clearly label the streaming replication option.

12 years agoRemove documentation mention of pglesslog, which was added in 2009
Bruce Momjian [Mon, 9 Apr 2012 18:12:04 +0000 (14:12 -0400)]
Remove documentation mention of pglesslog, which was added in 2009
because there was only a beta for 9.0 and it does not compile on 9.1.