.\" .\" release3.0.me: postgres version 3.0 release notes. print using .\" psroff -me. .\" .nr pi 3n .nr si 2n .nr pp 11 .nr tp 11 .nr sp 11 .de RV .ie "\\$2"" \ \{\ . ds VN "0.0 . ds VD "(No date) . ds VT "UNAUDITED VERSION .\} .el \ \{\ . ds VN \\$3 . ds VD \\$4 . ie "\\$7"Exp" \ . ds VT "DRAFT . el \ . ds VT \\$7 .\} .. .de CW \\f(CW\\$1\\fP\\$2 .. .RV $Header: /data/01/postgres/src/old_doc/RCS/release3.0.me,v 1.8 1991/08/18 05:20:58 kemnitz Exp $ .ds PG "\\s-2POSTGRES\\s0 .ds PQ "\\s-2POSTQUEL\\s0 .ce 99 .ft B .ps 14 \*(PG Version 3 .sp 0.5v Release Notes .sp .ps 11 \*(VD .ce 0 .he '\*(PG V3.0 Release Notes'%'\*(VD' .sp 2 .sh 1 "Introduction" .pp These are the release notes for version 3.0 of the \*(PG database system from UC Berkeley. The database system and its installation procedure are covered in detail in the setup document for this release. Here, we cover only the most important differences from release 2.1 and earlier versions of the system. .sh 1 "Changes to \*(PQ" .pp The \*(PQ query language has been changed to better support remote access to databases over a network, and to provide more control over data storage. .sh 2 "Createdb, destroydb" .pp The .i createdb and .i destroydb commands have been added to the query language. Syntax is .CW "createdb dbname" or .CW "destroydb dbname" . There must be a database open while these commands are being run. We recommend running these queries from inside the .q template1 database. .pp This change was made in order to permit users to create and destroy databases without logging onto the machine on which the postmaster is running. .sh 2 "Vacuum" .pp The .i vacuum command has been added to \*(PQ. This command causes the open database to be vacuumed. Vacuuming updates statistics on relations, cleans out records from aborted transactions, and sets commit times on committed transactions. Syntax is .CW vacuum . .pp This query may be submitted at any time. It is a good idea to update statistics after copying in a large file, or deleting a large number of records from a class. .pp This change was made in order to get rid of the .i vacuum Unix program, which was very large and required maintenance separate from the \*(PG backend. .sh 2 "Create syntax changes" .pp The .i create command for creating new classes has some new optional specifications. The syntax .(b .ft CW create foo (a = int4) store = "magnetic disk" .ft .)b will cause the new class .q foo to be created, and to be stored on magnetic disk. Similarly, .(b .ft CW create foo (a = int4) archive = heavy arch_store = "magnetic disk" .ft .)b creates class .q foo as an archived class; historical data is stored on magnetic disk. .pp As the second example above implies, archival of user data is supported in the current release. Scans of archived data are planned and executed for historical queries, and the vacuum cleaner (see .i vacuum , above) moves data from the current store to the archive. .pp In the released system, the only possible location for user data is .q "magnetic disk" ; this is also the default. The additional specifications for storage managers were added to support research being done at Berkeley. .pp Some caveats here: Since .q store and .q arch_store are new keywords, they may not be used in queries except as shown above. In addition, if an archived relation is destroyed, historical queries are no longer guaranteed to return the correct answer. .sh 2 "Portals" .pp The command .(b .ft CW retrieve portal myportal (pg_user.all) .ft .)b in release 2.1 and earlier versions of \*(PG could be issued as a stand-alone transaction. This violated isolation requirements, since the results from the retrieve were not actually instantiated until they were .CW fetch ed, but locks were released on successful completion of the .CW retrieve . .lp As of release 3.0, operations on portals must be done inside of \f(CWbegin\fP/\f(CWend\fP transaction blocks. This change may require you to rewrite libpq application programs, if your applications use portals outside of transaction blocks. The correct interaction is now .(b .ft CW begin retrieve portal myportal (pg_user.all) fetch 10 in myportal \&... close myportal end .ft .)b .lp If the user fails to close a portal before the end of the transaction block, it is freed automatically, and all resources it holds are released. .sh 1 "Unix command changes" .pp The names and behavior of some Unix commands shipped with \*(PG have changed in the new release. .sh 2 "Createdb, Destroydb" .pp The .i createdb and .i destroydb commands are now shell scripts, rather than compiled programs, and submit queries via the terminal monitor. The postmaster must be running in order for these scripts to work. For the sake of backward compatibility, we have provided two different scripts (createdb.sh and destroydb.sh) that run without using the postmaster or shared resources. Use of these two scripts is discouraged; if at all possible, use .i createdb and .i destroydb instead. .pp This change was made to make creating and destroying databases from remote machines easier, and to get rid of extra binaries. Since \*(PQ now provides both of these as query language commands, special programs are no longer necessary. .sh 2 "Vacuum, Vcontrol" .pp Since the query language now supports the .i vacuum command, the .i vacuum Unix program has been replaced by a shell script which submits a query via the terminal monitor. The .i vctontrol program is no longer shipped with \*(PG. The syntax for the new script is .CW "vacuum dbname" . This opens a connection to a backend using database .q dbname and vacuums it. .pp We strongly recommend that production databases be vacuumed nightly. This will keep statistics current, and permit the query optimizer to make better choices in planning user queries. The easiest way to make this happen is to add entries of the form .CW "vacuum dbname" to your crontab file. .pp This change was made to get rid of the separate .i vacuum program, ease maintenance, and make the \*(PG distribution smaller. .sh 2 "Monitor" .pp The terminal monitor takes several new flags. The .q \-q flag suppresses conversational output. The new .q \-c flag causes the argument immediately following it to be executed as a \*(PQ query; this overrides the normal interactive behavior of the monitor. For example, .(b .ft CW monitor -c "retrieve (pg_class.all)" mydb .ft .)b executes the query .q "retrieve (pg_class.all)" on .q mydb , sending the output to stdout. After the query completes, the terminal monitor exits. .pp The \-c switch was added to make it easier to use \*(PQ queries in shell scripts. The \-q switch was added because .q "I live to serve you" stopped seeming cute at three o'clock one morning. .sh 2 "Initdb" .pp The .i initdb shell script initializes the template database for \*(PG. In general, it is run by the installation process, and need never be run by users. .i Initdb creates the data/ directory hierarchy in $POSTGRESHOME, sets up some control files, and populates the template database .i template1 . .pp This change was made to get rid of the .q "baby backend" that handled bootstrapping of \*(PG in previous releases. The functionality of that program was rolled into the standard backend. In addition, .i initdb substantially simplifies the installation procedure, and gets rid of confusing syntax required for .i createdb in earlier releases. .sh 1 "General System Changes" .pp The new release includes bug fixes to many problems reported in version 2.1 and previous releases. We have also sped the code up substantially. This section contains a partial list of enhancements made since release 2.1. .sh 2 "Multi-User Stability" .pp We have done extensive rewriting and testing of the code that handles concurrent access, and believe that \*(PG is much better suited for multi-user applications than it has been in the past. The lock manager has been entirely rewritten, and exclusion is guaranteed around critical sections. Standard two-phase locking is provided on user tables. System catalogs and indices have locking strategies that provide higher concurrency. .pp As a new feature, if one \*(PG backend terminates abnormally (dumps core), then all backends running concurrently are killed and restarted. This is to guarantee that any data corrupted by the errant backend are destroyed, and not flushed to disk or propagated to other backends. .pp We are particularly interested in reports of bugs caused by concurrent access to data by multiple users. .sh 2 "Storage Manager Switch" .pp Previous releases of \*(PG had built-in assumptions about the underlying storage medium. All data were assumed to reside on magnetic disk. Version 3.0 removes this assumption from the code. Data may reside on other media, at the discretion of the database administrator. Access is location-transparent. .pp At Berkeley, we have implemented a storage manager for a Sony optical disk WORM jukebox and for persistent main memory. Neither of these is supported in the released system. .sh 2 "Executor Rewrite" .pp The query executor has been almost completely rewritten, in order to simplify code maintenance and to speed up execution. Several memory leaks have been plugged, and performance has been substantially improved. .sh 2 "Query Rewrite Rule System" .pp The query rewrite rule system has been completely rewritten for this release. This version implements the almost all the rewrite rule semantics specified in "On Rules, Procedures, Caching, and Views" by Stonebraker et al. and closely parallels the 'instance' level rule system. It offers performance advantages over 'instance' rules in some applications. .pp Views, versions, and \*(PQ functions are now supported via the rewrite system. See the 'define rule(commands)' section of the reference manual for details. .sh 2 "Aggregates" .pp Aggregates (or column-valued functions) are now supported. The Reference Manual describes how to define and use aggregates in detail. .pp .sh 2 "Large Objects" .pp Large Objects are now supported as "filename as an ADT". The Reference Manual describes the large object implementation in detail. The 3.0 implementation is the first-cut implementation; a more fully-featured implementation will be available in Release 4.0. .pp .sh 1 "Known Bugs" .pp There are a few known bugs that we were unable to fix in the current release. .sh 2 "Indices and the Instance Level Rule System" .pp The Instance Level Rule System essentially ignores indices, so if you are defining a rule on an indexed attribute, you should use the Query Rewrite rule system. .sh 2 "Retrieve Into and failed backends" .pp If a backend fails while in the course of executing a Retrieve Into query, a spurious file, with the same name as the target class of the Retrieve Into, will be left in the database directory. This file can be safely deleted by the database DBA. .sh 2 "Large Objects and failed backends" .pp If a backend fails while it is manipulating large objects, spurious large object files will be left in the database directory. Also, there is no mechanism for getting rid of large objects which are returned by functions but not stored in instances. .sh 2 "Postgres User Id's and Unix UID's" .pp The userid of a Postgres registered user .b must match the user's UNIX user id. In the release, the user id of the Postgres user in /etc/passwd is presumed to be 6. If it is not, Postgres will not run properly. This can be overcome for those who do not wish to renumber the userid field in their password files by editing the file .lp .b src/lib/H/catalog/pg_user.h .lp and changing the "usesysid" field for the Postgres user to the one used in /etc/passwd at your site .b before compiling and installing Postgres. The line in this file you wish to change looks like this: .(1 DATA(insert OID = 6 ( postgres 6 t t t t )); .)l .lp If you change the two 6's above to the value used for the "postgres" user in your /etc/passwd file, this problem can be avoided. .pp .sh 1 "Machine-dependent Problems" .pp Postgres has been known to crash SunOS 4.0.3 on Sparcstations, due to a SunOS bug in shared memory. It appears to work on SunOS 4.1 and higher, so any reports of crashes on SunOS 4.1 and higher are appreciated.