Skip to content

@happ-integ/neon ​

Низкоуровневый клиент для Neon Serverless PostgreSQL.

Установка ​

bash
pnpm add @happ-integ/neon

Использование ​

Инициализация ​

typescript
import { NeonClient } from "@happ-integ/neon";

const db = new NeonClient("sofa");
await db.init(); // Создаёт schema если не существует

Raw SQL запросы ​

typescript
const users = await db.query<User>("SELECT * FROM users WHERE status = $1 ORDER BY created_at DESC LIMIT $2", [
	"active",
	10,
]);

console.log(users.data); // User[]
console.log(users.rowCount); // число строк

CRUD операции ​

typescript
// Insert
await db.insert("users", {
	id: "1",
	name: "John",
	email: "john@example.com",
});

// Select
const users = await db.select<User>(
	"users",
	{ status: "active" },
	{
		limit: 10,
		orderBy: "created_at",
	}
);

// Update
await db.update("users", { status: "inactive" }, { id: "1" });

// Delete
await db.delete("users", { id: "1" });

Batch операции ​

typescript
// Вставить много записей
await db.insertMany("users", [
	{ id: "1", name: "John" },
	{ id: "2", name: "Jane" },
]);

Создание таблиц ​

typescript
await db.createTable("users", {
	id: "TEXT PRIMARY KEY",
	name: "TEXT NOT NULL",
	email: "TEXT UNIQUE",
	created_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
});

Health Check ​

typescript
const isHealthy = await db.healthCheck();

API ​

NeonClient ​

typescript
new NeonClient(project: string)

Параметры:

ПараметрТипОписание
projectstringИмя проекта (станет schema в БД)

Требуемая переменная:

DATABASE_URL=postgresql://user:password@host/database

Методы ​

init(): Promise<void> ​

Создать schema для проекта. Вызовите один раз при инициализации.

query<T>(sql, params?): Promise<IQueryResult<T>> ​

Raw SQL запрос с параметризацией ($1, $2, ...).

insert(table, data): Promise<void> ​

insertMany(table, data[]): Promise<void> ​

select<T>(table, where?, options?): Promise<T[]> ​

update(table, data, where): Promise<void> ​

delete(table, where): Promise<void> ​

createTable(table, columns): Promise<void> ​

dropTable(table): Promise<void> ​

healthCheck(): Promise<boolean> ​

Изоляция проектов ​

Каждый проект получает отдельный schema:

typescript
const db = new NeonClient("sofa");
await db.init(); // Создаёт schema "sofa"
await db.insert("users", {...}); // Вставляет в таблицу "sofa"."users"

Преимущества vs D1 ​

  • ✅ Полноценный PostgreSQL
  • ✅ Транзакции
  • ✅ Сложные запросы (JSON, arrays, функции)
  • ✅ Лучше для больших объёмов
  • ❌ Медленнее для простых операций

Переменные окружения ​

bash
DATABASE_URL=postgresql://username:password@ep-xxxx.us-east-1.neon.tech/dbname

Получить из панели Neon → Connection string.