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 @@ -
+
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. -
Unpack PostGreSQL.
[root@yourserver root]# cd /usr/local/src -[root@yourserver src]# tar xzf /tmp/postgresql-7.2.4.tar.gz +
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
Create the Postgres user.� +
cd /usr/local/src +tar xzf /tmp/postgresql-7.2.4.tar.gzCreate 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/pgsqlSet up postgres's environment variables. They are +chmod 750 /usr/local/pgsql
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/.bashrcTest 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]$ exitCompile 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 installStart PostgreSQL.� - The initdb command initializes the - database. pg_ctl is used to start up +make install
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 startPostgreSQL errors will be logged in - /usr/local/pgsql/data/server.log + /usr/local/pgsql/data/server.log
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
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 template1Test 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]#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/postgresqlTest the script.
[root@yourserver root]# service postgresql stop +chmod 755 /etc/rc.d/init.d/postgresqlTest 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 startDebian:
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/postgresqlTest the script
root:~# /etc/init.d/postgresql stop +chmod 700 /etc/init.d/postgresqlTest 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/postgresqlTest the script. -
root:~# /etc/rc.d/init.d/postgresql stop +root:~# /etc/rc.d/init.d/postgresql stop Stopping PostgreSQL: okIf 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.
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 = 134217728Edit 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 = 134217728Edit 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.
+
Restart postgres (service postgres restart) so that the changes take effect.