Postgres.js for Cloudflare
Adds instrumentation for the postgres (postgres.js) library.
Available since: v10.41.0
Import name: Sentry.instrumentPostgresJsSql
The instrumentPostgresJsSql helper adds instrumentation for the postgres (postgres.js) library to capture spans by wrapping a postgres.js sql tagged-template instance.
If you build your Worker with the Sentry Cloudflare Vite plugin, you don't need this helper. The plugin traces postgres.js automatically, as long as postgres is bundled and not marked as external. If you deploy with wrangler directly, wrap your sql instance with the helper:
import postgres from "postgres";
export default {
async fetch(request, env, ctx) {
const sql = postgres(env.DATABASE_URL);
// All queries create Sentry spans, no helper needed
const users = await sql`SELECT * FROM users WHERE id = ${userId}`;
return Response.json(users);
},
};
import postgres from "postgres";
export default {
async fetch(request, env, ctx) {
const sql = postgres(env.DATABASE_URL);
// All queries create Sentry spans, no helper needed
const users = await sql`SELECT * FROM users WHERE id = ${userId}`;
return Response.json(users);
},
};
import postgres from "postgres";
import * as Sentry from "@sentry/cloudflare";
export default Sentry.withSentry(
(env) => ({
dsn: "___PUBLIC_DSN___",
tracesSampleRate: 1.0,
}),
{
async fetch(request, env, ctx) {
const sql = Sentry.instrumentPostgresJsSql(
postgres(env.DATABASE_URL),
);
// All queries now create Sentry spans
const users = await sql`SELECT * FROM users WHERE id = ${userId}`;
return Response.json(users);
},
},
);
Type: boolean
Whether the instrumentation requires a parent span to create child spans. When set to true, spans are only created if there is an active parent span in the current scope.
Default: true
Type: (span: Span, sanitizedSqlQuery: string, postgresConnectionContext?: PostgresConnectionContext) => void
A hook called before each span is started. Use it to set additional attributes or modify the span.
const sql = Sentry.instrumentPostgresJsSql(postgres(env.DATABASE_URL), {
requestHook(span, query) {
span.setAttribute("custom.query", query);
},
});
const sql = Sentry.instrumentPostgresJsSql(postgres(env.DATABASE_URL), {
requestHook(span, query) {
span.setAttribute("custom.query", query);
},
});
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").