]> granicus.if.org Git - postgresql/log
postgresql
12 years agoFix broken comparetup_datum code.
Tom Lane [Fri, 6 Apr 2012 20:58:17 +0000 (16:58 -0400)]
Fix broken comparetup_datum code.

Commit 337b6f5ecf05b21b5e997986884d097d60e4e3d0 contained the entirely
fanciful assumption that it had made comparetup_datum unreachable.
Reported and patched by Takashi Yamamoto.

Fix up some not terribly accurate/useful comments from that commit, too.

12 years agoFix some typos in the documentation
Peter Eisentraut [Fri, 6 Apr 2012 20:55:24 +0000 (23:55 +0300)]
Fix some typos in the documentation

Thom Brown

12 years agoCorrect various system catalog/view definitions in the documentation
Peter Eisentraut [Fri, 6 Apr 2012 20:54:27 +0000 (23:54 +0300)]
Correct various system catalog/view definitions in the documentation

Thom Brown

12 years agoDept of second thoughts: improve the API for AnalyzeForeignTable.
Tom Lane [Fri, 6 Apr 2012 20:04:10 +0000 (16:04 -0400)]
Dept of second thoughts: improve the API for AnalyzeForeignTable.

If we make the initially-called function return the table physical-size
estimate, acquire_inherited_sample_rows will be able to use that to
allocate numbers of samples among child tables, when the day comes that
we want to support foreign tables in inheritance trees.

12 years agoAllow statistics to be collected for foreign tables.
Tom Lane [Fri, 6 Apr 2012 19:02:35 +0000 (15:02 -0400)]
Allow statistics to be collected for foreign tables.

ANALYZE now accepts foreign tables and allows the table's FDW to control
how the sample rows are collected.  (But only manual ANALYZEs will touch
foreign tables, for the moment, since among other things it's not very
clear how to handle remote permissions checks in an auto-analyze.)

contrib/file_fdw is extended to support this.

Etsuro Fujita, reviewed by Shigeru Hanada, some further tweaking by me.

12 years agoAdd DROP INDEX CONCURRENTLY [IF EXISTS], uses ShareUpdateExclusiveLock
Simon Riggs [Fri, 6 Apr 2012 09:21:40 +0000 (10:21 +0100)]
Add DROP INDEX CONCURRENTLY [IF EXISTS], uses ShareUpdateExclusiveLock

12 years agocheckopint -> checkpoint
Robert Haas [Fri, 6 Apr 2012 01:36:42 +0000 (21:36 -0400)]
checkopint -> checkpoint

Report by Guillaume Lelarge.

12 years agoPut back code inadvertently deleted from exit_nicely.
Robert Haas [Fri, 6 Apr 2012 01:30:19 +0000 (21:30 -0400)]
Put back code inadvertently deleted from exit_nicely.

Report by Andrew Dunstan.

12 years agoNLS: Use msgmerge/xgettext --no-wrap and --sort-by-file
Peter Eisentraut [Thu, 5 Apr 2012 18:22:15 +0000 (21:22 +0300)]
NLS: Use msgmerge/xgettext --no-wrap and --sort-by-file

The option --no-wrap prevents wars with (most?) editors about proper
line wrapping.  --sort-by-file ensures consistent file order, for
easier diffing.

12 years agoAllow pg_archivecleanup to strip optional file extensions.
Robert Haas [Thu, 5 Apr 2012 18:18:42 +0000 (14:18 -0400)]
Allow pg_archivecleanup to strip optional file extensions.

Greg Smith and Jaime Casanova, reviewed by Alex Shulgin and myself.
e

12 years agoPublish checkpoint timing information to pg_stat_bgwriter.
Robert Haas [Thu, 5 Apr 2012 18:03:21 +0000 (14:03 -0400)]
Publish checkpoint timing information to pg_stat_bgwriter.

Greg Smith, Peter Geoghegan, and Robert Haas

12 years agoUpdate obsolete comment.
Tom Lane [Thu, 5 Apr 2012 17:05:02 +0000 (13:05 -0400)]
Update obsolete comment.

Somebody didn't bother to fix this comment while adding foreign table
support to the code below it.

In passing, remove the explicit calling-out of relkind letters, which adds
complexity to the comment but doesn't help in understanding the code.

12 years agoCorrectly explain units used by function-timing stats functions.
Robert Haas [Thu, 5 Apr 2012 15:50:06 +0000 (11:50 -0400)]
Correctly explain units used by function-timing stats functions.

The views are in milliseconds, but the raw functions return
microseconds.

12 years agoExpose track_iotiming data via the statistics collector.
Robert Haas [Thu, 5 Apr 2012 15:37:31 +0000 (11:37 -0400)]
Expose track_iotiming data via the statistics collector.

Ants Aasma's original patch to add timing information for buffer I/O
requests exposed this data at the relation level, which was judged too
costly.  I've here exposed it at the database level instead.

12 years agoFix plpgsql named-cursor-parameter feature for variable name conflicts.
Tom Lane [Thu, 5 Apr 2012 01:50:31 +0000 (21:50 -0400)]
Fix plpgsql named-cursor-parameter feature for variable name conflicts.

The parser got confused if a cursor parameter had the same name as
a plpgsql variable.  Reported and diagnosed by Yeb Havinga, though
this isn't exactly his proposed fix.

Also, some mostly-but-not-entirely-cosmetic adjustments to the original
named-cursor-parameter patch, for code readability and better error
diagnostics.

12 years agoImprove efficiency of dblink by using libpq's new row processor API.
Tom Lane [Wed, 4 Apr 2012 22:39:08 +0000 (18:39 -0400)]
Improve efficiency of dblink by using libpq's new row processor API.

