]> granicus.if.org Git - postgresql/log
postgresql
12 years agobackend: Fix minor memory leak in configuration file processing
Peter Eisentraut [Fri, 16 Mar 2012 17:51:43 +0000 (19:51 +0200)]
backend: Fix minor memory leak in configuration file processing

Just for consistency with the other code paths.

found by Coverity

12 years agoImprove commentary in match_pathkeys_to_index().
Tom Lane [Fri, 16 Mar 2012 18:07:21 +0000 (14:07 -0400)]
Improve commentary in match_pathkeys_to_index().

For a little while there I thought match_pathkeys_to_index() was broken
because it wasn't trying to match index columns to pathkeys in order.
Actually that's correct, because GiST can support ordering operators
on any random collection of index columns, but it sure needs a comment.

12 years agoRevisit handling of UNION ALL subqueries with non-Var output columns.
Tom Lane [Fri, 16 Mar 2012 17:11:12 +0000 (13:11 -0400)]
Revisit handling of UNION ALL subqueries with non-Var output columns.

In commit 57664ed25e5dea117158a2e663c29e60b3546e1c I tried to fix a bug
reported by Teodor Sigaev by making non-simple-Var output columns distinct
(by wrapping their expressions with dummy PlaceHolderVar nodes).  This did
not work too well.  Commit b28ffd0fcc583c1811e5295279e7d4366c3cae6c fixed
some ensuing problems with matching to child indexes, but per a recent
report from Claus Stadler, constraint exclusion of UNION ALL subqueries was
still broken, because constant-simplification didn't handle the injected
PlaceHolderVars well either.  On reflection, the original patch was quite
misguided: there is no reason to expect that EquivalenceClass child members
will be distinct.  So instead of trying to make them so, we should ensure
that we can cope with the situation when they're not.

Accordingly, this patch reverts the code changes in the above-mentioned
commits (though the regression test cases they added stay).  Instead, I've
added assorted defenses to make sure that duplicate EC child members don't
cause any problems.  Teodor's original problem ("MergeAppend child's
targetlist doesn't match MergeAppend") is addressed more directly by
revising prepare_sort_from_pathkeys to let the parent MergeAppend's sort
list guide creation of each child's sort list.

In passing, get rid of add_sort_column; as far as I can tell, testing for
duplicate sort keys at this stage is dead code.  Certainly it doesn't
trigger often enough to be worth expending cycles on in ordinary queries.
And keeping the test would've greatly complicated the new logic in
prepare_sort_from_pathkeys, because comparing pathkey list entries against
a previous output array requires that we not skip any entries in the list.

Back-patch to 9.1, like the previous patches.  The only known issue in
this area that wasn't caused by the ill-advised previous patches was the
MergeAppend planning failure, which of course is not relevant before 9.1.
It's possible that we need some of the new defenses against duplicate child
EC entries in older branches, but until there's some clear evidence of that
I'm going to refrain from back-patching further.

12 years agoAdd comments explaining why our Itanium spinlock implementation is safe.
Heikki Linnakangas [Fri, 16 Mar 2012 08:14:45 +0000 (10:14 +0200)]
Add comments explaining why our Itanium spinlock implementation is safe.

12 years agoA couple more fixes for the sepgsql documentation.
Robert Haas [Thu, 15 Mar 2012 20:49:44 +0000 (16:49 -0400)]
A couple more fixes for the sepgsql documentation.

12 years agoCopy editing of sepgsql documentation.
Robert Haas [Thu, 15 Mar 2012 20:37:40 +0000 (16:37 -0400)]
Copy editing of sepgsql documentation.

12 years agosepgsql_setcon().
Robert Haas [Thu, 15 Mar 2012 20:08:40 +0000 (16:08 -0400)]
sepgsql_setcon().

This is intended as infrastructure to allow sepgsql to cooperate with
connection pooling software, by allowing the effective security label
to be set for each new connection.

KaiGai Kohei, reviewed by Yeb Havinga.

12 years agoAdd const qualifier to tzn returned by timestamp2tm()
Peter Eisentraut [Thu, 15 Mar 2012 19:17:19 +0000 (21:17 +0200)]
Add const qualifier to tzn returned by timestamp2tm()

The tzn value might come from tm->tm_zone, which libc declares as
const, so it's prudent that the upper layers know about this as well.

12 years agoRemove unused tzn arguments for timestamp2tm()
Peter Eisentraut [Thu, 15 Mar 2012 19:13:35 +0000 (21:13 +0200)]
Remove unused tzn arguments for timestamp2tm()

12 years agoUppercase pg_upgrade status output title.
Bruce Momjian [Wed, 14 Mar 2012 23:22:01 +0000 (19:22 -0400)]
Uppercase pg_upgrade status output title.

12 years agoImprove EncodeDateTime and EncodeTimeOnly APIs
Peter Eisentraut [Wed, 14 Mar 2012 21:03:34 +0000 (23:03 +0200)]
Improve EncodeDateTime and EncodeTimeOnly APIs

Use an explicit argument to tell whether to include the time zone in
the output, rather than using some undocumented pointer magic.

12 years agoAdd missing va_end() calls
Peter Eisentraut [Wed, 14 Mar 2012 20:47:21 +0000 (22:47 +0200)]
Add missing va_end() calls

found by Coverity

12 years agoCOPY: Add an assertion
Peter Eisentraut [Wed, 14 Mar 2012 20:44:40 +0000 (22:44 +0200)]
COPY: Add an assertion

This is for tools such as Coverity that don't know that the grammar
enforces that the case of not having a relation (but instead a query)
cannot happen in the FROM case.

12 years agoAdd additional safety check against invalid backup label file
Peter Eisentraut [Wed, 14 Mar 2012 20:41:50 +0000 (22:41 +0200)]
Add additional safety check against invalid backup label file

It was already checking for invalid data after "BACKUP FROM", but
would possibly crash if "BACKUP FROM" was missing altogether.

found by Coverity

12 years agopg_dump: Fix some minor memory leaks
Peter Eisentraut [Tue, 13 Mar 2012 19:34:54 +0000 (21:34 +0200)]
pg_dump: Fix some minor memory leaks

Although we often don't care about freeing all memory in pg_dump,
these functions already freed the same memory in other code paths, so
we might as well do it consistently.

found by Coverity

