INSTALL.txt.2

text/plain

Filename: INSTALL.txt.2
Type: text/plain
Part: 0
Message: Re: [HACKERS] Features list
PostgreSQL Installation Guide
by by The PostgreSQL Development Team

PostgreSQL is copyright (C) 1998 by the Postgres Global 
Development Group.

Summary

       Postgres, developed originally in the UC Berkeley 
       Computer Science Department, pioneered many of the 
       object-relational concepts now becoming available in 
       some commercial databases. It provides SQL92/SQL3 
       language support, transaction integrity, and type 
       extensibility. PostgreSQL is a public-domain, open 
       source descendant of this original Berkeley code.

Copyrights and Trademarks

       PostgreSQL is copyright (C) 1996-8 by the PostgreSQL 
       Global Development Group, and is distributed under 
       the terms of the Berkeley license.
       Postgres95 is copyright (C) 1994-5 by the Regents of 
       the University of California. Permission to use, 
       copy, modify, and distribute this software and its 
       documentation for any purpose, without fee, and 
       without a written agreement is hereby granted, 
       provided that the above copyright notice and this 
       paragraph and the following two paragraphs appear in 
       all copies.
       In no event shall the University of California be 
       liable to any party for direct, indirect, special, 
       incidental, or consequential damages, including lost 
       profits, arising out of the use of this software and 
       its documentation, even if the University of 
       California has been advised of the possibility of 
       such damage.
       The University of California specifically disclaims 
       any warranties, including, but not limited to, the 
       implied warranties of merchantability and fitness for 
       a particular purpose. The software provided hereunder 
       is on an "as-is" basis, and the University of 
       California has no obligations to provide 
       maintainance, support, updates, enhancements, or 
       modifications.
       UNIX is a trademark of X/Open, Ltd. Sun4, SPARC, 
       SunOS and Solaris are trademarks of Sun Microsystems, 
       Inc. DEC, DECstation, Alpha AXP and ULTRIX are 
       trademarks of Digital Equipment Corp. PA-RISC and 
       HP-UX are trademarks of Hewlett-Packard Co. OSF/1 is 
       a trademark of the Open Software Foundation.

Chapter 2. Ports

Currently Supported Platforms

       Postgres is available free of charge. This manual 
       describes version 6.4 of Postgres. The authors have 
       compiled and tested Postgres on the following 
       platforms: 

       Table 2-1. Supported Platforms
       OS          Processor   Version    Reported
       AIX         RS6000      v6.3       1998-03-01
       BSDi        x86         v6.3       1998-03-01
       FreeBSD     x86         v6.3       1998-03-01 
       NetBSD 1.3  x86         v6.3       1998-03-01 
       NetBSD 1.3  NS32532     v6.3       1998-07-20 
       NetBSD 1.3  Sparc       v6.3       1998-03-01 
       NetBSD 1.3  VAX         v6.3       1998-03-01 
       DGUX        m88k        v6.3       1998-03-01 
       HPUX 10.20  PA-RISC     v6.3       1998-03-01 
       IRIX 6.x    MIPS        v6.3       1998-03-01 
       Digital     Alpha       v6.3.2     1998-04-16 
       linux       Alpha       v6.3.2     1998-04-16 
       linux       x86         v6.4       1998-10-09
       2.0.x
       linux       Sparc       v6.3       1998-03-01 
       mklinux     PPC750      v6.4       1998-09-16 
       SCO         x86         v6.3       1998-03-01 
       Solaris     x86         v6.3       1998-03-01 
       Solaris     x86         v6.3       1998-03-01 
       2.5.1-2.6
       SunOS       Sparc       v6.3       1998-03-01 
       4.1.4
       SVR4        MIPS        v6.4       1998-10-08 
       SVR4 4.4    m88k        v6.2.1     1998-03-01 
       Unixware    x86         v6.4       1998-10-04 
       Windows NT  x86         v6.4       1998-10-08 

          For Windows NT, look for patches on the Postgres 
          web site.

Unsupported Platforms

       There are a few platforms which have been attempted 
       and which have been reported to not work with the 
       standard distribution. Others listed here do not 
       provide sufficient library support for an attempt. 

       Table 2-2. Possibly Incompatible Platforms
       OS          Processor   Version    Reported
       MacOS       all         v6.3       1998-03-01
       NetBSD      arm32       v6.3       1998-03-01 
       NetBSD      m68k        v6.3       1998-03-01 
       NextStep    x86         v6.x       1998-03-01 
       Ultrix      MIPS,VAX?   v6.x       1998-03-01 
       Windows     x86         v6.3       1998-03-01

       Note that Windows ports of the frontend are 
       apparently possible using third-party Posix porting 
       tools and libraries.

Chapter 3. Installation

       Complete installation instructions for Postgres v6.3.
       This procedure is This is based on the installation 
       instructions for Postgres v6.3 found in 
       $PGROOT/INSTALL. Up to date information on Postgres 
       may be found at www.postgresql.org.
       The installation notes below assume the following 
       (except where noted): 
       o Commands are Unix-compatible. See note below.
       o Defaults are used except where noted.
       o User postgres is the Postgres superuser.
       o The source path is /usr/src/pgsql (other paths are 
        possible).
       o The runtime path is /usr/local/pgsql (other paths 
        are possible).
       Commands were tested on RedHat Linux version 4.2 
       using the tcsh shell. Except where noted, they will 
       probably work on most systems. Commands like ps and 
       tar vary wildly on what options you should use on 
       each platform. Use common sense before typing in 
       these commands.
       Our Makefiles require GNU make (called ?gmake? in this 
       document) and also assume that install accepts BSD 
       options. The INSTALL variable in the Makefiles is set 
       to the BSD-compatible version of install. On some 
       systems, you will have to find a BSD-compatible 
       install (eg. bsdinst, which comes with the MIT X 
       Window System distribution).

Requirements to Run Postgres

       Information on supported platforms is another 
       chapter. In general, most Unix-compatible platforms 
       with modern libraries should be able to run Postgres.
       You should have at least 8 MB of memory and at least 
       45 MB of disk space to hold the source, binaries, and 
       user databases. After installation you may reduce 
       this to about 3 Mbytes plus space for user databases.

