Question: Today, the behavior of Typeorm (Postgres) for

* `getManager().query(...)` and
* `getRepositoty().createQueryBuilder(...).getMany()`

is to wait for a response indefinitely.

Is there a way to introduce a request timeout that I might've missed?

If this is not possible, does Typeorm expose the connection from its pool so that I can implement a timeout mechanism and close the DB connection manually?

Answer: 
You can change the default behaviour on a per connection basis either by using `statement_timeout` or `query_timeout`. You can read more about all possible configurations in the official node pg driver [doc](https://node-postgres.com/api/client). Difference between a `statement` and `query`?

> 
> A statement is any SQL command such as SELECT, INSERT, UPDATE, DELETE.
> 
> 
> 

> 
> A query is a synonym for a SELECT statement.
> 
> 
> 

How to tell typeorm to use these configurations? Add these parameters under `extra` field in `ormconfig.js`:

```
{
  type: "postgres",
  name: "default",
  host: process.env.DB_HOST,
  port: 5432,
  username: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
  synchronize: false,
  logging: false,
  entities: [
    "dist/entity/**/*.js"
  ],
  extra: {
    poolSize: 20,
    connectionTimeoutMillis: 2000,
    query_timeout: 1000,
    statement_timeout: 1000
  },
}

```

Note the use of `poolSize` here. This creates a connection pool of 20 connections for the application to use and reuse. `connectionTimeoutMillis` ensures that if all the connections inside the pool are busy executing statements/transactions, a new connection request out of the pool will timeout after `connectionTimeoutMillis` ms. More about connection pool configurations of `pg-pool` [here](https://node-postgres.com/api/pool).
[from the documentation](https://typeorm.io/#/connection-options/common-connection-options) you can use `maxQueryExecutionTime` ConnectionOption.

`maxQueryExecutionTime` - If query execution time exceed this given max execution time (in milliseconds) then logger will log this query.

ConnectionOptions is a connection configuration you pass to `createConnection` or define in `ormconfig`