12 years agoPatch some corner-case bugs in pl/python.
Tom Lane [Tue, 13 Mar 2012 19:26:32 +0000 (15:26 -0400)]
Patch some corner-case bugs in pl/python.

Dave Malcolm of Red Hat is working on a static code analysis tool for
Python-related C code.  It reported a number of problems in plpython,
most of which were failures to check for NULL results from object-creation
functions, so would only be an issue in very-low-memory situations.

Patch in HEAD and 9.1.  We could go further back but it's not clear that
these issues are important enough to justify the work.

Jan Urbański

12 years agoFix minor memory leak in PLy_typeinfo_dealloc().
Tom Lane [Tue, 13 Mar 2012 17:28:11 +0000 (13:28 -0400)]
Fix minor memory leak in PLy_typeinfo_dealloc().

We forgot to free the per-attribute array element descriptors.

Jan Urbański

12 years agoCreate a stack of pl/python "execution contexts".
Tom Lane [Tue, 13 Mar 2012 17:19:06 +0000 (13:19 -0400)]
Create a stack of pl/python "execution contexts".

This replaces the former global variable PLy_curr_procedure, and provides
a place to stash per-call-level information.  In particular we create a
per-call-level scratch memory context.

For the moment, the scratch context is just used to avoid leaking memory
from datatype output function calls in PLyDict_FromTuple.  There probably
will be more use-cases in future.

Although this is a fix for a pre-existing memory leakage bug, it seems
sufficiently invasive to not want to back-patch; it feels better as part
of the major rearrangement of plpython code that we've already done as
part of 9.2.

Jan Urbański

12 years agopgstattuple: Use a BufferAccessStrategy object to avoid cache-trashing.
Robert Haas [Tue, 13 Mar 2012 13:51:03 +0000 (09:51 -0400)]
pgstattuple: Use a BufferAccessStrategy object to avoid cache-trashing.

Jaime Casanova, reviewed by Noah Misch, slightly modified by me.

12 years agopgstattuple: Add new error case for spgist indexes.
Robert Haas [Tue, 13 Mar 2012 13:35:55 +0000 (09:35 -0400)]
pgstattuple: Add new error case for spgist indexes.

Extracted from a larger patch by Jaime Casanova, reviewed by Noah Misch.
I think this error message could use some more extensive revision, but
this at least makes the handling of spgist consistent with what we do for
other types of indexes that this code doesn't know how to handle.

12 years agoIn pg_upgrade, add various logging improvements:
Bruce Momjian [Mon, 12 Mar 2012 23:47:54 +0000 (19:47 -0400)]
In pg_upgrade, add various logging improvements:

add ability to control permissions of created files
have psql echo its queries for easier debugging
output four separate log files, and delete them on success
add -r/--retain option to keep log files after success
make logs file append-only
remove -g/-G/-l logging options
sugggest tailing appropriate log file on failure
enhance -v/--verbose behavior

12 years agoFix SPGiST vacuum algorithm to handle concurrent tuple motion properly.
Tom Lane [Mon, 12 Mar 2012 20:10:05 +0000 (16:10 -0400)]
Fix SPGiST vacuum algorithm to handle concurrent tuple motion properly.

A leaf tuple that we need to delete could get moved as a consequence of an
insertion happening concurrently with the VACUUM scan.  If it moves from a
page past the current scan point to a page before, we'll miss it, which is
not acceptable.  Hence, when we see a leaf-page REDIRECT that could have
been made since our scan started, chase down the redirection pointer much
as if we were doing a normal index search, and be sure to vacuum every page
it leads to.  This fixes the issue because, if the tuple was on page N at
the instant we start our scan, we will surely find it as a consequence of
chasing the redirect from page N, no matter how much it moves around in
between.  Problem noted by Takashi Yamamoto.

12 years agoUse correct sizeof operand in qsort call
Peter Eisentraut [Mon, 12 Mar 2012 18:56:13 +0000 (20:56 +0200)]
Use correct sizeof operand in qsort call

Probably no practical impact, since all pointers ought to have the
same size, but it was wrong nonetheless.  Found by Coverity.

12 years agoAdd comment for missing break in switch
Peter Eisentraut [Mon, 12 Mar 2012 18:55:09 +0000 (20:55 +0200)]
Add comment for missing break in switch

For clarity, following other sites, and to silence Coverity.

12 years agoRemove tabs in SGML files
Bruce Momjian [Mon, 12 Mar 2012 14:13:42 +0000 (10:13 -0400)]
Remove tabs in SGML files

12 years agoMake INSERT/UPDATE queries depend on their specific target columns.
Tom Lane [Sun, 11 Mar 2012 22:14:23 +0000 (18:14 -0400)]
Make INSERT/UPDATE queries depend on their specific target columns.

We have always created a whole-table dependency for the target relation,
but that's not really good enough, as it doesn't prevent scenarios such
as dropping an individual target column or altering its type.  So we
have to create an individual dependency for each target column, as well.

Per report from Bill MacArthur of a rule containing UPDATE breaking
after such an alteration.  Note that this patch doesn't try to make
such cases work, only to ensure that the attempted ALTER TABLE throws
an error telling you it can't cope with adjusting the rule.

This is a long-standing bug, but given the lack of prior reports
I'm not going to risk back-patching it.  A back-patch wouldn't do
anything to fix existing rules' dependency lists, anyway.

12 years agoMake parameter name consistent with syntax summary.
Tom Lane [Sun, 11 Mar 2012 20:56:26 +0000 (16:56 -0400)]
Make parameter name consistent with syntax summary.

Thomas Hunger

12 years agoFix documented type of t_infomask2.
Tom Lane [Sun, 11 Mar 2012 20:53:04 +0000 (16:53 -0400)]
Fix documented type of t_infomask2.

Per Koizumi Satoru

12 years agoTeach SPGiST to store nulls and do whole-index scans.
Tom Lane [Sun, 11 Mar 2012 20:29:04 +0000 (16:29 -0400)]
Teach SPGiST to store nulls and do whole-index scans.

This patch fixes the other major compatibility-breaking limitation of
SPGiST, that it didn't store anything for null values of the indexed
column, and so could not support whole-index scans or "x IS NULL"
tests.  The approach is to create a wholly separate search tree for
the null entries, and use fixed "allTheSame" insertion and search
rules when processing this tree, instead of calling the index opclass
methods.  This way the opclass methods do not need to worry about
dealing with nulls.