Installation Procedure

       Procedure 3.1. Postgres Installation
       For a fresh install or upgrading from previous 
       releases of Postgres:
       1. Read any last minute information and platform 
         specific porting notes. There are some platform 
         specific notes at the end of this file for 
         Ultrix4.x, Linux, BSD/OS and NeXT. There are other 
         files in directory /usr/src/pgsql/doc, including 
         files FAQ-Irix and FAQ-Linux. Also look in 
         directory ftp://ftp.postgresql.org/pub. If there 
         is a file called INSTALL in this directory then 
         this file will contain the latest installation 
         information.
         Please note that a "tested" platform in the list 
         given earlier simply means that someone went to 
         the effort at some point of making sure that a 
         Postgres distribution would compile and run on 
         this platform without modifying the code. Since 
         the current developers will not have access to all 
         of these platforms, some of them may not compile 
         cleanly and pass the regression tests in the 
         current release due to minor problems. Any such 
         known problems and their solutions will be posted 
         in ftp://ftp.postgresql.org/pub/INSTALL.
       2. Create account postgres if it does not already 
         exist.
       3. Log into account postgres.
            a. Check that you have sufficient disk space. 
              You will need about 17 Mbytes for 
              /usr/src/pgsql, about 2 Mbytes for 
              /usr/local/pgsql (excluding your database) 
              and 1 Mbyte for an empty database. The 
              database will temporarily grow to about 20 
              Mbytes during the regression tests. You will 
              also need about 3 Mbytes for the distribution 
              tar file.
              We therefore recommend that during 
              installation and testing you have well over 
              20 Mbytes free under /usr/local and another 
              25 Mbytes free on the disk partition 
              containing your database. Once you delete the 
              source files, tar file and regression 
              database, you will need 2 Mbytes for 
              /usr/local/pgsql, 1 Mbyte for the empty 
              database, plus about five times the space you 
              would require to store your database data in 
              a flat file.
              To check for disk space, use df -k.
       4. Ftp file 
         ftp://ftp.postgresql.org/pub/postgresql-v6.3.tar.-
         gz from the Internet. Store it in your home 
         directory.
       5. Some platforms use flex. If your system uses flex 
         then make sure you have a good version. To check, 
         type flex --version.
         If the flex command is not found then you probably 
         do not need it. If the version is 2.5.2 or 2.5.4 
         or greater then you are okay. If it is 2.5.3 or 
         before 2.5.2 then you will have to upgrade flex. 
         You may get it at 
         ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz.
         If you need flex and don't have it or have the 
         wrong version, then you will be told so when you 
         attempt to compile the program. Feel free to skip 
         this step if you aren't sure you need it. If you 
         do need it then you will be told to 
         install/upgrade flex when you try to compile.
         To install it, type the following: 
             cd
             gunzip -c flex-2.5.4.tar.gz | tar xvf -
             cd flex-2.5.4
             configure --prefix=/usr
             make
             make check
             # You must be root when typing the next line.
             make install
             cd
             rm -rf flex-2.5.4
         This will update files /usr/man/man1/flex.1, 
         /usr/bin/flex, /usr/lib/libfl.a, 
         /usr/include/FlexLexer.h and will add link 
         /usr/bin/flex++ which points to flex.
       6. If you are upgrading an existing system then back 
         up your database. For alpha- and beta-level 
         releases, the database format is liable to change 
         often every few weeks with no notice besides a 
         quick comment in the HACKERS mailing list. Full 
         releases always require a dump/reload from 
         previous releases. It is therefore a bad idea to 
         skip this step. Also, do not use the pg_dumpall 
         script from v6.0 or everything will be owned by 
         the Postgres super user. Type (with the gunzip 
         line and the following line typed as one line): 
             cd
             gunzip -c postgresql-v6.3.tar.gz |
             tar xvf - src/bin/pg_dump/pg_dumpall
             chmod a+x src/bin/pg_dump/pg_dumpall
             src/bin/pg_dump/pg_dumpall > db.out
             rm -rf src
         If you wish to preserve object id's (oids), then 
         use the -o option when running pg_dumpall. 
         However, unless you have a special reason for 
         doing this, don't do it.
         If the pg_dumpall command seems to take a long 
         time and you think it might have died, then, from 
         another terminal, use "ls -l db.out" several times 
         to see if the size of the file is growing.
         Please note that if you are upgrading from a 
         version prior to Postgres95 v1.09 then you must 
         back up your database, install Postgres95 v1.09, 
         restore your database, then back it up again. You 
         should also read files /usr/src/pgsql/migration/*.
         You must make sure that your database is not 
         updated in the middle of your backup. If 
         necessary, bring down postmaster, edit the 
         permissions in file 
         /usr/local/pgsql/data/pg_hba.conf to allow only 
         you on, then bring postmaster back up.
       7. If you are upgrading an existing system then kill 
         the postmaster. Type 
             ps -ax | grep postmaster
          This should list the process numbers for a number 
         of processes. Type the following line, with "???" 
         replaced by the process id for process 
         "postmaster". (Do not use the id for process "grep 
         postmaster".) Type kill ??? with "???" modified as 
         indicated.
       8. If you are upgrading an existing system then move 
         the old directories out of the way. If you are 
         short of disk space then you may have to back up 
         and delete the directories instead. If you do 
         this, save the old database in the 
         /usr/local/pgsql/data directory tree. At a 
         minimum, save file 
         /usr/local/pgsql/data/pg_hba.conf.
         Type the following: su cd /usr/src mv pgsql 
         pgsql_6_0 cd /usr/local mv pgsql pgsql_6_0 exit
         If you are not using /usr/local/pgsql/data as your 
         data directory (check to see if environment 
         variable PGDATA is set to something else) then you 
         will also want to move this directory in the same 
         manner.
       9. Make new source and install directories. The 
         actual paths can be different for your 
         installation; be consistant throughout this 
         procedure. Type 
             su
             cd /usr/src
             mkdir pgsql
             chown postgres:postgres pgsql
             cd /usr/local
             mkdir pgsql
             chown postgres:postgres pgsql
             exit
       10.     Unzip and untar the new source file. Type 
             cd /usr/src/pgsql
             gunzip -c ~/postgresql-v6.3.tar.gz | tar xvf -
       11.     Configure the source code for your system. It 
         is this step at which you can specify your actual 
         source path and installation paths for the build 
         process (see the --prefix option below). Type 
             cd /usr/src/pgsql/src
             ./configure
         The configure program will list the template files 
         available and ask you to choose one. A lot of 
         times, an appropriate template file is chosen for 
         you, and you can just press Enter to accept the 
         default. If the default is not appropriate, then 
         type in the appropriate template file and press 
         Enter. (If you do this, then send email to 
         scrappy@hub.org stating the output of the program 
         './config.guess' and what the template file should 
         be.)
         Once you have entered the template file, you will 
         be asked a number of questions about your 
         particular configuration. These can be skipped by 
         adding parameters to the configure command above. 
         The following parameters can be tagged onto the 
         end of the configure command: 
                --prefix=BASEDIR   Selects a different base 
         directory for the
                                   installation of the 
         Postgres configuration.
                                   The default is 
         /usr/local/pgsql.

                --enable-hba       Enables Host Based 
         Authentication (DEFAULT)

                --disable-hba      Disables Host Based 
         Authentication

                --enable-locale    Enables USE_LOCALE

                --disable-locale   Disables USE_LOCALE 
         (DEFAULT)

                --enable-cassert   Enables ASSERT_CHECKING

                --disable-cassert  Disables ASSERT_CHECKING 
         (DEFAULT)

                --with-template=TEMPLATE
                                   Use template file 
         TEMPLATE - the template
                                   files are assumed to be 
         in the directory
                                   src/template, so look 
         there for proper values.
                                   (If the configure script 
         cannot find the
                                   specified template file, 
         it will ask you for
                                   one).

                --with-pgport=PORT Sets the port that the 
         postmaster process
                                   listens for incoming 
         connections on.  The
                                   default for this is port 
         5432.
         As an example, here is the configure script I use 
         on a Sparc Solaris 2.5 system with /opt/postgres 
         being the install base. 
             ./configure --prefix=/opt/postgres \
                 --with-template=sparc_solaris-gcc 
         --with-pgport=5432 \
                 --enable-hba --disable-locale
          Of course, in a real shell, you would type these 
         three lines all on the same line.
       12.     Compile the program. Type 
             cd /usr/src/pgsql/src
             gmake all >& make.log &
             tail -f make.log
         The last line displayed will hopefully be "All of 
         PostgreSQL is successfully made. Ready to 
         install." At this point, or earlier if you wish, 
         type control-C to get out of tail. (If you have 
         problems later on you may wish to examine file 
         make.log for warning and error messages.)
         If your computer does not have gmake (GNU make) 
         then try running make instead throughout the rest 
         of these notes.
         Please note that you will probably find a number 
         of warning messages in make.log. Unless you have 
         problems later on, these messages may be safely 
         ignored.
         If the compiler fails with an error stating that 
         the flex command cannot be found then install flex 
         as described earlier. Next, change directory back 
         to this directory, type "make clean", then 
         recompile again.
         Compiler options, such as optimization and 
         debugging, may be specified on the command line 
         using the COPT variable. For example, typing 
              gmake COPT="-g" all >& make.log &
          would invoke your compiler's -g option in all 
         steps of the build. See src/Makefile.global.in for 
         further details.
       13.     Install the program. Type 
             cd /usr/src/pgsql/src
             gmake install >& make.install.log &
             tail -f make.install.log
         The last line displayed will be "gmake[1]: Leaving 
         directory `/usr/src/pgsql/src/man'". At this 
         point, or earlier if you wish, type control-C to 
         get out of tail.
       14.     14) If necessary, tell UNIX how to find your 
         shared libraries. You can do ONE of the following, 
         preferably the first:
            a. As root, edit file /etc/ld.so.conf. Add line 
              /usr/local/pgsql/lib to the file. Then run 
              command /sbin/ldconfig.
            b. In a bash shell, type 
                  export 
              LD_LIBRARY_PATH=/usr/local/pgsql/lib
            c. In a csh shell, type 
                  setenv LD_LIBRARY_PATH 
              /usr/local/pgsql/lib
         Please note that the above commands may vary 
         wildly for different operating systems. Check the 
         platform specific notes, such as those for 
         Ultrix4.x or and for non-ELF Linux.
         If, when you create the database, you get the 
         message "pg_id: can't load library 'libpq.so'" 
         then the above step was necessary. Simply do this 
         step, then try to create the database again.
       15.     If it has not already been done, then prepare 
         account postgres for using Postgres. Any account 
         that will use Postgres must be similarily 
         prepared. (The following instructions are for a 
         bash shell. Adapt accordingly for other shells.)
         Add the following lines to your login shell, 
         ~/.bash_profile: 
             PATH=$PATH:/usr/local/pgsql/bin
             MANPATH=$MANPATH:/usr/local/pgsql/man
             PGLIB=/usr/local/pgsql/lib
             PGDATA=/usr/local/pgsql/data
             export PATH MANPATH PGLIB PGDATA
         Make sure that you have defined these variables 
         before continuing with the remaining steps. The 
         easiest way to do this is to type: 
             source ~/.bash_profile
       16.     Create the database. Do not do the following 
         as root! This would be a major security hole. Type 
             initdb
       17.     Set up permissions to access the database 
         system. Do this by editing file 
         /usr/local/pgsql/data/pg_hba.conf. The 
         instructions are included in the file. (If your 
         database is not located in the default location, 
         i.e. if PGDATA is set to point elsewhere, then the 
         location of this file will change accordingly.) 
         This file should be made read only again once you 
         are finsihed. If you are upgrading from v6.0 you 
         can copy file pg_hba.conf from your old database 
         on top of the one in your new database, rather 
         than redoing this from scratch.
       18.     You may wish to skip the regression tests. 
         However, we think skipping the tests is a BAD 
         idea!
         The file /usr/src/pgsql/src/test/regress/README 
         has detailed instructions for running and 
         interpreting the regression tests. A short version 
         follows here:
         Start the postmaster daemon running in the 
         background by typing 
             cd
             nohup postmaster > regress.log 2>&1 &
         Run postmaster from your Postgres super user 
         account (typically account postgres). DO NOT RUN 
         POSTMASTER FROM THE ROOT ACCOUNT.
       19.     Run the regression tests. Type 
             cd
             cd /usr/src/pgsql/src/test/regress
             gmake clean
             gmake all runtest
         You do not need to type "gmake clean" if this is 
         the first time you are running the tests.
         You should get on the screen (and also written to 
         file ./regress.out) a series of statements stating 
         which tests passed and which tests failed. Please 
         note that it can be normal for some of the tests 
         to "fail". For the failed tests, use diff to 
         compare the files in directories ./results and 
         ./expected. If float8 failed, type something like: 
             cd /usr/src/pgsql/src/test/regress
             diff -w expected/float8.out results
         "Failed" tests may have failed due to slightly 
         different error messages, output formatting, 
         failure to set the timezone correctly for your 
         platform, etc. "Failures" of this type do not 
         indicate a problem with Postgres.
         For a i686/Linux-ELF platform, no tests failed 
         since this is the v6.3 regression testing 
         reference platform.
         For the SPARC/Linux-ELF platform, using the 970525 
         beta version of Postgres v6.2 the following tests 
         "failed": float8 and geometry "failed" due to 
         minor precision differences in floating point 
         numbers. select_views produces massively different 
         output, but the differences are due to minor 
         floating point differences.
         Conclusion? If you do see failures, try to 
         understand the nature of the differences and then 
         decide if those differences will affect your 
         intended use of Postgres. However, keep in mind 
         that this is likely to be the most solid release 
         of Postgres to date, incorporating many bug fixes 
         from v6.2.1, and that previous versions of 
         Postgres have been in use successfully for some 
         time now.
         After running the tests, type 
             destroydb regression
             cd /usr/src/pgsql/src/test/regress
             gmake clean
       20.     Stop the postmaster as described in step 7. 
         Then restore the timezone to it's normal setting. 
         If you changed the timezone by modifying 
         environment variable TZ then one way to do this is 
         to log out of, then back into, account postgres.
       21.     Start the postmaster daemon running. Type 
             cd
             nohup postmaster > server.log 2>&1 &
          Run postmaster from your Postgres super user 
         account (typically account postgres). DO NOT RUN 
         POSTMASTER FROM THE ROOT ACCOUNT.
       22.     If you haven't already done so, this would be 
         a good time to modify your computer so that it 
         will automatically start postmaster whenever you 
         boot your computer. Here are some suggestions on 
         how to do this, contributed by various users. 
         Whatever you do, postmaster must be run by user 
         postgres AND NOT BY ROOT. This is why all of the 
         examples below start by switching user (su) to 
         postgres. These commands also take into account 
         the fact that environment variables like PATH and 
         PGDATA may not be set properly. The examples are 
         as follows. Use them with extreme caution. a) Edit 
         file rc.local on NetBSD or file rc2.d on SPARC 
         Solaris 2.5.1 to contain the following single 
         line: su postgres -c 
         "/usr/local/pgsql/bin/postmaster -S -D 
         /usr/local/pgsql/data" b) In FreeBSD 2.2-RELEASE 
         edit /usr/local/etc/rc.d/pgsql.sh to contain the 
         following lines and make it chmod 755 and chown 
         root:bin. #!/bin/sh [ -x 
         /usr/local/pgsql/bin/postmaster ] && { su -l pgsql 
         -c 'exec /usr/local/pgsql/bin/postmaster 
         -D/usr/local/pgsql/data -S -o -F > 
         /usr/local/pgsql/errlog' & echo -n ' pgsql' } You 
         may put the line breaks as shown above. The shell 
         is smart enough to keep parsing beyond end-of-line 
         if there is an expression unfinished. The exec 
         saves one layer of shell under the postmaster 
         process so the parent is init. Note: Unlike most 
         other examples, this one has been tested. c) In 
         RedHat v4.0 Linux edit file /etc/inittab to 
         contain the following single line: 
         pg:2345:respawn:/bin/su - postgres -c 
         "/usr/local/pgsql/bin/postmaster 
         -D/usr/local/pgsql/data >> 
         /usr/local/pgsql/server.log 2>&1" /dev/null (The 
         author of this example says this example will 
         revive the postmaster if it dies, but he doesn't 
         know if there are other side effects.) d) The 
         contrib/linux area of the Postgres distribution 
         has an example init.d script compatible with and 
         tested using recent RedHat packages.
       23.     If you haven't already done so, this would be 
         a good time to modify your computer to do regular 
         maintainence. The following should be done at 
         regular intervals: a) Run the SQL command vacuum. 
         This will clean up your database. b) Back up your 
         system. (You should probably keep the last few 
         backups on hand.) Ideally, no one else should be 
         using the system at the time. Ideally, the above 
         tasks should be done by a shell script that is run 
         nightly or weekly by cron. Look at the man page 
         for crontab for a starting point on how to do 
         this. (If you do it, please e-mail us a copy of 
         your shell script. We would like to set up our own 
         systems to do this too.)
       24.     If you are upgrading an existing system then 
         install your old database. Type 
             cd
             psql -e template1 < db.out
          If your pre-v6.2 database uses either path or 
         polygon geometric data types, then you will need 
         to upgrade any columns containing those types. To 
         do so, type (from within psql) 
             update YourTable set PathCol = 
         UpgradePath(PathCol);
             update YourTable set PolyCol = 
         UpgradePoly(PolyCol);
             ...
             vacuum;
          UpgradePath() checks to see that a path value is 
         consistant with the old syntax, and will not 
         update a column which fails that examination. 
         UpgradePoly() cannot verify that a polygon is in 
         fact from an old syntax, but RevertPoly() is 
         provided to reverse the effects of a mis-applied 
         upgrade.
       25.     If you are a new user, you may wish to play 
         with Postgres as described below.
       26.     Clean up after yourself. Type 
             rm -rf /usr/src/pgsql_6_0
             rm -rf /usr/local/pgsql_6_0
             # Also delete old database directory tree if 
         it is not in
             #  /usr/local/pgsql_6_0/data
             rm ~/postgresql-v6.2.1.tar.gz
       27.     You will probably want to print out the 
         documentation. Here is how you might do it if you 
         have Ghostscript on your system and are writing to 
         a laserjet printer. alias gshp='gs 
         -sDEVICE=laserjet -r300 -dNOPAUSE' export 
         GS_LIB=/usr/share/ghostscript:/usr/share/ghostscr-
         ipt/fonts # Print out the man pages. man -a -t 
         /usr/local/pgsql/man/*/* > manpage.ps gshp 
         -sOUTPUTFILE=manpage.hp manpage.ps rm manpage.ps 
         lpr -l -s -r manpage.hp # Print out the Postgres95 
         User Manual, version 1.0, # Sept. 5, 1996. cd 
         /usr/src/pgsql/doc gshp -sOUTPUTFILE=userguide.hp 
         userguide.ps lpr -l -s -r userguide.hp If you are 
         a developer, you will probably want to also print 
         out the Postgres Implemention Guide, version 1.0, 
         October 1, 1995. This is a WWW document located at 
         http://www.postgresql.org/docs/impguide.
       28.     The Postgres team wants to keep Postgres 
         working on all of the supported platforms. We 
         therefore ask you to let us know if you did or did 
         not get Postgres to work on you system. Please 
         send a mail message to pgsql-ports@postgresql.org 
         telling us the following: - The version of 
         Postgres (v6.2.1, 6.1.1, beta 970703, etc.). - 
         Your operating system (i.e. RedHat v4.0 Linux 
         v2.0.26). - Your hardware (SPARC, i486, etc.). - 
         Did you compile, install and run the regression 
         tests cleanly? If not, what source code did you 
         change (i.e. patches you applied, changes you 
         made, etc.), what tests failed, etc. It is normal 
         to get many warning when you compile. You do not 
         need to report these.
       29.     Now create, access and manipulate databases 
         as desired. Write client programs to access the 
         database server. In other words, ENJOY!

