StackGres manages PostgreSQL extension versions through a channel system that provides flexibility while ensuring compatibility.
When specifying extensions, you can use different version formats:
| Format | Example | Behavior |
|---|---|---|
| Omitted | - | Uses stable channel (latest stable version) |
| Channel | stable |
Latest version from the specified channel |
| Specific | 1.5.0 |
Exact version |
When you don’t specify a version, StackGres uses the stable channel:
spec:
postgres:
extensions:
- name: postgis # Uses stable channel
This is equivalent to:
spec:
postgres:
extensions:
- name: postgis
version: stable
Pin to a specific version for reproducible deployments:
spec:
postgres:
extensions:
- name: postgis
version: '3.4.0'
Each extension in the repository has metadata including:
com.ongres)15.1, 16.2)Check available versions in the Extensions Catalog or query the repository directly.
Extensions are built for specific PostgreSQL versions. The build version follows the pattern:
<postgres_major>.<build_iteration>
For example, 16.2 means:
Extensions can have different publishers:
spec:
postgres:
extensions:
- name: my-extension
publisher: com.mycompany
version: '1.0.0'
The default publisher is com.ongres, which hosts the standard StackGres extensions.
When StackGres resolves an extension version:
For this configuration:
spec:
postgres:
version: '16'
extensions:
- name: postgis
StackGres will:
postgis with stable channel# Production: Pin specific versions
spec:
postgres:
extensions:
- name: postgis
version: '3.4.0'
- name: pgvector
version: '0.5.1'
# Development: Use stable channel for latest
spec:
postgres:
extensions:
- name: postgis
# version omitted = stable channel
Check the cluster status for installed extensions:
kubectl get sgcluster my-cluster -o jsonpath='{.status.extensions}' | jq
Query installed extensions:
kubectl exec my-cluster-0 -c postgres-util -- psql -c "SELECT * FROM pg_available_extensions WHERE installed_version IS NOT NULL"
When you change an extension version:
ALTER EXTENSION ... UPDATE# Before
spec:
postgres:
extensions:
- name: postgis
version: '3.3.0'
# After
spec:
postgres:
extensions:
- name: postgis
version: '3.4.0'
Apply the change:
kubectl apply -f sgcluster.yaml
Some extension upgrades require a restart:
kubectl get sgcluster my-cluster -o jsonpath='{.status.conditions}'
Look for the PendingRestart condition.
Extension downgrades are generally not supported by PostgreSQL. To “downgrade”:
DROP EXTENSION in PostgreSQLAdd custom extension repositories in SGConfig:
apiVersion: stackgres.io/v1
kind: SGConfig
metadata:
name: stackgres-config
spec:
extensions:
repositoryUrls:
- https://extensions.stackgres.io/postgres/repository
- https://my-company.example.com/extensions/repository
Customize repository access:
spec:
extensions:
repositoryUrls:
- https://extensions.example.com/repo?proxyUrl=http%3A%2F%2Fproxy%3A8080&retry=3:5000
Parameters:
proxyUrl: HTTP proxy (URL-encoded)skipHostnameVerification: Skip TLS verification (true/false)retry: Retry config (<max_retries>:<sleep_ms>)