@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)Параметры:
| Параметр | Тип | Описание |
|---|---|---|
project | string | Имя проекта (станет 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.