Kvindo™ Cloud Docs


Language

PostgreSQL Database

A PostgreSQL Database is a database inside a specific PostgreSQL Cluster. It is always created owned by the cluster's root user — access is controlled via grants on PostgreSQL Users, not per-database ownership.

Key concepts

• Belongs to one cluster forever — spec.postgreSqlId is required and immutable, same as PostgreSqlUser

• Extensions are allowlisted — spec.extensions installs PostgreSQL extensions into this database. The platform preloads a fixed library set (citus, pg_stat_statements); shared_preload_libraries is itself a reserved key rejected at reconcile, so an extension needing a preload change the platform does not already make (e.g. pg_cron) cannot be installed

Allow-listed extensions

btree_gin, btree_gist, citext, cube, earthdistance, fuzzystrmatch, hstore, intarray, jsquery, ltree, pg_stat_statements, pg_trgm, pgcrypto, postgis, tablefunc, unaccent, uuid-ossp

Anything not on this list is rejected here. pg_stat_statements is allowlisted because its library is preloaded by default — but only on a cluster created after this became the default, since Patroni applies shared_preload_libraries at cluster creation only. On an older cluster CREATE EXTENSION pg_stat_statements fails with must be loaded via shared_preload_libraries until the cluster is recreated. pg_cron and any other extension needing a preload change the platform does not make remain unavailable, and shared_preload_libraries is a reserved key on PostgreSqlParametersSet too, so there is no other tenant-facing path.

Parameters
UI Name API / kc name Terraform name Optional Format Default Is read only Description
PostgreSql cluster spec.postgreSqlId spec.postgre_sql_id No ULID — references a PostgreSql cluster — No Immutable after creation
Extensions spec.extensions spec.extensions Yes list of strings — No Allowlisted PostgreSQL extensions to install into this database
Examples

A database with an extension installed.

Terraform

Python SDK

kc CLI


Related pages

Resource docs

Examples

More in this section

An unhandled error has occurred. Reload 🗙