Tom Lane [Wed, 27 Jun 2001 23:31:40 +0000 (23:31 +0000)]
Install infrastructure for shared-memory free space map. Doesn't actually
do anything yet, but it has the necessary connections to initialization
and so forth. Make some gestures towards allowing number of blocks in
a relation to be BlockNumber, ie, unsigned int, rather than signed int.
(I doubt I got all the places that are sloppy about it, yet.) On the
way, replace the hardwired NLOCKS_PER_XACT fudge factor with a GUC
variable.
Tom Lane [Mon, 25 Jun 2001 21:11:45 +0000 (21:11 +0000)]
Optimizer can now estimate selectivity of IS NULL, IS NOT NULL,
IS TRUE, etc, with some degree of verisimilitude. Split out
selectivity support functions from builtins.h into a new header
file selfuncs.h, so as to reduce the number of header files builtins.h
must depend on. Fix a few missing inclusions exposed thereby.
From Joe Conway, with some kibitzing from Tom Lane.
Bruce Momjian [Sat, 23 Jun 2001 22:23:49 +0000 (22:23 +0000)]
> Marko Kreen <marko@l-t.ee> writes:
> > secure_ctx changes too. it will be PGC_BACKEND after '-p'.
>
> Oh, okay, I missed that part. Could we see the total state of the
> patch --- ie, a diff against current CVS, not a bunch of deltas?
> I've gotten confused about what's in and what's out.
Ok, here it is. Cleared the ctx comment too - after -p
it will be PGC_BACKEND in any case.
Bruce Momjian [Sat, 23 Jun 2001 02:56:23 +0000 (02:56 +0000)]
Here the latest version and first working release of Ora2Pg a tool to export
Oracle database to PostgreSQL.
It currently dump the database schema (tables, views, sequences,
indexes, grants), with primary, unique and foreign keys into PostgreSQL
syntax without editing the SQL code generated. You can dump only a
particular schema from the Oracle database.
Functions, procedures and triggers with SQL or PLSQL code generated must
be reviewed to match the PostgreSQL syntax. Some usefull recommandation
on porting Oracle to PostgreSQL can be found at
http://techdocs.postgresql.org/
under the "Converting from other Databases to PostgreSQL" Oracle part. I
just
notice one thing more is that the trunc() function in Oracle is the same for
number
or date so be carefull when porting to PostgreSQL to use trunc() for number
and
date_trunc() for date.
I will add more precision in type NUMBER conversion based on length to match
as closest as possible all rich PostgreSQL numerics type. But it seems not to be
urgent as it seems that Oracle DBAs only create number with length 22 (default)
Space seems not to be their problem...
Jan Wieck [Fri, 22 Jun 2001 19:16:24 +0000 (19:16 +0000)]
Statistical system views (yet without the config stuff, but
it's hard to keep such massive changes in sync with the tree
so I need to get it in and work from there now).
Tom Lane [Fri, 22 Jun 2001 00:04:59 +0000 (00:04 +0000)]
Add support to lock manager for conditionally locking a lock (ie,
return without waiting if we can't get the lock immediately).
Not used yet, but will be needed for concurrent VACUUM.
Peter Eisentraut [Wed, 20 Jun 2001 20:25:11 +0000 (20:25 +0000)]
Shared libraries should not be linked explicitly against -lc on FreeBSD
(see http://mail.gnu.org/pipermail/libtool/2000-July/001824.html). But
apparently it should still be present with -Bsymbolic.
Peter Eisentraut [Wed, 20 Jun 2001 18:07:56 +0000 (18:07 +0000)]
Handle reading of startup packet and authentication exchange after forking
a new postmaster child process. This should eliminate problems with
authentication blocking (e.g., ident, SSL init) and also reduce problems
with the accept queue filling up under heavy load.
The option to send elog output to a different file per backend (postgres -o)
has been disabled for now because the initialization would have to happen
in a different order and it's not clear we want to keep this anyway.
Add NUMERICOID to this script. This script can be run occasionally to
make sure that we are using the right #defines in pgmodule.c but the
OIDs are never actually expected to change.
Bruce Momjian [Wed, 20 Jun 2001 00:26:06 +0000 (00:26 +0000)]
Apparently, on some systems, ExtUtils::Embed and MakeMaker are slightly
broken, and its impossible to make a shared library when compiling with
both CCDLFLAGS and LDDLFAGS, you have to pick one or the other.
Bruce Momjian [Wed, 20 Jun 2001 00:04:44 +0000 (00:04 +0000)]
Attached is a patch to deal with the ones that I missed the first time
around. I tested this patch under Cygwin and Linux.
Note that I only changed dblink's Makefile in the most minimal way
to fix the link problem under Cygwin (i.e., use the link rule from
Makefile.shlib instead). dblink's Makefile should probably be further
patched to be consistent with the other PostgreSQL Makefiles.
Tom Lane [Tue, 19 Jun 2001 22:39:12 +0000 (22:39 +0000)]
Add IS UNKNOWN, IS NOT UNKNOWN boolean tests, fix the existing boolean
tests to return the correct results per SQL9x when given NULL inputs.
Reimplement these tests as well as IS [NOT] NULL to have their own
expression node types, instead of depending on special functions.
From Joe Conway, with a little help from Tom Lane.
Tom Lane [Tue, 19 Jun 2001 19:42:16 +0000 (19:42 +0000)]
Clean up some longstanding problems in shared-cache invalidation.
SI messages now include the relevant database OID, so that operations
in one database do not cause useless cache flushes in backends attached
to other databases. Declare SI messages properly using a union, to
eliminate the former assumption that Oid is the same size as int or Index.
Rewrite the nearly-unreadable code in inval.c, and document it better.
Arrange for catcache flushes at end of command/transaction to happen before
relcache flushes do --- this avoids loading a new tuple into the catcache
while setting up new relcache entry, only to have it be flushed again
immediately.
Hiroshi Inoue [Tue, 19 Jun 2001 02:17:06 +0000 (02:17 +0000)]
Changed the error handling as follows.
1) ERRORs cause an SQL_ERROR and the SQLSTATE='S1000'.
2) NOTICEs cause an SQL_SUCCESS_WITH_INFO and the succeeding
SQLError() returns the NOTICE message.
Bruce Momjian [Mon, 18 Jun 2001 21:40:06 +0000 (21:40 +0000)]
Well, after persuading cvsup and cvs that it _is_ possible to have local
modifiable repositories, I have a clean untrusted plperl patch to offer
you :)
Highlights:
* There's one perl interpreter used for both trusted and untrusted
procedures. I do think its unnecessary to keep two perl
interpreters around. If someone can break out from trusted "Safe" perl
mode, well, they can do what they want already. If someone disagrees, I
can change this.
* Opcode is not statically loaded anymore. Instead, we load Dynaloader,
which then can grab Opcode (and anything else you can 'use') on its own.
* Checked to work on FreeBSD 4.3 + perl 5.5.3 , OpenBSD 2.8 + perl5.6.1,
RedHat 6.2 + perl 5.5.3
* Uses ExtUtils::Embed to find what options are necessary to link with
perl shared libraries
* createlang is also updated, it can create untrusted perl using 'plperlu'
* Example script (assuming you have Mail::Sendmail installed):
create function foo() returns text as '
use Mail::Sendmail;
%mail = ( To => q(you@yourname.com),
From => q(me@here.com),
Message => "This is a very short message"
);
sendmail(%mail) or die $Mail::Sendmail::error;
return "OK. Log says:\n", $Mail::Sendmail::log;
' language 'plperlu';
Bruce Momjian [Mon, 18 Jun 2001 21:38:02 +0000 (21:38 +0000)]
The attached patch enables the contrib subtree to build cleanly under
Cygwin with the possible exception of mSQL-interface. Since I don't
have mSQL installed, I skipped this tool.
Except for dealing with a missing getopt.h (oid2name) and HUGE (seg),
the bulk of the patch uses the standard PostgreSQL approach to deal with
Windows DLL issues.
I tested the build aspect of this patch under Cygwin and Linux without
any ill affects. Note that I did not actually attempt to test the code
for functionality.
The procedure to apply the patch is as follows:
$ # save the attachment as /tmp/contrib.patch
$ # change directory to the top of the PostgreSQL source tree
$ patch -p0 </tmp/contrib.patch
Bruce Momjian [Mon, 18 Jun 2001 16:14:44 +0000 (16:14 +0000)]
Add GUC setting for Australian timezones. Uses new GUC boolean callback
functions to clear date cache. Allow regression tests to pass when
timezone set.
Tom Lane [Mon, 18 Jun 2001 03:35:07 +0000 (03:35 +0000)]
Do some restructuring to improve performance of the catcaches. Teach
CatalogCacheFlushRelation (formerly called SystemCacheRelationFlushed)
how to distinguish tuples it should flush from those it needn't; this
means a relcache flush event now only removes the catcache entries
it ought to, rather than zapping the caches completely as it used to.
Testing with the regression tests indicates that this considerably
improves the lifespan of catcache entries. Also, rearrange catcache
data structures so that the limit on number of cached tuples applies
globally across all the catcaches, rather than being per-catcache.
It was a little silly to have the same size limit on both, say,
pg_attribute caches and pg_am caches (there being only four possible
rows in the latter...). Doing LRU removal across all the caches
instead of locally in each one should reduce cache reload traffic
in the more heavily used caches and improve the efficiency of
cache memory use.
Tom Lane [Sun, 17 Jun 2001 22:27:15 +0000 (22:27 +0000)]
Keep the list of to-be-NOTIFYed names in a plain List palloc'd in
TopTransactionContext, rather than using Dllist. This simplifies and
speeds up the code, and eliminates a former risk of coredump when
out of memory (since the old code didn't bother to check for malloc
failure). It also moves us one step closer to retiring Dllist...
Tom Lane [Sat, 16 Jun 2001 22:58:17 +0000 (22:58 +0000)]
Tweak startup sequence so that running out of PROC array slots is
detected sooner in backend startup, and is treated as an expected error
(it gives 'Sorry, too many clients already' now). This allows us not
to have to enforce the MaxBackends limit exactly in the postmaster.
Also, remove ProcRemove() and fold its functionality into ProcKill().
There's no good reason for a backend not to be responsible for removing
its PROC entry, and there are lots of good reasons for the postmaster
not to be touching shared-memory data structures.
Tom Lane [Sat, 16 Jun 2001 18:59:31 +0000 (18:59 +0000)]
It turns out that the relcache thinks it can distinguish different
rules and triggers by OID. So, even though we have no cross-references
in the system catalogs to pg_rewrite.oid or pg_trigger.oid, we'd better
have unique indexes on them. Put back pg_rewrite_oid_index, which I
mistakenly removed a few days ago, and add pg_trigger_oid_index.
Tom Lane [Thu, 14 Jun 2001 19:47:25 +0000 (19:47 +0000)]
Revoke public read access from pg_statistic, create new system view
pg_stats to provide controlled (and, hopefully, more readable) access
to statistics. Comments on definition of pg_stats welcome.
I didn't force initdb, but the rules regress test will fail until you
do one.
Tom Lane [Thu, 14 Jun 2001 01:09:22 +0000 (01:09 +0000)]
has_table_privilege functions from Joe Conway (with some kibitzing from
Tom Lane). For the moment, only the OID/name variants are provided.
I didn't force initdb, but the additions to the 'privileges' regress
test won't pass until you do one.
Tom Lane [Wed, 13 Jun 2001 21:44:41 +0000 (21:44 +0000)]
Allow a non-superuser database owner to vacuum all tables in his
database, including system catalogs (but not the shared catalogs,
since they don't really belong to his database). This is per recent
mailing list discussion. Clean up some other code that also checks
for database ownerness by introducing a test function is_dbadmin().
Tom Lane [Tue, 12 Jun 2001 22:54:06 +0000 (22:54 +0000)]
Extend GUC concepts of parse_hook and assign_hook to all four supported
datatypes, not only strings. parse_hook is useless for bool, I suppose,
but it seems possibly useful for int and double to apply variable-specific
constraints that are more complex than simple range limits. assign_hook
is definitely useful for all datatypes --- we need it right now for bool
to support date cache reset when changing Australian timezone rule setting.
Also, clean up some residual problems with the reset all/show all patch,
including memory leaks and mistaken reset of PostPortNumber. It seems
best that RESET ALL not touch variables that don't have SUSET or
USERSET context.
Tom Lane [Tue, 12 Jun 2001 18:54:22 +0000 (18:54 +0000)]
Repair problem with multi-action rules in combination with any nontrivial
manipulation of rtable/jointree by planner. Rewriter was generating
actions that shared rtable/jointree substructure, which caused havoc
when planner got to the later actions that it'd already mucked up.