@fastify/postgres
Version:
Fastify PostgreSQL connection plugin
82 lines (64 loc) • 1.8 kB
text/typescript
import fastify from 'fastify'
import { PoolClient, QueryResult } from 'pg'
import { expectType } from 'tsd'
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import fastifyPostgres, { PostgresDb } from '../../index'
const app = fastify()
app.register(fastifyPostgres, {
connectionString: 'postgres://user:password@host:port/db',
})
app.post('/insert-async', async () => {
const insertQuery = `
INSERT INTO routes(name)
VALUES ('ochakovo')
RETURNING 1 + 1 as sum;
`
const transactionResult = await app.pg.transact((client) => {
expectType<PoolClient>(client)
return client.query<{ sum: number }>(insertQuery)
})
expectType<QueryResult<{ sum: number }>>(transactionResult)
return transactionResult
})
app.post('/insert-cb', (_req, reply) => {
const insertQuery = `
INSERT INTO routes(name)
VALUES ('ochakovo')
RETURNING 1 + 1 as sum;
`
app.pg.transact(
(client) => {
expectType<PoolClient>(client)
return client.query<{ sum: number }>(insertQuery)
},
(error, result) => {
expectType<Error | null>(error)
expectType<QueryResult<{ sum: number }> | undefined>(result)
if (error) {
reply.status(500).send(error)
return
}
reply.status(200).send(result)
}
)
})
app.post('/transact-route', { pg: { transact: true } }, async (req, _reply) => {
const insertQuery = `
INSERT INTO routes(name)
VALUES ('ochakovo')
RETURNING 1 + 1 as sum;
`
return req.pg?.query(insertQuery)
})
app.post(
'/transact-route-alternate',
{ pg: { transact: 'primary' } },
async (req, _reply) => {
const insertQuery = `
INSERT INTO routes(name)
VALUES ('ochakovo')
RETURNING 1 + 1 as sum;
`
return req.pg?.query(insertQuery)
}
)