You can use a managed PostgreSQL (recommended for ease of maintenance) or deploy it on your own VMs/Kubernetes.
Version Requirement: PostgreSQL v17 or newer
Required Extensions:pg_cron,pgcrypto,pg_stat_statements,btree_gin,btree_gist
Required Parameters (inpostgresql.confor DB parameter group):
Topology & Sizing
| Component | Recommended Configuration |
|---|---|
| Topology | 1 primary + 1–2 hot standbys (streaming replication) |
| Compute | 4 vCPU / 16–32 GB RAM |
| Storage | SSD, 100–200 GB to start |
| Connections | Use PgBouncer for pooling |
| Backups | Automated daily + PITR (WAL archival) |
Managed PostgreSQL (Recommended)
Managed services simplify upgrades, backups, and high availability.AWS RDS / Aurora PostgreSQL
- Create a PostgreSQL 17+ instance or cluster.
- In the parameter group, apply the configuration parameters above.
- Enable extensions (run per DB as admin):
- Ensure
wal_level=logicaland configure replication if needed.
Google Cloud SQL for PostgreSQL
- Create a PostgreSQL 17+ instance.
- Add the required parameters in Flags.
- Enable all required extensions.
Azure Database for PostgreSQL – Flexible Server
- Create a PostgreSQL 17+ flexible server.
- Apply the parameters above.
- Enable required extensions.
Verify
pg_cron availability. If unavailable, consider self-hosted deployment.Self-Hosted on VMs
- Install PostgreSQL 17+ (from PGDG or distro repos).
- Edit
postgresql.conf: - Restart PostgreSQL.
- Configure replication and backup scripts as needed.
Self-Hosted on Kubernetes
You can deploy PostgreSQL using a Postgres Operator or Helm chart. Example ConfigMap fragment:Create Required Databases
Run the following SQL on your instance:Enable Required Extensions
Enablepg_cron on defaultdb database
Create Roles & Grant Access
Create an application role for SuprSend:Replication, HA & Backups
- Enable streaming replication with 1–2 replicas.
- Ensure
hot_standby_feedback=onandwal_level=logical. - Recommended replication parameters:
- Use WAL archiving for point-in-time recovery.
- On managed platforms, enable automated backups.
Observability & Maintenance
pg_stat_statements: helps analyze query performance.- Monitor:
- CPU, memory, IOPS
- Connection usage
- Replication lag
- Autovacuum activity
- Example pg_cron job:
Security & Networking
- Enforce TLS for connections.
- Restrict access to VPC/VNet or private subnets.
- Rotate credentials regularly.
- Store secrets in a managed secret manager (e.g., AWS Secrets Manager).
Validation Checklist
SuprSend Helm Configuration
Once your PostgreSQL instance is configured with all required databases and extensions, configure SuprSend to use it.This section shows only the PostgreSQL-specific configuration. You must also configure other required secrets and values for SuprSend to work properly. See the complete configuration guide: SuprSend Installation Guide
Kubernetes Secret Configuration
First, add the PostgreSQL-specific secrets to yoursuprsend-secrets.yaml:
Helm Values Configuration
Then add the following to yoursuprsend-values.yaml (along with other required configuration):
SuprSend will automatically connect to the required databases (
suprsend, pronto, svix, defaultdb) using the same host and credentials. Ensure all databases are created on the same PostgreSQL instance. The above configuration goes under global.config section.Final Steps
✅ Provision PostgreSQL 17+✅ Apply configuration parameters
✅ Create six databases
✅ Enable required extensions
✅ Set up roles and access
✅ Configure replication & backups
✅ Run validation checklist
Next Steps:
Once PostgreSQL is ready, proceed with deploying the rest of the SuprSend stack using the Helm charts provided in the deployment documentation.
FAQ
Do we need all extensions in every database?
Do we need all extensions in every database?
Yes. To ensure consistent functionality across services, enable them in all databases.
Why wal_level=logical?
Why wal_level=logical?
Required for CDC, logical replication, and certain SuprSend data sync features.
What if a managed DB doesn't support pg_cron?
What if a managed DB doesn't support pg_cron?
You can use external schedulers (like CloudWatch, GCP Cloud Scheduler, or Kubernetes CronJobs) as a fallback.