{"templateId":"markdown","versions":[{"version":"v1.39","label":"v1.39 STS","link":"/products/custody/deployment/planning/database","default":true,"active":true,"folderId":"c15a2701"},{"version":"v1.38","label":"v1.38 STS","link":"/products/custody/v1.38/deployment/planning/database","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.34","label":"v1.34 LTS","link":"/products/custody/v1.34/deployment/planning/database","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.26","label":"v1.26 LTS","link":"/products/custody/v1.26/deployment/planning/database","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.19","label":"v1.19 LTS","link":"/products/custody/v1.19/deployment/planning/database","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.15","label":"v1.15 LTS","link":"/products/custody/v1.15/deployment/planning/database","default":false,"active":false,"folderId":"c15a2701"}],"sharedDataIds":{"sidebar":"sidebar-products/custody/@v1.15/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Database planning","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"database-planning","__idx":0},"children":["Database planning"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The PostgreSQL database is a critical, client-provided component. It serves as the central source of truth for the platform. Ensuring correct configuration, resilience, and accessibility is a primary client responsibility."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"core-requirements","__idx":1},"children":["Core requirements"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before installation, you must provision a PostgreSQL database instance that meets the following requirements:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Minimum version:"]}," The platform requires PostgreSQL v14+ or higher."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Required plugins:"]}," You ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["must"]}," install, enable, and make accessible to the application user the following plugins:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hstore"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uuid-ossp"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["plpgsql"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Schema management:"]}," You are responsible for creating the initial database and the user credentials. The ","Ripple Custody"," application manages its own schema within that database upon successful connection."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"high-availability-ha-and-management","__idx":2},"children":["High availability (HA) and management"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["As this is a client-managed component, you are fully responsible for the end-to-end lifecycle of the database. This includes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Deployment and lifecycle:"]}," Initial deployment, version upgrades, and decommissioning."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["High Availability (HA):"]}," Ensuring the database is highly available. We strongly recommend a production-grade 3-node cluster with synchronous replication and automated failover. Use Patroni or a managed cloud service."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Backup and disaster recovery (DR):"]}," You are responsible for all database backup, replication, and DR procedures. Database backups must be time-synced with backups of the notary's anti-rewind file (ARF)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"network-connectivity","__idx":3},"children":["Network connectivity"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Enterprise network environments typically use a \"default-deny\" security posture. Your internal network and firewall teams must explicitly enable all required communication paths."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Verify that nodes in the OpenShift/Kubernetes cluster have network access to the database instance/cluster endpoint."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Critical network consideration:"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In on-premises environments, the application cluster, the database, and the HSM may not be on the same network segment. They are often on different logical or even physical networks."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Assume that a connection from the application to the HSM spans two separate internal networks. This connection will fail unless you open a specific route. Also validate any required connections from your internal network to external services, such as Ripple or blockchain node providers."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"checklist-before-you-proceed","__idx":4},"children":["Checklist: Before you proceed"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"decisions-made","__idx":5},"children":["Decisions made"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Deployment model"]},": Self-managed PostgreSQL cluster OR managed cloud service."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["HA topology"]},": 3-node cluster with synchronous replication planned."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Backup strategy"]},": Backup frequency, retention, and time-sync with ARF backups defined."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"artifacts-ready","__idx":6},"children":["Artifacts ready"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," PostgreSQL cluster provisioned (v14 or higher)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Required plugins enabled: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hstore"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uuid-ossp"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["plpgsql"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Database created with application user credentials"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Connection string documented: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["host"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["port"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["database"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Firewall rules updated: Kubernetes cluster to PostgreSQL endpoint"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," SSL/TLS configuration documented (certificate, CA, mode)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"configuration-reference","__idx":7},"children":["Configuration reference"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For Helm values, SSL modes, schema isolation, and cloud database examples, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/reference/postgresql"},"children":["PostgreSQL configuration"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"next-step","__idx":8},"children":["Next step"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Next:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/planning/messaging"},"children":["Message queue planning"]},"."]}]},"headings":[{"value":"Database planning","id":"database-planning","depth":1},{"value":"Core requirements","id":"core-requirements","depth":2},{"value":"High availability (HA) and management","id":"high-availability-ha-and-management","depth":2},{"value":"Network connectivity","id":"network-connectivity","depth":2},{"value":"Checklist: Before you proceed","id":"checklist-before-you-proceed","depth":2},{"value":"Decisions made","id":"decisions-made","depth":3},{"value":"Artifacts ready","id":"artifacts-ready","depth":3},{"value":"Configuration reference","id":"configuration-reference","depth":3},{"value":"Next step","id":"next-step","depth":3}],"frontmatter":{"seo":{"title":"Database planning"}},"lastModified":"2026-08-04T20:25:11.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/custody/deployment/planning/database","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}