This patch provides a test case for libpq's row processor API.
contrib/dblink can deal with very large result sets by dumping them into
a tuplestore (which can spill to disk) --- but until now, the intermediate
storage of the query result in a PGresult meant memory bloat for any large
result.  Now we use a row processor to convert the data to tuple form and
dump it directly into the tuplestore.

A limitation is that this only works for plain dblink() queries, not
dblink_send_query() followed by dblink_get_result().  In the latter
case we don't know the desired tuple rowtype soon enough.  While hack
solutions to that are possible, a different user-level API would
probably be a better answer.

Kyotaro Horiguchi, reviewed by Marko Kreen and Tom Lane

12 years agoAdd a "row processor" API to libpq for better handling of large results.
Tom Lane [Wed, 4 Apr 2012 22:27:56 +0000 (18:27 -0400)]
Add a "row processor" API to libpq for better handling of large results.

Traditionally libpq has collected an entire query result before passing
it back to the application.  That provides a simple and transactional API,
but it's pretty inefficient for large result sets.  This patch allows the
application to process each row on-the-fly instead of accumulating the
rows into the PGresult.  Error recovery becomes a bit more complex, but
often that tradeoff is well worth making.

Kyotaro Horiguchi, reviewed by Marko Kreen and Tom Lane

12 years agoRemove useless PGRES_COPY_BOTH "support" in psql.
Tom Lane [Wed, 4 Apr 2012 20:15:04 +0000 (16:15 -0400)]
Remove useless PGRES_COPY_BOTH "support" in psql.

There is no existing or foreseeable case in which psql should see a
PGRES_COPY_BOTH PQresultStatus; and if such a case ever emerges, it's a
pretty good bet that these code fragments wouldn't do the right thing
anyway.  Remove them, and let the existing default cases do the appropriate
thing, namely emit an "unexpected PQresultStatus" bleat.

Noted while working on libpq row processor patch, for which I was
considering adding a PGRES_SUSPENDED status code --- the same default-case
treatment would be appropriate for that.

12 years agoFix syslogger to not lose log coherency under high load.
Tom Lane [Wed, 4 Apr 2012 19:05:10 +0000 (15:05 -0400)]
Fix syslogger to not lose log coherency under high load.

The original coding of the syslogger had an arbitrary limit of 20 large
messages concurrently in progress, after which it would just punt and dump
message fragments to the output file separately.  Our ambitions are a bit
higher than that now, so allow the data structure to expand as necessary.

Reported and patched by Andrew Dunstan; some editing by Tom

12 years agoFix a couple of contrib/dblink bugs.
Tom Lane [Wed, 4 Apr 2012 00:43:15 +0000 (20:43 -0400)]
Fix a couple of contrib/dblink bugs.

dblink_exec leaked temporary database connections if any error occurred
after connection setup, for example
SELECT dblink_exec('...connect string...', 'select 1/0');
Add a PG_TRY block to ensure PQfinish gets done when it is needed.
(dblink_record_internal is on the hairy edge of needing similar treatment,
but seems not to be actively broken at the moment.)

Also, in 9.0 and up, only one of the three functions using tuplestore
return mode was properly checking that the query context would allow
a tuplestore result.

Noted while reviewing dblink patch.  Back-patch to all supported branches.

12 years agoArrange for on_exit_nicely to be thread-safe.
Robert Haas [Tue, 3 Apr 2012 12:38:24 +0000 (08:38 -0400)]
Arrange for on_exit_nicely to be thread-safe.

Extracted from Joachim Wieland's parallel pg_dump patch, with some
additional comments by me.

12 years agoAdd support for renaming domain constraints
Peter Eisentraut [Tue, 3 Apr 2012 05:11:51 +0000 (08:11 +0300)]
Add support for renaming domain constraints

12 years agoNLS: Seed Language field in PO header
Peter Eisentraut [Sun, 1 Apr 2012 23:58:37 +0000 (02:58 +0300)]
NLS: Seed Language field in PO header

Use msgmerge --lang option to seed the Language field, recently
introduced by gettext, in the header of the new PO file.

12 years agoFix recently introduced typo in NLS file lists
Peter Eisentraut [Sun, 1 Apr 2012 23:39:34 +0000 (02:39 +0300)]
Fix recently introduced typo in NLS file lists

12 years agoFix O(N^2) behavior in pg_dump when many objects are in dependency loops.
Tom Lane [Sat, 31 Mar 2012 19:51:07 +0000 (15:51 -0400)]
Fix O(N^2) behavior in pg_dump when many objects are in dependency loops.

Combining the loop workspace with the record of already-processed objects
might have been a cute trick, but it behaves horridly if there are many
dependency loops to repair: the time spent in the first step of findLoop()
grows as O(N^2).  Instead use a separate flag array indexed by dump ID,
which we can check in constant time.  The length of the workspace array
is now never more than the actual length of a dependency chain, which
should be reasonably short in all cases of practical interest.  The code
is noticeably easier to understand this way, too.

Per gripe from Mike Roest.  Since this is a longstanding performance bug,
backpatch to all supported versions.

12 years agoFix O(N^2) behavior in pg_dump for large numbers of owned sequences.
Tom Lane [Sat, 31 Mar 2012 18:42:17 +0000 (14:42 -0400)]
Fix O(N^2) behavior in pg_dump for large numbers of owned sequences.

The loop that matched owned sequences to their owning tables required time
proportional to number of owned sequences times number of tables; although
this work was only expended in selective-dump situations, which is probably
why the issue wasn't recognized long since.  Refactor slightly so that we
can perform this work after the index array for findTableByOid has been
set up, reducing the time to O(M log N).

