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' 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