Category: guide
Turso & LibSQL — SQLite บน Edge
คู่มือใช้ Turso (LibSQL) สำหรับ edge database — เชื่อมต่อจาก Node.js, Cloudflare Workers และ Astro
สารบัญ
Turso คืออะไร
Turso คือ hosted database service ที่ใช้ LibSQL (SQLite fork) — เน้น low latency บน edge ด้วย multi-region replication ใช้ SQLite API เดิม แต่ deploy บน cloud ได้เหมือน Postgres
ติดตั้ง
npm install @libsql/client
เชื่อมต่อ
import { createClient } from '@libsql/client';
const db = createClient({
url: process.env.TURSO_URL!, // libsql://db-name.turso.io
authToken: process.env.TURSO_TOKEN!,
});
Query
// Read
const result = await db.execute('SELECT * FROM products WHERE id = ?', [1]);
console.log(result.rows);
// Write
await db.execute(
'INSERT INTO products (name, price) VALUES (?, ?)',
['Widget', 99.99]
);
// Transaction
await db.batch([
'UPDATE inventory SET qty = qty - 1 WHERE id = 1',
'INSERT INTO orders (product_id) VALUES (1)',
]);
กับ Drizzle ORM
import { drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client';
const client = createClient({
url: process.env.TURSO_URL!,
authToken: process.env.TURSO_TOKEN!,
});
export const db = drizzle(client);
Astro (SSR mode)
// src/lib/db.ts
import { createClient } from '@libsql/client';
export const db = createClient({
url: import.meta.env.TURSO_URL,
authToken: import.meta.env.TURSO_TOKEN,
});
---
// src/pages/products.astro
import { db } from '../lib/db';
const { rows } = await db.execute('SELECT * FROM products');
---
เมื่อไหร่ใช้ Turso แทน Postgres
- Personal project หรือ hobby site ที่ไม่ต้องการ full database server
- อยากได้ latency ต่ำใน multiple regions
- Budget จำกัด — Turso มี free tier 500 databases
Turso CLI
npm install -g @turso/cli
turso auth login
turso db create my-database
turso db show my-database # ดู URL
turso db tokens create my-database # สร้าง token