Per gripe from Mike Roest.  Since this is a longstanding performance bug,
backpatch to all supported versions.

12 years agoRename frontend keyword arrays to avoid conflict with backend.
Tom Lane [Sat, 31 Mar 2012 17:15:53 +0000 (13:15 -0400)]
Rename frontend keyword arrays to avoid conflict with backend.

ecpg and pg_dump each contain keyword arrays with structure similar
to the backend's keyword array.  Up to now, we actually named those
arrays the same as the backend's and relied on parser/keywords.h
to declare them.  This seems a tad too cute, though, and it breaks
now that we need to PGDLLIMPORT-decorate the backend symbols.
Rename to avoid the problem.  Per buildfarm.

(It strikes me that maybe we should get rid of the separate keywords.c
files altogether, and just define these arrays in the modules that use
them, but that's a rather more invasive change.)

12 years agoFix glitch recently introduced in psql tab completion.
Tom Lane [Sat, 31 Mar 2012 15:19:23 +0000 (11:19 -0400)]
Fix glitch recently introduced in psql tab completion.

Over-optimization (by me, looks like :-() broke the case of recognizing
a word boundary just before a quoted identifier.  Reported and diagnosed
by Dean Rasheed.

12 years agoAdd PGDLLIMPORT to ScanKeywords and NumScanKeywords.
Tom Lane [Sat, 31 Mar 2012 14:56:21 +0000 (10:56 -0400)]
Add PGDLLIMPORT to ScanKeywords and NumScanKeywords.

Per buildfarm, this is now needed by contrib/pg_stat_statements.

12 years agoAdd new files to NLS file lists
Peter Eisentraut [Fri, 30 Mar 2012 17:42:06 +0000 (20:42 +0300)]
Add new files to NLS file lists

Some of these are newly added, some are older and were forgotten, some
don't contain any translatable strings right now but look like they
could in the future.

12 years agoReplace printf format %i by %d
Peter Eisentraut [Fri, 30 Mar 2012 17:40:46 +0000 (20:40 +0300)]
Replace printf format %i by %d

see also ce8d7bb6440710058503d213b2aafcdf56a5b481

12 years agopgxs: Supply default values for BISON and FLEX variables
Peter Eisentraut [Fri, 30 Mar 2012 17:36:49 +0000 (20:36 +0300)]
pgxs: Supply default values for BISON and FLEX variables

Otherwise, the availability of these variables depends on what
happened to be available at the time the PostgreSQL build was
configured.

12 years agopg_test_timing: Lame hack to work around compiler warning.
Robert Haas [Fri, 30 Mar 2012 12:15:25 +0000 (08:15 -0400)]
pg_test_timing: Lame hack to work around compiler warning.

Fujii Masao, plus a comment by me.  While I'm at it, correctly tabify
this chunk of code.

12 years agoFix dblink's failure to report correct connection name in error messages.
Tom Lane [Thu, 29 Mar 2012 21:52:28 +0000 (17:52 -0400)]
Fix dblink's failure to report correct connection name in error messages.

The DBLINK_GET_CONN and DBLINK_GET_NAMED_CONN macros did not set the
surrounding function's conname variable, causing errors to be incorrectly
reported as having occurred on the "unnamed" connection in some cases.
This bug was actually visible in two cases in the regression tests,
but apparently whoever added those cases wasn't paying attention.

Noted by Kyotaro Horiguchi, though this is different from his proposed
patch.

Back-patch to 8.4; 8.3 does not have the same type of error reporting
so the patch is not relevant.

12 years agoImprove contrib/pg_stat_statements' handling of PREPARE/EXECUTE statements.
Tom Lane [Thu, 29 Mar 2012 20:42:09 +0000 (16:42 -0400)]
Improve contrib/pg_stat_statements' handling of PREPARE/EXECUTE statements.

It's actually more useful for the module to ignore these.  Ignoring
EXECUTE (and not incrementing the nesting level) allows the executor
hooks to charge the time to the underlying prepared query, which
shows up as a stats entry with the original PREPARE as query string
(possibly modified by suppression of constants, which might not be
terribly useful here but it's not worth avoiding).  This is much more
useful than cluttering the stats table with a distinct entry for each
textually distinct EXECUTE.

Experimentation with this idea shows that it's also preferable to ignore
PREPARE.  If we don't, we get two stats table entries, one with the query
string hash and one with the jumble-derived hash, but with the same visible
query string (modulo those constants).  This is confusing and not very
helpful, since the first entry will only receive costs associated with
initial planning of the query, which is not something counted at all
normally by pg_stat_statements.  (And if we do start tracking planning
costs, we'd want them blamed on the other hash table entry anyway.)

12 years agoImprove handling of utility statements containing plannable statements.
Tom Lane [Thu, 29 Mar 2012 19:32:50 +0000 (15:32 -0400)]
Improve handling of utility statements containing plannable statements.

When tracking nested statements, contrib/pg_stat_statements formerly
double-counted the execution costs of utility statements that directly
contain an executable statement, such as EXPLAIN and DECLARE CURSOR.
This was not obvious since the ProcessUtility and Executor hooks
would each add their measured costs to the same stats table entry.
However, with the new implementation that hashes utility and plannable
statements differently, this showed up as seemingly-duplicate stats
entries.  Fix that by disabling the Executor hooks when the query has a
queryId of zero, which was the case already for such statements but is now
more clearly specified in the code.  (The zero queryId was causing problems
anyway because all such statements would add to a single bogus entry.)

The PREPARE/EXECUTE case still results in counting the same execution
in two different stats table entries, but it should be much less surprising
to users that there are two entries in such cases.

In passing, include a CommonTableExpr's ctename in the query hash.
I had left it out originally on the grounds that we wanted to omit all
inessential aliases, but since RTE_CTE RTEs are hashing their referenced
names, we'd better hash the CTE names too to make sure we don't hash
semantically different queries the same.

12 years agoinitdb: Mark more messages for translation
Peter Eisentraut [Thu, 29 Mar 2012 18:16:28 +0000 (21:16 +0300)]
initdb: Mark more messages for translation

Some Windows-only messages had apparently been forgotten so far.

Also make the wording of the messages more consistent with similar
messages other parts, such as pg_ctl and pg_regress.

12 years agoCorrect epoch of txid_current() when executed on a Hot Standby server.
Simon Riggs [Thu, 29 Mar 2012 13:55:30 +0000 (14:55 +0100)]
Correct epoch of txid_current() when executed on a Hot Standby server.
Initialise ckptXidEpoch from starting checkpoint and maintain the correct
value as we roll forwards. This allows GetNextXidAndEpoch() to return the
correct epoch when executed during recovery. Backpatch to 9.0 when the
problem is first observable by a user.

Bug report from Daniel Farina

12 years agoUnbreak Windows builds broken by pgpipe removal.
Andrew Dunstan [Thu, 29 Mar 2012 08:11:57 +0000 (04:11 -0400)]
Unbreak Windows builds broken by pgpipe removal.

12 years agoInherit max_safe_fds to child processes in EXEC_BACKEND mode.
Heikki Linnakangas [Thu, 29 Mar 2012 05:19:11 +0000 (08:19 +0300)]
Inherit max_safe_fds to child processes in EXEC_BACKEND mode.

Postmaster sets max_safe_fds by testing how many open file descriptors it
can open, and that is normally inherited by all child processes at fork().
Not so on EXEC_BACKEND, ie. Windows, however. Because of that, we
effectively ignored max_files_per_process on Windows, and always assumed
a conservative default of 32 simultaneous open files. That could have an
impact on performance, if you need to access a lot of different files
in a query. After this patch, the value is passed to child processes by
save/restore_backend_variables() among many other global variables.

It has been like this forever, but given the lack of complaints about it,
I'm not backpatching this.

12 years agoRemove now redundant pgpipe code.
Andrew Dunstan [Thu, 29 Mar 2012 03:24:07 +0000 (23:24 -0400)]
Remove now redundant pgpipe code.

12 years agoImprove contrib/pg_stat_statements to lump "similar" queries together.
Tom Lane [Thu, 29 Mar 2012 01:00:31 +0000 (21:00 -0400)]
Improve contrib/pg_stat_statements to lump "similar" queries together.

pg_stat_statements now hashes selected fields of the analyzed parse tree
to assign a "fingerprint" to each query, and groups all queries with the
same fingerprint into a single entry in the pg_stat_statements view.
In practice it is expected that queries with the same fingerprint will be
equivalent except for values of literal constants.  To make the display
more useful, such constants are replaced by "?" in the displayed query
strings.

This mechanism currently supports only optimizable queries (SELECT,
INSERT, UPDATE, DELETE).  Utility commands are still matched on the
basis of their literal query strings.

There remain some open questions about how to deal with utility statements
that contain optimizable queries (such as EXPLAIN and SELECT INTO) and how
to deal with expiring speculative hashtable entries that are made to save
the normalized form of a query string.  However, fixing these issues should
require only localized changes, and since there are other open patches
involving contrib/pg_stat_statements, it seems best to go ahead and commit
what we've got.

Peter Geoghegan, reviewed by Daniel Farina

12 years agoRun maintainer-check on all PO files, not only configured ones
Peter Eisentraut [Wed, 28 Mar 2012 18:06:45 +0000 (21:06 +0300)]
Run maintainer-check on all PO files, not only configured ones

The intent is to allow configure --enable-nls=xx for installation
speed and size, but have maintainer-check check all source files
regardless.

12 years agoTweak markup to avoid extra whitespace in man pages
Peter Eisentraut [Wed, 28 Mar 2012 17:37:19 +0000 (20:37 +0300)]
Tweak markup to avoid extra whitespace in man pages

12 years agoAttempt to unbreak pg_test_timing on Windows.
Robert Haas [Wed, 28 Mar 2012 16:22:57 +0000 (12:22 -0400)]
Attempt to unbreak pg_test_timing on Windows.

Per buildfarm, and Álvaro Herrera.

12 years agopg_basebackup: Error handling fixes.
Robert Haas [Wed, 28 Mar 2012 16:19:22 +0000 (12:19 -0400)]
pg_basebackup: Error handling fixes.

Thomas Ogrisegg and Fujii Masao

12 years agopg_basebackup: Error message improvements.
Robert Haas [Wed, 28 Mar 2012 12:43:35 +0000 (08:43 -0400)]
pg_basebackup: Error message improvements.

Fujii Masao

12 years agoDoc fix for pg_test_timing.
Robert Haas [Wed, 28 Mar 2012 12:16:19 +0000 (08:16 -0400)]
Doc fix for pg_test_timing.

Fujii Masao

12 years agopg_test_timing utility, to measure clock monotonicity and timing cost.
Robert Haas [Tue, 27 Mar 2012 20:14:00 +0000 (16:14 -0400)]
pg_test_timing utility, to measure clock monotonicity and timing cost.

Ants Aasma, Greg Smith

12 years agoExpose track_iotiming information via pg_stat_statements.
Robert Haas [Tue, 27 Mar 2012 19:17:22 +0000 (15:17 -0400)]
Expose track_iotiming information via pg_stat_statements.

Ants Aasma, reviewed by Greg Smith, with very minor tweaks by me.

12 years agoBend parse location rules for the convenience of pg_stat_statements.
Tom Lane [Tue, 27 Mar 2012 19:17:00 +0000 (15:17 -0400)]
Bend parse location rules for the convenience of pg_stat_statements.

Generally, the parse location assigned to a multiple-token construct is
the location of its leftmost token.  This commit breaks that rule for
the syntaxes TYPENAME 'LITERAL' and CAST(CONSTANT AS TYPENAME) --- the
resulting Const will have the location of the literal string, not the
typename or CAST keyword.  The cases where this matters are pretty thin on
the ground (no error messages in the regression tests change, for example),
and it's unlikely that any user would be confused anyway by an error cursor
pointing at the literal.  But still it's less than consistent.  The reason
for changing it is that contrib/pg_stat_statements wants to know the parse
location of the original literal, and it was agreed that this is the least
unpleasant way to preserve that information through parse analysis.

Peter Geoghegan

12 years agoAdd some infrastructure for contrib/pg_stat_statements.
Tom Lane [Tue, 27 Mar 2012 19:14:13 +0000 (15:14 -0400)]
Add some infrastructure for contrib/pg_stat_statements.

Add a queryId field to Query and PlannedStmt.  This is not used by the
core backend, except for being copied around at appropriate times.
It's meant to allow plug-ins to track a particular query forward from
parse analysis to execution.

The queryId is intentionally not dumped into stored rules (and hence this
commit doesn't bump catversion).  You could argue that choice either way,
but it seems better that stored rule strings not have any dependency
on plug-ins that might or might not be present.

Also, add a post_parse_analyze_hook that gets invoked at the end of
parse analysis (but only for top-level analysis of complete queries,
not cases such as analyzing a domain's default-value expression).
This is mainly meant to be used to compute and assign a queryId,
but it could have other applications.

Peter Geoghegan

12 years agoNew GUC, track_iotiming, to track I/O timings.
Robert Haas [Tue, 27 Mar 2012 18:52:37 +0000 (14:52 -0400)]
New GUC, track_iotiming, to track I/O timings.

Currently, the only way to see the numbers this gathers is via
EXPLAIN (ANALYZE, BUFFERS), but the plan is to add visibility through
the stats collector and pg_stat_statements in subsequent patches.

Ants Aasma, reviewed by Greg Smith, with some further changes by me.

12 years agoSilence compiler warning about uninitialized variable.
Tom Lane [Tue, 27 Mar 2012 18:47:23 +0000 (14:47 -0400)]
Silence compiler warning about uninitialized variable.

12 years agopg_dump: Small message adjustment for consistency
Peter Eisentraut [Tue, 27 Mar 2012 16:52:39 +0000 (19:52 +0300)]
pg_dump: Small message adjustment for consistency

12 years agoImprove PL/Python database access function documentation
Peter Eisentraut [Mon, 26 Mar 2012 18:15:16 +0000 (21:15 +0300)]
Improve PL/Python database access function documentation

Organize the function descriptions as a list instead of running text,
for easier access.

12 years agoRemove dead assignment
Peter Eisentraut [Mon, 26 Mar 2012 18:03:10 +0000 (21:03 +0300)]
Remove dead assignment

found by Coverity

12 years agoCode cleanup for heap_freeze_tuple.
Robert Haas [Mon, 26 Mar 2012 15:03:06 +0000 (11:03 -0400)]
Code cleanup for heap_freeze_tuple.

It used to be case that lazy vacuum could call this function with only
a shared lock on the buffer, but neither lazy vacuum nor any other
code path does that any more.  Simplify the code accordingly and clean
up some related, obsolete comments.

12 years agoFix COPY FROM for null marker strings that correspond to invalid encoding.
Tom Lane [Mon, 26 Mar 2012 03:17:22 +0000 (23:17 -0400)]
Fix COPY FROM for null marker strings that correspond to invalid encoding.

The COPY documentation says "COPY FROM matches the input against the null
string before removing backslashes".  It is therefore reasonable to presume
that null markers like E'\\0' will work ... and they did, until someone put
the tests in the wrong order during microoptimization-driven rewrites.
Since then, we've been failing if the null marker is something that would
de-escape to an invalidly-encoded string.  Since null markers generally
need to be something that can't appear in the data, this represents a
nontrivial loss of functionality; surprising nobody noticed it earlier.

Per report from Jeff Davis.  Backpatch to 8.4 where this got broken.

12 years agoReplace empty locale name with implied value in CREATE DATABASE and initdb.
Tom Lane [Mon, 26 Mar 2012 01:47:22 +0000 (21:47 -0400)]
Replace empty locale name with implied value in CREATE DATABASE and initdb.

setlocale() accepts locale name "" as meaning "the locale specified by the
process's environment variables".  Historically we've accepted that for
Postgres' locale settings, too.  However, it's fairly unsafe to store an
empty string in a new database's pg_database.datcollate or datctype fields,
because then the interpretation could vary across postmaster restarts,
possibly resulting in index corruption and other unpleasantness.

Instead, we should expand "" to whatever it means at the moment of calling
CREATE DATABASE, which we can do by saving the value returned by
setlocale().

For consistency, make initdb set up the initial lc_xxx parameter values the
same way.  initdb was already doing the right thing for empty locale names,
but it did not replace non-empty names with setlocale results.  On a
platform where setlocale chooses to canonicalize the spellings of locale
names, this would result in annoying inconsistency.  (It seems that popular
implementations of setlocale don't do such canonicalization, which is a
pity, but the POSIX spec certainly allows it to be done.)  The same risk
of inconsistency leads me to not venture back-patching this, although it
could certainly be seen as a longstanding bug.

Per report from Jeff Davis, though this is not his proposed patch.

12 years agoFix planner's handling of outer PlaceHolderVars within subqueries.
Tom Lane [Sat, 24 Mar 2012 20:21:39 +0000 (16:21 -0400)]
Fix planner's handling of outer PlaceHolderVars within subqueries.

For some reason, in the original coding of the PlaceHolderVar mechanism
I had supposed that PlaceHolderVars couldn't propagate into subqueries.
That is of course entirely possible.  When it happens, we need to treat
an outer-level PlaceHolderVar much like an outer Var or Aggref, that is
SS_replace_correlation_vars() needs to replace the PlaceHolderVar with
a Param, and then when building the finished SubPlan we have to provide
the PlaceHolderVar expression as an actual parameter for the SubPlan.
The handling of the contained expression is a bit delicate but it can be
treated exactly like an Aggref's expression.

In addition to the missing logic in subselect.c, prepjointree.c was failing
to search subqueries for PlaceHolderVars that need their relids adjusted
during subquery pullup.  It looks like everyplace else that touches
PlaceHolderVars got it right, though.

Per report from Mark Murawski.  In 9.1 and HEAD, queries affected by this
oversight would fail with "ERROR: Upper-level PlaceHolderVar found where
not expected".  But in 9.0 and 8.4, you'd silently get possibly-wrong
answers, since the value transmitted into the subquery wouldn't go to null
when it should.

12 years agoCast some printf arguments to avoid possibly-nonportable behavior.
Tom Lane [Sat, 24 Mar 2012 00:18:04 +0000 (20:18 -0400)]
Cast some printf arguments to avoid possibly-nonportable behavior.

Per compiler warnings on buildfarm member black_firefly.

12 years agoRefactor simplify_function et al to centralize argument simplification.
Tom Lane [Fri, 23 Mar 2012 23:15:58 +0000 (19:15 -0400)]
Refactor simplify_function et al to centralize argument simplification.

We were doing the recursive simplification of function/operator arguments
in half a dozen different places, with rather baroque logic to ensure it
didn't get done multiple times on some arguments.  This patch improves that
by postponing argument simplification until after we've dealt with named
parameters and added any needed default expressions.

Marti Raudsepp, somewhat hacked on by me

12 years agoCode review for protransform patches.
Tom Lane [Fri, 23 Mar 2012 21:29:57 +0000 (17:29 -0400)]
Code review for protransform patches.

Fix loss of previous expression-simplification work when a transform
function fires: we must not simply revert to untransformed input tree.
Instead build a dummy FuncExpr node to pass to the transform function.
This has the additional advantage of providing a simpler, more uniform
API for transform functions.

Move documentation to a somewhat less buried spot, relocate some
poorly-placed code, be more wary of null constants and invalid typmod
values, add an opr_sanity check on protransform function signatures,
and some other minor cosmetic adjustments.

Note: although this patch touches pg_proc.h, no need for catversion
bump, because the changes are cosmetic and don't actually change the
intended catalog contents.

12 years agoClarify that PQconninfoParse returns an array with all legal options.
Robert Haas [Fri, 23 Mar 2012 02:09:20 +0000 (22:09 -0400)]
Clarify that PQconninfoParse returns an array with all legal options.

Per discussion with Dmitriy Igrishin and Tom Lane.

12 years agoDoc clarifications regarding use of varlena.
Robert Haas [Thu, 22 Mar 2012 19:45:42 +0000 (15:45 -0400)]
Doc clarifications regarding use of varlena.

Jay Levitt, reviewed by Tom Lane.

12 years agoUpdate docs on numeric storage requirements.
Robert Haas [Thu, 22 Mar 2012 19:40:27 +0000 (15:40 -0400)]
Update docs on numeric storage requirements.

Since 9.1, the minimum overhead is three bytes, not five.

Fujii Masao

12 years agoFix GET DIAGNOSTICS for case of assignment to function's first variable.
Tom Lane [Thu, 22 Mar 2012 18:13:17 +0000 (14:13 -0400)]
Fix GET DIAGNOSTICS for case of assignment to function's first variable.

An incorrect and entirely unnecessary "safety check" in exec_stmt_getdiag()
caused the code to treat an assignment to a variable with dno zero as a
no-op.  Unfortunately, that's a perfectly valid dno.  This has been broken
since GET DIAGNOSTICS was invented.  It's not terribly surprising that the
bug went unnoticed for so long, since in most cases you probably wouldn't
use the function's first-created variable (normally its first parameter)
as a GET DIAGNOSTICS target.  Nonetheless, it's broken.  Per bug #6551
from Adam Buraczewski.

12 years agoRefactor to eliminate duplicate copies of conninfo default-finding code.
Tom Lane [Thu, 22 Mar 2012 16:08:34 +0000 (12:08 -0400)]
Refactor to eliminate duplicate copies of conninfo default-finding code.

Alex Shulgin, lightly edited by me

12 years agoIf a role has a password expiration date, show that in psql's \du output.
Tom Lane [Thu, 22 Mar 2012 06:08:25 +0000 (02:08 -0400)]
If a role has a password expiration date, show that in psql's \du output.

Per a suggestion from Euler Taveira, it seems like a good idea to include
this information in \du (and \dg) output.  This costs nothing for people
who are not using the VALID UNTIL feature, while for those who are, it's
rather critical information.

Fabrízio de Royes Mello

12 years agoFix configure's search for collateindex.pl.
Tom Lane [Thu, 22 Mar 2012 04:46:03 +0000 (00:46 -0400)]
Fix configure's search for collateindex.pl.

PGAC_PATH_COLLATEINDEX supposed that it could use AC_PATH_PROGS to search
for collateindex.pl, but that macro will only accept files that are marked
executable, and at least some DocBook installations don't mark the script
executable (a case the docs Makefile was already prepared for).  Accept the
script if it's present and readable in $DOCBOOKSTYLE/bin, and otherwise
search the PATH as before.

Having fixed that up, we don't need the fallback case that was in the docs
Makefile, and instead can throw an understandable error if configure didn't
find the script.  Per recent trouble report from John Lumby.

12 years agoClean up compiler warnings from unused variables with asserts disabled
Peter Eisentraut [Wed, 21 Mar 2012 21:30:14 +0000 (23:30 +0200)]
Clean up compiler warnings from unused variables with asserts disabled

For those variables only used when asserts are enabled, use a new
macro PG_USED_FOR_ASSERTS_ONLY, which expands to
__attribute__((unused)) when asserts are not enabled.

12 years agoAdd installing entab to pgindent instructions
Peter Eisentraut [Wed, 21 Mar 2012 19:27:30 +0000 (21:27 +0200)]
Add installing entab to pgindent instructions

And minor other pgindent documentation tweaks.

12 years agoDoc updates for index-only scans.
Robert Haas [Wed, 21 Mar 2012 18:51:11 +0000 (14:51 -0400)]
Doc updates for index-only scans.

Document that routine vacuuming is now also important for the purpose
of index-only scans; and mention in the section that describes the
visibility map that it is used to implement index-only scans.

Marti Raudsepp, with some changes by me.

12 years agoAllow new relmapper entries when allow_system_table_mods is true.
Tom Lane [Wed, 21 Mar 2012 18:09:39 +0000 (14:09 -0400)]
Allow new relmapper entries when allow_system_table_mods is true.

This restores the pre-9.0 situation that it's possible to add new indexes
on pg_class and other mapped-but-not-shared catalogs, so long as you broke
the glass and flipped the big red Dont-Touch-Me switch.  As before, there
are a lot of gotchas, and you'd have to be pretty desperate to try this
on a production database; but there doesn't seem to be a reason for
relmapper.c to be preventing such things all by itself.  Per
experimentation with a case suggested by Cody Cutrer.

12 years agoImprove connectMaintenanceDatabase() error reporting.
Robert Haas [Wed, 21 Mar 2012 14:56:26 +0000 (10:56 -0400)]
Improve connectMaintenanceDatabase() error reporting.

The prior coding instructs the user to pick an alternative maintenance
database, but this is overly clever, since it obscures whatever the real
cause of the failure is.

Josh Kupershmidt

12 years agoAdd some CHECK_FOR_INTERRUPTS() calls to the heap-sort call path.
Robert Haas [Wed, 21 Mar 2012 01:00:11 +0000 (21:00 -0400)]
Add some CHECK_FOR_INTERRUPTS() calls to the heap-sort call path.

I broke this in commit 337b6f5ecf05b21b5e997986884d097d60e4e3d0, which
among other things arranged for quicksorts to CHECK_FOR_INTERRUPTS()
slightly less frequently.  Sadly, it also arranged for heapsorts to
CHECK_FOR_INTERRUPTS() much less frequently.  Repair.

12 years agoImprove the -l (limit) option recently added to contrib/vacuumlo.
Tom Lane [Tue, 20 Mar 2012 23:05:08 +0000 (19:05 -0400)]
Improve the -l (limit) option recently added to contrib/vacuumlo.

Instead of just stopping after removing an arbitrary subset of orphaned
large objects, commit and start a new transaction after each -l objects.
This is just as effective as the original patch at limiting the number of
locks used, and it doesn't require doing the OID collection process
repeatedly to get everything.  Since the option no longer changes the
fundamental behavior of vacuumlo, and it avoids a known server-side
limitation, enable it by default (with a default limit of 1000 LOs per
transaction).

In passing, be more careful about properly quoting the names of tables
and fields, and do some other cosmetic cleanup.

12 years agopg_dump: get rid of die_horribly
Alvaro Herrera [Tue, 20 Mar 2012 21:38:11 +0000 (18:38 -0300)]
pg_dump: get rid of die_horribly

The old code was using exit_horribly or die_horribly other depending on
whether it had an ArchiveHandle on which to close the connection or not;
but there were places that were passing a NULL ArchiveHandle to
die_horribly, and other places that used exit_horribly while having an
AH available.  So there wasn't all that much consistency.

Improve the situation by keeping only one of the routines, and instead
of having to pass the AH down from the caller, arrange for it to be
present for an on_exit_nicely callback to operate on.

Author: Joachim Wieland
Some tweaks by me

Per a suggestion from Robert Haas, in the ongoing "parallel pg_dump"
saga.

12 years agoFix trigger example code to match header changes
Alvaro Herrera [Tue, 20 Mar 2012 19:50:18 +0000 (16:50 -0300)]
Fix trigger example code to match header changes

I should have done this in b93f5a5673b4bb09e14eb80fe28aa21fc20a6271 but
didn't notice the problem at the time.

Per report from Marco Nenciarini

12 years agoUpdate struct Trigger in docs
Alvaro Herrera [Tue, 20 Mar 2012 16:14:16 +0000 (13:14 -0300)]
Update struct Trigger in docs

12 years agoRemove stray word from sepgsql documentation.
Robert Haas [Tue, 20 Mar 2012 19:10:33 +0000 (15:10 -0400)]
Remove stray word from sepgsql documentation.

12 years agopg_upgrade: Add new generated file to .gitignore
Peter Eisentraut [Tue, 20 Mar 2012 18:40:31 +0000 (20:40 +0200)]
pg_upgrade: Add new generated file to .gitignore

12 years agopg_dump: Remove undocumented "files" output format
Peter Eisentraut [Tue, 20 Mar 2012 18:38:20 +0000 (20:38 +0200)]
pg_dump: Remove undocumented "files" output format

This was for demonstration only, and now it was creating compiler
warnings from zlib without an obvious fix (see also
d923125b77c5d698bb8107a533a21627582baa43), let's just remove it.  The
"directory" format is presumably similar enough anyway.

12 years agoRestructure SELECT INTO's parsetree representation into CreateTableAsStmt.
Tom Lane [Tue, 20 Mar 2012 01:37:19 +0000 (21:37 -0400)]
Restructure SELECT INTO's parsetree representation into CreateTableAsStmt.

Making this operation look like a utility statement seems generally a good
idea, and particularly so in light of the desire to provide command
triggers for utility statements.  The original choice of representing it as
SELECT with an IntoClause appendage had metastasized into rather a lot of
places, unfortunately, so that this patch is a great deal more complicated
than one might at first expect.

In particular, keeping EXPLAIN working for SELECT INTO and CREATE TABLE AS
subcommands required restructuring some EXPLAIN-related APIs.  Add-on code
that calls ExplainOnePlan or ExplainOneUtility, or uses
ExplainOneQuery_hook, will need adjustment.

Also, the cases PREPARE ... SELECT INTO and CREATE RULE ... SELECT INTO,
which formerly were accepted though undocumented, are no longer accepted.
The PREPARE case can be replaced with use of CREATE TABLE AS EXECUTE.
The CREATE RULE case doesn't seem to have much real-world use (since the
rule would work only once before failing with "table already exists"),
so we'll not bother with that one.

Both SELECT INTO and CREATE TABLE AS still return a command tag of
"SELECT nnnn".  There was some discussion of returning "CREATE TABLE nnnn",
but for the moment backwards compatibility wins the day.

Andres Freund and Tom Lane

12 years agopg_dump: fix double free of query results
Alvaro Herrera [Mon, 19 Mar 2012 20:52:20 +0000 (17:52 -0300)]
pg_dump: fix double free of query results

This bug was introduced while refactoring in commit 1631598e --- no need
to back-patch.

Bug report and fix from Joachim Wieland.

12 years agoplperl: Package-qualify _TD
Alvaro Herrera [Mon, 19 Mar 2012 20:29:05 +0000 (17:29 -0300)]
plperl: Package-qualify _TD

Failing to do so causes trigger invocation to fail when they are nested
within a function invocation that changes the current package.

Backpatch to 9.1; previous releases used a different method to obtain
_TD.  Per bug report from Mark Murawski (bug #6511)

Author: Alex Hunsaker

12 years agoIn pg_upgrade, remove dependency on pg_config, as that might not be in
Bruce Momjian [Mon, 19 Mar 2012 13:31:50 +0000 (09:31 -0400)]
In pg_upgrade, remove dependency on pg_config, as that might not be in
the non-development install.  Instead, use the LOAD mechanism to check
for the pg_upgrade_support shared object, like we do for other shared
object checks.

Backpatch to 9.1.

Report from Àlvaro

12 years agoHonor inputdir and outputdir when converting regression files.
Andrew Dunstan [Sat, 17 Mar 2012 21:24:15 +0000 (17:24 -0400)]
Honor inputdir and outputdir when converting regression files.

When converting source files, pg_regress' inputdir and outputdir options were
ignored when computing the locations of the destination files. In consequence,
these options were effectively unusable when the regression inputs need to
be adjusted by pg_regress. This patch makes pg_regress put the converted files
in the same place that these options specify non-converted input or results
files are to be found. Backpatched to all live branches.

12 years agoIn pg_upgrade, move new echo quote define into include file.
Bruce Momjian [Sat, 17 Mar 2012 13:56:47 +0000 (09:56 -0400)]
In pg_upgrade, move new echo quote define into include file.

12 years agoAdd note about column privilege behavior to REVOKE reference page
Peter Eisentraut [Sat, 17 Mar 2012 08:34:00 +0000 (10:34 +0200)]
Add note about column privilege behavior to REVOKE reference page

suggested by Josh Berkus

12 years agoIn pg_upgrade, create a script to incrementally generate more accurate
Bruce Momjian [Fri, 16 Mar 2012 22:54:11 +0000 (18:54 -0400)]
In pg_upgrade, create a script to incrementally generate more accurate
optimizer statistics so the cluster can be made available sooner.

12 years agolibpq: Fix minor memory leaks
Peter Eisentraut [Fri, 16 Mar 2012 18:30:19 +0000 (20:30 +0200)]
libpq: Fix minor memory leaks

When using connection info arrays with a conninfo string in the dbname
slot, some memory would be leaked if an error occurred while
processing the following array slots.

found by Coverity

12 years agopsql: Remove inappropriate const qualifiers
Peter Eisentraut [Fri, 16 Mar 2012 18:03:38 +0000 (20:03 +0200)]
psql: Remove inappropriate const qualifiers

Since mbvalidate() can alter the string it validates, having the
callers claim that the strings they accept are const is inappropriate.

12 years agopg_dump: Fix crash with invalid pg_cast row
Peter Eisentraut [Fri, 16 Mar 2012 17:55:41 +0000 (19:55 +0200)]
pg_dump: Fix crash with invalid pg_cast row

An invalid combination of pg_cast.castfunc and pg_cast.castmethod
would result in a segmentation fault.  Now it prints a warning.

found by Coverity

12 years agopg_restore: Fix memory and file descriptor leak with directory format
Peter Eisentraut [Fri, 16 Mar 2012 17:53:31 +0000 (19:53 +0200)]
pg_restore: Fix memory and file descriptor leak with directory format

found by Coverity

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.