Playing with Postgres

       After Postgres is installed, a database system is 
       created, a postmaster daemon is running, and the 
       regression tests have passed, you'll want to see 
       Postgres do something. That's easy. Invoke the 
       interactive interface to Postgres, psql: 

           % psql template1

       (psql has to open a particular database, but at this 
       point the only one that exists is the template1 
       database, which always exists. We will connect to it 
       only long enough to create another one and switch to 
       it.)
       The response from psql is: 

       Welcome to the POSTGRESQL interactive sql monitor:
         Please read the file COPYRIGHT for copyright terms 
       of POSTGRESQL

          type \? for help on slash commands
          type \q to quit
          type \g or terminate with semicolon to execute 
       query
        You are currently connected to the database: 
       template1

       template1=>

       Create the database foo: 

       template1=> create database foo;
       CREATEDB

       (Get in the habit of including those SQL semicolons. 
       Psql won't execute anything until it sees the 
       semicolon or a "\g" and the semicolon is required to 
       delimit multiple statements.)
       Now connect to the new database: 

       template1=> \c foo
       connecting to new database: foo

       ("slash" commands aren't SQL, so no semicolon. Use \? 
       to see all the slash commands.)
       And create a table: 

       foo=> create table bar (i int4, c char(16));
       CREATE

       Then inspect the new table: 

       foo=> \d bar

       Table    = bar
       +----------------------------------+-----------------
       ------------------+-------+
       |              Field               |              
       Type                | Length|
       +----------------------------------+-----------------
       ------------------+-------+
       | i                                | int4                             
       |     4 |
       | c                                | (bp)char                         
       |    16 |
       +----------------------------------+-----------------
       ------------------+-------+

       And so on. You get the idea.

The Next Step

       Questions? Bugs? Feedback? First, read the files in 
       directory /usr/src/pgsql/doc. The FAQ in this 
       directory may be particularly useful.
       If Postgres failed to compile on your computer then 
       fill out the form in file 
       /usr/src/pgsql/doc/bug.template and mail it to the 
       location indicated at the top of the form.
       Mail questions to pgsql-questions@postgresql.org. For 
       more information on the various mailing lists, see 
       http://www.postgresql.org and look for the mailing 
       lists.

Porting Notes

       ERROR: Unknown field type   For some ports, these 
          notes may be out of date.

Ultrix4.x

       You need to install the libdl-1.1 package since 
       Ultrix 4.x doesn't have a dynamic loader. It's 
       available in 
       s2k-ftp.CS.Berkeley.EDU:pub/personal/andrew/libdl-1.-
       1.tar.Z

Linux

       Linux ELF
       The regression test reference machine is a 
       linux-2.0.30/libc-5.3.12/RedHat-4.2 installation 
       running on a dual processor i686. The linux-elf port 
       installs cleanly. See the Linux FAQ for more details.

       Linux a.out
       For non-ELF Linux, the dld library MUST be obtained 
       and installed on the system. It enables dynamic link 
       loading capability to the Postgres port. The dld 
       library can be obtained from the sunsite linux 
       distributions. The current name is dld-3.2.5. Jalon 
       Q. Zimmerman

BSD/OS

       For BSD/OS 2.0 and 2.01, you will need to get the GNU 
       dld library.

NeXT

       The NeXT port for v1.09 was supplied by Tom R. 
       Hageman. It requires a SysV IPC emulation library and 
       header files for shared libary and semaphore stuff. 
       Tom just happens to sell such a product so contact 
       him for information. He has also indicated that 
       binary releases of Postgres for NEXTSTEP will be made 
       available to the general public. Contact Info@RnA.nl 
       for information.
       We have no recent reports of successful NeXT 
       installations (for v6.2.1). However, the client-side 
       libraries should work even if the backend is not 
       supported.
Chapter 4. Release Notes

Release 6.4

       TBD

Release 6.3.2

       This is a bugfix release for 6.3.x. Refer to the 
       release notes for v6.3 for a more complete summary of 
       new features.
       Summary: 
       o Repairs automatic configuration support for some 
        platforms, including Linux, from breakage 
        inadvertently introduced in v6.3.1. 
       o Correctly handles function calls on the left side 
        of BETWEEN and LIKE clauses. 
       A dump/restore is NOT required for those running 6.3 
       or 6.3.1. A 'make distclean', 'make', and 'make 
       install' is all that is required. This last step 
       should be performed while the postmaster is not 
       running. You should re-link any custom applications 
       that use Postgres libraries.
       For upgrades from pre-v6.3 installations, refer to 
       the installation and migration instructions for v6.3.

Detailed Change List

       Changes
       -------
       Configure detection improvements for tcl/tk(Brook 
       Milligan, Alvin)
       Manual page improvements(Bruce)
       BETWEEN and LIKE fix(Thomas)
       fix for psql \connect used by pg_dump(Oliver Elphick)
       New odbc driver
       pgaccess, version 0.86
       qsort removed, now uses libc version, 
       cleanups(Jeroen)
       fix for buffer over-runs detected(Maurice Gittens)
       fix for buffer overrun in libpgtcl(Randy Kunkee)
       fix for UNION with DISTINCT or ORDER BY(Bruce)
       gettimeofday configure check(Doug Winterburn)
       Fix "indexes not used" bug(Vadim)
       docs additions(Thomas)
       Fix for backend memory leak(Bruce)
       libreadline cleanup(Erwan MAS)
       Remove DISTDIR(Bruce)
       Makefile dependency cleanup(Jeroen van Vianen)
       ASSERT fixes(Bruce)

Release 6.3.1

       Summary: 
       o Additional support for multi-byte character sets. 
       o Repair byte ordering for mixed-endian clients and 
        servers. 
       o Minor updates to allowed SQL syntax. 
       o Improvements to the configuration autodetection for 
        installation. 
       o 
       A dump/restore is NOT required for those running 6.3. 
       A 'make distclean', 'make', and 'make install' is all 
       that is required. This last step should be performed 
       while the postmaster is not running. You should 
       re-link any custom applications that use Postgres 
       libraries.
       For upgrades from pre-v6.3 installations, refer to 
       the installation and migration instructions for v6.3.

Detailed Change List

       Changes
       -------
       ecpg cleanup/fixes, now version 1.1(Michael Meskes)
       pg_user cleanup(Bruce)
       large object fix for pg_dump and tclsh (alvin)
       LIKE fix for multiple adjacent underscores
       fix for redefining builtin functions(Thomas)
       ultrix4 cleanup
       upgrade to pg_access 0.83
       updated CLUSTER manual page
       multi-byte character set support, see 
       doc/README.mb(Tatsuo)
       configure --with-pgport fix
       pg_ident fix
       big-endian fix for backend communications(Kataoka)
       SUBSTR() and substring() fix(Jan)
       several jdbc fixes(Peter)
       libpgtcl improvements, see libptcl/README(Randy 
       Kunkee)
       Fix for "Datasize = 0" error(Vadim)
       Prevent \do from wrapping(Bruce)
       Remove duplicate Russian character set entries
       Sunos4 cleanup
       Allow optional TABLE keyword in LOCK and SELECT 
       INTO(Thomas)
       CREATE SEQUENCE options to allow a negative 
       integer(Thomas)
       Add "PASSWORD" as an allowed column 
       identifier(Thomas)
       Add checks for UNION target fields(Bruce)
       Fix Alpha port(Dwayne Bailey)
       Fix for text arrays containing quotes(Doug Gibson)
       Solaris compile fix(Albert Chin-A-Young)
       Better identify tcl and tk libs and includes(Bruce)

