Skip to main content

PostgreSQL

This guide covers configuring continuous integration pipelines for projects that have a PostgreSQL dependency.

Basic Example

In the below example we demonstrate a pipeline that launches PostgreSQL as a background step. The database server will be available at database:5432, where the hostname matches the background step name.

kind: pipeline
spec:
stages:
- type: ci
spec:
steps:
- name: database
type: background
spec:
container: postgres:14.4-alpine
envs:
POSTGRES_DB: test
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password

- name: test
type: run
spec:
envs:
PGPASSWORD: password
container: postgres:14.4-alpine
script: |-
until pg_isready -U postgres -h database; do sleep 2; done
psql -U postgres -d test -h database

Database Settings

The official Postgres image provides environment variables used at startup to create the default username, password, database and more. Please see the official image documentation for more details.

      - name: database
type: background
spec:
container: postgres:14.4-alpine
envs:
POSTGRES_DB: test
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password

Common Problems

Initialization

If you are unable to connect to the Postgres container please make sure you are giving Postgres adequate time to initialize and begin accepting connections. The pg_isready tool provided by PostgreSQL can help ensure the database is ready to accept connections.

      - name: test
type: run
spec:
envs:
PGPASSWORD: password
container: postgres:14.4-alpine
script: |-
until pg_isready -U postgres -h database; do sleep 2; done
psql -U postgres -d test -h database

Incorrect Hostname

You cannot use 127.0.0.1 or localhost to connect with the PostgreSQL container. If you are unable to connect to the Postgres container please verify you are using the correct hostname, corresponding with the name of the postgres service container.

Bad:

      - name: test
type: run
spec:
envs:
PGPASSWORD: password
container: postgres:14.4-alpine
script: |-
psql -U postgres -d test -h localhost

Good:

      - name: test
type: run
spec:
envs:
PGPASSWORD: password
container: postgres:14.4-alpine
script: |-
psql -U postgres -d test -h database