Install PostgreSQL on Fedora

This article documents how to install PostgreSQL on Fedora Linux 12. It may be useful for later versions as well.

Install PostgreSQL Server

# yum install postgresql-server

The client package will be installed as a dependency.

Initialize Database Cluster

# service postgresql initdb

Start Server

# service postgresql start

Connect as Initial User

Installing the postgresql-server package creates a user account called postgres, and a database login role of the same name. The default client authentication configuration only permits a connection that meets the following criteria.


  1. The type is local (i.e. Unix domain socket) or the source host is either (IPv4) or ::1 (IPv6)
  2. The login role matches the user account


At this point, the only login role is postgres. In order to create databases and additional login roles, you will need to begin a session with the postgres account.

# su -l postgres

Create Login

$ createuser --no-superuser --no-createdb --no-createrole --pwprompt jbpm3

When prompted, type and confirm the password of your choice.

Create Database

$ createdb --owner jbpm3 jbpm3

Allow Local Connections

$ vi /var/lib/pgsql/data/pg_hba.conf

The following lines allow the jbpm3 user to connect locally to the jbpm3 and postgres databases with password authentication.

local   jbpm3       jbpm3                             md5
host    jbpm3       jbpm3          md5
host    jbpm3       jbpm3          md5

Reload the service for the changes to take effect.

# service postgresql reload

You may end the postgres session now.

Create Tables

$ psql --username jbpm3 --file jbpm.jpdl.postgresql.sql

Install pgAdmin

To install the pgAdmin graphical client:
# yum install pgadmin3

Install Server Instrumentation

When you connect to the server through pgAdmin, you will be prompted to install the server instrumentation functions. If you want to do so, install the contrib package first.

# yum install postgresql-contrib

Afterwards, run the adminpack.sql script.

# su -l postgres$ psql --file /usr/share/pgsql/contrib/adminpack.sql

Schedule Maintenance Tasks

Put the following script in /etc/cron.daily/pgsqlmntn

su -c 'vacuumdb --all --full --analyze' postgres
su -c 'reindexdb --all' postgres

Do not forget to make it executable

# chmod a+x pgsqlmntn

Increase Prepared Transactions Limit

In the most demanding exercises with the XA data source you may encounter this hideous creature.

org.postgresql.util.PSQLException: ERROR: maximum number of prepared transactions reached

To face it, refer to the book of sorcery. Look for parameter max_prepared_transactions. Parameters can be set in the configuration file: postgresql.conf.

# su -l postgres
$ cd /var/lib/pgsql/data/
$ vi postgresql.conf

Set max_prepared_transactions to be at least as large as max_connections, as recommended in the manual.

max_prepared_transactions = 100         # can be 0 or more
                                        # (change requires restart)

Reload the configuration for the changes to take effect.

# service postgresql reload

Good luck!