]> granicus.if.org Git - postgresql/blob - INSTALL
Split 'BufFile' routines out of fd.c into a new module, buffile.c. Extend
[postgresql] / INSTALL
1
2 PostgreSQL Installation Guide
3 by The PostgreSQL Development Team
4
5 PostgreSQL is © 1998-9 by the Postgres Global Development Group.
6 Table of Contents
7
8        Summary                                            
9        1. Introduction                                    
10        2. Ports                                           
11           Currently Supported Platforms                   
12           Unsupported Platforms                           
13        3. Installation                                    
14           Requirements to Run Postgres                    
15           Installation Procedure                          
16           Playing with Postgres                           
17           The Next Step                                   
18           Porting Notes                                   
19        4. Configuration Options                           
20           Parameters for Configuration (configure)        
21           Parameters for Building (make)                  
22           Locale Support                                  
23              What are the Benefits?                       
24              What are the Drawbacks?                      
25           Kerberos Authentication                         
26              Availability                                 
27              Installation                                 
28              Operation                                    
29        5. Release Notes                                   
30           Release 6.5.1                                   
31              Migration to v6.5.1                          
32              Detailed Change List                         
33           Release 6.5                                     
34              Migration to v6.5                            
35                  Multi-Version Concurrency Control        
36              Detailed Change List                         
37
38 Summary
39
40        Postgres, developed originally in the UC Berkeley 
41        Computer Science Department, pioneered many of the 
42        object-relational concepts now becoming available in 
43        some commercial databases. It provides SQL92/SQL3 
44        language support, transaction integrity, and type 
45        extensibility. PostgreSQL is a public-domain, open 
46        source descendant of this original Berkeley code.
47
48 Chapter 1. Introduction
49
50        This installation procedure makes some assumptions 
51        about the desired configuration and runtime 
52        environment for your system. This may be adequate for 
53        many installations, and is almost certainly adequate 
54        for a first installation. But you may want to do an 
55        initial installation up to the point of unpacking the 
56        source tree and installing documentation, and then 
57        print or browse the Administrator's Guide.
58
59 Chapter 2. Ports
60
61         This manual describes version 6.5.1 of Postgres. The 
62        Postgres developer community has compiled and tested 
63        Postgres on a number of platforms. Check the web site 
64        (http://www.postgresql.org/docs/admin/ports.htm) for 
65        the latest information. 
66
67 Currently Supported Platforms
68
69         At the time of publication, the following platforms 
70        have been tested: 
71
72        Table 2-1. Supported Platforms
73        OS          Processor   Version    Reported    Remarks
74        AIX 4.3.2   RS6000      v6.5       1999-05-26  (Andreas Zeugswetter 
75                                        (mailto:Andreas.Zeugswetter@telecom.at))
76        BSDI        x86         v6.5       1999-05-25  (Bruce Momjian 
77                                           (mailto:maillist@candle.pha.pa.us)
78        FreeBSD     x86         v6.5       1999-05-25  (Tatsuo Ishii 
79        2.2.x-4.0                          (mailto:t-ishii@sra.co.jp), 
80                                           Marc Fournier
81                                           (mailto:scrappy@hub.org))
82        DGUX        m88k        v6.3       1998-03-01  v6.4 probably OK.
83        5.4R4.11                           Needs new maintainer.
84                                           (Brian E Gallew 
85                                           (mailto:geek+@cmu.edu))
86        Digital     Alpha       v6.4       1998-10-29  Minor patchable problems 
87        Unix 4.0                                       (Pedro J. Lobo 
88                                           (mailto:pjlobo@euitt.upm.es))
89        HPUX        PA-RISC     v6.4       1998-10-25  Both 9.0x and 10.20
90                                           (Tom Lane (mailto:tgl@sss.pgh.pa.us), 
91                                            Stan Brown (mailto:stanb@awod.com))
92        IRIX 6.5    MIPS        v6.4       1998-12-29  IRIX 5.x is different
93                                           (Mark Dalphin (mdalphin@amgen.com))
94        linux       Alpha       v6.3.2     1998-04-16  Mostly successful. Needs 
95        2.0.x                                          work for v6.4.
96                                           (Ryan Kirkpatrick 
97                                        (mailto:rkirkpat@nag.cs.colorado.edu))
98        linux       x86         v6.4       1998-10-27  (Thomas Lockhart 
99        2.0.x/libc5                        (mailto:lockhart@alumni.caltech.edu))
100        linux       x86         v6.4       1999-05-24  (Thomas Lockhart 
101        2.0.x/glibc2                       (mailto:lockhart@alumni.caltech.edu))
102        linux       MIPS        v6.4       1998-12-16  Cobalt Qube (Tatsuo Ishii 
103        2.0.x                              (mailto:t-ishii@sra.co.jp))
104        linux       Sparc       v6.4       1998-10-25  (Tom Szybist 
105        2.0.x                              (mailto:szybist@boxhill.com))
106        linuxPPC    PPC603e     v6.4       1998-10-26  Powerbook 2400c
107        2.1.24                                         (Tatsuo Ishii 
108                                           (mailto:t-ishii@sra.co.jp))
109        mklinux     PPC750      v6.4       1998-09-16  PowerMac 7600
110        DR3                                (Tatsuo Ishii
111                                           (mailto:t-ishii@sra.co.jp))
112        NetBSD      arm32       v6.5       1999-04-14  (Andrew McMurry 
113                                       (mailto:a.mcmurry1@physics.oxford.ac.uk))
114        NetBSD/i3-  x86         v6.4       1998-10-25  (Brook Milligan 
115        86 1.3.2                           (mailto:brook@trillium.NMSU.Edu))
116        NetBSD      m68k        v6.4.2     1998-12-28  Mac SE/30 (Mr. Mutsuki 
117                                                       Nakajima, Tatsuo Ishii 
118                                           (mailto:t-ishii@sra.co.jp))
119        NetBSD-     NS32532     v6.4       1998-10-27  small problems
120        current                            in date/time math (Jon Buller 
121                                           (mailto:jonb@metronet.com))
122        NetBSD/sp-  Sparc       v6.4       1998-10-27  (Tom I Helbekkmo 
123        arc 1.3H                           (mailto:tih@hamartun.priv.no))
124        NetBSD 1.3  VAX         v6.3       1998-03-01  (Tom I Helbekkmo 
125                                           (mailto:tih@hamartun.priv.no))
126        SCO         x86         v6.5       1999-05-25  (Andrew Merrill 
127        OpenServer 5                       (mailto:andrew@compclass.com))
128        SCO         x86         v6.5       1999-05-25  (Andrew Merrill 
129        UnixWare 7                         (mailto:andrew@compclass.com))
130        Solaris     x86         v6.4       1998-10-28  (Marc Fournier 
131                                           (mailto:scrappy@hub.org))
132        Solaris     Sparc       v6.4       1998-10-28  (Tom Szybist 
133        2.6-2.7                            (mailto:szybist@boxhill.com),
134                                            Frank Ridderbusch 
135                                           (mailto:ridderbusch.pad@sni.de))
136        SunOS       Sparc       v6.3       1998-03-01  Patches submitted
137        4.1.4                              (Tatsuo Ishii 
138                                           (mailto:t-ishii@sra.co.jp))
139        SVR4        MIPS        v6.4       1998-10-28  No 64-bit int compiler 
140                                           support (Frank Ridderbusch 
141                                           (mailto:ridderbusch.pad@sni.de))
142        Windows     x86         v6.4       1999-01-06  Client-side libraries
143                                           or ODBC/JDBC. No server yet. 
144                                           (Magnus Hagander 
145                                           (mha@sollentuna.net)
146        Windows NT  x86         v6.5       1999-05-26  Working with the Cygwin 
147                                           library. (Daniel Horak 
148                                           (mailto:Dan.Horak@email.cz)) 
149
150
151         
152         Platforms listed for v6.3.x and v6.4.x should also 
153        work with v6.5.1, but we did not receive explicit 
154        confirmation of such at the time this list was 
155        compiled. 
156
157          Note: For Windows NT, the server-side port of 
158          Postgres has recently been accomplished. The 
159          Cygnus library is required to compile it.
160
161 Unsupported Platforms
162
163         There are a few platforms which have been attempted 
164        and which have been reported to not work with the 
165        standard distribution. Others listed here do not 
166        provide sufficient library support for an attempt. 
167
168        Table 2-2. Possibly Incompatible Platforms
169        OS          Processor   Version    Reported    Remarks
170        MacOS       all         v6.3       1998-03-01  Not library compatible; 
171                                           use ODBC/JDBC
172        NextStep    x86         v6.x       1998-03-01  Client-only support; 
173                                           v1.0.9 worked with patches 
174                                           (David Wetzel 
175                                           (mailto:dave@turbocat.de))
176        SVR4 4.4    m88k        v6.2.1     1998-03-01  Confirmed
177                                           with patching; 
178                                           v6.4.x will need TAS 
179                                           spinlock code (Doug 
180                                           Winterburn 
181                                           (mailto:dlw@seavme.xroads.com))
182        Ultrix      MIPS,VAX?   v6.x       1998-03-01  No recent reports; 
183                                                       obsolete?
184
185
186 Chapter 3. Installation
187
188         Complete installation instructions for Postgres 
189        v6.5.1. 
190
191         Before installing Postgres, you may wish to visit 
192        www.postgresql.org (http://www.postgresql.org) for up 
193        to date information, patches, etc. 
194         These installation instructions assume: 
195        o  Commands are Unix-compatible. See note below. 
196        o  Defaults are used except where noted. 
197        o  User postgres is the Postgres superuser. 
198        o  The source path is /usr/src/pgsql (other paths are 
199         possible). 
200        o  The runtime path is /usr/local/pgsql (other paths 
201         are possible). 
202         
203         Commands were tested on RedHat Linux version 5.2 
204        using the tcsh shell. Except where noted, they will 
205        probably work on most systems. Commands like ps and 
206        tar may vary wildly between platforms on what options 
207        you should use. Use common sense before typing in 
208        these commands. 
209         Our Makefiles require GNU make (called ?gmake? in this 
210        document). They will not work with non-GNU make 
211        programs. If you have GNU make installed under the 
212        name ?make? instead of ?gmake?, then you will use the 
213        command make instead. That's OK, but you need to have 
214        the GNU form of make to succeed with an installation. 
215
216 Requirements to Run Postgres
217
218         Up to date information on supported platforms is at 
219        http://www.postgresql.org/docs/admin/install.htm 
220        (http://www.postgresql.org/docs/admin/install.htm). 
221        In general, most Unix-compatible platforms with 
222        modern libraries should be able to run Postgres. 
223         Although the minimum required memory for running 
224        Postgres is as little as 8MB, there are noticable 
225        improvements in runtimes for the regression tests 
226        when expanding memory up to 96MB on a relatively fast 
227        dual-processor system running X-Windows. The rule is 
228        you can never have too much memory. 
229         Check that you have sufficient disk space. You will 
230        need about 30 Mbytes for /usr/src/pgsql, about 5 
231        Mbytes for /usr/local/pgsql (excluding your database) 
232        and 1 Mbyte for an empty database. The database will 
233        temporarily grow to about 20 Mbytes during the 
234        regression tests. You will also need about 3 Mbytes 
235        for the distribution tar file. 
236         We therefore recommend that during installation and 
237        testing you have well over 20 Mbytes free under 
238        /usr/local and another 25 Mbytes free on the disk 
239        partition containing your database. Once you delete 
240        the source files, tar file and regression database, 
241        you will need 2 Mbytes for /usr/local/pgsql, 1 Mbyte 
242        for the empty database, plus about five times the 
243        space you would require to store your database data 
244        in a flat file. 
245         To check for disk space, use 
246
247        $ df -k
248            
249
250         
251
252 Installation Procedure
253
254        Postgres Installation
255        For a fresh install or upgrading from previous 
256        releases of Postgres:
257        1. Read any last minute information and platform 
258          specific porting notes. There are some platform 
259          specific notes at the end of this file for 
260          Ultrix4.x, Linux, BSD/OS and NeXT. There are other 
261          files in directory /usr/src/pgsql/doc, including 
262          files FAQ-Irix and FAQ-Linux. Also look in 
263          directory ftp://ftp.postgresql.org/pub. If there 
264          is a file called INSTALL in this directory then 
265          this file will contain the latest installation 
266          information.
267           Please note that a "tested" platform in the list 
268          given earlier simply means that someone went to 
269          the effort at some point of making sure that a 
270          Postgres distribution would compile and run on 
271          this platform without modifying the code. Since 
272          the current developers will not have access to all 
273          of these platforms, some of them may not compile 
274          cleanly and pass the regression tests in the 
275          current release due to minor problems. Any such 
276          known problems and their solutions will be posted 
277          in ftp://ftp.postgresql.org/pub/INSTALL.
278        2. Create the Postgres superuser account (postgres is 
279          commonly used) if it does not already exist.
280          The owner of the Postgres files can be any 
281          unprivileged user account. It must not be root, 
282          bin, or any other account with special access 
283          rights, as that would create a security risk.
284        3. Log in to the Postgres superuser account. Most of 
285          the remaining steps in the installation will 
286          happen in this account.
287        4. Ftp file 
288          ftp://ftp.postgresql.org/pub/postgresql-v6.5.1.tar.gz 
289          from the Internet. Store it in your home 
290          directory.
291        5. Some platforms use flex. If your system uses flex 
292          then make sure you have a good version. To check, 
293          type 
294          $ flex --version
295           If the flex command is not found then you 
296          probably do not need it. If the version is 2.5.2 
297          or 2.5.4 or greater then you are okay. If it is 
298          2.5.3 or before 2.5.2 then you will have to 
299          upgrade flex. You may get it at 
300          ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz.
301           If you need flex and don't have it or have the 
302          wrong version, then you will be told so when you 
303          attempt to compile the program. Feel free to skip 
304          this step if you aren't sure you need it. If you 
305          do need it then you will be told to 
306          install/upgrade flex when you try to compile 
307          Postgres.
308          You may want to do the entire flex installation 
309          from the root account, though that is not 
310          absolutely necessary. Assuming that you want the 
311          installation to place files in the usual default 
312          areas, type the following: 
313          $ su -
314          $ cd /usr/local/src
315          ftp prep.ai.mit.edu
316          ftp> cd /pub/gnu/
317          ftp> binary
318          ftp> get flex-2.5.4.tar.gz
319          ftp> quit
320          $ gunzip -c flex-2.5.4.tar.gz | tar xvf -
321          $ cd flex-2.5.4
322          $ configure --prefix=/usr
323          $ gmake
324          $ gmake check
325          # You must be root when typing the next line:
326          $ gmake install
327          $ cd /usr/local/src
328          $ rm -rf flex-2.5.4
329           This will update files /usr/man/man1/flex.1, 
330          /usr/bin/flex, /usr/lib/libfl.a, 
331          /usr/include/FlexLexer.h and will add a link 
332          /usr/bin/flex++ which points to flex.
333        6. If you are not upgrading an existing system then 
334          skip to step 9. If you are upgrading from 6.5, you
335          do not need to dump/reload or initdb. Simply
336          compile the source code, stop the postmaster, do a
337          "make install", and restart the postmaster.
338          If you are upgrading from 6.4.* or earlier,
339          back up your database.  For alpha- and 
340          beta-level releases, the database format is liable 
341          to change, often every few weeks, with no notice 
342          besides a quick comment in the HACKERS mailing 
343          list. Full releases always require a dump/reload 
344          from previous releases. It is therefore a bad idea 
345          to skip this step. 
346
347             Tip: Do not use the pg_dumpall script from v6.0 
348             or everything will be owned by the Postgres 
349             super user.
350
351          To dump your fairly recent post-v6.0 database 
352          installation, type 
353          $ pg_dumpall > db.out
354          To use the latest pg_dumpall script on your 
355          existing older database before upgrading Postgres, 
356          pull the most recent version of pg_dumpall from 
357          the new distribution: 
358          $ cd
359          $ gunzip -c postgresql-v6.5.1.tar.gz \
360              | tar xvf - src/bin/pg_dump/pg_dumpall
361          $ chmod a+x src/bin/pg_dump/pg_dumpall
362          $ src/bin/pg_dump/pg_dumpall > db.out
363          $ rm -rf src
364           If you wish to preserve object id's (oids), then 
365          use the -o option when running pg_dumpall. 
366          However, unless you have a special reason for 
367          doing this (such as using OIDs as keys in tables), 
368          don't do it.
369           If the pg_dumpall command seems to take a long 
370          time and you think it might have died, then, from 
371          another terminal, type 
372          $ ls -l db.out
373           several times to see if the size of the file is 
374          growing.
375           Please note that if you are upgrading from a 
376          version prior to Postgres95 v1.09 then you must 
377          back up your database, install Postgres95 v1.09, 
378          restore your database, then back it up again. You 
379          should also read the release notes which should 
380          cover any release-specific issues.
381
382                                  Caution
383                You must make sure that your database is not 
384               updated in the middle of your backup. If 
385               necessary, bring down postmaster, edit the 
386               permissions in file 
387               /usr/local/pgsql/data/pg_hba.conf to allow 
388               only you on, then bring postmaster back up.
389
390
391
392        7. If you are upgrading an existing system then kill 
393          the postmaster. Type 
394          $ ps -ax | grep postmaster
395           This should list the process numbers for a number 
396          of processes. Type the following line, with pid 
397          replaced by the process id for process postmaster. 
398          (Do not use the id for process "grep postmaster".) 
399          Type 
400          $ kill pid
401          to actually stop the process. 
402
403          Tip: On systems which have Postgres started at 
404             boot time, there is probably a startup file 
405             which will accomplish the same thing. For 
406             example, on my Linux system I can type 
407             $ /etc/rc.d/init.d/postgres.init stop
408             to halt Postgres.
409
410        8. If you are upgrading an existing system then move 
411          the old directories out of the way. If you are 
412          short of disk space then you may have to back up 
413          and delete the directories instead. If you do 
414          this, save the old database in the 
415          /usr/local/pgsql/data directory tree. At a 
416          minimum, save file 
417          /usr/local/pgsql/data/pg_hba.conf.
418           Type the following: 
419          $ su -
420          $ cd /usr/src
421          $ mv pgsql pgsql_6_0
422          $ cd /usr/local
423          $ mv pgsql pgsql_6_0
424          $ exit
425           If you are not using /usr/local/pgsql/data as 
426          your data directory (check to see if environment 
427          variable PGDATA is set to something else) then you 
428          will also want to move this directory in the same 
429          manner.
430        9. Make new source and install directories. The 
431          actual paths can be different for your 
432          installation but you must be consistent throughout 
433          this procedure.
434
435             Note: There are two places in this installation 
436             procedure where you will have an opportunity to 
437             specify installation locations for programs, 
438             libraries, documentation, and other files. 
439             Usually it is sufficient to specify these at the 
440             gmake install stage of installation.
441
442           Type 
443          $ su
444          $ cd /usr/src
445          $ mkdir pgsql
446          $ chown postgres:postgres pgsql
447          $ cd /usr/local
448          $ mkdir pgsql
449          $ chown postgres:postgres pgsql
450          $ exit
451        10.     Unzip and untar the new source file. Type 
452          $ cd /usr/src/pgsql
453          $ gunzip -c ~/postgresql-v6.5.1.tar.gz | tar xvf -
454        11.     Configure the source code for your system. It 
455          is this step at which you can specify your actual 
456          installation path for the build process (see the 
457          --prefix option below). Type 
458          $ cd /usr/src/pgsql/src
459          $ ./configure [ options ]
460             a. Among other chores, the configure script 
461               selects a system-specific "template" file 
462               from the files provided in the template 
463               subdirectory. If it cannot guess which one to 
464               use for your system, it will say so and exit. 
465               In that case you'll need to figure out which 
466               one to use and run configure again, this time 
467               giving the --with-template=TEMPLATE option to 
468               make the right file be chosen. 
469
470                Please Report Problems: If your system is not 
471                  automatically recognized by configure and 
472                  you have to do this, please send email to 
473                  scrappy@hub.org (mailto:scrappy@hub.org) 
474                  with the output of the program 
475                  ./config.guess. Indicate what the template 
476                  file should be.
477
478             b. Choose configuration options. Check 
479               Configuration Options for details. However, 
480               for a plain-vanilla first installation with 
481               no extra options like multi-byte character 
482               support or locale collation support it may be 
483               adequate to have chosen the installation 
484               areas and to run configure without extra 
485               options specified. The configure script 
486               accepts many additional options that you can 
487               use if you don't like the default 
488               configuration. To see them all, type 
489                    ./configure --help
490                Some of the more commonly used ones are: 
491                      --prefix=BASEDIR   Selects a different 
492               base directory for the
493                                         installation of the 
494               Postgres configuration.
495                                         The default is 
496               /usr/local/pgsql.
497                      --with-template=TEMPLATE
498                                         Use template file 
499               TEMPLATE - the template
500                                         files are assumed 
501               to be in the directory
502                                         src/template, so 
503               look there for proper values.
504                      --with-tcl         Build interface 
505               libraries and programs requiring
506                                         Tcl/Tk, including 
507               libpgtcl, pgtclsh, and pgtksh.
508                      --with-perl        Build the Perl 
509               interface library.
510                      --with-odbc        Build the ODBC 
511               driver package.
512                      --enable-hba       Enables Host Based 
513               Authentication (DEFAULT)
514                      --disable-hba      Disables Host Based 
515               Authentication
516                      --enable-locale    Enables USE_LOCALE
517                      --enable-cassert   Enables 
518               ASSERT_CHECKING
519                      --with-CC=compiler
520                                         Use a specific C 
521               compiler that the configure
522                                         script cannot find.
523                      --with-CXX=compiler
524                      --without-CXX
525                                         Use a specific C++ 
526               compiler that the configure
527                                         script cannot find, 
528               or exclude C++ compilation
529                                         altogether.   (This 
530               only affects libpq++ at
531                                         present.)
532             c. Here is the configure script used on a Sparc 
533               Solaris 2.5 system with /opt/postgres 
534               specified as the installation base directory: 
535               $ ./configure --prefix=/opt/postgres \
536                   --with-template=sparc_solaris-gcc 
537               --with-pgport=5432 \
538                   --enable-hba --disable-locale
539
540                Tip: Of course, you may type these three 
541                  lines all on the same line.
542
543        12.     Install the man and HTML documentation. Type 
544          $ cd /usr/src/pgsql/doc
545          $ gmake install
546          The documentation is also available in Postscript 
547          format. Look for files ending with .ps.gz in the 
548          same directory.
549        13.     Compile the program. Type 
550          $ cd /usr/src/pgsql/src
551          $ gmake all >& make.log &
552          $ tail -f make.log
553           The last line displayed will hopefully be 
554          All of PostgreSQL is successfully made. Ready to 
555          install.
556          Remember, ?gmake? may be called ?make? on your system. 
557          At this point, or earlier if you wish, type 
558          control-C to get out of tail. (If you have 
559          problems later on you may wish to examine file 
560          make.log for warning and error messages.) 
561
562             Note: You will probably find a number of warning 
563             messages in make.log. Unless you have problems 
564             later on, these messages may be safely ignored.
565
566           If the compiler fails with a message stating that 
567          the flex command cannot be found then install flex 
568          as described earlier. Next, change directory back 
569          to this directory, type 
570          $ gmake clean
571          then recompile again.
572           Compiler options, such as optimization and 
573          debugging, may be specified on the command line 
574          using the COPT variable. For example, typing 
575          $ gmake COPT="-g" all >& make.log &
576           would invoke your compiler's -g option in all 
577          steps of the build. See src/Makefile.global.in for 
578          further details.
579        14.     Install the program. Type 
580          $ cd /usr/src/pgsql/src
581          $ gmake install >& make.install.log &
582          $ tail -f make.install.log
583           The last line displayed will be 
584          gmake[1]: Leaving directory 
585          `/usr/src/pgsql/src/man'
586          At this point, or earlier if you wish, type 
587          control-C to get out of tail. Remember, ?gmake? may 
588          be called ?make? on your system.
589        15.     If necessary, tell your system how to find 
590          the new shared libraries. You can do one of the 
591          following, preferably the first:
592             a. As root, edit file /etc/ld.so.conf. Add a 
593               line 
594               /usr/local/pgsql/lib
595               to the file. Then run command /sbin/ldconfig.
596             b. In a bash shell, type 
597                   export 
598               LD_LIBRARY_PATH=/usr/local/pgsql/lib
599             c. In a csh shell, type 
600                   setenv LD_LIBRARY_PATH 
601               /usr/local/pgsql/lib
602           Please note that the above commands may vary 
603          wildly for different operating systems. Check the 
604          platform specific notes, such as those for 
605          Ultrix4.x or and for non-ELF Linux.
606           If, when you create the database, you get the 
607          message 
608          pg_id: can't load library 'libpq.so'
609           then the above step was necessary. Simply do this 
610          step, then try to create the database again.
611        16.     If you used the --with-perl option to 
612          configure, check the install log to see whether 
613          the Perl module was actually installed. If you've 
614          followed our advice to make the Postgres files be 
615          owned by an unprivileged userid, then the Perl 
616          module won't have been installed, for lack of 
617          write privileges on the Perl library directories. 
618          You can complete its installation, either now or 
619          later, by becoming the user that does own the Perl 
620          library (often root) (via su) and doing 
621                $ cd /usr/src/pgsql/src/interfaces/perl5
622                $ gmake install
623               
624           
625        17.     If it has not already been done, then prepare 
626          account postgres for using Postgres. Any account 
627          that will use Postgres must be similarly prepared. 
628           There are several ways to influence the runtime 
629          environment of the Postgres server. Refer to the 
630          Administrator's Guide for more information. 
631
632             Note: The following instructions are for a 
633             bash/sh shell. Adapt accordingly for other 
634             shells.
635
636           
637             a. Add the following lines to your login 
638               environment: shell, ~/.bash_profile: 
639                 PATH=$PATH:/usr/local/pgsql/bin
640                       MANPATH=$MANPATH:/usr/local/pgsql/man
641                       PGLIB=/usr/local/pgsql/lib
642                       PGDATA=/usr/local/pgsql/data
643                       export PATH MANPATH PGLIB PGDATA
644                      
645                
646             b. Several regression tests could fail if the 
647               user's locale collation scheme is different 
648               from that of standard C locale. 
649                If you configure and compile Postgres with 
650               the --enable-locale option then set locale 
651               environment to C (or unset all LC_* 
652               variables) by putting these additional lines 
653               to your login environment before starting 
654               postmaster: 
655                       LC_COLLATE=C
656                       LC_CTYPE=C
657                       LC_COLLATE=C
658                       export LC_COLLATE LC_CTYPE LC_COLLATE
659                      
660                
661                       
662                      
663                
664             c. Make sure that you have defined these 
665               variables before continuing with the 
666               remaining steps. The easiest way to do this 
667               is to type: 
668                 $ source ~/.bash_profile
669                      
670                
671        18.     Create the database installation from your 
672          Postgres superuser account (typically account 
673          postgres). Do not do the following as root! This 
674          would be a major security hole. Type 
675          $ initdb
676        19.     Set up permissions to access the database 
677          system. Do this by editing file 
678          /usr/local/pgsql/data/pg_hba.conf. The 
679          instructions are included in the file. (If your 
680          database is not located in the default location, 
681          i.e. if PGDATA is set to point elsewhere, then the 
682          location of this file will change accordingly.) 
683          This file should be made read only again once you 
684          are finished. If you are upgrading from v6.0 or 
685          later you can copy file pg_hba.conf from your old 
686          database on top of the one in your new database, 
687          rather than redoing the file from scratch.
688        20.     Briefly test that the backend will start and 
689          run by running it from the command line.
690             a. Start the postmaster daemon running in the 
691               background by typing 
692               $ cd
693               $ nohup postmaster -i > pgserver.log 2>&1 &
694             b. Create a database by typing 
695               $ createdb
696             c. Connect to the new database: 
697               $ psql
698             d. And run a sample query: 
699               postgres=> SELECT datetime 'now';
700             e. Exit psql: 
701               postgres=> \q
702             f. Remove the test database (unless you will 
703               want to use it later for other tests): 
704               $ destroydb
705        21.     Run postmaster in the background from your 
706          Postgres superuser account (typically account 
707          postgres). Do not run postmaster from the root 
708          account!
709          Usually, you will want to modify your computer so 
710          that it will automatically start postmaster 
711          whenever it boots. It is not required; the 
712          Postgres server can be run successfully from 
713          non-privileged accounts without root intervention.
714           Here are some suggestions on how to do this, 
715          contributed by various users.
716           Whatever you do, postmaster must be run by the 
717          Postgres superuser (postgres?) and not by root. 
718          This is why all of the examples below start by 
719          switching user (su) to postgres. These commands 
720          also take into account the fact that environment 
721          variables like PATH and PGDATA may not be set 
722          properly. The examples are as follows. Use them 
723          with extreme caution. 
724          o  If you are installing from a non-privileged 
725            account and have no root access, then start the 
726            postmaster and send it to the background: 
727            $ cd
728            $ nohup postmaster > regress.log 2>&1 &
729          o  Edit file rc.local on NetBSD or file rc2.d on 
730            SPARC Solaris 2.5.1 to contain the following 
731            single line: 
732            su postgres -c "/usr/local/pgsql/bin/postmaster 
733            -S -D /usr/local/pgsql/data"
734          o  In FreeBSD 2.2-RELEASE edit 
735            /usr/local/etc/rc.d/pgsql.sh to contain the 
736            following lines and make it chmod 755 and chown 
737            root:bin. 
738            #!/bin/sh
739            [ -x /usr/local/pgsql/bin/postmaster ] && {
740                su -l pgsql -c 'exec 
741            /usr/local/pgsql/bin/postmaster
742                    -D/usr/local/pgsql/data
743                    -S -o -F > /usr/local/pgsql/errlog' &
744                echo -n ' pgsql'
745            }
746             You may put the line breaks as shown above. The 
747            shell is smart enough to keep parsing beyond 
748            end-of-line if there is an expression unfinished. 
749            The exec saves one layer of shell under the 
750            postmaster process so the parent is init.
751          o  In RedHat Linux add a file 
752            /etc/rc.d/init.d/postgres.init which is based on 
753            the example in contrib/linux/. Then make a 
754            softlink to this file from 
755            /etc/rc.d/rc5.d/S98postgres.init.
756          o  In RedHat Linux edit file /etc/inittab to add the 
757            following as a single line: 
758            pg:2345:respawn:/bin/su - postgres -c
759                "/usr/local/pgsql/bin/postmaster 
760            -D/usr/local/pgsql/data
761                >> /usr/local/pgsql/server.log 2>&1 
762            </dev/null"
763             (The author of this example says this example 
764            will revive the postmaster if it dies, but he 
765            doesn't know if there are other side effects.)
766        22.     Run the regression tests. The file 
767          /usr/src/pgsql/src/test/regress/README has 
768          detailed instructions for running and interpreting 
769          the regression tests. A short version follows 
770          here:
771             a. Type 
772               $ cd /usr/src/pgsql/src/test/regress
773               $ gmake clean
774               $ gmake all runtest
775                You do not need to type gmake clean if this 
776               is the first time you are running the tests.
777                You should get on the screen (and also 
778               written to file ./regress.out) a series of 
779               statements stating which tests passed and 
780               which tests failed. Please note that it can 
781               be normal for some tests to "fail" on some 
782               platforms. The script says a test has failed 
783               if there is any difference at all between the 
784               actual output of the test and the expected 
785               output. Thus, tests may "fail" due to minor 
786               differences in wording of error messages, 
787               small differences in floating-point roundoff, 
788               etc, between your system and the regression 
789               test reference platform. "Failures" of this 
790               type do not indicate a problem with Postgres. 
791               The file ./regression.diffs contains the 
792               textual differences between the actual test 
793               output on your machine and the "expected" 
794               output (which is simply what the reference 
795               system produced). You should carefully 
796               examine each difference listed to see whether 
797               it appears to be a significant issue.
798               For example, 
799               o   For a i686/Linux-ELF platform, no tests 
800                 failed since this is the v6.5 regression 
801                 testing reference platform.
802                Even if a test result clearly indicates a 
803               real failure, it may be a localized problem 
804               that will not affect you. An example is that 
805               the int8 test will fail, producing obviously 
806               incorrect output, if your machine and C 
807               compiler do not provide a 64-bit integer data 
808               type (or if they do but configure didn't 
809               discover it). This is not something to worry 
810               about unless you need to store 64-bit 
811               integers.
812                Conclusion? If you do see failures, try to 
813               understand the nature of the differences and 
814               then decide if those differences will affect 
815               your intended use of Postgres. The regression 
816               tests are a helpful tool, but they may 
817               require some study to be useful.
818                After running the regression tests, type 
819               $ destroydb regression
820               $ cd /usr/src/pgsql/src/test/regress
821               $ gmake clean
822                to recover the disk space used for the 
823               tests. (You may want to save the 
824               regression.diffs file in another place before 
825               doing this.)
826        23.     If you haven't already done so, this would be 
827          a good time to modify your computer to do regular 
828          maintainence. The following should be done at 
829          regular intervals:
830
831          Minimal Backup Procedure
832          1.    Run the SQL command VACUUM. This will clean 
833             up your database.
834          2.    Back up your system. (You should probably 
835             keep the last few backups on hand.) Preferably, 
836             no one else should be using the system at the 
837             time.
838
839           Ideally, the above tasks should be done by a 
840          shell script that is run nightly or weekly by 
841          cron. Look at the man page for crontab for a 
842          starting point on how to do this. (If you do it, 
843          please e-mail us a copy of your shell script. We 
844          would like to set up our own systems to do this 
845          too.)
846        24.     If you are upgrading an existing system then 
847          reinstall your old database. Type 
848          $ cd
849          $ psql -e template1 < db.out
850           If your pre-v6.2 database uses either path or 
851          polygon geometric data types, then you will need 
852          to upgrade any columns containing those types. To 
853          do so, type (from within psql) 
854          UPDATE FirstTable SET PathCol = 
855          UpgradePath(PathCol);
856          UPDATE SecondTable SET PathCol = 
857          UpgradePath(PathCol);
858          ...
859          VACUUM;
860           UpgradePath() checks to see that a path value is 
861          consistant with the old syntax, and will not 
862          update a column which fails that examination. 
863          UpgradePoly() cannot verify that a polygon is in 
864          fact from an old syntax, but RevertPoly() is 
865          provided to reverse the effects of a mis-applied 
866          upgrade.
867        25.     If you are a new user, you may wish to play 
868          with Postgres as described below.
869        26.     Clean up after yourself. Type 
870          $ rm -rf /usr/src/pgsql_6_5
871          $ rm -rf /usr/local/pgsql_6_5
872          # Also delete old database directory tree if it is 
873          not in
874          #  /usr/local/pgsql_6_5/data
875          $ rm ~/postgresql-v6.5.1.tar.gz
876        27.     You will probably want to print out the 
877          documentation. If you have a Postscript printer, 
878          or have your machine already set up to accept 
879          Postscript files using a print filter, then to 
880          print the User's Guide simply type 
881          $ cd /usr/local/pgsql/doc
882          $ gunzip user.ps.tz | lpr
883           Here is how you might do it if you have 
884          Ghostscript on your system and are writing to a 
885          laserjet printer. 
886          $ alias gshp='gs -sDEVICE=laserjet -r300 
887          -dNOPAUSE'
888          $ export 
889          GS_LIB=/usr/share/ghostscript:/usr/share/ghostscr-
890          ipt/fonts
891          $ gunzip user.ps.gz
892          $ gshp -sOUTPUTFILE=user.hp user.ps
893          $ gzip user.ps
894          $ lpr -l -s -r manpage.hp
895        28.     The Postgres team wants to keep Postgres 
896          working on all of the supported platforms. We 
897          therefore ask you to let us know if you did or did 
898          not get Postgres to work on you system. Please 
899          send a mail message to pgsql-ports@postgresql.org 
900          (mailto:pgsql-ports@postgresql.org) telling us the 
901          following: 
902          o  The version of Postgres (v6.5.1, 6.5, beta 
903            990318, etc.).
904          o  Your operating system (i.e. RedHat v5.2 Linux 
905            v2.0.36).
906          o  Your hardware (SPARC, i486, etc.).
907          o  Did you compile, install and run the regression 
908            tests cleanly? If not, what source code did you 
909            change (i.e. patches you applied, changes you 
910            made, etc.), what tests failed, etc. It is normal 
911            to get many warning when you compile. You do not 
912            need to report these.
913        29.     Now create, access and manipulate databases 
914          as desired. Write client programs to access the 
915          database server. In other words, enjoy!
916
917 Playing with Postgres
918
919        After Postgres is installed, a database system is 
920        created, a postmaster daemon is running, and the 
921        regression tests have passed, you'll want to see 
922        Postgres do something. That's easy. Invoke the 
923        interactive interface to Postgres, psql: 
924
925        % psql template1
926
927        (psql has to open a particular database, but at this 
928        point the only one that exists is the template1 
929        database, which always exists. We will connect to it 
930        only long enough to create another one and switch to 
931        it.)
932        The response from psql is: 
933
934        Welcome to the POSTGRESQL interactive sql monitor:
935          Please read the file COPYRIGHT for copyright terms 
936        of POSTGRESQL
937
938           type \? for help on slash commands
939           type \q to quit
940           type \g or terminate with semicolon to execute 
941        query
942         You are currently connected to the database: 
943        template1
944
945        template1=>
946
947        Create the database foo: 
948
949        template1=> create database foo;
950        CREATEDB
951
952        (Get in the habit of including those SQL semicolons. 
953        Psql won't execute anything until it sees the 
954        semicolon or a "\g" and the semicolon is required to 
955        delimit multiple statements.)
956        Now connect to the new database: 
957
958        template1=> \c foo
959        connecting to new database: foo
960
961        ("slash" commands aren't SQL, so no semicolon. Use \? 
962        to see all the slash commands.)
963        And create a table: 
964
965        foo=> create table bar (i int4, c char(16));
966        CREATE
967
968        Then inspect the new table: 
969
970        foo=> \d bar
971
972        Table    = bar
973        +----------------------------------+-----------------
974        ------------------+-------+
975        |              Field               |              
976        Type                | Length|
977        +----------------------------------+-----------------
978        ------------------+-------+
979        | i                                | int4                             
980        |     4 |
981        | c                                | (bp)char                         
982        |    16 |
983        +----------------------------------+-----------------
984        ------------------+-------+
985
986        And so on. You get the idea.
987
988 The Next Step
989
990        Questions? Bugs? Feedback? First, read the files in 
991        directory /usr/src/pgsql/doc/. The FAQ in this 
992        directory may be particularly useful.
993        If Postgres failed to compile on your computer then 
994        fill out the form in file 
995        /usr/src/pgsql/doc/bug.template and mail it to the 
996        location indicated at the top of the form.
997        Check on the web site at http://www.postgresql.org 
998        For more information on the various support mailing 
999        lists.
1000
1001 Porting Notes
1002
1003         Check for any platform-specific FAQs in the doc/ 
1004        directory of the source distribution. 
1005
1006 Chapter 4. Configuration Options
1007
1008 Parameters for Configuration (configure)
1009
1010         The full set of parameters available in configure 
1011        can be obtained by typing 
1012
1013            $ ./configure --help
1014           
1015
1016         
1017         The following parameters may be of interest to 
1018        installers: 
1019
1020        Directory and file names:
1021          --prefix=PREFIX         install 
1022        architecture-independent files in PREFIX
1023                                  [/usr/local/pgsql]
1024          --bindir=DIR            user executables in DIR 
1025        [EPREFIX/bin]
1026          --libdir=DIR            object code libraries in 
1027        DIR [EPREFIX/lib]
1028          --includedir=DIR        C header files in DIR 
1029        [PREFIX/include]
1030          --mandir=DIR            man documentation in DIR 
1031        [PREFIX/man]
1032        Features and packages:
1033          --disable-FEATURE       do not include FEATURE 
1034        (same as --enable-FEATURE=no)
1035          --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
1036          --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
1037          --without-PACKAGE       do not use PACKAGE (same as 
1038        --with-PACKAGE=no)
1039        --enable and --with options recognized:
1040          --with-template=template
1041                                  use operating system 
1042        template file
1043                                      see template directory
1044          --with-includes=incdir  site header files for 
1045        tk/tcl, etc in DIR
1046          --with-libs=incdir      also search for libraries 
1047        in DIR
1048          --with-libraries=libdir also search for libraries 
1049        in DIR
1050          --enable-locale         enable locale support
1051          --enable-recode         enable cyrillic recode 
1052        support
1053          --with-mb=encoding    enable multi-byte support
1054          --with-pgport=portnum change default startup port
1055          --with-maxbackends=n  set default maximum number of 
1056        server processes 
1057          --with-tcl              build Tcl interfaces and 
1058        pgtclsh
1059          --with-tclconfig=tcldir tclConfig.sh and 
1060        tkConfig.sh are in DIR
1061          --with-perl             build Perl interface
1062          --with-odbc             build ODBC driver package
1063          --with-odbcinst=odbcdir change default directory 
1064        for odbcinst.ini
1065          --enable-cassert        enable assertion checks 
1066        (debugging)
1067          --with-CC=compiler      use specific C compiler
1068          --with-CXX=compiler     use specific C++ compiler
1069          --without-CXX           prevent building C++ code 
1070           
1071
1072         
1073         Some systems may have trouble building a specific 
1074        feature of Postgres. For example, systems with a 
1075        damaged C++ compiler may need to specify 
1076        --without-CXX to instruct the build procedure to skip 
1077        construction of libpq++. 
1078
1079 Parameters for Building (make)
1080
1081         Many installation-related parameters can be set in 
1082        the building stage of Postgres installation. 
1083         In most cases, these parameters should be placed in 
1084        a file, Makefile.custom, intended just for that 
1085        purpose. The default distribution does not contain 
1086        this optional file, so you will create it using a 
1087        text editor of your choice. When upgrading 
1088        installations, you can simply copy your old 
1089        Makefile.custom to the new installation before doing 
1090        the build. 
1091
1092            make [ variable=value [,...] ]
1093           
1094
1095         
1096         A few of the many variables which can be specified 
1097        are: 
1098
1099         POSTGRESDIR 
1100           Top of the installation tree. 
1101
1102         BINDIR 
1103           Location of applications and utilities. 
1104
1105         LIBDIR 
1106           Location of object libraries, including shared 
1107          libraries. 
1108
1109         HEADERDIR 
1110           Location of include files. 
1111
1112         ODBCINST 
1113           Location of installation-wide psqlODBC (ODBC) 
1114          configuration file. 
1115         
1116         There are other optional parameters which are not as 
1117        commonly used. Many of those listed below are 
1118        appropriate when doing Postgres server code 
1119        development. 
1120
1121         CFLAGS 
1122           Set flags for the C compiler. Should be assigned 
1123          with "+=" to retain relevant default parameters. 
1124
1125         YFLAGS 
1126           Set flags for the yacc/bison parser. -v might be 
1127          used to help diagnose problems building a new 
1128          parser. Should be assigned with "+=" to retain 
1129          relevant default parameters. 
1130
1131         USE_TCL 
1132           Enable Tcl interface building. 
1133
1134         HSTYLE 
1135           DocBook HTML style sheets for building the 
1136          documentation from scratch. Not used unless you 
1137          are developing new documentation from the 
1138          DocBook-compatible SGML source documents in 
1139          doc/src/sgml/. 
1140
1141         PSTYLE 
1142           DocBook style sheets for building printed 
1143          documentation from scratch. Not used unless you 
1144          are developing new documentation from the 
1145          DocBook-compatible SGML source documents in 
1146          doc/src/sgml/. 
1147         
1148         Here is an example Makefile.custom for a PentiumPro 
1149        Linux system: 
1150
1151        # Makefile.custom
1152        # Thomas Lockhart 1998-03-01
1153
1154        POSTGRESDIR= /opt/postgres/current
1155        CFLAGS+= -m486 # -g -O0
1156        USE_TCL= true
1157        TCL_LIB= -ltcl
1158        X_LIBS= -L/usr/X11/lib
1159        TK_LIB= -ltk
1160
1161        # documentation
1162
1163        HSTYLE= /home/tgl/SGML/db118.d/docbook/html
1164        PSTYLE= /home/tgl/SGML/db118.d/docbook/print
1165           
1166
1167         
1168
1169 Locale Support
1170
1171         
1172
1173          Note: Written by Oleg Bartunov. See Oleg's web 
1174          page (http://www.sai.msu.su/~megera/postgres/) for 
1175          additional information on locale and Russian 
1176          language support.
1177
1178         While doing a project for a company in Moscow, 
1179        Russia, I encountered the problem that postgresql had 
1180        no support of national alphabets. After looking for 
1181        possible workarounds I decided to develop support of 
1182        locale myself. I'm not a C-programer but already had 
1183        some experience with locale programming when I work 
1184        with perl (debugging) and glimpse. After several days 
1185        of digging through the Postgres source tree I made 
1186        very minor corections to 
1187        src/backend/utils/adt/varlena.c and 
1188        src/backend/main/main.c and got what I needed! I did 
1189        support only for LC_CTYPE and LC_COLLATE, but later 
1190        LC_MONETARY was added by others. I got many messages 
1191        from people about this patch so I decided to send it 
1192        to developers and (to my surprise) it was 
1193        incorporated into the Postgres distribution. 
1194         People often complain that locale doesn't work for 
1195        them. There are several common mistakes: 
1196        o  Didn't properly configure postgresql before 
1197         compilation. You must run configure with 
1198         --enable-locale option to enable locale support. 
1199         Didn't setup environment correctly when starting 
1200         postmaster. You must define environment variables 
1201         LC_CTYPE and LC_COLLATE before running postmaster 
1202         because backend gets information about locale from 
1203         environment. I use following shell script 
1204         (runpostgres): 
1205                #!/bin/sh
1206                
1207                export LC_CTYPE=koi8-r
1208                export LC_COLLATE=koi8-r
1209                postmaster -B 1024 -S 
1210         -D/usr/local/pgsql/data/ -o '-Fe'
1211               
1212          and run it from rc.local as 
1213                /bin/su - postgres -c 
1214         "/home/postgres/runpostgres"
1215               
1216          
1217        o  Broken locale support in OS (for example, locale 
1218         support in libc under Linux several times has 
1219         changed and this caused a lot of problems). Latest 
1220         perl has also support of locale and if locale is 
1221         broken perl -v will complain something like: 
1222                8:17[mira]:~/WWW/postgres>setenv LC_CTYPE 
1223         not_exist
1224                8:18[mira]:~/WWW/postgres>perl -v
1225                perl: warning: Setting locale failed.
1226                perl: warning: Please check that your locale 
1227         settings:
1228                LC_ALL = (unset),
1229                    LC_CTYPE = "not_exist",
1230                    LANG = (unset)
1231                are supported and installed on your system.
1232                perl: warning: Falling back to the standard 
1233         locale ("C").
1234               
1235          
1236        o  Wrong location of locale files! Possible locations 
1237         include: /usr/lib/locale (Linux, Solaris), 
1238         /usr/share/locale (Linux), /usr/lib/nls/loc (DUX 
1239         4.0). Check man locale to find the correct 
1240         location. Under Linux I did a symbolic link between 
1241         /usr/lib/locale and /usr/share/locale to be sure 
1242         that the next libc will not break my locale. 
1243         
1244
1245 What are the Benefits?
1246
1247         You can use ~* and order by operators for strings 
1248        contain characters from national alphabets. 
1249        Non-english users definitely need that. If you won't 
1250        use locale stuff just undefine the USE_LOCALE 
1251        variable. 
1252
1253 What are the Drawbacks?
1254
1255         There is one evident drawback of using locale - its 
1256        speed! So, use locale only if you really need it. 
1257
1258 Kerberos Authentication
1259
1260         Kerberos is an industry-standard secure 
1261        authentication system suitable for distributed 
1262        computing over a public network. 
1263
1264 Availability
1265
1266         The Kerberos authentication system is not 
1267        distributed with Postgres. Versions of Kerberos are 
1268        typically available as optional software from 
1269        operating system vendors. In addition, a source code 
1270        distribution may be obtained through MIT Project 
1271        Athena (ftp://athena-dist.mit.edu). 
1272
1273          Note: You may wish to obtain the MIT version even 
1274          if your vendor provides a version, since some 
1275          vendor ports have been deliberately crippled or 
1276          rendered non-interoperable with the MIT version.
1277
1278         Users located outside the United States of America 
1279        and Canada are warned that distribution of the actual 
1280        encryption code in Kerberos is restricted by U. S. 
1281        Government export regulations. 
1282         Inquiries regarding your Kerberos should be directed 
1283        to your vendor or MIT Project Athena 
1284        (info-kerberos@athena.mit.edu). Note that FAQLs 
1285        (Frequently-Asked Questions Lists) are periodically 
1286        posted to the Kerberos mailing list 
1287        (mailto:kerberos@ATHENA.MIT.EDU) (send mail to 
1288        subscribe (mailto:kerberos-request@ATHENA.MIT.EDU)), 
1289        and USENET news group (news:comp.protocols.kerberos). 
1290
1291 Installation
1292
1293         Installation of Kerberos itself is covered in detail 
1294        in the Kerberos Installation Notes . Make sure that 
1295        the server key file (the srvtab or keytab) is somehow 
1296        readable by the Postgres account. 
1297         Postgres and its clients can be compiled to use 
1298        either Version 4 or Version 5 of the MIT Kerberos 
1299        protocols by setting the KRBVERS variable in the file 
1300        src/Makefile.global to the appropriate value. You can 
1301        also change the location where Postgres expects to 
1302        find the associated libraries, header files and its 
1303        own server key file. 
1304         After compilation is complete, Postgres must be 
1305        registered as a Kerberos service. See the Kerberos 
1306        Operations Notes and related manual pages for more 
1307        details on registering services. 
1308
1309 Operation
1310
1311         After initial installation, Postgres should operate 
1312        in all ways as a normal Kerberos service. For details 
1313        on the use of authentication, see the PostgreSQL 
1314        User's Guide reference sections for postmaster and 
1315        psql. 
1316         In the Kerberos Version 5 hooks, the following 
1317        assumptions are made about user and service naming: 
1318        o  User principal names (anames) are assumed to 
1319         contain the actual Unix/Postgres user name in the 
1320         first component. 
1321        o  The Postgres service is assumed to be have two 
1322         components, the service name and a hostname, 
1323         canonicalized as in Version 4 (i.e., with all 
1324         domain suffixes removed). 
1325         
1326         
1327
1328        Table 4-1. Kerberos Parameter Examples
1329         Parameter   Example 
1330         user        frew@S2K.ORG 
1331         user        aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG 
1332         host        postgres_dbms/ucbvax@S2K.ORG 
1333
1334
1335         
1336         Support for Version 4 will disappear sometime after 
1337        the production release of Version 5 by MIT. 
1338
1339 Chapter 5. Release Notes
1340
1341 Release 6.5
1342
1343         This release marks a major step in the development 
1344        team's mastery of the source code we inherited from 
1345        Berkeley. You will see we are now easily adding major 
1346        features, thanks to the increasing size and 
1347        experience of our world-wide development team. 
1348         Here is a brief summary of some of the more 
1349        noticable changes: 
1350
1351         Multi-version concurrency control(MVCC) 
1352           This removes our old table-level locking, and 
1353          replaces it with a locking system that is superior 
1354          to most commercial database systems. In a 
1355          traditional system, each row that is modified is 
1356          locked until committed, preventing reads by other 
1357          users. MVCC uses the natural multi-version nature 
1358          of PostgreSQL to allow readers to continue reading 
1359          consistent data during writer activity. Writers 
1360          continue to use the compact pg_log transaction 
1361          system. This is all performed without having to 
1362          allocate a lock for every row like traditional 
1363          database systems. So, basically, we no longer are 
1364          restricted by simple table-level locking; we have 
1365          something better than row-level locking. 
1366
1367         Numeric data type 
1368           We now have a true numeric data type, with 
1369          user-specified precision. 
1370
1371         Temporary tables 
1372           Temporary tables are guaranteed to have unique 
1373          names within a database session, and are destroyed 
1374          on session exit. 
1375
1376         New SQL features 
1377           We now have CASE, INTERSECT, and EXCEPT statement 
1378          support. We have new LIMIT/OFFSET, SET TRANSACTION 
1379          ISOLATION LEVEL, SELECT ... FOR UPDATE, and an 
1380          improved LOCK command. 
1381
1382         Speedups 
1383           We continue to speed up PostgreSQL, thanks to the 
1384          variety of talents within our team. We have sped 
1385          up memory allocation, optimization, table joins, 
1386          and row transfer routines. 
1387
1388         Ports 
1389           We continue to expand our port list, this time 
1390          including WinNT/ix86 and NetBSD/arm32. 
1391
1392         Interfaces 
1393           Most interfaces have new versions, and existing 
1394          functionality has been improved. 
1395         
1396
1397 Migration to v6.5
1398
1399         A dump/restore using pg_dump or pg_dumpall is 
1400        required for those wishing to migrate data from any 
1401        previous release of Postgres. 
1402         The new Multi-Version Concurrency Control (MVCC) 
1403        features can give somewhat different behaviors in 
1404        multi-user environments. Read and understand the 
1405        following section to ensure that your existing 
1406        applications will give you the behavior you need. 
1407
1408        Multi-Version Concurrency Control
1409         Because readers in 6.5 don't lock data, regardless 
1410        of transaction isolation level, data read by one 
1411        transaction can be overwritten by another. In the 
1412        other words, if a row is returned by SELECT it 
1413        doesn't mean that this row really exists at the time 
1414        it is returned (i.e. sometime after the statement or 
1415        transaction began) nor that the row is protected from 
1416        deletion or updation by concurrent transactions 
1417        before the current transaction does a commit or 
1418        rollback. 
1419         To ensure the actual existance of a row and protect 
1420        it against concurrent updates one must use SELECT FOR 
1421        UPDATE or an appropriate LOCK TABLE statement. This 
1422        should be taken into account when porting 
1423        applications from previous releases of Postgres and 
1424        other environments. 
1425         Keep above in mind if you are using contrib/refint.* 
1426        triggers for referential integrity. Additional 
1427        technics are required now. One way is to use LOCK 
1428        parent_table IN SHARE ROW EXCLUSIVE MODE command if a 
1429        transaction is going to update/delete a primary key 
1430        and use LOCK parent_table IN SHARE MODE command if a 
1431        transaction is going to update/insert a foreign key. 
1432
1433          Note: Note that if you run a transaction in 
1434          SERIALIZABLE mode then you must execute LOCK 
1435          commands above before execution of any DML 
1436          statement 
1437          (SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) in the 
1438          transaction.
1439
1440         
1441         These inconveniences will disappear in the future 
1442        when the ability to read dirty (uncommitted) data 
1443        (regardless of isolation level) and true referential 
1444        integrity will be implemented. 
1445
1446 Detailed Change List
1447
1448         
1449
1450        Bug Fixes
1451        ---------
1452        Fix text<->float8 and text<->float4 conversion 
1453        functions(Thomas)
1454        Fix for creating tables with mixed-case 
1455        constraints(Billy)
1456        Change exp()/pow() behavior to generate error on 
1457        underflow/overflow(Jan)
1458        Fix bug in pg_dump -z
1459        Memory overrun cleanups(Tatsuo)
1460        Fix for lo_import crash(Tatsuo)
1461        Adjust handling of data type names to suppress double 
1462        quotes(Thomas)
1463        Use type coersion for matching columns and 
1464        DEFAULT(Thomas)
1465        Fix deadlock so it only checks once after one second 
1466        of sleep(Bruce)
1467        Fixes for aggregates and PL/pgsql(Hiroshi)
1468        Fix for subquery crash(Vadim)
1469        Fix for libpq function PQfnumber and case-insensitive 
1470        names(Bahman Rafatjoo)
1471        Fix for large object write-in-middle, no extra block, 
1472        memory consumption(Tatsuo)
1473        Fix for pg_dump -d or -D and  quote special 
1474        characters in INSERT
1475        Repair serious problems with dynahash(Tom)
1476        Fix INET/CIDR portability problems
1477        Fix problem with selectivity error in ALTER TABLE ADD 
1478        COLUMN(Bruce)
1479        Fix executor so mergejoin of different column types 
1480        works(Tom)
1481        Fix for Alpha OR selectivity bug
1482        Fix OR index selectivity problem(Bruce)
1483        Fix so \d shows proper length for 
1484        char()/varchar()(Ryan)
1485        Fix tutorial code(Clark)
1486        Improve destroyuser checking(Oliver)
1487        Fix for Kerberos(Rodney McDuff)
1488        Fix for dropping database while dirty buffers(Bruce)
1489        Fix so sequence nextval() can be 
1490        case-sensitive(Bruce)
1491        Fix !!= operator
1492        Drop buffers before destroying database files(Bruce)
1493        Fix case where executor evaluates functions 
1494        twice(Tatsuo)
1495        Allow sequence nextval actions to be 
1496        case-sensitive(Bruce)
1497        Fix optimizer indexing not working for negative 
1498        numbers(Bruce)
1499        Fix for memory leak in executor with fjIsNull
1500        Fix for aggregate memory leaks(Erik Riedel)
1501        Allow username containing a dash GRANT permissions
1502        Cleanup of NULL in inet types
1503        Clean up system table bugs(Tom)
1504        Fix problems of PAGER and \? command(Masaaki Sakaida)
1505        Reduce default multi-segment file size limit to 
1506        1GB(Peter)
1507        Fix for dumping of CREATE OPERATOR(Tom)
1508        Fix for backward scanning of cursors(Hiroshi Inoue)
1509        Fix for COPY FROM STDIN when using \i(Tom)
1510        Fix for subselect is compared inside an 
1511        expression(Jan)
1512        Fix handling of error reporting while returning 
1513        rows(Tom)
1514        Fix problems with reference to array types(Tom,Jan)
1515        Prevent UPDATE SET oid(Jan)
1516        Fix pg_dump so -t option can handle case-sensitive 
1517        tablenames
1518        Fixes for GROUP BY in special cases(Tom, Jan)
1519        Fix for memory leak in failed queries(Tom)
1520        DEFAULT now supports mixed-case identifiers(Tom)
1521        Fix for multi-segment uses of DROP/RENAME table, 
1522        indexes(Ole Gjerde)
1523
1524        Enhancements
1525        ------------
1526        Add "vacuumdb" utility
1527        Speed up libpq by allocating memory better(Tom)
1528        EXPLAIN all indices used(Tom)
1529        Implement CASE, COALESCE, NULLIF  expression(Thomas)
1530        New pg_dump table output format(Constantin)
1531        Add string min()/max() functions(Thomas)
1532        Extend new type coersion techniques to 
1533        aggregates(Thomas)
1534        New moddatetime contrib(Terry)
1535        Update to pgaccess 0.96(Constantin)
1536        Add routines for single-byte "char" type(Thomas)
1537        Improved substr() function(Thomas)
1538        Improved multi-byte handling(Tatsuo)
1539        Multi-version concurrency control/MVCC(Vadim)
1540        New Serialized mode(Vadim)
1541        Fix for tables over 2gigs(Peter)
1542        New SET TRANSACTION ISOLATION LEVEL(Vadim)
1543        New LOCK TABLE IN ... MODE(Vadim)
1544        Update ODBC driver(Byron)
1545        New NUMERIC data type(Jan)
1546        New SELECT FOR UPDATE(Vadim)
1547        Handle "NaN" and "Infinity" for input values(Jan)
1548        Improved date/year handling(Thomas)
1549        Improved handling of backend connections(Magnus)
1550        New options ELOG_TIMESTAMPS and USE_SYSLOG options 
1551        for log files(Massimo)
1552        New TCL_ARRAYS option(Massimo)
1553        New INTERSECT and EXCEPT(Stefan)
1554        New pg_index.indisprimary for primary key 
1555        tracking(D'Arcy)
1556        New pg_dump option to allow dropping of tables before 
1557        creation(Brook)
1558        Speedup of row output routines(Tom)
1559        New READ COMMITTED isolation level(Vadim)
1560        New TEMP tables/indexes(Bruce)
1561        Prevent sorting if result is already sorted(Jan)
1562        New memory allocation optimization(Jan)
1563        Allow psql to do \p\g(Bruce)
1564        Allow multiple rule actions(Jan)
1565        Added LIMIT/OFFSET functionality(Jan)
1566        Improve optimizer when joining a large number of 
1567        tables(Bruce)
1568        New intro to SQL from S. Simkovics' Master's Thesis 
1569        (Stefan, Thomas)
1570        New intro to backend processing from S. Simkovics' 
1571        Master's Thesis (Stefan)
1572        Improved int8 support(Ryan Bradetich, Thomas, Tom)
1573        New routines to convert between int8 and text/varchar 
1574        types(Thomas)
1575        New bushy plans, where meta-tables are joined(Bruce)
1576        Enable right-hand queries by default(Bruce)
1577        Allow reliable maximum number of backends to be set 
1578        at configure time
1579              (--with-maxbackends and postmaster switch (-N 
1580        backends))(Tom)
1581        GEQO default now 10 tables because of optimizer 
1582        speedups(Tom)
1583        Allow NULL=Var for MS-SQL portability(Michael, Bruce)
1584        Modify contrib check_primary_key() so either 
1585        "automatic" or "dependent"(Anand)
1586        Allow psql \d on a view show query(Ryan)
1587        Speedup for LIKE(Bruce)
1588        Ecpg fixes/features, see 
1589        src/interfaces/ecpg/ChangeLog file(Michael)
1590        JDBC fixes/features, see 
1591        src/interfaces/jdbc/CHANGELOG(Peter)
1592        Make % operator have precedence like /(Bruce)
1593        Add new postgres -O option to allow system table 
1594        structure changes(Bruce)
1595        Update contrib/pginterface/findoidjoins script(Tom)
1596        Major speedup in vacuum of deleted rows with 
1597        indexes(Vadim) 
1598        Allow non-SQL functions to run different versions 
1599        based on arguments(Tom)
1600        Add -E option that shows actual queries sent by \dt 
1601        and friends(Masaaki Sakaida)
1602        Add version number in startup banners for 
1603        psql(Masaaki Sakaida)
1604        New contrib/vacuumlo removes large objects not 
1605        referenced(Peter)
1606        New initialization for table sizes so non-vacuumed 
1607        tables perform better(Tom)
1608        Improve error messages when a connection is 
1609        rejected(Tom)
1610        Support for arrays of char() and varchar() 
1611        fields(Massimo)
1612        Overhaul of hash code to increase reliability and 
1613        performance(Tom)
1614        Update to PyGreSQL 2.4(D'Arcy)
1615        Changed debug options so -d4 and -d5 produce 
1616        different node displays(Jan)
1617        New pg_options: pretty_plan, pretty_parse, 
1618        pretty_rewritten(Jan)
1619        Better optimization statistics for system table 
1620        access(Tom)
1621        Better handling of non-default block sizes(Massimo)
1622        Improve GEQO optimizer memory consumption(Tom)
1623        UNION now suppports ORDER BY of columns not in target 
1624        list(Jan)
1625        Major libpq++ improvements(Vince Vielhaber)
1626
1627        Source Tree Changes
1628        -------------------
1629        Improve port matching(Tom)
1630        Portability fixes for SunOS
1631        Add NT/Win32 backend port and enable dynamic 
1632        loading(Magnus and Daniel Horak)
1633        New port to Cobalt Qube(Mips) running Linux(Tatsuo)
1634        Port to NetBSD/m68k(Mr. Mutsuki Nakajima)
1635        Port to NetBSD/sun3(Mr. Mutsuki Nakajima)
1636        Port to NetBSD/macppc(Toshimi Aoki)
1637        Fix for tcl/tk configuration(Vince)
1638        Removed CURRENT keyword for rule queries(Jan)
1639        NT dynamic loading now works(Daniel Horak)
1640        Add ARM32 support(Andrew McMurry)
1641        Better support for HPUX 11 and Unixware
1642        Improve file handling to be more uniform, prevent 
1643        file descriptor leak(Tom)
1644        New install commands for plpgsql(Jan)
1645             
1646
1647