JIRA
Install
Admin
Use
Search JIRA documentation:

Connecting JIRA to PostgreSQL

PDF
PDF

Note: A version of these instructions specific to Linux and JIRA Standalone is available.

Note
Before you begin: If you are already using JIRA, create an export of your data as an XML backup. You will then be able to transfer data from your old database to your new database, as described in Switching databases.

1. Configure PostgreSQL

  1. Create a database user which JIRA will connect as (e.g. jirauser).
  2. Create a database for JIRA to store issues in (e.g. jiradb).
  3. Ensure that the user has permission to connect to the database, and create and populate tables.

2. Copy the PostgreSQL driver to your application server

  1. Download the PostgreSQL JDBC driver from http://jdbc.postgresql.org/download.html. Get the JDBC 3 driver specific to your PostgreSQL version, eg. + postgresql-8.x-xxx.jdbc3.jar. Note that the 8.0-316 driver bundled with FC4 is buggy and results in "Bad + value for type int" errors.
  2. Add the Postgre JDBC driver jar to the common/lib/ directory.

3. Configure your application server to connect to PostgreSQL

  1. Edit conf/server.xml (if you are using JIRA Standalone) and customise the username, password, driverClassName and url parameters for the Datasource. (If you are using JIRA WAR/EAR, edit the appropriate file on your application server; e.g. for Tomcat, edit conf/Catalina/localhost/jira.xml.)

    <Server port="8005" shutdown="SHUTDOWN">
    
      <Service name="Catalina">
    
        <Connector port="8080"
          maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" redirectPort="8443" acceptCount="100" 
          connectionTimeout="20000" disableUploadTimeout="true" />
    
        <Engine name="Catalina" defaultHost="localhost">
          <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    
            <Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false">
              <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
                username="[enter db username]"
                password="[enter db password]"
                driverClassName="org.postgresql.Driver"
                url="jdbc:postgresql://host:port/database" [ see also http://jdbc.postgresql.org/doc.html) ]
                [ delete the minEvictableIdleTimeMillis and timeBetweenEvictionRunsMillis params here ]
                />
    
              <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"
                factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
              <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>
            </Context>
    
          </Host>
        </Engine>
      </Service>
    </Server>

    (Note: if you can't find this section at all, you've probably got the wrong file - search for mentions of 'jira' in the files under conf/.)

  2. If you are using JIRA Standalone, edit conf/server.xml, and delete the minEvictableIdleTimeMillis and timeBetweenEvictionRunsMillis attributes (which are only needed for HSQL, and degrade performance otherwise).

4. Configure the JIRA Entity Engine

  1. Edit atlassian-jira/WEB-INF/classes/entityengine.xml (if you are using JIRA Standalone) or edit-webapp/WEB-INF/classes/entityengine.xml (JIRA WAR/EAR), and change the field-type-name attribute to the value for your database. (If you forget to do this and start JIRA, it may create database tables incorrectly. See this page if this happens to you.)

    • If using PostgreSQL 7.2 or later, set:

      <datasource name="defaultDS" field-type-name="postgres72"
        schema-name="public"
        helper-class="org.ofbiz.core.entity.GenericHelperDAO"
        check-on-start="true"
        use-foreign-keys="false"
        use-foreign-key-indices="false"
        check-fks-on-start="false"
        check-fk-indices-on-start="false"
        add-missing-on-start="true"
        check-indices-on-start="true">

      PostgreSQL 7.2 and above require a schema to be specified. The default schema in PostgreSQL is public.If you are working with JIRA Standalone, be sure to change schema-name from PUBLIC to public (lowercase).

    • If using PostgreSQL 7.1 or earlier, set:

      <!-- DATASOURCE - You will need to update this tag for your installation.
      
      -->
        <datasource name="defaultDS" field-type-name="postgres"
            helper-class="org.ofbiz.core.entity.GenericHelperDAO"
          check-on-start="true"
          use-foreign-keys="false"
          ...
          

      For PostgreSQL 7.1 or earlier, you will also need to edit entitymodel.xml as described in JRA-4929, to avoid an error regarding the POSITION column. This is not necessary in later PostgreSQL releases.

    Note
    If you are using JIRA WAR/EAR, your application server may require other changes to entityengine.xml (e.g. to customise the jndi-jdbc tag).

Next steps

You should now have an application server configured to connect to a database, and JIRA configured to use the correct database type. If you are using JIRA Standalone, start it up and watch the logs for any errors. If you are using the JIRA WAR/EAR distribution, rebuild and redeploy the webapp in your application server.

User-contributed notes

Have experiences to share with PostgreSQL and JIRA? We welcome your thoughts. Please see the user-contributed PostgreSQL notes.