Catversion bump is for pg_am updates as well as the change in on-disk
format of SPGiST indexes; there are some tweaks in SPGiST WAL records
as well.

Heavily rewritten version of a patch by Oleg Bartunov and Teodor Sigaev.
(The original also stored nulls separately, but it reused GIN code to do
so; which required undesirable compromises in the on-disk format, and
would likely lead to bugs due to the GIN code being required to work in
two very different contexts.)

12 years agoRemoved redundant "the" from ecpg's docs.
Michael Meskes [Sun, 11 Mar 2012 11:25:52 +0000 (12:25 +0100)]
Removed redundant "the" from ecpg's docs.

Typo spotted by Erik Rijkers.

12 years agoAdd description for --no-locale and --text-search-config.
Tatsuo Ishii [Sat, 10 Mar 2012 23:23:20 +0000 (08:23 +0900)]
Add description for --no-locale and --text-search-config.

12 years agoAdd more detail to error message for invalid arguments for server process
Peter Eisentraut [Sat, 10 Mar 2012 23:52:05 +0000 (01:52 +0200)]
Add more detail to error message for invalid arguments for server process

It now prints the argument that was at fault.

Also fix a small misbehavior where the error message issued by
getopt() would complain about a program named "--single", because
that's what argv[0] is in the server process.

12 years agoRestructure SPGiST opclass interface API to support whole-index scans.
Tom Lane [Sat, 10 Mar 2012 23:36:49 +0000 (18:36 -0500)]
Restructure SPGiST opclass interface API to support whole-index scans.

The original API definition was incapable of supporting whole-index scans
because there was no way to invoke leaf-value reconstruction without
checking any qual conditions.  Also, it was inefficient for
multiple-qual-condition scans because value reconstruction got done over
again for each qual condition, and because other internal work in the
consistent functions likewise had to be done for each qual.  To fix these
issues, pass the whole scankey array to the opclass consistent functions,
instead of only letting them see one item at a time.  (Essentially, the
loop over scankey entries is now inside the consistent functions not
outside them.  This makes the consistent functions a bit more complicated,
but not unreasonably so.)

In itself this commit does nothing except save a few cycles in
multiple-qual-condition index scans, since we can't support whole-index
scans on SPGiST indexes until nulls are included in the index.  However,
I consider this a must-fix for 9.2 because once we release it will get
very much harder to change the opclass API definition.

12 years agoAdd support for renaming constraints
Peter Eisentraut [Sat, 10 Mar 2012 18:19:13 +0000 (20:19 +0200)]
Add support for renaming constraints

reviewed by Josh Berkus and Dimitri Fontaine

12 years agosepgsql DROP support.
Robert Haas [Fri, 9 Mar 2012 20:18:45 +0000 (15:18 -0500)]
sepgsql DROP support.

KaiGai Kohei

12 years agoExtend object access hook framework to support arguments, and DROP.
Robert Haas [Fri, 9 Mar 2012 19:34:56 +0000 (14:34 -0500)]
Extend object access hook framework to support arguments, and DROP.

This allows loadable modules to get control at drop time, perhaps for the
purpose of performing additional security checks or to log the event.
The initial purpose of this code is to support sepgsql, but other
applications should be possible as well.

KaiGai Kohei, reviewed by me.

12 years agoRevise FDW planning API, again.
Tom Lane [Fri, 9 Mar 2012 17:48:48 +0000 (12:48 -0500)]
Revise FDW planning API, again.

Further reflection shows that a single callback isn't very workable if we
desire to let FDWs generate multiple Paths, because that forces the FDW to
do all work necessary to generate a valid Plan node for each Path.  Instead
split the former PlanForeignScan API into three steps: GetForeignRelSize,
GetForeignPaths, GetForeignPlan.  We had already bit the bullet of breaking
the 9.1 FDW API for 9.2, so this shouldn't cause very much additional pain,
and it's substantially more flexible for complex FDWs.

Add an fdw_private field to RelOptInfo so that the new functions can save
state there rather than possibly having to recalculate information two or
three times.