Release 6.3

       There are many new features and improvements in this 
       release. Here is a brief, incomplete summary: 
       o Many new SQL features, including full SQL92 
        subselect capability (everything is here but 
        target-list subselects). 
       o Support for client-side environment variables to 
        specify time zone and date style. 
       o Socket interface for client/server connection. This 
        is the default now so you may need to start 
        postmaster with the ?-i? flag. 
       o Better password authorization mechanisms. Default 
        table permissions have changed. 
       o Old-style ?time travel? has been removed. Performance 
        has been improved. 

       ERROR: Unknown field type   Bruce Momjian wrote the 
          following notes to introduce the new release.

       There are some general 6.3 issues that I want to 
       mention. These are only the big items that can not be 
       described in one sentence. A review of the detailed 
       changes list is still needed.
       First, we now have subselects. Now that we have them, 
       I would like to mention that without subselects, SQL 
       is a very limited language. Subselects are a major 
       feature, and you should review your code for places 
       where subselects provide a better solution for your 
       queries. I think you will find that there are more 
       uses for subselects than you may think. Vadim has put 
       us on the big SQL map with subselects, and fully 
       functional ones too. The only thing you can't do with 
       subselects is to use them in the target list.
       Second, 6.3 uses unix domain sockets rather than 
       TCP/IP by default. To enable connections from other 
       machines, you have to use the new postmaster -i 
       option, and of course edit pg_hba.conf. Also, for 
       this reason, the format of pg_hba.conf has changed.
       Third, char() fields will now allow faster access 
       than varchar() or text. Specifically, the text and 
       varchar() have a penalty for access to any columns 
       after the first column of this type. char() used to 
       also have this access penalty, but it no longer does. 
       This may suggest that you redesign some of your 
       tables, especially if you have short character 
       columns that you have defined as varchar() or text. 
       This and other changes make 6.3 even faster than 
       earlier releases.
       We now have passwords definable independent of any 
       Unix file. There are new SQL USER commands. See the 
       pg_hba.conf manual page for more information. There 
       is a new table, pg_shadow, which is used to store 
       user information and user passwords, and it by 
       default only SELECT-able by the postgres super-user. 
       pg_user is now a view of pg_shadow, and is 
       SELECT-able by PUBLIC. You should keep using pg_user 
       in your application without changes.
       User-created tables now no longer have SELECT 
       permission to PUBLIC by default. This was done 
       because the ANSI standard requires it. You can of 
       course GRANT any permissions you want after the table 
       is created. System tables continue to be SELECT-able 
       by PUBLIC.
       We also have real deadlock detection code. No more 
       sixty-second timeouts. And the new locking code 
       implements a FIFO better, so there should be less 
       resource starvation during heavy use.
       Many complaints have been made about inadequate 
       documenation in previous releases. Thomas has put 
       much effort into many new manuals for this release. 
       Check out the doc/ directory.
       For performance reasons, time travel is gone, but can 
       be implemented using triggers (see 
       pgsql/contrib/spi/README). Please check out the new 
       \d command for types, operators, etc. Also, views 
       have their own permissions now, not based on the 
       underlying tables, so permissions on them have to be 
       set separately. Check /pgsql/interfaces for some new 
       ways to talk to Postgres.
       This is the first release that really required an 
       explanation for existing users. In many ways, this 
       was necessary because the new release removes many 
       limitations, and the work-arounds people were using 
       are no longer needed.

Migration to v6.3

       A dump/restore using pg_dump or pg_dumpall is 
       required for those wishing to migrate data from any 
       previous release of Postgres.

