TypeORM

TypeORM is an open-source ORM that lets you to manage and interact with your database. This guide covers the following topics:

Connect to SerenDB from TypeORM

To establish a basic connection from TypeORM to SerenDB, perform the following steps:

  1. Retrieve your SerenDB connection string. You can find the connection string for your database by clicking the Connect button on your Project Dashboard. Select a branch, a user, and the database you want to connect to. A connection string is constructed for you. Connection details modal The connection string includes the user name, password, hostname, and database name.

  2. Update the TypeORM's DataSource initialization in your application to the following:

    import { DataSource } from 'typeorm';
    
    export const AppDataSource = new DataSource({
      type: 'postgres',
      url: process.env.DATABASE_URL,
      ssl: true,
      entities: [
        /*list of entities*/
      ],
    });
  3. Add a DATABASE_URL variable to your .env file and set it to the SerenDB connection string that you copied in the previous step. We also recommend adding ?sslmode=require&channel_binding=require to the end of the connection string to ensure a secure connection.

    Your setting will appear similar to the following:

    DATABASE_URL="postgresql://[user]:[password]@[seren_hostname]/[dbname]?sslmode=require&channel_binding=require"

TypeORM leverages a [node-postgres](https://node-postgres.com) Pool instance to connect to your Postgres database. Installing [pg-native](https://npmjs.com/package/pg-native) and setting the `NODE_PG_FORCE_NATIVE` environment variable to `true` [switches the `pg` driver to `pg-native`](https://github.com/brianc/node-postgres/blob/master/packages/pg/lib/index.js#L31-L34), which, according to some users, produces noticeably faster response times.

Use connection pooling with TypeORM

Serverless functions can require a large number of database connections as demand increases. If you use serverless functions in your application, we recommend that you use a pooled SerenDB connection string, as shown:

# Pooled SerenDB connection string
DATABASE_URL="postgresql://alex:AbC123dEf@ep-cool-darkness-123456-pooler.us-east-2.aws.serendb.com/dbname?sslmode=require&channel_binding=require"

A pooled SerenDB connection string adds -pooler to the endpoint ID, which tells SerenDB to use a pooled connection. You can add -pooler to your connection string manually or copy a pooled connection string from the Connect to your database modal, which you can access by clicking Connect on your Project Dashboard. Enable the Connection pooling toggle to add the -pooler suffix.

Connection timeouts

A connection timeout that occurs when connecting from TypeORM to SerenDB causes an error similar to the following:

Error: P1001: Can't reach database server at `ep-white-thunder-826300.us-east-2.aws.serendb.com`:`5432`
Please make sure your database server is running at `ep-white-thunder-826300.us-east-2.aws.serendb.com`:`5432`.

This error most likely means that the TypeORM query timed out before the SerenDB compute was activated.

A SerenDB compute has two main states: Active and Idle. Active means that the compute is currently running. If there is no query activity for 5 minutes, SerenDB places a compute into an idle state by default.

When you connect to an idle compute from TypeORM, SerenDB automatically activates it. Activation typically happens within a few seconds but added latency can result in a connection timeout. To address this issue, you can adjust your SerenDB connection string by adding a connect_timeout parameter. This parameter defines the maximum number of seconds to wait for a new connection to be opened. The default value is 5 seconds. A higher setting may provide the time required to avoid connection timeouts. For example:

DATABASE_URL="postgresql://[user]:[password]@[seren_hostname]/[dbname]?sslmode=require&channel_binding=require&connect_timeout=10"

A `connect_timeout` setting of 0 means no timeout.

Last updated