PostgreSQL On FreeBSD

From Devpit
Jump to: navigation, search

Installing

Install databases/postgresql92-{server,client,doc,contrib}.

In /etc/boot.loader, raise these values:

kern.ipc.semmni=128
kern.ipc.semmns=4096
kern.ipc.semmsl=4000

In /etc/sysctl.conf, raise these values:

kern.ipc.shmmax=2147483648
kern.maxfiles=1048576
kern.maxfilesperproc=1000000
kern.threads.max_threads_per_proc=16384

In rc.conf:

postgresql_enable="YES"
postgresql_data="/pgsql"

Or to run multiple instances on the same installation, use this and adjust appropriately below:

postgresql_enable="YES"
postgresql_profiles="prod beta demo dev"
postgresql_prod_data="/pgsql-prod"
postgresql_beta_data="/pgsql-beta"
postgresql_demo_data="/pgsql-demo"
postgresql_dev_data="/pgsql-dev"


Upgrading PostgreSQL

Since upgrading includes dump, restore, and initializing a fresh database, look here for those. This assumes that your data dir is in /pgsql; adjust as needed.

PostgreSQL project calls tenths releases "major". For example, 9.3->9.4 is a major upgrade. To upgrade to the next major release, you must dump the data, upgrade, initdb, and then restore the dump.

Dump:

  • Stop everything that would record important data to the database.
  • Run:
mkdir /tmp/pgbackup
cd /tmp/pgbackup
pg_dumpall -U pgsql --globals-only -f globals.pgsql
pg_dump -Fc --serializable-deferrable --quote-all-identifiers -U pgsql -f bacula.pgsql bacula
cp /pgsql/postgresql.conf /pgsql/pg_hba.conf .

Upgrade:

service postgresql stop
pkg upgrade

Initdb:

  • Run:
rm -rf /pgsql
mkdir /pgsql
chown pgsql:pgsql /pgsql
su pgsql -c "initdb --encoding=UTF8 --data-checksums --auth=password --pwprompt --pgdata=/pgsql"
  • Restore postgresql.conf and pg_hba.conf and update as needed; see PostgreSQL release notes.
  • service postgresql start

Restore:

psql -U pgsql -d postgres -f globals.pgsql
pg_restore -C -U pgsql -d postgres bacula.pgsql

To add PostGIS

If upgrading, this should be done between immediately before pg_restore.

  • Configure and install databases/postgis20.
  • Run the following to have PostGIS hooks installed when creating new databases. Or switch template1 to database you want to add it to.
createlang -U pgsql plpgsql template1
psql -U pgsql -qd template1 -f /usr/local/share/postgresql/contrib/postgis-2.0/postgis.sql
psql -U pgsql -qd template1 -f /usr/local/share/postgresql/contrib/postgis-2.0/spatial_ref_sys.sql
psql -U pgsql -qd template1 -f /usr/local/share/postgresql/contrib/postgis-2.0/rtpostgis.sql
psql -U pgsql -qd template1 -f /usr/local/share/postgresql/contrib/postgis-2.0/legacy.sql
psql -U pgsql -qd template1 -f /usr/local/share/postgresql/contrib/postgis-2.0/rtpostgis_legacy.sql


To add a database and user

Most packaged apps work under a dedicated database and user. To create database 'foo' and user 'foo' with full access:

CREATE USER bacula WITH PASSWORD 'xyz';
CREATE DATABASE bacula [OWNER bacula] [ENCODING 'SQL_ASCII' TEMPLATE template0];
\l+
GRANT ALL ON DATABASE bacula TO bacula;
\c bacula
\du+


See Also