Using PostgreSQL in an OpenBSD environment

At least two different accounts are involved when working with PostgreSQL:
One is an OpenBSD userid, '_postgresql', which is used as the userid of files
that are part of PostgreSQL.  The other, usually named 'postgres', is not an
OpenBSD userid, i.e. you will not find it in /etc/passwd, but an account
internal to the database system.  The 'postgres' account is called the dba
account (database administrator) and is created when a new database is
initialized using the initdb command.

If you are installing PostgreSQL for the first time, you have to create
a default database first.  In the following example we install a database
in /var/postgresql/data with a dba account 'postgres' and md5 authentication.
We will be prompted for a password to protect the dba account:

       # su - _postgresql
       $ mkdir /var/postgresql/data
       $ initdb -D /var/postgresql/data -U postgres -A md5 -W

It is strongly advised that you do not work with the postgres dba account
other than creating more users and/or databases or for administrative task.
Use the PostgreSQL permission system to make sure that a database is only
accessed by programs/users that have the right to do so.

Please consult the PostgreSQL website for more information, especially when
you are upgrading an existing database installation.

Auto Start and Stop

To start PostgreSQL at boot and shut it down when the system shuts down,
add the following lines to /etc/rc.local and /etc/rc.shutdown, respectively:

/etc/rc.local:

if [ -x /usr/local/bin/pg_ctl ]; then
	echo -n ' postgresql'
	su -l _postgresql -c "nohup /usr/local/bin/pg_ctl start \
	    -D /var/postgresql/data -l /var/postgresql/logfile \
	    -o '-D /var/postgresql/data' >/dev/null"
fi

/etc/rc.shutdown:

if [ -f /var/postgresql/data/postmaster.pid ]; then
	su -l _postgresql -c "/usr/local/bin/pg_ctl stop -m fast \
	     -D /var/postgresql/data"
	rm -f /var/postgresql/data/postmaster.pid
fi

Network Connections and Tuning

To allow connections over TCP (and other options) edit the file:

	/var/postgresql/data/postgresql.conf

and also edit the pg_hba.conf (in the same directory) making the
appropriate changes to allow connection from your network.

The default sizes in the GENERIC kernel for SysV semaphores
are not really large enough for a database with more than a
handful of connections. A server running such a database should
have at least the following in /etc/sysctl.conf:

	kern.seminfo.semmni=256
	kern.seminfo.semmns=2048

To serve a large number of connections (>250), you may also need
to increase the maximum shared memory segment size, on the i386
try:

	kern.shminfo.shmmax=50331648	# this is 48MB.
					# default on i386 is 32MB
					# other archs will vary

These numbers should be tuned depending on system use. You will also
need to tune the values in the postgresql.conf file to increase the
number of connections to the backend.

By default, the _postgresql user, and so the postmaster and backend
processes run in the login(1) class of "daemon". On a busy server,
it may be advisable to put the _postgresql user and processes in
their own login(1) class with tuned resources, such as more open
file descriptors etc.

For example, add this to the login.conf(5) file:

	postgresql:\
		:openfiles-cur=768:\
		:tc=daemon:

Rebuild the login.conf.db file if necessary:

	# cap_mkdb /etc/login.conf

Change the login class with either vipw(8) or chsh(8).

For more than about 250 connections, these numbers should be
increased. Please report any changes and experiences to the package
maintainers so that we can update this file for future versions.

Kerberos authentication

By default the postgresql server requires it's own krb5.keytab file.  It
should be readable only by the _postgresql user.  The default location of
the file is '/etc/postgresql/krb5.keytab' but is tunable by setting the
krb_server_keyfile line in postgresql.conf.

To generate the keytab:

	# mkdir /etc/postgresql
	# ktutil -k /etc/postgresql/krb5.keytab get postgres/server.domain
	# chown _postgresql:_postgresql /etc/postgresql/krb5.keytab

Clients/Frontends

Many applications can use the PostgreSQL database right away.  To faciliate
administration of a PostgreSQL database, two clients are notable:

www/phppgadmin		A web based user interface that uses PHP5
databases/pgadmin3	A graphical user interface that uses wxWidgets