Detailed Change List

       Bug Fixes
       ---------
       Fix binary cursors broken by MOVE 
       implementation(Vadim)
       Fix for tcl library crash(Jan)
       Fix for array handling, from Gerhard Hintermayer
       Fix acl error, and remove duplicate pqtrace(Bruce)
       Fix psql \e for empty file(Bruce)
       Fix for textcat on varchar() fields(Bruce)
       Fix for DBT Sendproc (Zeugswetter Andres)
       Fix vacuum analyze syntax problem(Bruce)
       Fix for international identifiers(Tatsuo)
       Fix aggregates on inherited tables(Bruce)
       Fix substr() for out-of-bounds data
       Fix for select 1=1 or 2=2, select 1=1 and 2=2, and 
       select sum(2+2)(Bruce)
       Fix notty output to show status result.  -q option 
       still turns it off(Bruce)
       Fix for count(*), aggs with views and multiple tables 
       and sum(3)(Bruce)
       Fix cluster(Bruce)
       Fix for PQtrace start/stop several times(Bruce)
       Fix a variety of locking problems like newer lock 
       waiters getting
               lock before older waiters, and having 
       readlock people not share
               locks if a writer is waiting for a lock, and 
       waiting writers not
               getting priority over waiting readers(Bruce)
       Fix crashes in psql when executing queries from 
       external files(James)
       Fix problem with multiple order by columns, with the 
       first one having
               NULL values(Jeroen)
       Use correct hash table support functions for float8 
       and int4(Thomas)
       Re-enable JOIN= option in CREATE OPERATOR statement 
       (Thomas)
       Change precedence for boolean operators to match 
       expected behavior(Thomas)
       Generate elog(ERROR) on over-large integer(Bruce)
       Allow multiple-argument functions in constraint 
       clauses(Thomas)
       Check boolean input literals for 
       'true','false','yes','no','1','0'
               and throw elog(ERROR) if unrecognized(Thomas)
       Major large objects fix
       Fix for GROUP BY showing duplicates(Vadim)
       Fix for index scans in MergeJion(Vadim)

       Enhancements
       ------------
       Subselects with EXISTS, IN, ALL, ANY keywords (Vadim, 
       Bruce, Thomas)
       New User Manual(Thomas, others)
       Speedup by inlining some frequently-called functions
       Real deadlock detection, no more timeouts(Bruce)
       Add SQL92 "constants" CURRENT_DATE, CURRENT_TIME, 
       CURRENT_TIMESTAMP, 
               CURRENT_USER(Thomas)
       Modify constraint syntax to be 
       SQL92-compliant(Thomas)
       Implement SQL92 PRIMARY KEY and UNIQUE clauses using 
       indices(Thomas)
       Recognize SQL92 syntax for FOREIGN KEY. Throw elog 
       notice(Thomas)
       Allow NOT NULL UNIQUE constraint clause (each allowed 
       separately before)(Thomas)
       Allow Postgres-style casting ("::") of 
       non-constants(Thomas)
       Add support for SQL3 TRUE and FALSE boolean 
       constants(Thomas)
       Support SQL92 syntax for IS TRUE/IS FALSE/IS NOT 
       TRUE/IS NOT FALSE(Thomas)
       Allow shorter strings for boolean literals (e.g. "t", 
       "tr", "tru")(Thomas)
       Allow SQL92 delimited identifiers(Thomas)
       Implement SQL92 binary and hexadecimal string 
       decoding (b'10' and x'1F')(Thomas)
       Support SQL92 syntax for type coercion of literal 
       strings
               (e.g. "DATETIME 'now'")(Thomas)
       Add conversions for int2, int4, and OID types to and 
       from text(Thomas)
       Use shared lock when building indices(Vadim)
       Free memory allocated for an user query inside 
       transaction block after
               this query is done, was turned off in <= 
       6.2.1(Vadim)
       New SQL statement CREATE PROCEDURAL LANGUAGE(Jan)
       New Postgres Procedural Language (PL) backend 
       interface(Jan)
       Rename pg_dump -H option to -h(Bruce)
       Add Java support for passwords, European dates(Peter)
       Use indices for LIKE and ~, !~ operations(Bruce)
       Add hash functions for datetime and timespan(Thomas)
       Time Travel removed(Vadim, Bruce)
       Add paging for \d and \z, and fix \i(Bruce)
       Add Unix domain socket support to backend and to 
       frontend library(Goran)
       Implement CREATE DATABASE/WITH LOCATION and 
       initlocation utility(Thomas)
       Allow more SQL92 and/or Postgres reserved words as 
       column identifiers(Thomas)
       Augment support for SQL92 SET TIME ZONE...(Thomas)
       SET/SHOW/RESET TIME ZONE uses TZ backend environment 
       variable(Thomas)
       Implement SET keyword = DEFAULT and SET TIME ZONE 
       DEFAULT(Thomas)
       Enable SET TIME ZONE using TZ environment 
       variable(Thomas)
       Add PGDATESTYLE environment variable to frontend and 
       backend initialization(Thomas)
       Add PGTZ, PGCOSTHEAP, PGCOSTINDEX, PGRPLANS, PGGEQO
               frontend library initialization environment 
       variables(Thomas)
       Regression tests time zone automatically set with 
       "setenv PGTZ PST8PDT"(Thomas)
       Add pg_description table for info on tables, columns, 
       operators, types, and
               aggregates(Bruce)
       Increase 16 char limit on system table/index names to 
       32 characters(Bruce)
       Rename system indices(Bruce)
       Add 'GERMAN' option to SET DATESTYLE(Thomas)
       Define an "ISO-style" timespan output format with 
       "hh:mm:ss" fields(Thomas)
       Allow fractional values for delta times (e.g. '2.5 
       days')(Thomas)
       Validate numeric input more carefully for delta 
       times(Thomas)
       Implement day of year as possible input to 
       date_part()(Thomas)
       Define timespan_finite() and text_timespan() 
       functions(Thomas)
       Remove archive stuff(Bruce)
       Allow for a pg_password authentication database that 
       is separate from
               the system password file(Todd)
       Dump ACLs, GRANT, REVOKE permissions(Matt)
       Define text, varchar, and bpchar string length 
       functions(Thomas)
       Fix Query handling for inheritance, and cost 
       computations(Bruce)
       Implement CREATE TABLE/AS SELECT (alternative to 
       SELECT/INTO)(Thomas)
       Allow NOT, IS NULL, IS NOT NULL in 
       constraints(Thomas)
       Implement UNIONs for SELECT(Bruce)
       Add UNION, GROUP, DISTINCT to INSERT(Bruce)
       varchar() stores only necessary bytes on disk(Bruce)
       Fix for BLOBs(Peter)
       Mega-Patch for JDBC...see README_6.3 for list of 
       changes(Peter)
       Remove unused "option" from PQconnectdb()
       New LOCK command and lock manual page describing 
       deadlocks(Bruce)
       Add new psql \da, \dd, \df, \do, \dS, and \dT 
       commands(Bruce)
       Enhance psql \z to show sequences(Bruce)
       Show NOT NULL and DEFAULT in psql \d table(Bruce)
       New psql .psqlrc file startup(Andrew)
       Modify sample startup script in contrib/linux to show 
       syslog(Thomas)
       New types for IP and MAC addresses in 
       contrib/ip_and_mac(TomH)
       Unix system time conversions with date/time types in 
       contrib/unixdate(Thomas)
       Update of contrib stuff(Massimo)
       Add Unix socket support to DBD::Pg(Goran)
       New python interface (PyGreSQL 2.0)(D'Arcy)
       New frontend/backend protocol has a version number, 
       network byte order(Phil)
       Security features in pg_hba.conf enhanced and 
       documented, many cleanups(Phil)
       CHAR() now faster access than VARCHAR() or TEXT
       ecpg embedded SQL preprocessor
       Reduce system column overhead(Vadmin)
       Remove pg_time table(Vadim)
       Add pg_type attribute to identify types that need 
       length (bpchar, varchar)
       Add report of offending line when COPY command fails
       Allow VIEW permissions to be set separately from the 
       underlying tables. 
               For security, use GRANT/REVOKE on views as 
       appropriate(Jan)
       Tables now have no default GRANT SELECT TO PUBLIC.  
       You must
               explicitly grant such permissions.
       Clean up tutorial examples(Darren)

       Source Tree Changes
       -------------------
       Add new html development tools, and flow chart in 
       /tools/backend
       Fix for SCO compiles
       Stratus computer port Robert Gillies
       Added support for shlib for BSD44_derived & 
       i386_solaris
       Make configure more automated(Brook)
       Add script to check regression test results
       Break parser functions into smaller files, group 
       together(Bruce)
       Rename heap_create to heap_create_and_catalog, rename 
       heap_creatr
               to heap_create()(Bruce)
       Sparc/Linux patch for locking(TomS)
       Remove PORTNAME and reorganize port-specific 
       stuff(Marc)
       Add optimizer README file(Bruce)
       Remove some recursion in optimizer and clean up some 
       code there(Bruce)
       Fix for NetBSD locking(Henry)
       Fix for libptcl make(Tatsuo)
       AIX patch(Darren)
       Change IS TRUE, IS FALSE, ... to expressions using 
       "=" rather than
               function calls to istrue() or isfalse() to 
       allow optimization(Thomas)
       Various fixes NetBSD/Sparc related(TomH)
       Alpha linux locking(Travis,Ryan)
       Change elog(WARN) to elog(ERROR)(Bruce)
       FAQ for FreeBSD(Marc)
       Bring in the PostODBC source tree as part of our 
       standard distribution(Marc)
       A minor patch for HP/UX 10 vs 9(Stan)
       New pg_attribute.atttypmod for type-specific info 
       like varchar length(Bruce)
       Unixware patches(Billy)
       New i386 'lock' for spin lock asm(Billy)
       Support for multiplexed backends is removed
       Start an OpenBSD port
       Start an AUX port
       Start a Cygnus port
       Add string functions to regression suite(Thomas)
       Expand a few function names formerly truncated to 16 
       characters(Thomas)
       Remove un-needed malloc() calls and replace with 
       palloc()(Bruce)

Release 6.2.1

       v6.2.1 is a bug-fix and usability release on v6.2.
       Summary: 
       o Allow strings to span lines, per SQL92. 
       o Include example trigger function for inserting user 
        names on table updates. 
       This is a minor bug-fix release on v6.2. For upgrades 
       from pre-v6.2 systems, a full dump/reload is 
       required. Refer to the v6.2 release notes for 
       instructions.

Migration from v6.2 to v6.2.1

       This is a minor bug-fix release. A dump/reload is not 
       required from v6.2, but is required from any release 
       prior to v6.2.
       In upgrading from v6.2, if you choose to dump/reload 
       you will find that avg(money) is now calculated 
       correctly. All other bug fixes take effect upon 
       updating the executables.
       Another way to avoid dump/reload is to use the 
       following SQL command from psql to update the 
       existing system table: 

         update pg_aggregate set aggfinalfn = 
       'cash_div_flt8'
          where aggname = 'avg' and aggbasetype = 790;

       This will need to be done to every existing database, 
       including template1.

Detailed Change List

       Changes in this release
       -----------------------
       Allow TIME and TYPE column names(Thomas)
       Allow larger range of true/false as boolean 
       values(Thomas)
       Support output of "now" and "current"(Thomas)
       Handle DEFAULT with INSERT of NULL properly(Vadim)
       Fix for relation reference counts problem in buffer 
       manager(Vadim)
       Allow strings to span lines, like ANSI(Thomas)
       Fix for backward cursor with ORDER BY(Vadim)
       Fix avg(cash) computation(Thomas)
       Fix for specifying a column twice in ORDER/GROUP 
       BY(Vadim)
       Documented new libpq function to return affected 
       rows, PQcmdTuples(Bruce)
       Trigger function for inserting user names for 
       INSERT/UPDATE(Brook Milligan)

Release 6.2

       A dump/restore is required for those wishing to 
       migrate data from previous releases of Postgres.

Migration from v6.1 to v6.2

       This migration requires a complete dump of the 6.1 
       database and a restore of the database in 6.2.
       Note that the pg_dump and pg_dumpall utility from 6.2 
       should be used to dump the 6.1 database.

Migration from v1.x to v6.2

       Those migrating from earlier 1.* releases should 
       first upgrade to 1.09 because the COPY output format 
       was improved from the 1.02 release.

Detailed Change List

       Bug Fixes
       ---------
       Fix problems with pg_dump for inheritance, sequences, 
       archive tables(Bruce)
       Fix compile errors on overflow due to shifts, 
       unsigned, and bad prototypes
                from Solaris(Diab Jerius)
       Fix bugs in geometric line arithmetic (bad 
       intersection calculations)(Thomas)
       Check for geometric intersections at endpoints to 
       avoid rounding ugliness(Thomas)
       Catch non-functional delete attempts(Vadim)
       Change time function names to be more 
       consistent(Michael Reifenberg)
       Check for zero divides(Michael Reifenberg)
       Fix very old bug which made tuples changed/inserted 
       by a commnd
               visible to the command itself (so we had 
       multiple update of 
               updated tuples, etc)(Vadim)
       Fix for SELECT null, 'fail' FROM pg_am (Patrick)
       SELECT NULL as EMPTY_FIELD now allowed(Patrick)
       Remove un-needed signal stuff from 
       contrib/pginterface
       Fix OR (where x <> 1 or x isnull didn't return tuples 
       with x NULL) (Vadim)
       Fix time_cmp function (Vadim)
       Fix handling of functions with non-attribute first 
       argument in 
               WHERE clauses (Vadim)
       Fix GROUP BY when order of entries is different from 
       order
               in target list (Vadim)
       Fix pg_dump for aggregates without sfunc1 (Vadim)

       Enhancements
       ------------
       Default genetic optimizer GEQO parameter is now 
       8(Bruce)
       Allow use parameters in target list having aggregates 
       in functions(Vadim)
       Added JDBC driver as an interface(Adrian & Peter)
       pg_password utility
       Return number of tuples inserted/affected by 
       INSERT/UPDATE/DELETE etc.(Vadim)
       Triggers implemented with CREATE TRIGGER 
       (SQL3)(Vadim)
       SPI (Server Programming Interface) allows execution 
       of queries inside 
               C-functions (Vadim)
       NOT NULL implemented (SQL92)(Robson Paniago de 
       Miranda)
       Include reserved words for string handling, outer 
       joins, and unions(Thomas)
       Implement extended comments ("/* ... */") using 
       exclusive states(Thomas)
       Add "//" single-line comments(Bruce)
       Remove some restrictions on characters in operator 
       names(Thomas)
       DEFAULT and CONSTRAINT for tables implemented 
       (SQL92)(Vadim & Thomas)
       Add text concatenation operator and function 
       (SQL92)(Thomas)
       Support WITH TIME ZONE syntax (SQL92)(Thomas)
       Support INTERVAL unit TO unit syntax (SQL92)(Thomas)
       Define types DOUBLE PRECISION, INTERVAL, CHARACTER,
               and CHARACTER VARYING (SQL92)(Thomas)
       Define type FLOAT(p) and rudimentary DECIMAL(p,s), 
       NUMERIC(p,s) (SQL92)(Thomas)
       Define EXTRACT(), POSITION(), SUBSTRING(), and TRIM() 
       (SQL92)(Thomas)
       Define CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP 
       (SQL92)(Thomas)
       Add syntax and warnings for UNION, HAVING, INNER and 
       OUTER JOIN (SQL92)(Thomas)
       Add more reserved words, mostly for SQL92 
       compliance(Thomas)
       Allow hh:mm:ss time entry for timespan/reltime 
       types(Thomas)
       Add center() routines for lseg, path, polygon(Thomas)
       Add distance() routines for circle-polygon, 
       polygon-polygon(Thomas)
       Check explicitly for points and polygons contained 
       within polygons
               using an axis-crossing algorithm(Thomas)
       Add routine to convert circle-box(Thomas)
       Merge conflicting operators for different geometric 
       data types(Thomas)
       Replace distance operator "<===>" with "<->"(Thomas)
       Replace "above" operator "!^" with ">^" and "below" 
       operator "!|" with "<^"(Thomas)
       Add routines for text trimming on both ends, 
       substring, and string position(Thomas)
       Added conversion routines circle(box) and 
       poly(circle)(Thomas)
       Allow internal sorts to be stored in memory rather 
       than in files(Bruce & Vadim)
       Allow functions and operators on internally-identical 
       types to succeed(Bruce)
       Speed up backend startup after profiling 
       analysis(Bruce)
       Inline frequently called functions for 
       performance(Bruce)
       Reduce open() calls(Bruce)
       psql:  Add PAGER for \h and \?,\C fix
       Fix for psql pager when no tty(Bruce)
       New entab utility(Bruce)
       General trigger functions for referential integrity 
       (Vadim)
       General trigger functions for time travel (Vadim)
       General trigger functions for AUTOINCREMENT/IDENTITY 
       feature (Vadim)
       MOVE implementation (Vadim)

       Source Tree Changes
       -------------------
       HPUX 10 patches (Vladimir Turin)
       Added SCO support, (Daniel Harris)
       mkLinux patches (Tatsuo Ishii)
       Change geometric box terminology from "length" to 
       "width"(Thomas)
       Deprecate temporary unstored slope fields in 
       geometric code(Thomas)
       Remove restart instructions from INSTALL(Bruce)
       Look in /usr/ucb first for install(Bruce)
       Fix c++ copy example code(Thomas)
       Add -o to psql manual page(Bruce)
       Prevent relname unallocated string length from being 
       copied into database(Bruce)
       Cleanup for NAMEDATALEN use(Bruce)
       Fix pg_proc names over 15 chars in output(Bruce)
       Add strNcpy() function(Bruce)
       remove some (void) casts that are unnecessary(Bruce)
       new interfaces directory(Marc)
       Replace fopen() calls with calls to fd.c 
       functions(Bruce)
       Make functions static where possible(Bruce)
       enclose unused functions in #ifdef NOT_USED(Bruce)
       Remove call to difftime() in timestamp support to fix 
       SunOS(Bruce & Thomas)
       Changes for Digital Unix
       Portability fix for pg_dumpall(Bruce)
       Rename pg_attribute.attnvals to attdisbursion(Bruce)
       "intro/unix" manual page now "pgintro"(Bruce)
       "built-in" manual page now "pgbuiltin"(Bruce)
       "drop" manual page now "drop_table"(Bruce)
       Add "create_trigger", "drop_trigger" manual 
       pages(Thomas)
       Add constraints regression test(Vadim & Thomas)
       Add comments syntax regression test(Thomas)
       Add PGINDENT and support program(Bruce)
       Massive commit to run PGINDENT on all *.c and *.h 
       files(Bruce)
       Files moved to /src/tools directory(Bruce)
       SPI and Trigger programming guides (Vadim & D'Arcy)

Release 6.1.1

Migration from v6.1 to v6.1.1

       This is a minor bug-fix release. A dump/reload is not 
       required from v6.1, but is required from any release 
       prior to v6.1. Refer to the release notes for v6.1 
       for more details.

Detailed Change List

       Changes in this release
       -----------------------
       fix for SET with options (Thomas)
       allow pg_dump/pg_dumpall to preserve ownership of all 
       tables/objects(Bruce)
       new psql \connect option allows changing usernames 
       without chaning databases
       fix for initdb --debug option(Yoshihiko Ichikawa))
       lextest cleanup(Bruce)
       hash fixes(Vadim)
       fix date/time month boundary arithmetic(Thomas)
       fix timezone daylight handling for some ports(Thomas, 
       Bruce, Tatsuo)
       timestamp overhauled to use standard 
       functions(Thomas)
       other code cleanup in date/time routines(Thomas)
       psql's \d now case-insensitive(Bruce)
       psql's backslash commands can now have trailing 
       semicolon(Bruce)
       fix memory leak in psql when using \g(Bruce)
       major fix for endian handling of communication to 
       server(Thomas, Tatsuo)
       Fix for Solaris assembler and include files(Yoshihiko 
       Ichikawa)
       allow underscores in usernames(Bruce)
       pg_dumpall now returns proper status, portability 
       fix(Bruce)

Release 6.1

       The regression tests have been adapted and 
       extensively modified for the v6.1 release of 
       Postgres.
       Three new data types (datetime, timespan, and circle) 
       have been added to the native set of Postgres types. 
       Points, boxes, paths, and polygons have had their 
       output formats made consistant across the data types. 
       The polygon output in misc.out has only been 
       spot-checked for correctness relative to the original 
       regression output.
       Postgres v6.1 introduces a new, alternate optimizer 
       which uses genetic algorithms. These algorithms 
       introduce a random behavior in the ordering of query 
       results when the query contains multiple qualifiers 
       or multiple tables (giving the optimizer a choice on 
       order of evaluation). Several regression tests have 
       been modified to explicitly order the results, and 
       hence are insensitive to optimizer choices. A few 
       regression tests are for data types which are 
       inherently unordered (e.g. points and time intervals) 
       and tests involving those types are explicitly 
       bracketed with set geqo to 'off' and reset geqo.
       The interpretation of array specifiers (the curly 
       braces around atomic values) appears to have changed 
       sometime after the original regression tests were 
       generated. The current ./expected/*.out files reflect 
       this new interpretation, which may not be correct!
       The float8 regression test fails on at least some 
       platforms. This is due to differences in 
       implementations of pow() and exp() and the signaling 
       mechanisms used for overflow and underflow 
       conditions.
       The "random" results in the random test should cause 
       the "random" test to be "failed", since the 
       regression tests are evaluated using a simple diff. 
       However, "random" does not seem to produce random 
       results on my test machine (Linux/gcc/i686).

Migration to v6.1

       This migration requires a complete dump of the 6.0 
       database and a restore of the database in 6.1.
       Those migrating from earlier 1.* releases should 
       first upgrade to 1.09 because the COPY output format 
       was improved from the 1.02 release.

Detailed Change List

       Bug Fixes
       ---------
       packet length checking in library routines
       lock manager priority patch
       check for under/over flow of float8(Bruce)
       multi-table join fix(Vadim)
       SIGPIPE crash fix(Darren)
       large object fixes(Sven)
       allow btree indexes to handle NULLs(Vadim)
       timezone fixes(D'Arcy)
       select SUM(x) can return NULL on no rows(Thomas)
       internal optimizer, executor bug fixes(Vadim)
       fix problem where inner loop in < or <= has no 
       rows(Vadim)
       prevent re-commuting join index clauses(Vadim)
       fix join clauses for multiple tables(Vadim)
       fix hash, hashjoin for arrays(Vadim)
       fix btree for abstime type(Vadim)
       large object fixes(Raymond)
       fix buffer leak in hash indices (Vadim)
       fix rtree for use in inner scan (Vadim)
       fix gist for use in inner scan, cleanups (Vadim, 
       Andrea)
       avoid unnecessary local buffers allocation (Vadim, 
       Massimo)
       fix local buffers leak in transaction aborts (Vadim)
       fix file manager memmory leaks, cleanups (Vadim, 
       Massimo)
       fix storage manager memmory leaks (Vadim)
       fix btree duplicates handling (Vadim)
       fix deleted tuples re-incarnation caused by vacuum 
       (Vadim)
       fix SELECT varchar()/char() INTO TABLE made 
       zero-length fields(Bruce)
       many psql, pg_dump, and libpq memory leaks fixed 
       using Purify (Igor)

       Enhancements
       ------------
       attribute optimization statistics(Bruce)
       much faster new btree bulk load code(Paul)
       BTREE UNIQUE added to bulk load code(Vadim) 
       new lock debug code(Massimo)
       massive changes to libpg++(Leo)
       new GEQO optimizer speeds table multi-table 
       optimization(Martin)
       new WARN message for non-unique insert into unique 
       key(Marc)
       update x=-3, no spaces, now valid(Bruce)
       remove case-sensitive identifier 
       handling(Bruce,Thomas,Dan)
       debug backend now pretty-prints tree(Darren)
       new Oracle character functions(Edmund)
       new plaintext password functions(Dan)
       no such class or insufficient privilege changed to 
       distinct messages(Dan)
       new ANSI timestamp function(Dan)
       new ANSI Time and Date types (Thomas)
       move large chunks of data in backend(Martin)
       multi-column btree indexes(Vadim)
       new SET var TO value command(Martin)
       update transaction status on reads(Dan)
       new locale settings for character types(Oleg)
       new SEQUENCE serial number generator(Vadim)
       GROUP BY function now possible(Vadim)
       re-organize regression test(Thomas,Marc)
       new optimizer operation weights(Vadim)
       new psql \z grant/permit option(Marc)
       new MONEY data type(D'Arcy,Thomas)
       tcp socket communication speed improved(Vadim)
       new VACUUM option for attribute statistics, and for 
       certain columns (Vadim)
       many geometric type improvements(Thomas,Keith)
       additional regression tests(Thomas)
       new datestyle variable(Thomas,Vadim,Martin)
       more comparison operators for sorting types(Thomas)
       new conversion functions(Thomas)
       new more compact btree format(Vadim)
       allow pg_dumpall to preserve database 
       ownership(Bruce)
       new SET GEQO=# and R_PLANS variable(Vadim)
       old (!GEQO) optimizer can use right-sided plans 
       (Vadim)
       typechecking improvement in SQL parser(Bruce)
       new SET, SHOW, RESET commands(Thomas,Vadim)
       new \connect database USER option
       new destroydb -i option (Igor)
       new \dt and \di psql commands (Darren)
       SELECT "\n" now escapes newline (A. Duursma)
       new geometry conversion functions from old format 
       (Thomas)

       Source tree changes
       -------------------
       new configuration script(Marc)
       readline configuration option added(Marc)
       OS-specific configuration options removed(Marc)
       new OS-specific template files(Marc)
       no more need to edit Makefile.global(Marc)
       re-arrange include files(Marc)
       nextstep patches (Gregor Hoffleit)
       removed WIN32-specific code(Bruce)
       removed postmaster -e option, now only postgres -e 
       option (Bruce)
       merge duplicate library code in 
       front/backends(Martin)
       now works with eBones, international Kerberos(Jun)
       more shared library support
       c++ include file cleanup(Bruce)
       warn about buggy flex(Bruce)
       DG-UX, Ultrix, Irix, AIX portability fixes

Release v6.0

       A dump/restore is required for those wishing to 
       migrate data from previous releases of Postgres.

Migration from v1.09 to v6.0

       This migration requires a complete dump of the 1.09 
       database and a restore of the database in 6.0.

Migration from pre-v1.09 to v6.0

       Those migrating from earlier 1.* releases should 
       first upgrade to 1.09 because the COPY output format 
       was improved from the 1.02 release.

Detailed Change List

       Bug Fixes
       ---------
       ALTER TABLE bug - running postgress process needs to 
       re-read table definition
       Allow vacuum to be run on one table or entire 
       database(Bruce)
       Array fixes
       Fix array over-runs of memory writes(Kurt)
       Fix elusive btree range/non-range bug(Dan)
       Fix for hash indexes on some types like time and date
       Fix for pg_log size explosion
       Fix permissions on lo_export()(Bruce)
       Fix unitialized reads of memory(Kurt)
       Fixed ALTER TABLE ... char(3) bug(Bruce)
       Fixed a few small memory leaks
       Fixed EXPLAIN handling of options and changed 
       full_path option name
       Fixed output of group acl permissions
       Memory leaks (hunt and destroy with tools like 
       Purify(Kurt)
       Minor improvements to rules system
       NOTIFY fixes
       New asserts for run-checking
       Overhauled parser/analyze code to properly report 
       errors and increase speed
       Pg_dump -d now handles NULL's properly(Bruce)
       Prevent SELECT NULL from crashing server (Bruce)
       Properly report errors when INSERT ... SELECT columns 
       did not match
       Properly report errors when insert column names were 
       not correct
       Psql \g filename now works(Bruce)
       Psql fixed problem with multiple statements on one 
       line with multiple outputs
       Removed duplicate system oid's
       SELECT * INTO TABLE . GROUP/ORDER BY gives unlink 
       error if table exists(Bruce)
       Several fixes for queries that crashed the backend
       Starting quote in insert string errors(Bruce)
       Submitting an empty query now returns empty status, 
       not just " " query(Bruce)

       Enhancements
       ------------
       Add EXPLAIN manual page(Bruce)
       Add UNIQUE index capability(Dan)
       Add hostname/user level access control rather than 
       just hostname and user
       Add synonym of != for <>(Bruce)
       Allow "select oid,* from table"
       Allow BY,ORDER BY to specify columns by number, or by 
       non-alias table.column(Bruce)
       Allow COPY from the frontend(Bryan)
       Allow GROUP BY to use alias column name(Bruce)
       Allow actual compression, not just reuse on the same 
       page(Vadim)
       Allow installation-configuration option to auto-add 
       all local users(Bryan)
       Allow libpq to distinguish between text value '' and 
       null(Bruce)
       Allow non-postgres users with createdb privs to 
       destroydb's
       Allow restriction on who can create C 
       functions(Bryan)
       Allow restriction on who can do backend COPY(Bryan)
       Can shrink tables, pg_time and pg_log(Vadim & Erich)
       Change debug level 2 to print queries only, changed 
       debug heading layout(Bruce)
       Change default decimal constant representation from 
       float4 to float8(Bruce)
       European date format now set when postmaster is 
       started
       Execute lowercase function names if not found with 
       exact case
       Fixes for aggregate/GROUP processing, allow 'select 
       sum(func(x),sum(x+y) from z'
       Gist now included in the distrubution(Marc)
       Idend authentication of local users(Bryan)
       Implement BETWEEN qualifier(Bruce)
       Implement IN qualifier(Bruce)
       Libpq has PQgetisnull()(Bruce)
       Libpq++ improvements
       New options to initdb(Bryan)
       Pg_dump allow dump of oid's(Bruce)
       Pg_dump create indexes after tables are loaded for 
       speed(Bruce)
       Pg_dumpall dumps all databases, and the user table
       Pginterface additions for NULL values(Bruce)
       Prevent postmaster from being run as root
       Psql \h and \? is now readable(Bruce)
       Psql allow backslashed, semicolons anywhere on the 
       line(Bruce)
       Psql changed command prompt for lines in query or in 
       quotes(Bruce)
       Psql char(3) now displays as (bp)char in \d 
       output(Bruce)
       Psql return code now more accurate(Bryan?)
       Psql updated help syntax(Bruce)
       Re-visit and fix vacuum(Vadim)
       Reduce size of regression diffs, remove timezone name 
       difference(Bruce)
       Remove compile-time parameters to enable binary 
       distributions(Bryan)
       Reverse meaning of HBA masks(Bryan)
       Secure Authentication of local users(Bryan)
       Speed up vacuum(Vadim)
       Vacuum now had VERBOSE option(Bruce)

       Source tree changes
       -------------------
       All functions now have prototypes that are compared 
       against the calls
       Allow asserts to be disabled easly from 
       Makefile.global(Bruce)
       Change oid constants used in code to #define names
       Decoupled sparc and solaris defines(Kurt)
       Gcc -Wall compiles cleanly with warnings only from 
       unfixable constructs
       Major include file reorganization/reduction(Marc)
       Make now stops on compile failure(Bryan)
       Makefile restructuring(Bryan, Marc)
       Merge bsdi_2_1 to bsdi(Bruce)
       Monitor program removed
       Name change from Postgres95 to PostgreSQL
       New config.h file(Marc, Bryan)
       PG_VERSION now set to 6.0 and used by postmaster
       Portability additions, including Ultrix, DG/UX, AIX, 
       and Solaris
       Reduced the number of #define's, centeralized 
       #define's
       Remove duplicate OIDS in system tables(Dan)
       Remove duplicate system catalog info or report 
       mismatches(Dan)
       Removed many os-specific #define's
       Restructured object file generation/location(Bryan, 
       Marc)
       Restructured port-specific file locations(Bryan, 
       Marc)
       Unused/uninialized variables corrected

Release v1.09

       Sorry, we stopped keeping track of changes from 1.02 
       to 1.09. Some of the changes listed in 6.0 were 
       actually included in the 1.02.1 to 1.09 releases.

Release v1.02

Migration from v1.02 to v1.02.1

       Here is a new migration file for 1.02.1. It includes 
       the 'copy' change and a script to convert old ascii 
       files. 

       ERROR: Unknown field type   The following notes are 
          for the benefit of users who want to migrate 
          databases from postgres95 1.01 and 1.02 to 
          postgres95 1.02.1. 
          If you are starting afresh with postgres95 1.02.1 
          and do not need to migrate old databases, you do 
          not need to read any further.

       In order to upgrade older postgres95 version 1.01 or 
       1.02 databases to version 1.02.1, the following steps 
       are required:

       1. Start up a new 1.02.1 postmaster 
       2. Add the new built-in functions and operators of 
         1.02.1 to 1.01 or 1.02 databases. This is done by 
         running the new 1.02.1 server against your own 
         1.01 or 1.02 database and applying the queries 
         attached at the end of thie file. This can be done 
         easily through psql. If your 1.01 or 1.02 database 
         is named "testdb" and you have cut the commands 
         from the end of this file and saved them in 
         addfunc.sql: 
           % psql testdb -f addfunc.sql
         Those upgrading 1.02 databases will get a warning 
         when executing the last two statements in the file 
         because they are already present in 1.02. This is 
         not a cause for concern.

Dump/Reload Procedure

       If you are trying to reload a pg_dump or text-mode 
       'copy tablename to stdout' generated with a previous 
       version, you will need to run the attached sed script 
       on the ASCII file before loading it into the 
       database. The old format used '.' as end-of-data, 
       while '\.' is now the end-of-data marker. Also, empty 
       strings are now loaded in as '' rather than NULL. See 
       the copy manual page for full details. 

               sed 's/^\.$/\\./g' <in_file >out_file

       If you are loading an older binary copy or non-stdout 
       copy, there is no end-of-data character, and hence no 
       conversion necessary. 

       -- following lines added by agc to reflect the 
       case-insensitive
       -- regexp searching for varchar (in 1.02), and bpchar 
       (in 1.02.1)
       create operator ~* (leftarg = bpchar, rightarg = 
       text, procedure = texticregexeq);
       create operator !~* (leftarg = bpchar, rightarg = 
       text, procedure = texticregexne);
       create operator ~* (leftarg = varchar, rightarg = 
       text, procedure = texticregexeq);
       create operator !~* (leftarg = varchar, rightarg = 
       text, procedure = texticregexne);

Detailed Change List

       Source code maintenance and development
        * worldwide team of volunteers
        * the source tree now in CVS at ftp.ki.net

       Enhancements
        * psql (and underlying libpq library) now has many 
       more options for
          formatting output, including HTML
        * pg_dump now output the schema and/or the data, 
       with many fixes to
          enhance completeness.
        * psql used in place of monitor in administration 
       shell scripts.
          monitor to be depreciated in next release.
        * date/time functions enhanced
        * NULL insert/update/comparison fixed/enhanced
        * TCL/TK lib and shell fixed to work with both 
       tck7.4/tk4.0 and tcl7.5/tk4.1

       Bug Fixes (almost too numerous to mention)
        * indexes
        * storage management
        * check for NULL pointer before dereferencing
        * Makefile fixes

       New Ports
        * added SolarisX86 port
        * added BSDI 2.1 port
        * added DGUX port

Release v1.01

Migration from v1.0 to v1.01

       The following notes are for the benefit of users who 
       want to migrate databases from postgres95 1.0 to 
       postgres95 1.01.
       If you are starting afresh with postgres95 1.01 and 
       do not need to migrate old databases, you do not need 
       to read any further.
       In order to postgres95 version 1.01 with databases 
       created with postgres95 version 1.0, the following 
       steps are required:

       1. Set the definition of NAMEDATALEN in 
         src/Makefile.global to 16 and OIDNAMELEN to 20. 
       2. Decide whether you want to use Host based 
         authentication. 
            a. If you do, you must create a file name 
              "pg_hba" in your top-level data directory 
              (typically the value of your $PGDATA). 
              src/libpq/pg_hba shows an example syntax. 
            b. If you do not want host-based authentication, 
              you can comment out the line 
                      HBA = 1
               in src/Makefile.global 
              Note that host-based authentication is turned 
              on by default, and if you do not take steps A 
              or B above, the out-of-the-box 1.01 will not 
              allow you to connect to 1.0 databases.
       3. Compile and install 1.01, but DO NOT do the initdb 
         step. 
       4. Before doing anything else, terminate your 1.0 
         postmaster, and backup your existing $PGDATA 
         directory. 
       5. Set your PGDATA environment variable to your 1.0 
         databases, but set up path up so that 1.01 
         binaries are being used. 
       6. Modify the file $PGDATA/PG_VERSION from 5.0 to 5.1 
       7. Start up a new 1.01 postmaster 
       8. Add the new built-in functions and operators of 
         1.01 to 1.0 databases. This is done by running the 
         new 1.01 server against your own 1.0 database and 
         applying the queries attached and saving in the 
         file 1.0_to_1.01.sql. This can be done easily 
         through psql. If your 1.0 database is name 
         "testdb": 
          % psql testdb -f 1.0_to_1.01.sql
         and then execute the following commands (cut and 
         paste from here): 
         -- add builtin functions that are new to 1.01

         create function int4eqoid (int4, oid) returns bool 
         as 'foo'
         language 'internal';
         create function oideqint4 (oid, int4) returns bool 
         as 'foo'
         language 'internal';
         create function char2icregexeq (char2, text) 
         returns bool as 'foo'
         language 'internal';
         create function char2icregexne (char2, text) 
         returns bool as 'foo'
         language 'internal';
         create function char4icregexeq (char4, text) 
         returns bool as 'foo'
         language 'internal';
         create function char4icregexne (char4, text) 
         returns bool as 'foo'
         language 'internal';
         create function char8icregexeq (char8, text) 
         returns bool as 'foo'
         language 'internal';
         create function char8icregexne (char8, text) 
         returns bool as 'foo'
         language 'internal';
         create function char16icregexeq (char16, text) 
         returns bool as 'foo'
         language 'internal';
         create function char16icregexne (char16, text) 
         returns bool as 'foo'
         language 'internal';
         create function texticregexeq (text, text) returns 
         bool as 'foo'
         language 'internal';
         create function texticregexne (text, text) returns 
         bool as 'foo'
         language 'internal';

         -- add builtin functions that are new to 1.01

         create operator = (leftarg = int4, rightarg = oid, 
         procedure = int4eqoid);
         create operator = (leftarg = oid, rightarg = int4, 
         procedure = oideqint4);
         create operator ~* (leftarg = char2, rightarg = 
         text, procedure = char2icregexeq);
         create operator !~* (leftarg = char2, rightarg = 
         text, procedure = char2icregexne);
         create operator ~* (leftarg = char4, rightarg = 
         text, procedure = char4icregexeq);
         create operator !~* (leftarg = char4, rightarg = 
         text, procedure = char4icregexne);
         create operator ~* (leftarg = char8, rightarg = 
         text, procedure = char8icregexeq);
         create operator !~* (leftarg = char8, rightarg = 
         text, procedure = char8icregexne);
         create operator ~* (leftarg = char16, rightarg = 
         text, procedure = char16icregexeq);
         create operator !~* (leftarg = char16, rightarg = 
         text, procedure = char16icregexne);
         create operator ~* (leftarg = text, rightarg = 
         text, procedure = texticregexeq);
         create operator !~* (leftarg = text, rightarg = 
         text, procedure = texticregexne);

Detailed Change List

       Incompatibilities:
        * 1.01 is backwards compatible with 1.0 database 
       provided the user
          follow the steps outlined in the 
       MIGRATION_from_1.0_to_1.01 file.
          If those steps are not taken, 1.01 is not 
       compatible with 1.0 database.

       Enhancements:
        * added PQdisplayTuples() to libpq and changed 
       monitor and psql to use it
        * added NeXT port (requires SysVIPC implementation)
        * added CAST .. AS ... syntax
        * added ASC and DESC keywords
        * added 'internal' as a possible language for CREATE 
       FUNCTION
          internal functions are C functions which have been 
       statically linked
          into the postgres backend.
        * a new type "name" has been added for system 
       identifiers (table names,
          attribute names, etc.)  This replaces the old 
       char16 type.   The
          of name is set by the NAMEDATALEN #define in 
       src/Makefile.global
        * a readable reference manual that describes the 
       query language.
        * added host-based access control.  A configuration 
       file ($PGDATA/pg_hba)
          is used to hold the configuration data.  If 
       host-based access control
          is not desired, comment out HBA=1 in 
       src/Makefile.global.
        * changed regex handling to be uniform use of Henry 
       Spencer's regex code
          regardless of platform.  The regex code is 
       included in the distribution
        * added functions and operators for case-insensitive 
       regular expressions. 
          The operators are ~* and !~*.
        * pg_dump uses COPY instead of SELECT loop for 
       better performance

       Bug fixes:
        * fixed an optimizer bug that was causing core dumps 
       when 
          functions calls were used in comparisons in the 
       WHERE clause
        * changed all uses of getuid to geteuid so that 
       effective uids are used
        * psql now returns non-zero status on errors when 
       using -c
        * applied public patches 1-14

Release v1.0

Detailed Change List

       Copyright change:
        * The copyright of Postgres 1.0 has been loosened to 
       be freely modifiable
          and modifiable for any purpose.  Please read the 
       COPYRIGHT file.
          Thanks to Professor Michael Stonebraker for making 
       this possible.

       Incompatibilities:
        *  date formats have to be MM-DD-YYYY (or DD-MM-YYYY 
       if you're using
          EUROPEAN STYLE).  This follows SQL-92 specs.
        *  "delimiters" is now a keyword

       Enhancements:
        *  sql LIKE syntax has been added
        *  copy command now takes an optional USING 
       DELIMITER specification.
          delimiters can be any single-character string. 
        *  IRIX 5.3 port has been added.
          Thanks to Paul Walmsley and others.
        *  updated pg_dump to work with new libpq
        *  \d has been added psql 
          Thanks to Keith Parks
        *  regexp performance for architectures that use 
       POSIX regex has been
          improved due to caching of precompiled patterns.
          Thanks to Alistair Crooks
        *  a new version of libpq++
          Thanks to William Wanders

       Bug fixes:
        *  arbitrary userids can be specified in the 
       createuser script
        *  \c to connect to other databases in psql now 
       works.
        *  bad pg_proc entry for float4inc() is fixed
        *  users with usecreatedb field set can now create 
       databases without
          having to be usesuper
        *  remove access control entries when the entry no 
       longer has any
          permissions
        *  fixed non-portable datetimes implementation
        *  added kerberos flags to the src/backend/Makefile
        *  libpq now works with kerberos
        *  typographic errors in the user manual have been 
       corrected.
        *  btrees with multiple index never worked, now we 
       tell you they don't
          work when you try to use them

Postgres95 Beta 0.03

Detailed Change List

       Incompatible changes:
        * BETA-0.3 IS INCOMPATIBLE WITH DATABASES CREATED 
       WITH PREVIOUS VERSIONS
          (due to system catalog changes and indexing 
       structure changes).
        * double-quote (") is deprecated as a quoting 
       character for string literals;
          you need to convert them to single quotes (').
        * name of aggregates (eg. int4sum) are renamed in 
       accordance with the
          SQL standard (eg. sum).
        * CHANGE ACL syntax is replaced by GRANT/REVOKE 
       syntax.
        * float literals (eg. 3.14) are now of type float4 
       (instead of float8 in
          previous releases); you might have to do 
       typecasting if you depend on it
          being of type float8.  If you neglect to do the 
       typecasting and you assign
          a float literal to a field of type float8, you may 
       get incorrect values
          stored!
        * LIBPQ has been totally revamped so that frontend 
       applications
          can connect to multiple backends
        * the usesysid field in pg_user has been changed 
       from int2 to int4 to
          allow wider range of Unix user ids.
        * the netbsd/freebsd/bsd o/s ports have been 
       consolidated into a
          single BSD44_derived port.  (thanks to Alistair 
       Crooks)

       SQL standard-compliance (the following details 
       changes that makes postgres95
       more compliant to the SQL-92 standard):
        * the following SQL types are now built-in: 
       smallint, int(eger), float, real,
          char(N), varchar(N), date and time.

          The following are aliases to existing postgres 
       types:
                       smallint -> int2
                       integer, int -> int4
                       float, real  -> float4
          char(N) and varchar(N) are implemented as 
       truncated text types. In
          addition, char(N) does blank-padding. 
        * single-quote (') is used for quoting string 
       literals; '' (in addition to
          \') is supported as means of inserting a single 
       quote in a string
        * SQL standard aggregate names (MAX, MIN, AVG, SUM, 
       COUNT) are used
          (Also, aggregates can now be overloaded, i.e. you 
       can define your
          own MAX aggregate to take in a user-defined type.)
        * CHANGE ACL removed. GRANT/REVOKE syntax added.  
          - Privileges can be given to a group using the 
       "GROUP" keyword.
               For example:
                       GRANT SELECT ON foobar TO GROUP 
       my_group;
               The keyword 'PUBLIC' is also supported to 
       mean all users.       

               Privileges can only be granted or revoked to 
       one user or group
               at a time.  

               "WITH GRANT OPTION" is not supported.  Only 
       class owners can change
               access control
          - The default access control is to to grant users 
       readonly access.
            You must explicitly grant insert/update access 
       to users.  To change
            this, modify the line in 
                       src/backend/utils/acl.h 
            that defines ACL_WORLD_DEFAULT 

       Bug fixes:
        * the bug where aggregates of empty tables were not 
       run has been fixed. Now,
          aggregates run on empty tables will return the 
       initial conditions of the
          aggregates. Thus, COUNT of an empty  table will 
       now properly return 0.
          MAX/MIN of an empty table will return a tuple of 
       value NULL. 
        * allow the use of \; inside the monitor
        * the LISTEN/NOTIFY asynchronous notification 
       mechanism now work
        * NOTIFY in rule action bodies now work
        * hash indices work, and access methods in general 
       should perform better.
          creation of large btree indices should be much 
       faster.  (thanks to Paul
          Aoki)

       Other changes and enhancements:
        * addition of an EXPLAIN statement used for 
       explaining the query execution
          plan (eg. "EXPLAIN SELECT * FROM EMP" prints out 
       the execution plan for
          the query).
        * WARN and NOTICE messages no longer have timestamps 
       on them. To turn on
          timestamps of error messages, uncomment the line 
       in
          src/backend/utils/elog.h:
               /* define ELOG_TIMESTAMPS */ 
        * On an access control violation, the message
               "Either no such class or insufficient 
       privilege"
          will be given.  This is the same message that is 
       returned when
          a class is not found.  This dissuades 
       non-privileged users from
          guessing the existence of privileged classes.
        * some additional system catalog changes have been 
       made that are not
          visible to the user.

       libpgtcl changes:
        * The -oid option has been added to the "pg_result" 
       tcl command.
          pg_result -oid returns oid of the last tuple 
       inserted.   If the
          last command was not an INSERT, then pg_result 
       -oid returns "".
        * the large object interface is available as pg_lo* 
       tcl commands:
          pg_lo_open, pg_lo_close, pg_lo_creat, etc.

       Portability enhancements and New Ports:
        * flex/lex problems have been cleared up.  Now, you 
       should be able to use
          flex instead of lex on any platforms.  We no 
       longer make assumptions of
          what lexer you use based on the platform you use. 
        * The Linux-ELF port is now supported.  Various 
       configuration have been 
          tested:  The following configuration is known to 
       work:
               kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 
       2.5.2, bison 1.24
          with everything in ELF format,

       New utilities:
        * ipcclean added to the distribution
          ipcclean usually does not need to be run, but if 
       your backend crashes
          and leaves shared memory segments hanging around, 
       ipcclean will
          clean them up for you.

       New documentation:
        * the user manual has been revised and libpq 
       documentation added.

Postgres95 Beta 0.02

Detailed Change List

       Incompatible changes:
        * The SQL statement for creating a database is 
       'CREATE DATABASE' instead
          of 'CREATEDB'. Similarly, dropping a database is 
       'DROP DATABASE' instead
          of 'DESTROYDB'. However, the names of the 
       executables 'createdb' and 
          'destroydb' remain the same.
        
       New tools:
        * pgperl - a Perl (4.036) interface to Postgres95
        * pg_dump - a utility for dumping out a postgres 
       database into a
               script file containing query commands. The 
       script files are in a ASCII
               format and can be used to reconstruct the 
       database, even on other
               machines and other architectures. (Also good 
       for converting
               a Postgres 4.2 database to Postgres95 
       database.)

       The following ports have been incorporated into 
       postgres95-beta-0.02:
        * the NetBSD port by Alistair Crooks
        * the AIX port by Mike Tung
        * the Windows NT port by Jon Forrest (more stuff but 
       not done yet)
        * the Linux ELF port by Brian Gallew

       The following bugs have been fixed in 
       postgres95-beta-0.02:
        * new lines not escaped in COPY OUT and problem with 
       COPY OUT when first
          attribute is a '.' 
        * cannot type return to use the default user id in 
       createuser
        * SELECT DISTINCT on big tables crashes
        * Linux installation problems
        * monitor doesn't allow use of 'localhost' as PGHOST
        * psql core dumps when doing \c or \l
        * the "pgtclsh" target missing from 
       src/bin/pgtclsh/Makefile
        * libpgtcl has a hard-wired default port number
        * SELECT DISTINCT INTO TABLE hangs
        * CREATE TYPE doesn't accept 'variable' as the 
       internallength
        * wrong result using more than 1 aggregate in a 
       SELECT

Postgres95 Beta 0.01

       Initial release.

Timing Results

       These timing results are from running the regression 
       test with the commands 

       % cd src/test/regress
       % make all
       % time make runtest

       Timing under Linux 2.0.27 seems to have a roughly 5% 
       variation from run to run, presumably due to the 
       scheduling vagaries of multitasking systems.

v6.4beta

       The times for this release are not directly 
       comparable to those for previous releases since some 
       additional regression tests have been included. In 
       general, however, v6.4 should be slightly faster than 
       the previous release (thanks, Bruce!).

         Time   System
         02:26  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 
       2.0.30, gcc 2.7.2.1 -O2 -m486

v6.3

       The times for this release are not directly 
       comparable to those for previous releases since some 
       additional regression tests have been included and 
       some obsolete tests involving time travel have been 
       removed. In general, however, v6.3 is substantially 
       faster than previous releases (thanks, Bruce!).

         Time   System
         02:30  Dual Pentium Pro 180, 96MB, UW-SCSI, Linux 
       2.0.30, gcc 2.7.2.1 -O2 -m486
         04:12  Dual Pentium Pro 180, 96MB, EIDE, Linux 
       2.0.30, gcc 2.7.2.1 -O2 -m486

v6.1

         Time   System
         06:12  Pentium Pro 180, 32MB, EIDE, Linux 2.0.30, 
       gcc 2.7.2 -O2 -m486
         12:06  P-100, 48MB, Linux 2.0.29, gcc
         39:58  Sparc IPC 32MB, Solaris 2.5, gcc 2.7.2.1 -O 
       -g
Index