LangSmith uses a PostgreSQL database as the primary data store for transactional workloads and operational data (almost everything besides runs). By default, LangSmith Self-Hosted will use an internal PostgreSQL database. However, you can configure LangSmith to use an external PostgreSQL database. By configuring an external PostgreSQL database, you can more easily manage backups, scaling, and other operational tasks for your database.
Note: We only officially support PostgreSQL versions >= 14.
A user with admin access to the PostgreSQL database. This user will be used to create the necessary tables, indexes, and schemas.
This user will also need to have the ability to create extensions in the database. We use/will try to install the btree_gin, btree_gist, pgcrypto, citext, ltree, and pg_trgm extensions.
If using a schema other than public, ensure that you do not have any other schemas with the extensions enabled, or you must include that in your search path.
Support for pgbouncer and other connection poolers is community-based. Community members have reported that pgbouncer has worked with pool_mode = session and a suitable setting for ignore_startup_parameters (as of writing, search_path and lock_timeout need to be ignored). Care is needed to avoid polluting connection pools; some level of PostgreSQL expertise is advisable. LangChain Inc currently does not have roadmap plans for formal test coverage or commercial support of pgbouncer or amazon rds proxy or any other poolers, but the community is welcome to discuss and collaborate on support through GitHub issues.
By default, we recommend an instance with at least 2 vCPUs and 8GB of memory. However, the actual requirements will depend on your workload and the number of users you have. We recommend monitoring your PostgreSQL instance and scaling up as needed.
With your connection string in hand, you can configure your LangSmith instance to use an external PostgreSQL database. You can do this by modifying the values file for your LangSmith Helm Chart installation or the .env file for your Docker installation.
Once configured, you should be able to reinstall your LangSmith instance. If everything is configured correctly, your LangSmith instance should now be using your external PostgreSQL database.
Use this section to configure TLS for PostgreSQL connections. For mounting internal/public CAs so LangSmith trusts your PostgreSQL server certificate, see Configure custom TLS certificates.
Provide a CA bundle using config.customCa.secretName and config.customCa.secretKey.
Use sslmode=require or sslmode=verify-full, as well as sslrootcert=system to your connection URL.
Mount a custom CA only when your PostgreSQL server uses an internal or private CA. Publicly trusted CAs do not require this configuration.
Copy
Ask AI
config: customCa: secretName: "langsmith-custom-ca" # Secret containing your CA bundle secretKey: "ca.crt" # Key in the Secret with the CA bundlepostgres: external: enabled: true connectionUrl: "myuser:mypassword@myhost:5432/mydatabase?sslmode=verify-full&sslrootcert=system" customTls: true
As of LangSmith helm chart version 0.12.28, we support mTLS for PostgreSQL clients. For server-side authentication in mTLS, use the Server TLS steps (custom CA) in addition to the following client certificate configuration.If your PostgreSQL server requires client certificate authentication:
Provide a Secret with your client certificate and key.
Reference it via postgres.external.clientCert.secretName and specify the keys with certSecretKey and keySecretKey.
Use sslmode=verify-full and sslrootcert=system in your connection URL.
The certificate volumes mounted for mTLS are protected by file access restrictions. To ensure all LangSmith pods can read the certificate files, you must set fsGroup: 1000 in the pod security context.You can configure this in one of two ways:Option 1: Use commonPodSecurityContextSet the fsGroup at the top level to apply it to all pods:
Copy
Ask AI
commonPodSecurityContext: fsGroup: 1000
Option 2: Add to individual pod security contextsIf you need more granular control, add the fsGroup to each pod’s security context individually. See the mTLS configuration example for a complete reference.