In addition, we'd not thought through what would be needed to allow an FDW
to set up subexpressions of its choice for runtime execution.  We could
treat ForeignScan.fdw_private as an executable expression but that seems
likely to break existing FDWs unnecessarily (in particular, it would
restrict the set of node types allowable in fdw_private to those supported
by expression_tree_walker).  Instead, invent a separate field fdw_exprs
which will receive the postprocessing appropriate for expression trees.
(One field is enough since it can be a list of expressions; also, we assume
the corresponding expression state tree(s) will be held within fdw_state,
so we don't need to add anything to ForeignScanState.)

Per review of Hanada Shigeru's pgsql_fdw patch.  We may need to tweak this
further as we continue to work on that patch, but to me it feels a lot
closer to being right now.

12 years agoUpdate outdated comment. HeapTupleHeader.t_natts field doesn't exist anymore.
Heikki Linnakangas [Fri, 9 Mar 2012 06:07:56 +0000 (08:07 +0200)]
Update outdated comment. HeapTupleHeader.t_natts field doesn't exist anymore.

Kevin Grittner

12 years agopsql: Remove useless code
Peter Eisentraut [Thu, 8 Mar 2012 21:13:51 +0000 (23:13 +0200)]
psql: Remove useless code

Apparently a copy-and-paste mistake introduced in
8ddd22f2456af0155f9c183894f481203e86b76e.

found by Coverity

12 years agoFix some issues with temp/transient tables in extension scripts.
Tom Lane [Thu, 8 Mar 2012 20:52:26 +0000 (15:52 -0500)]
Fix some issues with temp/transient tables in extension scripts.

Phil Sorber reported that a rewriting ALTER TABLE within an extension
update script failed, because it creates and then drops a placeholder
table; the drop was being disallowed because the table was marked as an
extension member.  We could hack that specific case but it seems likely
that there might be related cases now or in the future, so the most
practical solution seems to be to create an exception to the general rule
that extension member objects can only be dropped by dropping the owning
extension.  To wit: if the DROP is issued within the extension's own
creation or update scripts, we'll allow it, implicitly performing an
"ALTER EXTENSION DROP object" first.  This will simplify cases such as
extension downgrade scripts anyway.

No docs change since we don't seem to have documented the idea that you
would need ALTER EXTENSION DROP for such an action to begin with.

Also, arrange for explicitly temporary tables to not get linked as
extension members in the first place, and the same for the magic
pg_temp_nnn schemas that are created to hold them.  This prevents assorted
unpleasant results if an extension script creates a temp table: the forced
drop at session end would either fail or remove the entire extension, and
neither of those outcomes is desirable.  Note that this doesn't fix the
ALTER TABLE scenario, since the placeholder table is not temp (unless the
table being rewritten is).

Back-patch to 9.1.

12 years agoecpg: Fix off-by-one error in memory copying
Peter Eisentraut [Thu, 8 Mar 2012 20:29:01 +0000 (22:29 +0200)]
ecpg: Fix off-by-one error in memory copying

In a rare case, one byte past the end of memory belonging to the
sqlca_t structure would be written to.

found by Coverity

12 years agoecpg: Fix rare memory leaks
Peter Eisentraut [Thu, 8 Mar 2012 20:21:12 +0000 (22:21 +0200)]
ecpg: Fix rare memory leaks

found by Coverity

12 years agoSilence warning about unused variable, when building without assertions.
Heikki Linnakangas [Thu, 8 Mar 2012 09:10:02 +0000 (11:10 +0200)]
Silence warning about unused variable, when building without assertions.

12 years agoImprove estimation of IN/NOT IN by assuming array elements are distinct.
Tom Lane [Thu, 8 Mar 2012 03:59:49 +0000 (22:59 -0500)]
Improve estimation of IN/NOT IN by assuming array elements are distinct.

In constructs such as "x IN (1,2,3,4)" and "x <> ALL(ARRAY[1,2,3,4])",
we formerly always used a general-purpose assumption that the probability
of success is independent for each comparison of "x" to an array element.
But in real-world usage of these constructs, that's a pretty poor
assumption; it's much saner to assume that the array elements are distinct
and so the match probabilities are disjoint.  Apply that assumption if the
operator appears to behave as equality (for ANY) or inequality (for ALL).
But fall back to the normal independent-probabilities calculation if this
yields an impossible result, ie probability > 1 or < 0.  We could protect
ourselves against bad estimates even more by explicitly checking for equal
array elements, but that is expensive and doesn't seem worthwhile: doing
it would amount to optimizing for poorly-written queries at the expense
of well-written ones.

Daniele Varrazzo and Tom Lane, after a suggestion by Ants Aasma

12 years agoFix indentation of \d footers for non-ASCII cases.
Tom Lane [Thu, 8 Mar 2012 00:25:59 +0000 (19:25 -0500)]
Fix indentation of \d footers for non-ASCII cases.

Multi-line "Inherits:" and "Child tables:" footers were misindented when
those strings' translations involved multibyte characters, because we were
using strlen() instead of an appropriate display width measurement.

In passing, avoid doing gettext() more than once per loop in these places.

While at it, fix pg_wcswidth(), which has been entirely broken since about
8.2, but fortunately has been unused for the same length of time.

Report and patch by Sergey Burladyan (bug #6480)

12 years agoAdd GetForeignColumnOptions() to foreign.c, and add some documentation.
Tom Lane [Wed, 7 Mar 2012 23:20:58 +0000 (18:20 -0500)]
Add GetForeignColumnOptions() to foreign.c, and add some documentation.

GetForeignColumnOptions provides some abstraction for accessing
column-specific FDW options, on a par with the access functions that were
already provided here for other FDW-related information.

Adjust file_fdw.c to use GetForeignColumnOptions instead of equivalent
hand-rolled code.

In addition, add some SGML documentation for the functions exported by
foreign.c that are meant for use by FDW authors.

(This is the fdw_helper portion of the proposed pgsql_fdw patch.)

Hanada Shigeru, reviewed by KaiGai Kohei

12 years agopsql: Avoid some spurious output if the server croaks.
Robert Haas [Wed, 7 Mar 2012 21:56:42 +0000 (16:56 -0500)]
psql: Avoid some spurious output if the server croaks.

Fixes a regression in commit 08146775acd8bfe0fcc509c71857abb928697171.

Noah Misch

12 years agopsql: Fix memory leak
Peter Eisentraut [Wed, 7 Mar 2012 21:52:15 +0000 (23:52 +0200)]
psql: Fix memory leak

In expanded auto mode, a lot of allocated memory was not cleaned up.

found by Coverity

12 years agopsql: Fix invalid memory access
Peter Eisentraut [Wed, 7 Mar 2012 21:46:41 +0000 (23:46 +0200)]
psql: Fix invalid memory access

Due to an apparent thinko, when printing a table in expanded mode
(\x), space would be allocated for 1 slot plus 1 byte per line,
instead of 1 slot per line plus 1 slot for the NULL terminator.  When
the line count is small, reading or writing the terminator would
therefore access memory beyond what was allocated.

12 years agolibpq: Fix memory leak
Peter Eisentraut [Wed, 7 Mar 2012 21:35:03 +0000 (23:35 +0200)]
libpq: Fix memory leak

If a client encoding is specified as a connection parameter (or
environment variable), internal storage allocated for it would never
be freed.

12 years agoExpose an API for calculating catcache hash values.
Tom Lane [Wed, 7 Mar 2012 19:51:13 +0000 (14:51 -0500)]
Expose an API for calculating catcache hash values.

Now that cache invalidation callbacks get only a hash value, and not a
tuple TID (per commits 632ae6829f7abda34e15082c91d9dfb3fc0f298b and
b5282aa893e565b7844f8237462cb843438cdd5e), the only way they can restrict
what they invalidate is to know what the hash values mean.  setrefs.c was
doing this via a hard-wired assumption but that seems pretty grotty, and
it'll only get worse as more cases come up.  So let's expose a calculation
function that takes the same parameters as SearchSysCache.  Per complaint
from Marko Kreen.

12 years agolibpq: Small code clarification, and avoid casting away const
Peter Eisentraut [Tue, 6 Mar 2012 21:20:43 +0000 (23:20 +0200)]
libpq: Small code clarification, and avoid casting away const

12 years agoAdd a hook for processing messages due to be sent to the server log.
Tom Lane [Tue, 6 Mar 2012 20:35:41 +0000 (15:35 -0500)]
Add a hook for processing messages due to be sent to the server log.

Use-cases for this include custom log filtering rules and custom log
message transmission mechanisms (for instance, lossy log message
collection, which has been discussed several times recently).

As is our common practice for hooks, there's no regression test nor
user-facing documentation for this, though the author did exhibit a
sample module using the hook.

Martin Pihlak, reviewed by Marti Raudsepp

12 years agoTypo fix.
Robert Haas [Tue, 6 Mar 2012 13:23:51 +0000 (08:23 -0500)]
Typo fix.

Fujii Masao

12 years agoMake the comments more clear on the fact that UpdateFullPageWrites() is not
Heikki Linnakangas [Tue, 6 Mar 2012 08:44:51 +0000 (10:44 +0200)]
Make the comments more clear on the fact that UpdateFullPageWrites() is not
safe to call concurrently from multiple processes.

12 years agoRemove extra copies of LogwrtResult.
Heikki Linnakangas [Tue, 6 Mar 2012 07:34:10 +0000 (09:34 +0200)]
Remove extra copies of LogwrtResult.

This simplifies the code a little bit. The new rule is that to update
XLogCtl->LogwrtResult, you must hold both WALWriteLock and info_lck, whereas
before we had two copies, one that was protected by WALWriteLock and another
protected by info_lck. The code that updates them was already holding both
locks, so merging the two is trivial.

The third copy, XLogCtl->Insert.LogwrtResult, was not totally redundant, it
was used in AdvanceXLInsertBuffer to update the backend-local copy, before
acquiring the info_lck to read the up-to-date value. But the value of that
seems dubious; at best it's saving one spinlock acquisition per completed
WAL page, which is not significant compared to all the other work involved.
And in practice, it's probably not saving even that much.

12 years agoSimplify the way changes to full_page_writes are logged.
Heikki Linnakangas [Tue, 6 Mar 2012 07:13:00 +0000 (09:13 +0200)]
Simplify the way changes to full_page_writes are logged.

It's harmless to do full page writes even when not strictly necessary, so
when turning full_page_writes on, we can set the global flag first, and then
call XLogInsert. Likewise, when turning it off, we can write the WAL record
first, and then clear the flag. This way XLogInsert doesn't need any special
handling of the XLOG_FPW_CHANGE record type. XLogInsert is complicated
enough already, so anything we can keep away from there is a good thing.

Actually I don't think the atomicity of the shared memory flag matters,
anyway, because we only write the XLOG_FPW_CHANGE at the end of recovery,
when there are no concurrent WAL insertions going on. But might as well make
it safe, in case we allow changing full_page_writes on the fly in the
future.

12 years agoIn pg_upgrade, only lock the old cluster if link mode is used, and do it
Bruce Momjian [Tue, 6 Mar 2012 02:19:54 +0000 (21:19 -0500)]
In pg_upgrade, only lock the old cluster if link mode is used, and do it
right after we restore the schema (a common failure point), and right
before we do the link operation.

Per suggesgtions from Robert and ^!C^!^@lvaro

12 years agoRedesign PlanForeignScan API to allow multiple paths for a foreign table.
Tom Lane [Mon, 5 Mar 2012 21:15:59 +0000 (16:15 -0500)]
Redesign PlanForeignScan API to allow multiple paths for a foreign table.

The original API specification only allowed an FDW to create a single
access path, which doesn't seem like a terribly good idea in hindsight.
Instead, move the responsibility for building the Path node and calling
add_path() into the FDW's PlanForeignScan function.  Now, it can do that
more than once if appropriate.  There is no longer any need for the
transient FdwPlan struct, so get rid of that.

Etsuro Fujita, Shigeru Hanada, Tom Lane

12 years agoImprove documentation around logging_collector and use of stderr.
Tom Lane [Mon, 5 Mar 2012 19:08:52 +0000 (14:08 -0500)]
Improve documentation around logging_collector and use of stderr.

In backup.sgml, point out that you need to be using the logging collector
if you want to log messages from a failing archive_command script.  (This
is an oversimplification, in that it will work without the collector as
long as you're not sending postmaster stderr to /dev/null; but it seems
like a good idea to encourage use of the collector to avoid problems
with multiple processes concurrently scribbling on one file.)

In config.sgml, do some wordsmithing of logging_collector discussion.

Per bug #6518 from Janning Vygen

12 years agoAdd isolation test to check-world and installcheck-world
Peter Eisentraut [Mon, 5 Mar 2012 18:19:20 +0000 (20:19 +0200)]
Add isolation test to check-world and installcheck-world

12 years agoRewrite GiST support code for rangetypes.
Tom Lane [Mon, 5 Mar 2012 03:50:06 +0000 (22:50 -0500)]
Rewrite GiST support code for rangetypes.

This patch installs significantly smarter penalty and picksplit functions
for ranges, making GiST indexes for them smaller and faster to search.

There is no on-disk format change, so no catversion bump, but you'd need
to REINDEX to get the benefits for any existing index.

Alexander Korotkov, reviewed by Jeff Davis

12 years agoRemove useless "rough estimate" path from mcelem_array_contained_selec.
Tom Lane [Sun, 4 Mar 2012 21:03:38 +0000 (16:03 -0500)]
Remove useless "rough estimate" path from mcelem_array_contained_selec.

The code in this function that tried to cope with a missing count histogram
was quite ineffective for anything except a perfectly flat distribution.
Furthermore, since we were already punting for missing MCELEM slot, it's
rather useless to sweat over missing DECHIST: there are no cases where
ANALYZE will create the first but not the second.  So just simplify the
code by punting rather than pretending we can do something useful.

12 years agoImprove histogram-filling loop in new compute_array_stats() code.
Tom Lane [Sun, 4 Mar 2012 20:40:16 +0000 (15:40 -0500)]
Improve histogram-filling loop in new compute_array_stats() code.

Do "frac" arithmetic in int64 to prevent overflow with large statistics
targets, and improve the comments so people have some chance of
understanding how it works.

Alexander Korotkov and Tom Lane

12 years agoMore carefully validate xlog location string inputs
Magnus Hagander [Sun, 4 Mar 2012 11:24:09 +0000 (12:24 +0100)]
More carefully validate xlog location string inputs

Now that we have validate_xlog_location, call it from the previously
existing functions taking xlog locatoins as a string input.

Suggested by Fujii Masao

12 years agoAdd function pg_xlog_location_diff to help comparisons
Magnus Hagander [Sun, 4 Mar 2012 11:15:24 +0000 (12:15 +0100)]
Add function pg_xlog_location_diff to help comparisons

Comparing two xlog locations are useful for example when calculating
replication lag.

Euler Taveira de Oliveira, reviewed by Fujii Masao, and some cleanups
from me

12 years agoCollect and use element-frequency statistics for arrays.
Tom Lane [Sun, 4 Mar 2012 01:20:19 +0000 (20:20 -0500)]
Collect and use element-frequency statistics for arrays.

This patch improves selectivity estimation for the array <@, &&, and @>
(containment and overlaps) operators.  It enables collection of statistics
about individual array element values by ANALYZE, and introduces
operator-specific estimators that use these stats.  In addition,
ScalarArrayOpExpr constructs of the forms "const = ANY/ALL (array_column)"
and "const <> ANY/ALL (array_column)" are estimated by treating them as
variants of the containment operators.

Since we still collect scalar-style stats about the array values as a
whole, the pg_stats view is expanded to show both these stats and the
array-style stats in separate columns.  This creates an incompatible change
in how stats for tsvector columns are displayed in pg_stats: the stats
about lexemes are now displayed in the array-related columns instead of the
original scalar-related columns.

There are a few loose ends here, notably that it'd be nice to be able to
suppress either the scalar-style stats or the array-element stats for
columns for which they're not useful.  But the patch is in good enough
shape to commit for wider testing.

Alexander Korotkov, reviewed by Noah Misch and Nathan Boley

12 years agoProvide environment overrides for psql file locations.
Andrew Dunstan [Sat, 3 Mar 2012 21:39:26 +0000 (16:39 -0500)]
Provide environment overrides for psql file locations.

PSQL_HISTORY provides an alternative for the command history file,
and PSQLRC provides an alternative location for the .psqlrc file.

12 years agoAllow CREATE TABLE (LIKE ...) from composite type
Peter Eisentraut [Sat, 3 Mar 2012 14:03:05 +0000 (16:03 +0200)]
Allow CREATE TABLE (LIKE ...) from composite type

The only reason this didn't work before was that parserOpenTable()
rejects composite types.  So use relation_openrv() directly and
manually do the errposition() setup that parserOpenTable() does.

12 years agoFix incorrect uses of gzFile
Peter Eisentraut [Fri, 2 Mar 2012 20:30:01 +0000 (22:30 +0200)]
Fix incorrect uses of gzFile

gzFile is already a pointer, so code like

gzFile *handle = gzopen(...)

is wrong.

This used to pass silently because gzFile used to be defined as void*,
and you can assign a void* to a void**.  But somewhere between zlib
versions 1.2.3.4 and 1.2.6, the definition of gzFile was changed to
struct gzFile_s *, and with that new definition this usage causes
compiler warnings.

So remove all those extra pointer decorations.

There is a related issue in pg_backup_archiver.h, where

FILE       *FH;             /* General purpose file handle */

is used throughout pg_dump as sometimes a real FILE* and sometimes a
gzFile handle, which also causes warnings now.  This is not yet fixed
here, because it might need more code restructuring.

12 years agoRe-add "make check" target in src/test/isolation/Makefile
Peter Eisentraut [Fri, 2 Mar 2012 20:09:10 +0000 (22:09 +0200)]
Re-add "make check" target in src/test/isolation/Makefile

This effectively reverts 7886cc73ad12fb9b5a729b6c8152f11a309f5d65,
which was done under the impression that isolationtester needs libpq,
which it no longer does (and never really did).

12 years agoAllow child-relation entries to be made in ec_has_const EquivalenceClasses.
Tom Lane [Fri, 2 Mar 2012 19:28:46 +0000 (14:28 -0500)]
Allow child-relation entries to be made in ec_has_const EquivalenceClasses.

This fixes an oversight in commit 11cad29c91524aac1d0b61e0ea0357398ab79bf8,
which introduced MergeAppend plans.  Before that happened, we never
particularly cared about the sort ordering of scans of inheritance child
relations, since appending their outputs together would destroy any
ordering anyway.  But now it's important to be able to match child relation
sort orderings to those of the surrounding query.  The original coding of
add_child_rel_equivalences skipped ec_has_const EquivalenceClasses, on the
originally-correct grounds that adding child expressions to them was
useless.  The effect of this is that when a parent variable is equated to
a constant, we can't recognize that index columns on the equivalent child
variables are not sort-significant; that is, we can't recognize that a
child index on, say, (x, y) is able to generate output in "ORDER BY y"
order when there is a clause "WHERE x = constant".  Adding child
expressions to the (x, constant) EquivalenceClass fixes this, without any
downside that I can see other than a few more planner cycles expended on
such queries.

Per recent gripe from Robert McGehee.  Back-patch to 9.1 where MergeAppend
was introduced.

12 years agoAdd COLLATION FOR expression
Peter Eisentraut [Fri, 2 Mar 2012 19:12:16 +0000 (21:12 +0200)]
Add COLLATION FOR expression

reviewed by Jaime Casanova

12 years agoecpg: Clean up some const usage
Peter Eisentraut [Fri, 2 Mar 2012 18:51:29 +0000 (20:51 +0200)]
ecpg: Clean up some const usage

12 years agoAdd a rule to optionally build docs with the stylesheet from the website
Magnus Hagander [Sat, 25 Feb 2012 14:13:12 +0000 (15:13 +0100)]
Add a rule to optionally build docs with the stylesheet from the website

For those of us who prefer the formatting of the docs using the
website stylesheets. Use "make STYLE=website draft" (for example) to use.

The stylesheet itself is referenced directly to the website, so there
is currently no copy of it stored in the source repository. Thus, docs
built with it will only look correct if the browser can access the website
when viewing them.

12 years agoWhen a GiST page is split during index build, it might not have a buffer.
Heikki Linnakangas [Fri, 2 Mar 2012 11:16:09 +0000 (13:16 +0200)]
When a GiST page is split during index build, it might not have a buffer.

Previously it was thought that it's impossible as the code stands, because
insertions create buffers as tuples are cascaded downwards, and index
split also creaters buffers eagerly for all halves. But the example from
Jay Levitt demonstrates that it can happen, when the root page is split.
It's in fact OK if the buffer doesn't exist, so we just need to remove the
sanity check. In fact, we've been discussing the possibility of destroying
empty buffers to conserve memory, which would render the sanity check
completely useless anyway.

Fix by Alexander Korotkov

12 years agoSmall possible clarification in pg_basebackup reference page
Peter Eisentraut [Thu, 1 Mar 2012 19:16:24 +0000 (21:16 +0200)]
Small possible clarification in pg_basebackup reference page

The <literal> markup is not visible as distinct on man pages, which
creates a bit of confusion when looking at the documentation of the
pg_basebackup -l option.  Rather than reinventing the entire font
system for man pages to remedy this, just put some quotes around this
particular case, which should also help in other output formats.

12 years agoDon't link pg_isolation_regress with libpq
Peter Eisentraut [Thu, 1 Mar 2012 18:50:36 +0000 (20:50 +0200)]
Don't link pg_isolation_regress with libpq

It's not necessary and can only create confusion about which libpq
installation should be used.

Also remove some dead code from the makefile that was apparently
copied from elsewhere.

12 years agopsql: Improve error display for psql -f -
Peter Eisentraut [Thu, 1 Mar 2012 17:58:10 +0000 (19:58 +0200)]
psql: Improve error display for psql -f -

Running "psql -f -" used to print

psql:<stdin>:1: ERROR:  blah

but that got broken between 8.4 and 9.0 (commit
b291c0fba83a1e93868e2f69c03be195d620f30c), and now it printed

psql:-:1: ERROR:  blah

This reverts to the old behavior and cleans up some code that was left
dead or useless by the mentioned commit.

12 years agoRemove TOAST table from pg_database
Alvaro Herrera [Wed, 29 Feb 2012 02:43:36 +0000 (23:43 -0300)]
Remove TOAST table from pg_database

The only toastable column now is datacl, but we don't really support
long ACLs anyway.  The TOAST table should have been removed when the
pg_db_role_setting catalog was introduced in commit
2eda8dfb52ed9962920282d8384da8bb4c22514d, but I forgot to do that.

Per -hackers discussion on March 2011.

12 years agoSimplify references to backslash-doubling in func.sgml.
Tom Lane [Wed, 29 Feb 2012 17:11:10 +0000 (12:11 -0500)]
Simplify references to backslash-doubling in func.sgml.

Several places were still written as though standard_conforming_strings
didn't exist, much less be the default.  Now that it is on by default,
we can simplify the text and just insert occasional notes suggesting that
you might have to think harder if it's turned off.  Per discussion of a
suggestion from Hannes Frederic Sowa.

Back-patch to 9.1 where standard_conforming_strings was made the default.

12 years agoCorrectly detect SSI conflicts of prepared transactions after crash.
Heikki Linnakangas [Wed, 29 Feb 2012 13:22:49 +0000 (15:22 +0200)]
Correctly detect SSI conflicts of prepared transactions after crash.

A prepared transaction can get new conflicts in and out after preparing, so
we cannot rely on the in- and out-flags stored in the statefile at prepare-
time. As a quick fix, make the conservative assumption that after a restart,
all prepared transactions are considered to have both in- and out-conflicts.
That can lead to unnecessary rollbacks after a crash, but that shouldn't be
a big problem in practice; you don't want prepared transactions to hang
around for a long time anyway.

Dan Ports

12 years agoFix MSVC builds for previous patch's addition of a src/port file.
Tom Lane [Wed, 29 Feb 2012 05:24:01 +0000 (00:24 -0500)]
Fix MSVC builds for previous patch's addition of a src/port file.

(And why in the world is this OBJS list not being scraped from the
corresponding Makefile?)

12 years agoFix typo in comment
Alvaro Herrera [Wed, 29 Feb 2012 02:52:52 +0000 (23:52 -0300)]
Fix typo in comment

Haifeng Liu

12 years agoMove CRC tables to libpgport, and provide them in a separate include file.
Tom Lane [Wed, 29 Feb 2012 00:53:39 +0000 (19:53 -0500)]
Move CRC tables to libpgport, and provide them in a separate include file.

This makes it much more convenient to build tools for Postgres that are
separately compiled and require a matching CRC implementation.

To prevent multiple copies of the CRC polynomial tables being introduced
into the postgres binaries, they are now included in the static library
libpgport that is mainly meant for replacement system functions.  That
seems like a bit of a kludge, but there's no better place.

This cleans up building of the tools pg_controldata and pg_resetxlog,
which previously had to build their own copies of pg_crc.o.

In the future, external programs that need access to the CRC tables can
include the tables directly from the new header file pg_crc_tables.h.

Daniel Farina, reviewed by Abhijit Menon-Sen and Tom Lane

12 years agoFix thinko in new match_join_clauses_to_index() logic.
Tom Lane [Tue, 28 Feb 2012 23:10:40 +0000 (18:10 -0500)]
Fix thinko in new match_join_clauses_to_index() logic.

We don't need to constrain the other side of an indexable join clause to
not be below an outer join; an example here is

SELECT FROM t1 LEFT JOIN t2 ON t1.a = t2.b LEFT JOIN t3 ON t2.c = t3.d;

We can consider an inner indexscan on t3.d using c = d as indexqual, even
though t2.c is potentially nulled by a previous outer join.  The comparable
logic in orindxpath.c has always worked that way, but I was being overly
cautious here.

12 years agoAdd const qualifiers where they are accidentally cast away
Peter Eisentraut [Tue, 28 Feb 2012 10:42:08 +0000 (12:42 +0200)]
Add const qualifiers where they are accidentally cast away

This only produces warnings under -Wcast-qual, but it's more correct
and consistent in any case.

12 years agopsql: when tab-completing, use quotes on file names that need them
Alvaro Herrera [Tue, 28 Feb 2012 04:06:29 +0000 (01:06 -0300)]
psql: when tab-completing, use quotes on file names that need them

psql backslash commands that deal with file or directory names require
quotes around those that have spaces, single quotes, or backslashes.
However, tab-completing such names does not provide said quotes, and is
thus almost useless with them.

This patch fixes the problem by having a wrapper function around
rl_filename_completion_function that dequotes on input and quotes on
output.  This eases dealing with such names.

Author: Noah Misch

12 years agoALTER TABLE: skip FK validation when it's safe to do so
Alvaro Herrera [Mon, 27 Feb 2012 21:28:00 +0000 (18:28 -0300)]
ALTER TABLE: skip FK validation when it's safe to do so

We already skip rewriting the table in these cases, but we still force a
whole table scan to validate the data.  This can be skipped, and thus
we can make the whole ALTER TABLE operation just do some catalog touches
instead of scanning the table, when these two conditions hold:

(a) Old and new pg_constraint.conpfeqop match exactly.  This is actually
stronger than needed; we could loosen things by way of operator
families, but it'd require a lot more effort.

(b) The functions, if any, implementing a cast from the foreign type to
the primary opcintype are the same.  For this purpose, we can consider a
binary coercion equivalent to an exact type match.  When the opcintype
is polymorphic, require that the old and new foreign types match
exactly.  (Since ri_triggers.c does use the executor, the stronger check
for polymorphic types is no mere future-proofing.  However, no core type
exercises its necessity.)

Author: Noah Misch

Committer's note: catalog version bumped due to change of the Constraint
node.  I can't actually find any way to have such a node in a stored
rule, but given that we have "out" support for them, better be safe.

12 years agoCall check_keywords.pl in maintainer-check
Peter Eisentraut [Mon, 27 Feb 2012 11:53:12 +0000 (13:53 +0200)]
Call check_keywords.pl in maintainer-check

For that purpose, have check_keywords.pl print errors to stderr and
return a useful exit status.

12 years agoFix some more bugs in GIN's WAL replay logic.
Tom Lane [Sun, 26 Feb 2012 20:12:17 +0000 (15:12 -0500)]
Fix some more bugs in GIN's WAL replay logic.

In commit 4016bdef8aded77b4903c457050622a5a1815c16 I fixed a bunch of
ginxlog.c bugs having to do with not handling XLogReadBuffer failures
correctly.  However, in ginRedoUpdateMetapage and ginRedoDeleteListPages,
I unaccountably thought that failure to read the metapage would be
impossible and just put in an elog(PANIC) call.  This is of course wrong:
failure is exactly what will happen if the index got dropped (or rebuilt)
between creation of the WAL record and the crash we're trying to recover
from.  I believe this explains Nicholas Wilson's recent report of these
errors getting reached.

Also, fix memory leak in forgetIncompleteSplit.  This wasn't of much
concern when the code was written, but in a long-running standby server
page split records could be expected to accumulate indefinitely.

Back-patch to 8.4 --- before that, GIN didn't have a metapage.

12 years agoRemove useless cast
Peter Eisentraut [Sun, 26 Feb 2012 13:31:16 +0000 (15:31 +0200)]
Remove useless cast

12 years agoRemove useless const qualifier
Peter Eisentraut [Sun, 26 Feb 2012 13:22:27 +0000 (15:22 +0200)]
Remove useless const qualifier

Claiming that the typevar argument to DefineCompositeType() is const
was a plain lie.  A similar case in DefineVirtualRelation() was
already changed in passing in commit 1575fbcb.  Also clean up the now
unnecessary casts that used to cast away the const.

12 years agoFix some typos and correct wording in the monitoring docs patch
Magnus Hagander [Sat, 25 Feb 2012 15:33:57 +0000 (16:33 +0100)]
Fix some typos and correct wording in the monitoring docs patch

Thom Brown

12 years agoMerge the list of statistics functions into the view documentation
Magnus Hagander [Sat, 25 Feb 2012 14:21:04 +0000 (15:21 +0100)]
Merge the list of statistics functions into the view documentation

Most people won't read them individually anyway, it's an easy way to find
them, and it's a lot of duplicated information if they are kept in two
different places.

12 years agoMake each pg_stat_ view into it's own table in the documentation
Magnus Hagander [Sat, 25 Feb 2012 14:20:49 +0000 (15:20 +0100)]
Make each pg_stat_ view into it's own table in the documentation

This makes it easier to match a column name with the description of it,
and makes it possible to add more detailed documentation in the future.

This patch does not add that extra documentation at this point, only
the structure required for it.

Modeled on the changes already done to pg_stat_activity.

12 years agoMerge dissect() into cdissect() to remove a pile of near-duplicate code.
Tom Lane [Fri, 24 Feb 2012 21:26:10 +0000 (16:26 -0500)]
Merge dissect() into cdissect() to remove a pile of near-duplicate code.

The "uncomplicated" case isn't materially less complicated than the full
case, certainly not enough so to justify duplicating nearly 500 lines
of code.  The only extra work being done in the full path is zaptreesubs,
which is very cheap compared to everything else being done here, and
besides that I'm less than convinced that it's not needed in some cases
even without backrefs.

12 years agoAvoid repeated creation/freeing of per-subre DFAs during regex search.
Tom Lane [Fri, 24 Feb 2012 19:56:35 +0000 (14:56 -0500)]
Avoid repeated creation/freeing of per-subre DFAs during regex search.

In nested sub-regex trees, lower-level nodes created DFAs and then
destroyed them again before exiting, which is a bit dumb considering that
the recursive search is likely to call those nodes again later.  Instead
cache each created DFA until the end of pg_regexec().  This is basically a
space for time tradeoff, in that it might increase the maximum memory
usage.  However, in most regex patterns there are not all that many subre
nodes, so not that many DFAs --- and in any case, the peak usage occurs
when reaching the bottom recursion level, and except for alternation cases
that's going to be the same anyway.

12 years agoRemove useless "retry memory" logic within regex engine.
Tom Lane [Fri, 24 Feb 2012 08:36:49 +0000 (03:36 -0500)]
Remove useless "retry memory" logic within regex engine.

Apparently some primordial version of Spencer's engine needed cdissect()
and child functions to be able to continue matching from a previous
position when re-called.  That is dead code, though, since trivial
inspection shows that cdissect can never be entered without having
previously done zapmem which resets the relevant retry counter.  I have
also verified experimentally that no case in the Tcl regression tests
reaches cdissect with a nonzero retry value.  Accordingly, remove that
logic.  This doesn't really save any noticeable number of cycles in itself,
but it is one step towards making dissect() and cdissect() equivalent,
which will allow removing hundreds of lines of near-duplicated code.

Since struct subre's "retry" field is no longer particularly related to
any kind of retry, rename it to "id".  As of this commit it's only used
for identifying a subre node in debug printouts, so you might think we
should get rid of the field entirely; but I have a plan for another use.

12 years agoMention original ctags option name.
Bruce Momjian [Fri, 24 Feb 2012 21:19:18 +0000 (16:19 -0500)]
Mention original ctags option name.