Skip to main content

Connect PgSTAC and TiTiler.

Test Coverage Package version License


Documentation: https://stac-utils.github.io/titiler-pgstac/

Source Code: https://github.com/stac-utils/titiler-pgstac


TiTiler-PgSTAC is a TiTiler extension that connects to a PgSTAC database to create dynamic mosaics based on search queries.

Installation

To install from PyPI and run:

# Make sure to have pip up to date
python -m pip install -U pip

# Install `psycopg` or `psycopg["binary"]` or `psycopg["c"]`
python -m pip install psycopg["binary"]

python -m pip install titiler.pgstac

To install from sources and run for development:

We recommand using uv as project manager for development.

See https://docs.astral.sh/uv/getting-started/installation/ for installation

git clone https://github.com/stac-utils/titiler-pgstac.git
cd titiler-pgstac

uv sync --extra psycopg 

PgSTAC version

titiler.pgstac depends on pgstac >=0.3.4 (https://github.com/stac-utils/pgstac/blob/main/CHANGELOG.md#v034).

In theory, pgstac version >=0.3.4 should be supported by titiler-pgstac but old version might fail or require old Postgres version (see https://github.com/stac-utils/titiler-pgstac/issues/252).

Here are the versions officially (tested) supported:

titiler-pgstac Version pgstac
<1.0 >=0.7,<0.8
>=1.0,<2.1 >=0.8,<0.10
>=2.1 >=0.9,<0.10

psycopg requirement

titiler.pgstac depends on the psycopg library. Because there are three ways of installing this package (psycopg or , psycopg["c"], psycopg["binary"]), the user must install this separately from titiler.pgstac.

  • psycopg: no wheel, pure python implementation. It requires the libpq installed in the system.
  • psycopg["binary"]: binary wheel distribution (shipped with libpq) of the psycopg package and is simpler for development. It requires development packages installed on the client machine.
  • psycopg["c"]: a C (faster) implementation of the libpq wrapper. It requires the libpq installed in the system.

psycopg[c] or psycopg are generally recommended for production use.

In titiler.pgstac setup.py, we have added three options to let users choose which psycopg install to use:

  • python -m pip install titiler.pgstac["psycopg"]: pure python
  • python -m pip install titiler.pgstac["psycopg-c"]: use the C wrapper (requires development packages installed on the client machine)
  • python -m pip install titiler.pgstac["psycopg-binary"]: binary wheels

Prometheus metrics

Install the optional metrics extra and enable it:

python -m pip install titiler-pgstac[metrics]
export TITILER_PGSTAC_API_METRICS_ENABLED=TRUE

Once enabled, /metrics is available on startup and records:

  • titiler_pgstac_http_requests_total{operation,method,status}
  • titiler_pgstac_http_request_duration_seconds{operation,method}

operation values are low-cardinality labels such as landing, conformance, tiles, point, search, search_info, collection, item, register_search, list_searches, external, tms, algorithms, colormaps, other, and unknown. status is grouped (2xx, 3xx, 4xx, 5xx). /healthz and the scrape endpoint are excluded from request counters. Untemplated paths (for example bare 404s) are also ignored.

With TITILER_PGSTAC_API_METRICS_ENABLED left at its default (FALSE), /metrics is not registered even if the extra is installed.

Multi-worker deployments

For multi-worker deployments (for example uvicorn --workers N or Gunicorn), set PROMETHEUS_MULTIPROC_DIR to an existing writable directory before the application is imported, and clear that directory before each server start.

export PROMETHEUS_MULTIPROC_DIR=/tmp/titiler-pgstac-prometheus
mkdir -p "$PROMETHEUS_MULTIPROC_DIR"
rm -rf "$PROMETHEUS_MULTIPROC_DIR"/*

With Gunicorn, also mark workers dead on exit so stale metric files are cleaned up:

from prometheus_client import multiprocess


def child_exit(server, worker):
    multiprocess.mark_process_dead(worker.pid)

Custom apps

Custom apps can enable the same instrumentation:

from titiler.pgstac.metrics import instrument_app

instrument_app(app)

Launch

You'll need to have PGUSER, PGPASSWORD, PGDATABASE, PGHOST, PGPORT variables set in your environment pointing to your Postgres database where pgstac has been installed.

export PGUSER=username
export PGPASSWORD=password
export PGDATABASE=postgis
export PGHOST=database
export PGPORT=5432
$ python -m pip install uvicorn
$ uvicorn titiler.pgstac.main:app --reload

Using Docker

$ git clone https://github.com/stac-utils/titiler-pgstac.git
$ cd titiler-pgstac
$ docker compose up --build tiler
# or
$ docker compose up --build tiler-uvicorn

Contribution & Development

See CONTRIBUTING.md

License

See LICENSE

Authors

See contributors for a listing of individual contributors.

Changes

See CHANGES.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

titiler_pgstac-3.1.0.tar.gz (38.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

titiler_pgstac-3.1.0-py3-none-any.whl (45.4 kB view details)

Uploaded Python 3

File details

Details for the file titiler_pgstac-3.1.0.tar.gz.

File metadata

  • Download URL: titiler_pgstac-3.1.0.tar.gz
  • Upload date:
  • Size: 38.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for titiler_pgstac-3.1.0.tar.gz
Algorithm Hash digest
SHA256 9a1c4c0e9e849c40ccfb5bc0868e626430992538adf8f010b141ed7dc82c49d4
MD5 eefb951a001806bd411c117e4de607a9
BLAKE2b-256 1d601ed883812c1d6e74e01135a036234f0851cd64e9d040caa5fe677d1138e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for titiler_pgstac-3.1.0.tar.gz:

Publisher: release.yml on stac-utils/titiler-pgstac

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file titiler_pgstac-3.1.0-py3-none-any.whl.

File metadata

  • Download URL: titiler_pgstac-3.1.0-py3-none-any.whl
  • Upload date:
  • Size: 45.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for titiler_pgstac-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 95a46f3205f1c84279d6fedb076c334432603516a511324adf5b0422d029c235
MD5 47a2f1c6f8f5cc89452115c9b66b61e9
BLAKE2b-256 1982eea5879830f3eaa8f51c100c446b2df1ffd1520761dea7fdc358a7242dc1

See more details on using hashes here.

Provenance

The following attestation bundles were made for titiler_pgstac-3.1.0-py3-none-any.whl:

Publisher: release.yml on stac-utils/titiler-pgstac

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page