Skip to content
You're viewing an older version of this GitHub Action. Do you want to see the latest version instead?
database

GitHub Action

Setup PostgreSQL and PostGIS for Linux/macOS/Windows

v2

Setup PostgreSQL and PostGIS for Linux/macOS/Windows

database

Setup PostgreSQL and PostGIS for Linux/macOS/Windows

Setup PostgreSQL server and install PostGIS extension

Installation

Copy and paste the following snippet into your .yml file.

              

- name: Setup PostgreSQL and PostGIS for Linux/macOS/Windows

uses: nyurik/action-setup-postgis@v2

Learn more about this action in nyurik/action-setup-postgis

Choose a version

setup-postgis

GitHub CI build Marketplace

This GitHub action sets up a PostgreSQL server with PostGIS extension. The code is based on the ikalnytskyi/action-setup-postgres action.

See also action-setup-nginx to configure NGINX service.

Usage

steps:
  - uses: nyurik/action-setup-postgis@v2
    id: postgres

  - run: psql "$DB_CONN_STR" -c 'SELECT 1;'
    env:
      DB_CONN_STR: ${{ steps.postgres.outputs.connection-uri }}

Important

In order to connect to a PostgreSQL server, use either connection parameters from the table below (link), or retrieve a connection URI from the connection-uri output (link).

Tip

libpq-using applications may choose to set the PGSERVICE=postgres environment variable instead (link), where postgres is the service name extracted from the service-name output.

Input parameters

Key Value Default
username The username of the user to setup. postgres
password The password of the user to setup. postgres
database The database name to setup and grant permissions to created user. postgres
port The server port to listen on. 5432
cached-dir Where should the temporary downloads be placed. Used to download and cache PostGIS binary. downloads

Outputs

Key Description Example
connection-uri The connection URI to connect to PostgreSQL. postgresql://postgres:postgres@localhost/postgres
service-name The service name with connection parameters. postgres

User permissions

Key Value
usesuper true
usecreatedb true

Advanced

steps:
  - uses: nyurik/action-setup-postgis@v2
    with:
      username: ci
      password: sw0rdfish
      database: test
      port: 34837
    id: postgres

  - run: psql "$CONNECTION_STR" -c 'SELECT 1;'
    env:
      CONNECTION_STR: ${{ steps.postgres.outputs.connection-uri }}

Recipes

Create a new user w/ database via CLI

steps:
  - uses: nyurik/action-setup-postgis@v2
    id: postgres

  - run: |
      createuser myuser
      createdb --owner myuser mydatabase
      psql -c "ALTER USER myuser WITH PASSWORD 'mypassword'"
    env:
      # This activates connection parameters for the superuser created by
      # the action in the step above. It's mandatory to set this before using
      # createuser/psql and other libpq-using applications.
      #
      # The service name is the same as the username (i.e. 'postgres') but
      # it's recommended to use action's output to get the name in order to
      # be forward compatible.
      PGSERVICE: ${{ steps.postgres.outputs.service-name }}
    shell: bash

Create a new user w/ database via psycopg

steps:
  - uses: nyurik/action-setup-postgis@v2
import psycopg

# 'postgres' is the username here, but it's recommended to use the
# action's 'service-name' output parameter here.
connection = psycopg.connect("service=postgres")

# CREATE/DROP USER statements don't work within transactions, and with
# autocommit disabled transactions are created by psycopg automatically.
connection.autocommit = True
connection.execute(f"CREATE USER myuser WITH PASSWORD 'mypassword'")
connection.execute(f"CREATE DATABASE mydatabase WITH OWNER 'myuser'")

Rationale

At the time of developing there were no GitHub Actions on the marketplace to setup a PostgreSQL server on Linux, Windows and macOS action runners. Most solutions suggest using Docker which is not available on macOS and Windows runners.

License

The scripts and documentation in this project are released under the MIT License.