Tom Lane [Tue, 6 Jun 2006 17:59:58 +0000 (17:59 +0000)]
Make the planner estimate costs for nestloop inner indexscans on the basis
that the Mackert-Lohmann formula applies across all the repetitions of the
nestloop, not just each scan independently. We use the M-L formula to
estimate the number of pages fetched from the index as well as from the table;
that isn't what it was designed for, but it seems reasonably applicable
anyway. This makes large numbers of repetitions look much cheaper than
before, which accords with many reports we've received of overestimation
of the cost of a nestloop. Also, change the index access cost model to
charge random_page_cost per index leaf page touched, while explicitly
not counting anything for access to metapage or upper tree pages. This
may all need tweaking after we get some field experience, but in simple
tests it seems to be giving saner results than before. The main thing
is to get the infrastructure in place to let cost_index() and amcostestimate
functions take repeated scans into account at all. Per my recent proposal.
Note: this patch changes pg_proc.h, but I did not force initdb because
the changes are basically cosmetic --- the system does not look into
pg_proc to decide how to call an index amcostestimate function, and
there's no way to call such a function from SQL at all.
Bruce Momjian [Tue, 6 Jun 2006 16:27:23 +0000 (16:27 +0000)]
Add URL to RESET CONNECTION:
< notify the protocol when a RESET CONNECTION command is used.
> notify the protocol when a RESET CONNECTION command is used. See
> http://archives.postgresql.org/pgsql-patches/2006-04/msg00192.php
> for a partial implementation.
Teodor Sigaev [Tue, 6 Jun 2006 16:25:55 +0000 (16:25 +0000)]
Allow do not lexize words in substitution.
Docs will be submitted some later, now it's at
http://www.sai.msu.su/~megera/oddmuse/index.cgi/Thesaurus_dictionary
Tom Lane [Mon, 5 Jun 2006 20:56:33 +0000 (20:56 +0000)]
While making the seq_page_cost changes, I was struck by the fact that
cost_nonsequential_access() is really totally inappropriate for its only
remaining use, namely estimating I/O costs in cost_sort(). The routine
was designed on the assumption that disk caching might eliminate the need
for some re-reads on a random basis, but there's nothing very random in
that sense about sort's access pattern --- it'll always be picking up the
oldest outputs. If we had a good fix on the effective cache size we
might consider charging zero for I/O unless the sort temp file size
exceeds it, but that's probably putting much too much faith in the
parameter. Instead just drop the logic in favor of a fixed compromise
between seq_page_cost and random_page_cost per page of sort I/O.
Tom Lane [Mon, 5 Jun 2006 03:03:42 +0000 (03:03 +0000)]
Increase the default value of cpu_index_tuple_cost from 0.001 to 0.005.
This shouldn't affect simple indexscans much, while for bitmap scans that
are touching a lot of index rows, this seems to bring the estimates more
in line with reality. Per recent discussion.
Tom Lane [Mon, 5 Jun 2006 02:49:58 +0000 (02:49 +0000)]
Add a GUC parameter seq_page_cost, and use that everywhere we formerly
assumed that a sequential page fetch has cost 1.0. This patch doesn't
in itself change the system's behavior at all, but it opens the door to
people adopting other units of measurement for EXPLAIN costs. Also, if
we ever decide it's worth inventing per-tablespace access cost settings,
this change provides a workable intellectual framework for that.
Bruce Momjian [Sun, 4 Jun 2006 01:33:39 +0000 (01:33 +0000)]
Update:
< o Allow COPY to output from views
> o Allow COPY to output from SELECT 570c570
< Another idea would be to allow actual SELECT statements in a COPY.
> COPY should also be able to output views.
Tom Lane [Sat, 3 Jun 2006 17:36:10 +0000 (17:36 +0000)]
Don't choke during startup if the environment offers an invalid value
for LC_MESSAGES; instead, just press forward, leaving the effective setting
at 'C'. There is not any very good reason to complain when we are going
to replace the value soon with whatever postgresql.conf says. This change
should solve the occasionally-reported problem of initdb failing with
'failed to initialize lc_messages'; the current theory is that that is
a reflection of either wrong LANG/LC_MESSAGES or completely broken locale
support.
Bruce Momjian [Sat, 3 Jun 2006 04:00:01 +0000 (04:00 +0000)]
Record location of partial patch :
> * Allow WAL information to recover corrupted pg_controldata
>
> See partially completed patch and additional work required at
> http://archives.postgresql.org/pgsql-patches/2006-06/msg00025.php.
>
Tom Lane [Thu, 1 Jun 2006 00:15:36 +0000 (00:15 +0000)]
Fix up hack to suppress escape_string_warning so that it actually works
and there's only one place that's a kluge, ie, appendStringLiteralConn.
Note that pg_dump itself doesn't use appendStringLiteralConn, so its
behavior is not affected; only the other utility programs care.
Tom Lane [Wed, 31 May 2006 20:58:09 +0000 (20:58 +0000)]
Make PG_MODULE_MAGIC required in shared libraries that are loaded into
the server. Per discussion, there seems no point in a waiting period
before making this required.
Teodor Sigaev [Wed, 31 May 2006 14:05:31 +0000 (14:05 +0000)]
Add thesaurus dictionary which can replace N>0 lexemes by M>0 lexemes.
It required some changes in lexize algorithm, but interface with
dictionaries stays compatible with old dictionaries.
Funded by Georgia Public Library Service and LibLime, Inc.
Bruce Momjian [Wed, 31 May 2006 11:02:42 +0000 (11:02 +0000)]
Escape processing patch:
o turns off escape_string_warning in pg_dumpall.c
o optionally use E'' for \password (undocumented option?)
o honor standard_conforming-strings for \copy (but not
support literal E'' strings)
o optionally use E'' for \d commands
o turn off escape_string_warning for createdb, createuser,
droplang
Tom Lane [Tue, 30 May 2006 21:21:30 +0000 (21:21 +0000)]
Code review for magic-block patch. Remove separate header file pgmagic.h,
as this seems only likely to create headaches for module developers. Put
the macro in the pre-existing fmgr.h file instead. Avoid being too cute
about how many fields we can cram into a word, and avoid trying to fetch
from a library we've already unlinked.
Along the way, it occurred to me that the magic block really ought to be
'const' so it can be stored in the program text area. Do the same for
the existing data blocks for PG_FUNCTION_INFO_V1 functions.
Tom Lane [Tue, 30 May 2006 19:24:25 +0000 (19:24 +0000)]
Code review for EXPLAIN patch. Fix some typos, make it behave sanely
across multiple loops, get rid of the shaky assumption that exactly one
tuple is returned per node iteration.
Tom Lane [Tue, 30 May 2006 15:48:20 +0000 (15:48 +0000)]
Update ppport.h to not cause warnings with newest Perl versions.
This is just the minimal necessary change; we might want to adopt
later PPPort output instead.
Bruce Momjian [Tue, 30 May 2006 14:09:32 +0000 (14:09 +0000)]
Add pgmagic header block to store compile-time constants:
It now only checks four things:
Major version number (7.4 or 8.1 for example)
NAMEDATALEN
FUNC_MAX_ARGS
INDEX_MAX_KEYS
The three constants were chosen because:
1. We document them in the config page in the docs
2. We mark them as changable in pg_config_manual.h
3. Changing any of these will break some of the more popular modules:
FUNC_MAX_ARGS changes fmgr interface, every module uses this NAMEDATALEN
changes syscache interface, every PL as well as tsearch uses this
INDEX_MAX_KEYS breaks tsearch and anything using GiST.
Bruce Momjian [Tue, 30 May 2006 12:56:45 +0000 (12:56 +0000)]
Re-defines SHA2 symbols so that they would not conflict with certain
versions of OpenSSL. If your OpenSSL does not contain SHA2, then there
should be no conflict. But ofcourse, if someone upgrades OpenSSL,
server starts crashing.
Bruce Momjian [Tue, 30 May 2006 11:40:21 +0000 (11:40 +0000)]
Update PL documentation:
An article at WebProNews quoted from the PG docs as to the merits of
stored procedures. I have added a bit more material on their merits,
as well as making a few changes to improve the introductions to
PL/Perl and PL/Tcl.
Delay write of pg_stats file to once every five minutes, during
shutdown, or when requested by a backend:
It changes so the file is only written once every 5 minutes (changeable
of course, I just picked something) instead of once every half second.
It's still written when the stats collector shuts down, just as before.
And it is now also written on backend request. A backend requests a
rewrite by simply sending a special stats message. It operates on the
assumption that the backends aren't actually going to read the
statistics file very often, compared to how frequent it's written today.
Andrew Dunstan [Mon, 29 May 2006 13:51:23 +0000 (13:51 +0000)]
Make plperl's $_TD trigger data a global rather than a lexical variable,
with a fresh local value for each invocation, to avoid unexpected sharing
violations. Per recent -hackers discussion.
Teodor Sigaev [Mon, 29 May 2006 12:50:06 +0000 (12:50 +0000)]
Som improve page split in multicolumn GiST index.
If user picksplit on n-th column generate equals
left and right unions then it calls picksplit on n+1-th
column.
Tom Lane [Sun, 28 May 2006 21:13:54 +0000 (21:13 +0000)]
Fix up pg_dump to do string escaping fully correctly for client encoding
and standard_conforming_strings; likewise for the other client programs
that need it. As per previous discussion, a pg_dump dump now conforms
to the standard_conforming_strings setting of the source database.
We don't use E'' syntax in the dump, thereby improving portability of
the SQL. I added a SET escape_strings_warning = off command to keep
the dumps from getting a lot of back-chatter from that.
Tom Lane [Sat, 27 May 2006 19:45:52 +0000 (19:45 +0000)]
Revert ill-considered change to plpgsql: it should not rely on the
current setting of standard_conforming_strings to decide how to quote
strings that will be used later. There is much more to do here but
this particular change breaks the build on Windows, so fix it now.
Tom Lane [Sat, 27 May 2006 18:07:06 +0000 (18:07 +0000)]
Fix initdb to properly escape quotes and backslashes in the supplied
superuser password, and also in the paths of the various files it issues
SQL COPY commands for. Per bug #2424.
Tom Lane [Sat, 27 May 2006 17:38:46 +0000 (17:38 +0000)]
Re-introduce the yylex filter function formerly used to support UNION
JOIN, which I removed in a recent fit of over-optimism that we wouldn't
have any future use for it. Now it's needed to support disambiguating
WITH CHECK OPTION from WITH TIME ZONE. As proof of concept, add stub
grammar productions for WITH CHECK OPTION.
Bruce Momjian [Fri, 26 May 2006 23:48:54 +0000 (23:48 +0000)]
Use E'' strings internally only when standard_conforming_strings =
'off'. This allows pg_dump output with standard_conforming_strings =
'on' to generate proper strings that can be loaded into other databases
without the backslash doubling we typically do. I have added the
dumping of the standard_conforming_strings value to pg_dump.
I also added standard backslash handling for plpgsql.
Tom Lane [Fri, 26 May 2006 22:50:02 +0000 (22:50 +0000)]
Further hacking on performance of COPY OUT. It seems that fwrite()'s
per-call overhead is quite significant, at least on Linux: whatever
it's doing is more than just shoving the bytes into a buffer. Buffering
the data so we can call fwrite() just once per row seems to be a win.
Andrew Dunstan [Fri, 26 May 2006 17:34:16 +0000 (17:34 +0000)]
Add table_name and table_schema to plperl trigger data. relname is
kept but now deprecated. Patch from Adam Sjøgren. Add regression test to
show plperl trigger data (Andrew).
TBD: apply similar changes to plpgsql, plpython and pltcl.
Tom Lane [Wed, 24 May 2006 21:20:11 +0000 (21:20 +0000)]
Fix pg_restore to process BLOB COMMENT entries correctly; they aren't
really tables and shouldn't get DISABLE TRIGGER processing. Per bug
#2452 from Robert Treat.
Bruce Momjian [Wed, 24 May 2006 18:12:38 +0000 (18:12 +0000)]
Remove pg_attribute detail, add URL
< pg_attribute.attislocal has to be set to 'false' for ADD, and
< pg_attribute.attinhcount adjusted appropriately
> See http://archives.postgresql.org/pgsql-hackers/2006-05/msg00988.php.
Teodor Sigaev [Wed, 24 May 2006 11:01:39 +0000 (11:01 +0000)]
* Add support NULL to GiST.
* some refactoring and simplify code int gistutil.c and gist.c
* now in some cases it can be called used-defined
picksplit method for non-first column in index, but here
is a place to do more.
* small fix of docs related to support NULL.
Tom Lane [Tue, 23 May 2006 21:37:59 +0000 (21:37 +0000)]
Tweak writetup_heap/readtup_heap to avoid storing the tuple identity
and transaction visibility fields of tuples being sorted. These are
always uninteresting in a tuple being sorted (if the fields were actually
selected, they'd have been pulled out into user columns beforehand).
This saves about 24 bytes per row being sorted, which is a useful savings
for any but the widest of sort rows. Per recent discussion.
Bruce Momjian [Tue, 23 May 2006 20:57:53 +0000 (20:57 +0000)]
Add:
> o Add ALTER TABLE tab ADD/DROP INHERITS parent
>
> pg_attribute.attislocal has to be set to 'false' for ADD, and
> pg_attribute.attinhcount adjusted appropriately
>