Skip to main content

Query Neon PostgreSQL from serverless/worker/edge functions over WebSockets or https

This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
This package works with Browsers
JSR Score
70%
Published
3 weeks ago (1.0.1)
interface NeonQueryFunction

Type Parameters

ArrayMode extends boolean
FullResults extends boolean

Call Signatures

(
strings: TemplateStringsArray,
...params: any[],
): NeonQueryPromise<ArrayMode, FullResults, FullResults extends true ? FullQueryResults<ArrayMode> : QueryRows<ArrayMode>>

Properties

transaction: <
ArrayModeOverride extends boolean = ArrayMode,
FullResultsOverride extends boolean = FullResults,
>
(
queriesOrFn: NeonQueryPromise<ArrayMode, FullResults>[] | ((sql: NeonQueryFunctionInTransaction<ArrayModeOverride, FullResultsOverride>) => NeonQueryInTransaction[]),
opts?: HTTPTransactionOptions<ArrayModeOverride, FullResultsOverride>,
) => Promise<FullResultsOverride extends true ? FullQueryResults<ArrayModeOverride>[] : QueryRows<ArrayModeOverride>[]>

The transaction() function allows multiple queries to be submitted (over HTTP) as a single, non-interactive Postgres transaction.

For example:

import { neon } from "@neondatabase/serverless";
const sql = neon("postgres://user:pass@host/db");

const results = await sql.transaction([
  sql`SELECT ${1} AS num`,
  sql`SELECT ${'a'} AS str`,
]);
// -> [[{ num: 1 }], [{ str: "a" }]]

// or equivalently:
const results = await sql.transaction(txn => [
  txn`SELECT ${1} AS num`,
  txn`SELECT ${'a'} AS str`,
]);
// -> [[{ num: 1 }], [{ str: "a" }]]

Methods

query<
ArrayModeOverride extends boolean = ArrayMode,
FullResultsOverride extends boolean = FullResults,
>
(
queryWithPlaceholders: string,
params?: any[],
queryOpts?: HTTPQueryOptions<ArrayModeOverride, FullResultsOverride>,
): NeonQueryPromise<ArrayModeOverride, FullResultsOverride, FullResultsOverride extends true ? FullQueryResults<ArrayModeOverride> : QueryRows<ArrayModeOverride>>

The query() function takes a query string with embedded $1, $2 (etc.) placeholders, followed by an array of query parameters, followed (optionally) by query options. For example:

const sql = neon("postgres://user:pass@host/db");
const rows = await sql.query(
  "SELECT * FROM table WHERE id = $1", [123],
  { fetchOptions: { priority: "high" } }
);
// -> [ { greeting: "hello world" } ]

The unsafe() function allows arbitrary strings to be interpolated in a SQL query. This must be used only with trusted string values under your control.

const sql = neon("postgres://user:pass@host/db");
const colName = 'greeting';
const rows = await sql`SELECT 'hello world' AS ${sql.unsafe(colName)}`;

Add Package

deno add jsr:@neon/serverless

Import symbol

import { type NeonQueryFunction } from "@neon/serverless";
or

Import directly with a jsr specifier

import { type NeonQueryFunction } from "jsr:@neon/serverless";

Add Package

pnpm i jsr:@neon/serverless
or (using pnpm 10.8 or older)
pnpm dlx jsr add @neon/serverless

Import symbol

import { type NeonQueryFunction } from "@neon/serverless";

Add Package

yarn add jsr:@neon/serverless
or (using Yarn 4.8 or older)
yarn dlx jsr add @neon/serverless

Import symbol

import { type NeonQueryFunction } from "@neon/serverless";

Add Package

vlt install jsr:@neon/serverless

Import symbol

import { type NeonQueryFunction } from "@neon/serverless";

Add Package

npx jsr add @neon/serverless

Import symbol

import { type NeonQueryFunction } from "@neon/serverless";

Add Package

bunx jsr add @neon/serverless

Import symbol

import { type NeonQueryFunction } from "@neon/serverless";