Index: openacs-4/packages/acs-core-docs/www/xml/install-guide/postgres.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/xml/install-guide/postgres.xml,v diff -u -r1.35 -r1.35.14.1 --- openacs-4/packages/acs-core-docs/www/xml/install-guide/postgres.xml 17 Jul 2006 05:38:38 -0000 1.35 +++ openacs-4/packages/acs-core-docs/www/xml/install-guide/postgres.xml 21 Jun 2016 07:44:36 -0000 1.35.14.1 @@ -1,6 +1,6 @@ %myvars; ]> @@ -14,646 +14,49 @@ Skip this section if you will run only Oracle. - OpenACS &version; will run with PostgreSQL 7.3.2, 7.3.3, and 7.3.4 and 7.4.x. 7.4.7 is the recommended version of PostgreSQL. + OpenACS &version; will run with PostgreSQL 9.0 or newer. 9.5 is currently + the recommended version of PostgreSQL. - - - - Special notes for Mac OS X - If you are running Mac OS X prior to 10.3, you should be - able to install and use PostGreSQL 7.3.x. Mac OS X 10.3 - requires PostGreSQL 7.4. - - - - - Special Notes for Debian - - - - Debian stable user should install PostGreSQL from source - as detailed below, or they should use the www.backports.org - backport for Postgres to get a more current version. Debian - unstable users: the following process has been known to work - (but you should double-check that the version of PostGreSQL is - 7.3 or above): - - For Debian stable users, you can use backports, by adding - this line to the /etc/apt/sources.list + It is recommend to use a prepackaged version of PostgreSQL, + which are available in source and binary formats from + www.postgresql.org/download/. + - - deb http://www.backports.org/debian stable bison postgresql openssl openssh tcl8.4 courier debconf spamassassin tla diff patch neon chkrootkit - - - - apt-get install postgresql postgresql-dev postgresql-doc -ln -s /usr/include/postgresql/ /usr/include/pgsql -ln -s /var/lib/postgres /usr/local/pgsql -ln -s /usr/include/pgsql /usr/local/pgsql/include -su postgres -c "/usr/lib/postgresql/bin/createlang plpgsql template1" - and proceed to or to the - next section. - - - - Special Notes for Red Hat - Red Hat users: If you install PostgreSQL 7.3.2 from the Red Hat 9 RPM, you - can skip a few steps. These shell commands add some links for compatibility with the directories from a source-based install; start the service; create a new group for web service - users, and modify the postgres user's - environment (more - information): - - [root root]# ln -s /usr/lib/pgsql/ /var/lib/pgsql/lib -[root root]# ln -s /var/lib/pgsql /usr/local/pgsql -[root root]# ln -s /etc/init.d/postgresql /etc/init.d/postgres -[root root]# ln -s /usr/bin /usr/local/pgsql/bin -[root root]# service postgresql start -Initializing database: - [ OK ] -Starting postgresql service: [ OK ] -[root root]# echo "export LD_LIBRARY_PATH=/usr/local/pgsql/lib" >> ~postgres/.bash_profile -[root root]# echo "export PATH=$PATH:/usr/local/pgsql/bin" >> ~postgres/.bash_profile -[root root]# groupadd web -[root root]# su - postgres --bash-2.05b$ - -ln -s /usr/lib/pgsql/ /var/lib/pgsql/lib -ln -s /var/lib/pgsql /usr/local/pgsql -ln -s /usr/bin /usr/local/pgsql/bin -service postgresql start -echo "export LD_LIBRARY_PATH=/usr/local/pgsql/lib" >> ~postgres/.bash_profile -echo "export PATH=$PATH:/usr/local/pgsql/bin" >> ~postgres/.bash_profile -groupadd web -su - postgres - ... and then skip to . Something similar may work for other binary packages as well. - - - Safe approach: install from source - - - - Unpack PostgreSQL 7.4.7. - If you have not downloaded the postgresql tarball to - /var/tmp/postgresql-7.4.7.tar.gz, - get it. - - [root root]# cd /usr/local/src -[root src]# tar xzf /var/tmp/postgresql-7.4.7.tar.gz -[root src]# -cd /usr/local/src -tar xzf /var/tmp/postgresql-7.4.7.tar.gz - - - - ALTERNATIVE: Unpack PostgreSQL 7.4.7 - If you have not downloaded the postgresql tarball to - /var/tmp/postgresql-7.4.7.tar.bz2, - get it. - - [root root]# cd /usr/local/src -[root src]# tar xfj /var/tmp/postgresql-7.4.7.tar.bz2 -[root src]# -cd /usr/local/src -tar xfj /var/tmp/postgresql-7.4.7.tar.bz2 - - - - Install Bison - Only do this if bison --version is smaller than 1.875 and you install PostgreSQL 7.4 from cvs instead of tarball. - - [root root]# cd /usr/local/src -[root src]# wget http://ftp.gnu.org/gnu/bison/bison-1.875.tar.gz -[root src]# tar xfz bison-1.875.tar.gz -[root src]# cd bison-1.875 -[root src]# ./configure -[root src]# make install - - - - - 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. - - - - Debian users should probably use adduser instead of - useradd. Type man adduser - - [root src]# groupadd web -[root src]# useradd -g web -d /usr/local/pgsql postgres -[root src]# mkdir -p /usr/local/pgsql -[root src]# chown -R postgres.web /usr/local/pgsql /usr/local/src/postgresql-7.4.7 -[root src]# chmod 750 /usr/local/pgsql -[root src]# -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.4.7 -chmod 750 /usr/local/pgsql - - - - Mac OS X: Do instead: - First make sure the gids and uids below are available (change them if -they are not).To list taken uids and gids: - - nireport / /groups name gid | grep "[0123456789][0123456789]" -nireport / /users name uid | grep "[0123456789][0123456789]" - - Now you can install the users - sudo niutil -create / /groups/web -sudo niutil -createprop / /groups/web gid 201 -sudo niutil -create / /users/postgres -sudo niutil -createprop / /users/postgres gid 201 -sudo niutil -createprop / /users/postgres uid 502 -sudo niutil -createprop / /users/postgres home /usr/local/pgsql -sudo niutil -create / /users/$OPENACS_SERVICE_NAME -sudo niutil -createprop / /users/$OPENACS_SERVICE_NAME gid 201 -sudo niutil -createprop / /users/$OPENACS_SERVICE_NAME uid 201 -mkdir -p /usr/local/pgsql -chown -R postgres:web /usr/local/pgsql /usr/local/src/postgresql-7.4.7 -chmod 750 /usr/local/pgsql - - - - FreeBSD users: - need to add more parameters. - - - [root src]# mkdir -p /usr/local/pgsql -[root src]# pw groupadd -n web -[root src]# pw useradd -n postgres -g web -d /usr/local/pgsql -s /bin/bash -[root src]# chown -R postgres:web /usr/local/pgsql /usr/local/src/postgresql-7.4.7 -[root src]# chmod -R 750 /usr/local/pgsql -[root src]# -mkdir -p /usr/local/pgsql -pw groupadd -n web -pw useradd -n postgres -g web -d /usr/local/pgsql -s /bin/bash -chown -R postgres:web /usr/local/pgsql /usr/local/src/postgresql-7.4.7 -chmod -R 750 /usr/local/pgsql - - - - - - Set up postgres's environment variables - They are necessary for the executable to find its supporting - libraries. Put the following lines into the postgres user's environment. - - [root src]# su - postgres -[postgres ~] emacs ~postgres/.bashrc - Paste this line into .bash_profile: -source $HOME/.bashrc - Paste these lines into .bashrc: -export PATH=/usr/local/bin/:$PATH:/usr/local/pgsql/bin -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib - Test this by logging in as - postgres and checking the - paths; you should see /usr/local/pgsql/bin somewhere in the output (the total output is system-dependent so yours may vary) - [root src]# su - postgres -[postgres pgsql]$ env | grep 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 pgsql]$ exit - - - Don't continue unless you see correct output from - env | grep PATH - - - - - 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 - configure PostgreSQL in various ways. For example, if you are installing on "OS X" add the flags --with-includes=/sw/include/ --with-libraries=/sw/lib. If you want to see what the other possibilities are, run ./configure --help. - - - On debian woody (stable, 3.0), do ./configure --without-readline --without-zlib. - [root src]# su - postgres -[postgres pgsql]$ cd /usr/local/src/postgresql-7.4.7 -[postgres postgresql-7.4.7]$ ./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 postgresql-7.4.7]$ make all -make -C doc all -make[1]: Entering directory `/usr/local/src/postgresql-7.4.7/doc' -(many lines omitted) -make[1]: Leaving directory `/usr/local/src/postgresql-7.4.7/src' -All of PostgreSQL successfully made. Ready to install. -[postgres postgresql-7.4.7]$ make install -make -C doc install -make[1]: Entering directory `/usr/local/src/postgresql-7.4.7/doc' -(many lines omitted) -Thank you for choosing PostgreSQL, the most advanced open source database -engine. -su - postgres -cd /usr/local/src/postgresql-7.4.7 -./configure -make all -make install - - - - Start PostgreSQL - - The initdb command initializes the - database. pg_ctl is used to start up - PostgreSQL. If PostgreSQL is unable to allocate enough memory, see section 11 - Tuning PostgreSQL (below). - - - [postgres postgresql-7.4.7]$ /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 postgresql-7.4.7]$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/server.log start -postmaster successfully started -[postgres postgresql-7.4.7]$ -/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 - - - - - Install Pl/pgSQL - Set up plpgsq 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 postgresql-7.4.7]$ createlang plpgsql template1 -[postgres pgsql]$ createlang -l template1 -Procedural languages - Name | Trusted? ----------+---------- - plpgsql | t -(1 row) - -[postgres pgsql-7.4.7]$ -createlang plpgsql template1 -createlang -l template1 - - - - Test PostgreSQL (OPTIONAL). - Create a database and try some simple commands. The output should be as shown. - - - [postgres pgsql]$ createdb mytestdb -CREATE DATABASE -[postgres pgsql]$ psql mytestdb -Welcome to psql, the PostgreSQL interactive terminal. - -Type: \copyright for distribution terms - \h for help with SQL commands - \? for help on internal slash commands - \g or terminate with semicolon to execute query - \q to quit - -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'; -CREATE -mytestdb=# select test1(); - test1 -------- - 1 -(1 row) - -mytestdb=# \q -[postgres pgsql]$ dropdb mytestdb -DROP DATABASE -[postgres pgsql]$ exit -logout - -[root src]# - - - Set PostgreSQL to start on boot. First, we copy the - postgresql.txt init script, which automates startup and - shutdown, to the distribution-specific init.d directory. Then - we verify that it works. Then we automate it by setting up a - bunch of symlinks that ensure that, when the operating system - changes runlevels, postgresql goes to the appropriate - state. Red Hat and Debian and SuSE each work a little - differently. If you haven't untarred the OpenACS tarball, you will need to do so now to access the postgresql.txt file. - - - Red Hat RPM: - The init script is already installed; just turn it on for the appropriate run levels. - [root root]# chkconfig --level 345 postgresql on -[root root]# - - Red Hat from source: - - [root src]# cp /var/tmp/&tarballpath;/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql -[root src]# chown root.root /etc/rc.d/init.d/postgresql -[root src]# chmod 755 /etc/rc.d/init.d/postgresql -[root src]# -cp /var/tmp/&tarballpath;/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 root]# service postgresql stop -Stopping PostgreSQL: ok -[root 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 root]# chkconfig --add postgresql -[root root]# chkconfig --level 345 postgresql on -[root root]# chkconfig --list postgresql -postgresql 0:off 1:off 2:on 3:on 4:on 5:on 6:off -[root root]# service postgresql start -Starting PostgreSQL: ok -[root root]# -chkconfig --add postgresql -chkconfig --level 345 postgresql on -chkconfig --list postgresql -service postgresql start - - Debian: - [root ~]# cp /var/tmp/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql -[root ~]# chown root.root /etc/init.d/postgresql -[root ~]# chmod 755 /etc/init.d/postgresql -[root ~]# -cp /var/tmp/&tarballpath;/packages/acs-core-docs/www/files/postgresql.txt /etc/init.d/postgresql -chown root.root /etc/init.d/postgresql -chmod 755 /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 - Adding system startup for /etc/init.d/postgresql ... - /etc/rc0.d/K20postgresql -> ../init.d/postgresql - /etc/rc1.d/K20postgresql -> ../init.d/postgresql - /etc/rc6.d/K20postgresql -> ../init.d/postgresql - /etc/rc2.d/S20postgresql -> ../init.d/postgresql - /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 -Starting PostgreSQL: ok -[root ~]# - - - FreeBSD: - [root ~]# cp /tmp/&tarballpath;/packages/acs-core-docs/www/files/postgresql.txt /usr/local/etc/rc.d/postgresql.sh -[root ~]# chown root:wheel /usr/local/etc/rc.d/postgresql.sh -[root ~]# chmod 755 /usr/local/etc/rc.d/postgresql.sh -[root ~]# -cp /tmp/&tarballpath;/packages/acs-core-docs/www/files/postgresql.txt /usr/local/etc/rc.d/postgresql.sh -chown root:wheel /usr/local/etc/rc.d/postgresql.sh -chmod 755 /usr/local/etc/rc.d/postgresql.sh - Test the script - - [root ~]# /usr/local/etc/rc.d/postgresql.sh stop -Stopping PostgreSQL: ok -[root ~]# - If PostgreSQL successfully stopped, then turn it back on because we'll use - it later. - - [root root]# /usr/local/etc/rc.d/postgresql.sh start -Starting PostgreSQL: ok -[root root]# -/usr/local/etc/rc.d/postgresql.sh start - - SuSE: - - - - - 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 - you're using SuSE 8.0, delete the - rc.d/ part in each of the - following commands. - - - - - [root ~]# cp /var/tmp/&tarballpath;/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 755 /etc/rc.d/init.d/postgresql - - - Test the script. - - - - [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:/etc/rc.d/init.d# - - - - Test configuration. - - - - root:/etc/rc.d/init.d # cd -root:~ # /etc/rc.d/init.d/rc2.d/S20postgresql start -Starting PostgreSQL: ok -root:~ # - - - Mac OS X 10.3: - - - Install the startup script: - cd /System/Library/StartupItems/ -tar xfz /var/lib/aolserver/$OPENACS_SERVICE_NAME/packages/acs-core-docs/www/files/osx-postgres-startup-item.tgz - - - - - - Mac OS X 10.4 can use Launchd: - - - Install the startup script: - cd /Library/LaunchDaemons -cp -/var/lib/aolserver/$OPENACS_SERVICE_NAME/packages/acs-core-docs/www/files/osx-postgres-launchd-item.txt -org.postgresql.PostgreSQL.plist - - If postgres does not start automatically on reboot, see what - error you get when manually starting it with: - -$ sudo launchctl load /Library/LaunchDaemons/org.postgresql.PostgreSQL.plist -$ sudo launchctl start org.postgresql.PostgreSQL - - - - - - - - - From now on, PostgreSQL should start automatically each time you boot - up and it should shutdown gracefully each time you shut down. (Note: - Debian defaults to starting all services on runlevels 2-5. Red Hat - defaults to starting services on 3-5. So, on Red Hat, PostgreSQL won't - start on runlevel 2 unless you alter the above commands a - 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 root]# echo 134217728 >/proc/sys/kernel/shmmax -[root root]# - Make that change permanent by editing - /etc/sysctl.conf to - add these lines at the end: -# increase shared memory limit for postgres -kernel.shmmax = 134217728 - - - 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 - -# Non-shared Memory Sizes -# -sort_mem = 32168 # min 32 - - -# Write-ahead log (WAL) -# -checkpoint_segments = 3 # in logfile segments (16MB each), min 1 - - Restart postgres (service postgresql - restart) or - (/etc/init.d/postgres - restart) so that the changes take effect. - - - - FreeBSD users: See man syctl, man 5 sysctl - and man 5 loader.conf. - - Performance tuning resources: - - - - Managing Kernel Resources - about PostgreSQL shared memory and semaphores with specific operating system notes. - - - Managing Kernel Resources (development version) - This information may be experimental. - - - Tuning PostgreSQL for performance - - - - - - - - - more information about PostgreSQL + Larger installations might want to tune the PostgresSQL + installation with e.g. the utility pgtune, which is also + available via apt-get install pgtune or + dnf install pgtune on Debian/Ubuntu or RedHat systems. + + + + More information about PostgreSQL - Official PostgreSQL - Docs + Official PostgreSQL + Docs - + + PostgreSQL Introduction and Resources - Migrating - from 7.0 to 7.1 + - - - - techdocs.postgresql.org - - - - - - PostgreSQL + + PostgreSQL Performance Tuning - + - ($Id$)