Index: openacs-4/packages/acs-core-docs/www/postgres.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/postgres.html,v diff -u -r1.6.2.9 -r1.6.2.10 --- openacs-4/packages/acs-core-docs/www/postgres.html 7 May 2003 17:40:59 -0000 1.6.2.9 +++ openacs-4/packages/acs-core-docs/www/postgres.html 10 May 2003 21:24:08 -0000 1.6.2.10 @@ -1,109 +1,116 @@ -Install PostGreSQL 7.2.4

Install PostGreSQL 7.2.4

+Install PostGreSQL 7.2.4

Install PostGreSQL 7.2.4

by Vinod Kurup
OpenACS docs are written by the named authors, and may be edited by OpenACS documentation staff.

Skip this section if you will run only Oracle.

OpenACS 4.6.3 will run with PostGreSQL 7.2.x or 7.3.2. It has not been fully tested with 7.3.2; 7.2.4 is the recommended version of PostgreSQL to use.

This page assumes you have downloaded postgresql to -/tmp/postgresql-7.2.4.tar.gz. If not, +/tmp/postgresql-7.2.4.tar.gz. If not, get it. -

  1. Unpack PostGreSQL.

    [root@yourserver root]# cd /usr/local/src
    -[root@yourserver src]# tar xzf /tmp/postgresql-7.2.4.tar.gz
    +

    1. Unpack PostGreSQL.

      [root@yourserver root]# cd /usr/local/src
      +[root@yourserver src]# tar xzf /tmp/postgresql-7.2.4.tar.gz
       [root@yourserver src]# 
      -
      cd /usr/local/src
      -tar xzf /tmp/postgresql-7.2.4.tar.gz
    2. Create the Postgres user.� +

      cd /usr/local/src
      +tar xzf /tmp/postgresql-7.2.4.tar.gz
  2. Create the Postgres user.� Create a user and group (if you haven't done so before) for PostgreSQL. This is the account that PostgreSQL will run as since it will not run as root. Since nobody will log in directly as that user, we'll leave the password blank. -

    [root@yourserver src]# groupadd web
    -[root@yourserver src]# useradd -g web -d /usr/local/pgsql postgres
    -[root@yourserver src]# mkdir -p /usr/local/pgsql
    -[root@yourserver src]# chown -R postgres.web /usr/local/pgsql /usr/local/src/postgresql-7.2.4
    -[root@yourserver src]# chmod 750 /usr/local/pgsql
    +	

    [root@yourserver src]# groupadd web
    +[root@yourserver src]# useradd -g web -d /usr/local/pgsql postgres
    +[root@yourserver src]# mkdir -p /usr/local/pgsql
    +[root@yourserver src]# chown -R postgres.web /usr/local/pgsql /usr/local/src/postgresql-7.2.4
    +[root@yourserver src]# chmod 750 /usr/local/pgsql
     [root@yourserver src]#
    -
    groupadd web
    +
    groupadd web
     useradd -g web -d /usr/local/pgsql postgres
     mkdir -p /usr/local/pgsql
     chown -R postgres.web /usr/local/pgsql /usr/local/src/postgresql-7.2.4
    -chmod 750 /usr/local/pgsql
  3. Set up postgres's environment variables. They are +chmod 750 /usr/local/pgsql

  4. Set up postgres's environment variables. They are necessary for the executable to find its supporting libraries. For convenience, we'll simply append the necessary - lines to the postgres shell config file.

    [root@yourserver src]# echo "export LD_LIBRARY_PATH=LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib" >> ~postgres/.bashrc
    -[root@yourserver src]# echo "export PATH=$PATH:/usr/local/pgsql/bin" >> ~postgres/.bashrc
    -
    echo "export LD_LIBRARY_PATH=LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib" >> ~postgres/.bashrc
    -echo "export PATH=$PATH:/usr/local/pgsql/bin" >> ~postgres/.bashrc

    Test this by logging in as - postgres and checking the - paths; you should see /usr/local/pgsql/bin

    [root@yourserver src]# su - postgres
    -[postgres@yourserver pgsql]$ env | grep PATH
    +	lines to the postgres shell config file.

    [root@yourserver src]# echo "export LD_LIBRARY_PATH=LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib" >> ~postgres/.bashrc
    +[root@yourserver src]# echo "export PATH=$PATH:/usr/local/pgsql/bin" >> ~postgres/.bashrc
    +
    echo "export LD_LIBRARY_PATH=LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib" >> ~postgres/.bashrc
    +echo "export PATH=$PATH:/usr/local/pgsql/bin" >> ~postgres/.bashrc

    Test this by logging in as + postgres and checking the + paths; you should see /usr/local/pgsql/bin

    [root@yourserver src]# su - postgres
    +[postgres@yourserver pgsql]$ env | grep PATH
     LD_LIBRARY_PATH=LD_LIBRARY_PATH=:/usr/local/pgsql/lib
     PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin:/usr/local/pgsql/bin:/usr/local/pgsql/bin
    -[postgres@yourserver pgsql]$ exit
    +[postgres@yourserver pgsql]$ exit
     
  5. Compile and install PostgreSQL.� - Change to the postgres user and run ./configure to set the compilation options automatically. This is the point at which you can + Change to the postgres user and run ./configure to set the compilation options automatically. This is the point at which you can configure PostgreSQL in various ways. For example, if you want to enable - Unicode support, add the flags --enable-locale and --enable-multibyte. If you want to see what the other possibilities are, run ./configure --help. -

    [root@yourserver src]# su - postgres
    -[postgres@yourserver pgsql]$ cd /usr/local/src/postgresql-7.2.4
    -[postgres@yourserver postgresql-7.2.4]$ ./configure
    +	  Unicode support, add the flags
    +	  --enable-locale and
    +	  --enable-multibyte. If you
    +	  want to see what the other possibilities are, run
    +	  ./configure --help.
    +	

    Red Hat 9 users must put the line #include +<errno.h> into the file +/usr/local/src/postgresql-7.2.4/src/include/pg_config.h.in +before running ./configure.

    [root@yourserver src]# su - postgres
    +[postgres@yourserver pgsql]$ cd /usr/local/src/postgresql-7.2.4
    +[postgres@yourserver postgresql-7.2.4]$ ./configure
     creating cache ./config.cache
     checking host system type... i686-pc-linux-gnu
     (many lines omitted>
     linking ./src/makefiles/Makefile.linux to src/Makefile.port
     linking ./src/backend/port/tas/dummy.s to src/backend/port/tas.s
    -[postgres@yourserver postgresql-7.2.4]$ make all
    +[postgres@yourserver postgresql-7.2.4]$ make all
     make -C doc all
     make[1]: Entering directory `/usr/local/src/postgresql-7.2.4/doc'
     (many lines omitted)
     make[1]: Leaving directory `/usr/local/src/postgresql-7.2.4/src'
     All of PostgreSQL successfully made. Ready to install.
    -[postgres@yourserver postgresql-7.2.4]$ make install
    +[postgres@yourserver postgresql-7.2.4]$ make install
     make -C doc install
     make[1]: Entering directory `/usr/local/src/postgresql-7.2.4/doc'
     (many lines omitted)
     Thank you for choosing PostgreSQL, the most advanced open source database
     engine.
    -
    su - postgres
    +
    su - postgres
     cd /usr/local/src/postgresql-7.2.4
     ./configure
     make all
    -make install
  6. Start PostgreSQL.� - The initdb command initializes the - database. pg_ctl is used to start up +make install

  7. Start PostgreSQL.� + The initdb command initializes the + database. pg_ctl is used to start up PostgreSQL. -

    [postgres@yourserver tsearch]$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    +	

    [postgres@yourserver tsearch]$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
     The files belonging to this database system will be owned by user "postgres".
     This user must also own the server process.
     (17 lines omitted)
     or
         /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
    -[postgres@yourserver tsearch]$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/server.log start
    +[postgres@yourserver tsearch]$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/server.log start
     postmaster successfully started
     [postgres@yourserver tsearch]$
    -
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    -/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/server.log start

    +

    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    +/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/server.log start

    PostgreSQL errors will be logged in - /usr/local/pgsql/data/server.log + /usr/local/pgsql/data/server.log

  8. Set up plpgsql and allow your user to have access. Plpgsql is a PL/SQL-like language. We add it to template1, which is the template from which all new databases are created. We can verify that it was created - with the createlang command in list mode.

    [postgres@yourserver pgsql]$ createlang plpgsql template1
    -[postgres@yourserver pgsql]$ createlang -l template1
    +	  with the createlang command in list mode.

    [postgres@yourserver pgsql]$ createlang plpgsql template1
    +[postgres@yourserver pgsql]$ createlang -l template1
     Procedural languages
       Name   | Trusted?
     ---------+----------
      plpgsql | t
     (1 row)
     
     [postgres@yourserver pgsql]$
    -
    createlang plpgsql template1
    -createlang -l template1
  9. Test PostgreSQL. Create a database and try some simple commands. The output should be as shown. -

    [postgres@yourserver pgsql]$ createdb mytestdb
    +
    createlang plpgsql template1
    +createlang -l template1
  10. Test PostgreSQL. Create a database and try some simple commands. The output should be as shown. +

    [postgres@yourserver pgsql]$ createdb mytestdb
     CREATE DATABASE
    -[postgres@yourserver pgsql]$ psql mytestdb
    +[postgres@yourserver pgsql]$ psql mytestdb
     Welcome to psql, the PostgreSQL interactive terminal.
     
     Type:  \copyright for distribution terms
    @@ -112,24 +119,24 @@
            \g or terminate with semicolon to execute query
            \q to quit
     
    -mytestdb=# select current_timestamp;
    +mytestdb=# select current_timestamp;
               timestamptz
     -------------------------------
      2003-03-07 22:18:29.185413-08
     (1 row)
     
    -mytestdb=# create function test1() returns integer as 'begin return 1; end;' language 'plpgsql';
    +mytestdb=# create function test1() returns integer as 'begin return 1; end;' language 'plpgsql';
     CREATE
    -mytestdb=# select test1();
    +mytestdb=# select test1();
      test1
     -------
          1
     (1 row)
     
    -mytestdb=# \q
    -[postgres@yourserver pgsql]$ dropdb mytestdb
    +mytestdb=# \q
    +[postgres@yourserver pgsql]$ dropdb mytestdb
     DROP DATABASE
    -[postgres@yourserver pgsql]$ exit
    +[postgres@yourserver pgsql]$ exit
     logout
     
     [root@yourserver src]#
  11. Set PostgreSQL to start on boot. First, we copy the @@ -140,39 +147,39 @@ changes runlevels, postgresql goes to the appropriate state. Red Hat and Debian and SuSE each work a little differently so three sets of instructions are provided. -

    • Red Hat:

      [root@yourserver src]# cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql
      -[root@yourserver src]# chown root.root /etc/rc.d/init.d/postgresql
      -[root@yourserver src]# chmod 755 /etc/rc.d/init.d/postgresql
      +	

      • Red Hat:

        [root@yourserver src]# cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql
        +[root@yourserver src]# chown root.root /etc/rc.d/init.d/postgresql
        +[root@yourserver src]# chmod 755 /etc/rc.d/init.d/postgresql
         [root@yourserver src]# 
        -
        cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql
        +
        cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql
         chown root.root /etc/rc.d/init.d/postgresql
        -chmod 755 /etc/rc.d/init.d/postgresql

        Test the script.

        [root@yourserver root]# service postgresql stop
        +chmod 755 /etc/rc.d/init.d/postgresql

        Test the script.

        [root@yourserver root]# service postgresql stop
         Stopping PostgreSQL: ok
         [root@yourserver root]# 

        If PostgreSQL successfully stopped, then use the following command to make sure that the script is run appropriately at boot and shutdown. And turn it back on because we'll use it later. -

        [root@yourserver root]# chkconfig --add postgresql
        -[root@yourserver root]# chkconfig --list postgresql
        +		

        [root@yourserver root]# chkconfig --add postgresql
        +[root@yourserver root]# chkconfig --list postgresql
         postgresql      0:off   1:off   2:on    3:on    4:on    5:on    6:off
        -[root@yourserver root]# service postgresql start
        +[root@yourserver root]# service postgresql start
         Starting PostgreSQL: ok
         [root@yourserver root]#
        -
        chkconfig --add postgresql
        +
        chkconfig --add postgresql
         chkconfig --list postgresql
        -service postgresql start
      • Debian:

        root:~# cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql
        -root:~# chown root.root /etc/init.d/postgresql
        -root:~# chmod 700 /etc/init.d/postgresql
        -root:~# 
        
        +service postgresql start
      • Debian:

        root:~# cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql
        +root:~# chown root.root /etc/init.d/postgresql
        +root:~# chmod 700 /etc/init.d/postgresql
        +root:~# 
         cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql
         chown root.root /etc/init.d/postgresql
        -chmod 700 /etc/init.d/postgresql

        Test the script

        root:~# /etc/init.d/postgresql stop
        +chmod 700 /etc/init.d/postgresql

      Test the script

      root:~# /etc/init.d/postgresql stop
       Stopping PostgreSQL: ok
       root:~# 

      If PostgreSQL successfully stopped, then use the following command to make sure that the script is run appropriately at boot and shutdown.

      -root:~# update-rc.d postgresql defaults
      +root:~# update-rc.d postgresql defaults
        Adding system startup for /etc/init.d/postgresql ...
          /etc/rc0.d/K20postgresql -> ../init.d/postgresql
          /etc/rc1.d/K20postgresql -> ../init.d/postgresql
      @@ -181,50 +188,50 @@
          /etc/rc3.d/S20postgresql -> ../init.d/postgresql
          /etc/rc4.d/S20postgresql -> ../init.d/postgresql
          /etc/rc5.d/S20postgresql -> ../init.d/postgresql
      -root:~# /etc/init.d/postgresql start
      +root:~# /etc/init.d/postgresql start
       Starting PostgreSQL: ok
       root:~#
    • SuSE:

      Note

      I have received reports that SuSE 8.0 is different from previous versions. Instead of installing the boot scripts in - /etc/rc.d/init.d/, they should - be placed in /etc/init.d/. If + /etc/rc.d/init.d/, they should + be placed in /etc/init.d/. If you're using SuSE 8.0, delete the - rc.d/ part in each of the + rc.d/ part in each of the following commands. -

      root:~# cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/rc.d/init.d/postgresql
      -root:~# chown root.root /etc/rc.d/init.d/postgresql
      -root:~# chmod 700 /etc/rc.d/init.d/postgresql

      +

    root:~# cp /tmp/openacs-4.6.3/packages/acs-core-docs/www/files/postgresql.txt /etc/rc.d/init.d/postgresql
    +root:~# chown root.root /etc/rc.d/init.d/postgresql
    +root:~# chmod 700 /etc/rc.d/init.d/postgresql

    Test the script. -

    root:~# /etc/rc.d/init.d/postgresql stop
    +        

    root:~# /etc/rc.d/init.d/postgresql stop
     Stopping PostgreSQL: ok

    If PostgreSQL successfully stopped, then use the following command to make sure that the script is run appropriately at boot and shutdown. -

    root:~# cd /etc/rc.d/init.d
    -root:/etc/rc.d/init.d# ln -s /etc/rc.d/init.d/postgresql K20postgresql
    -root:/etc/rc.d/init.d# ln -s /etc/rc.d/init.d/postgresql S20postgresql  
    -root:/etc/rc.d/init.d# cp K20postgresql rc2.d
    -root:/etc/rc.d/init.d# cp S20postgresql rc2.d
    -root:/etc/rc.d/init.d# cp K20postgresql rc3.d
    -root:/etc/rc.d/init.d# cp S20postgresql rc3.d
    -root:/etc/rc.d/init.d# cp K20postgresql rc4.d
    -root:/etc/rc.d/init.d# cp S20postgresql rc4.d 
    -root:/etc/rc.d/init.d# cp K20postgresql rc5.d
    -root:/etc/rc.d/init.d# cp S20postgresql rc5.d
    -root:/etc/rc.d/init.d# rm K20postgresql
    -root:/etc/rc.d/init.d# rm S20postgresql
    +        

    root:~# cd /etc/rc.d/init.d
    +root:/etc/rc.d/init.d# ln -s /etc/rc.d/init.d/postgresql K20postgresql
    +root:/etc/rc.d/init.d# ln -s /etc/rc.d/init.d/postgresql S20postgresql  
    +root:/etc/rc.d/init.d# cp K20postgresql rc2.d
    +root:/etc/rc.d/init.d# cp S20postgresql rc2.d
    +root:/etc/rc.d/init.d# cp K20postgresql rc3.d
    +root:/etc/rc.d/init.d# cp S20postgresql rc3.d
    +root:/etc/rc.d/init.d# cp K20postgresql rc4.d
    +root:/etc/rc.d/init.d# cp S20postgresql rc4.d 
    +root:/etc/rc.d/init.d# cp K20postgresql rc5.d
    +root:/etc/rc.d/init.d# cp S20postgresql rc5.d
    +root:/etc/rc.d/init.d# rm K20postgresql
    +root:/etc/rc.d/init.d# rm S20postgresql
     root:/etc/rc.d/init.d# 

    Test configuration. -

    root:/etc/rc.d/init.d # cd
    -root:~ # /etc/rc.d/init.d/rc2.d/S20postgresql start
    +        

    root:/etc/rc.d/init.d # cd
    +root:~ # /etc/rc.d/init.d/rc2.d/S20postgresql start
     Starting PostgreSQL: ok
     root:~ # 

@@ -236,11 +243,11 @@ little. This usually isn't a problem as Red Hat defaults to runlevel 3)

  • Tune postgres. OPTIONAL.�The default values for PostGreSQL are very conservative; we can safely change some of them and improve performance.

    1. Change the kernel parameter for maximum shared memory - segment size to 128Mb:

      [root@yourserver root]# echo 134217728 >/proc/sys/kernel/shmmax
      +          segment size to 128Mb:

      [root@yourserver root]# echo 134217728 >/proc/sys/kernel/shmmax
       [root@yourserver root]#

      Make that change permanent by editing - emacs /etc/sysctl.conf to + emacs /etc/sysctl.conf to add these lines at the end:

      # increase shared memory limit for postgres
      -kernel.shmmax = 134217728
    2. Edit the PostGreSQL config file, /usr/local/pgsql/data/postgresql.conf to use more memory. These values should improve performance in most cases. (More information)

      #       Shared Memory Size
      +kernel.shmmax = 134217728
    3. Edit the PostGreSQL config file, /usr/local/pgsql/data/postgresql.conf to use more memory. These values should improve performance in most cases. (More information)

      #       Shared Memory Size
       #
       shared_buffers = 15200      # 2*max_connections, min 16
       
      @@ -253,7 +260,7 @@
       #
       wal_files = 3               # range 0-64
       checkpoint_segments = 3     # in logfile segments (16MB each), min 1
      -

      Restart postgres (service postgres restart) so that the changes take effect.

  • Learn more about PostgreSQL

    • +

      Restart postgres (service postgres restart) so that the changes take effect.

    Learn more about PostgreSQL