Tom Lane [Thu, 19 Jul 2001 02:12:35 +0000 (02:12 +0000)]
Arrange to recycle old XLOG log segment files as new segment files,
rather than deleting them only to have to create more. Steady state
is 2*CHECKPOINT_SEGMENTS + WAL_FILES + 1 segment files, which will
simply be renamed rather than constantly deleted and recreated.
To make this safe, added current XLOG file/offset number to page
header of XLOG pages, so that an un-overwritten page from an old
incarnation of a logfile can be reliably told from a valid page.
This change means that if you try to restart postmaster in a CVS-tip
database after installing the change, you'll get a complaint about
bad XLOG page magic number. If you don't want to initdb, run
contrib/pg_resetxlog (and be sure you shut down the old postmaster
cleanly).
Tom Lane [Tue, 17 Jul 2001 00:30:35 +0000 (00:30 +0000)]
Avoid assuming that pg_index table entries have unique OIDs, or even
that they have OIDs at all (the primary key for this table is indexrelid,
not OID). Simplify overly complex query to get name of primary key.
Tom Lane [Mon, 16 Jul 2001 22:43:34 +0000 (22:43 +0000)]
Improve documentation about reasoning behind the order of operations
in GetSnapshotData, GetNewTransactionId, CommitTransaction, AbortTransaction,
etc. Correct race condition in transaction status testing in
HeapTupleSatisfiesVacuum --- this wasn't important for old VACUUM with
exclusive lock on its table, but it sure is important now. All per
pghackers discussion 7/11/01 and 7/12/01.
Tom Lane [Mon, 16 Jul 2001 17:57:02 +0000 (17:57 +0000)]
Do not push down quals into subqueries that have LIMIT/OFFSET clauses,
since the added qual could change the set of rows that get past the
LIMIT. Per discussion on pgsql-sql 7/15/01.
Tom Lane [Mon, 16 Jul 2001 05:07:00 +0000 (05:07 +0000)]
Partial indexes work again, courtesy of Martijn van Oosterhout.
Note: I didn't force an initdb, figuring that one today was enough.
However, there is a new function in pg_proc.h, and pg_dump won't be
able to dump partial indexes until you add that function.
Tom Lane [Sun, 15 Jul 2001 22:48:19 +0000 (22:48 +0000)]
Restructure index AM interface for index building and index tuple deletion,
per previous discussion on pghackers. Most of the duplicate code in
different AMs' ambuild routines has been moved out to a common routine
in index.c; this means that all index types now do the right things about
inserting recently-dead tuples, etc. (I also removed support for EXTEND
INDEX in the ambuild routines, since that's about to go away anyway, and
it cluttered the code a lot.) The retail indextuple deletion routines have
been replaced by a "bulk delete" routine in which the indexscan is inside
the access method. I haven't pushed this change as far as it should go yet,
but it should allow considerable simplification of the internal bookkeeping
for deletions. Also, add flag columns to pg_am to eliminate various
hardcoded tests on AM OIDs, and remove unused pg_am columns.
Fix rtree and gist index types to not attempt to store NULLs; before this,
gist usually crashed, while rtree managed not to crash but computed wacko
bounding boxes for NULL entries (which might have had something to do with
the performance problems we've heard about occasionally).
Add AtEOXact routines to hash, rtree, and gist, all of which have static
state that needs to be reset after an error. We discovered this need long
ago for btree, but missed the other guys.
Oh, one more thing: concurrent VACUUM is now the default.
Peter Eisentraut [Sun, 15 Jul 2001 11:43:55 +0000 (11:43 +0000)]
Change xgettext rule to run in the source tree, so we don't have the
absolute paths of the source tree in the po files. Also, run msgfmt with
-c option in maintainer-check.
Bruce Momjian [Sun, 15 Jul 2001 04:21:26 +0000 (04:21 +0000)]
The attached patch fixes problems with the JDBC driver handling long
null terminated strings. The FE/BE protocol sends in some cases null
terminated strings to the client. The docs for the FE/BE protocol state
that there is no limit on the size of a null terminated string sent to
the client and a client should be coded using an expanding buffer to
deal with large strings. The old code did not do this and gave an error
if a null terminated string was greater than either 4 or 8K. It appears
that with the advent of TOAST very long SQL statements are becoming more
common, and apparently some error messages from the backend include the
SQL statement thus easily exceeding the 8K limit in the old code.
In fixing I also cleaned up some calls in the JDBC fastpath code that
were not doing character set conversion under multibyte, and removed
some methods that were no longer needed. I also removed a potential
threading problem with a shared variable that was being used in
Connection.java.
Thanks to Steve Wampler for discovering the problem and sending the
initial diffs that were the basis of this patch.
Tom Lane [Fri, 13 Jul 2001 22:55:59 +0000 (22:55 +0000)]
Initial implementation of concurrent VACUUM. Ifdef'd out for the moment,
because index locking issues are not handled correctly yet. Need to go
work on the index AMs next.
Tom Lane [Thu, 12 Jul 2001 04:11:13 +0000 (04:11 +0000)]
Create a new HeapTupleSatisfiesVacuum() routine in tqual.c that embodies the
validity checking rules for VACUUM. Make some other rearrangements of the
VACUUM code to allow more code to be shared between full and lazy VACUUM.
Minor code cleanups and added comments for TransactionId manipulations.
Tom Lane [Wed, 11 Jul 2001 19:03:07 +0000 (19:03 +0000)]
Instead of believing SOMAXCONN from the system header files (which is
a lie on many Unixen), invoke listen() with MIN(MaxBackends*2, 10000).
The clamp value 10000 is configurable in config.h.in, if that proves
to be necessary --- hopefully it won't.
Bruce Momjian [Wed, 11 Jul 2001 18:54:19 +0000 (18:54 +0000)]
I updated the patch to use the SET AUTHORIZATION { INVOKER | DEFINER }
terminology. Also, the function owner is now determined and saved at compile
time (no gotchas here, right?)/
Tom Lane [Wed, 11 Jul 2001 18:38:07 +0000 (18:38 +0000)]
Remove direct calls of index_insert(), instead use ExecInsertIndexTuples().
This makes VACUUM work properly with partial indexes, and avoids memory
leakage with functional indexes. Also, suppress complaint about fewer
index tuples than heap tuples when the index is a partial index.
From Martijn van Oosterhout.
Tom Lane [Tue, 10 Jul 2001 22:09:29 +0000 (22:09 +0000)]
Changes from Vince Vielhaber to allow the optional clauses of CREATE
USER and ALTER USER to appear in any order, not only the fixed order
they used to be required to appear in.
Also, some changes from Tom Lane to create a FULL option for VACUUM;
it doesn't do anything yet, but I needed to change many of the same
files to make that happen, so now seemed like a good time.
Peter Eisentraut [Tue, 10 Jul 2001 16:33:02 +0000 (16:33 +0000)]
Support fake root install, separate build dir, dependency tracking, our
choice of compiler and flags, uninstall, and peculiar Python installation
layouts for PyGreSql. Also install into site-packages now, as officially
recommended. And pgdb.py is also installed now, used to be forgotten.
Tom Lane [Tue, 10 Jul 2001 01:41:47 +0000 (01:41 +0000)]
Remove formatter's assumption that year would never exceed four digits.
Enforce MAXTZLEN for all datestyles, not just some. Remove macro
definitions that were redundant with datetime.h.
Tom Lane [Mon, 9 Jul 2001 23:50:32 +0000 (23:50 +0000)]
Fix rule rewriter so that new ordering of ON INSERT actions applies
in cases of qualified rules as well as unqualified ones. Tweak rules
test to avoid cluttering output with dummy SELECT results. Update
documentation to match code.
* NULLs are sorted differently in 7.2
* table correlation names are supported
* GROUP BY, ORDER BY unrelated is supported since 6.4
* ESCAPE/LIKE only supported since 7.1
* outer joins only since 7.1
* preferred term for procedure is "function"
* preferred term for catalog is "database"
* supports SELECT for UPDATE since 6.5
* supports subqueries
* supports UNION; supports UNION ALL since 7.1
* update some of the max lengths to match reality
* rearrange some functions to match the order in the spec
for easier maintenance
Resolve a number of oddities in the Java build. First, remove the weird
redirections between the build files, which didn't work completely. Now
you just go to the directory of your choice and run make. Clean up the
build files to have a logical order, fix the unnecessary rebuilds, prevent
the deleting targets from removing files they're not responsible for. Ant
1.3 does not have a bug. It deletes directories just fine if you follow
the documentation.
Tom Lane [Fri, 6 Jul 2001 21:04:26 +0000 (21:04 +0000)]
Implement LockBufferForCleanup(), which will allow concurrent VACUUM
to wait until it's safe to remove tuples and compact free space in a
shared buffer page. Miscellaneous small code cleanups in bufmgr, too.
Repair libpq to follow protocol by not sending Terminate messages before
the startup exchange is complete. Also make sure that packets defined as
single bytes aren't sent with a trailing '\0'.
Tom Lane [Thu, 5 Jul 2001 19:33:35 +0000 (19:33 +0000)]
Don't assume that max offset number stays fixed on a page when we're
not holding a pin on the page. Use double instead of long to count
rows in relation, so that code still works for > LONG_MAX rows in rel.
Tom Lane [Wed, 4 Jul 2001 17:36:54 +0000 (17:36 +0000)]
Prohibit a column from appearing twice in a PRIMARY KEY or UNIQUE
constraint. This case (a) is useless, (b) violates SQL92, and
(c) is certain to cause a failure downstream when we try to create
an index with duplicated column names. So give an appropriate error
message instead of letting the index failure occur. Per report from
Colin Strickland. NOTE: currently, CREATE INDEX fooi ON foo(f1,f1)
still fails with 'cannot insert duplicate key' error. Should we
change that too? What about functional indexes?
Bruce Momjian [Wed, 4 Jul 2001 15:08:32 +0000 (15:08 +0000)]
This patch moves the setting of the timezone on the SimpleDateFormat
object inside the initialization section instead of doing it everytime
the setTimestamp method is called. Thanks to Dave Harkness for this
suggestion.
Bruce Momjian [Wed, 4 Jul 2001 15:07:54 +0000 (15:07 +0000)]
Attached is a patch to remove the ConnectionHook functionality and thus
the JDK 1.3 dependency. For a further explanation see my posting to the
JDBC list on Friday, explaining why this is being done.