ข้ามไปเนื้อหาหลัก

Category: guide

Turso & LibSQL — SQLite บน Edge

คู่มือใช้ Turso (LibSQL) สำหรับ edge database — เชื่อมต่อจาก Node.js, Cloudflare Workers และ Astro

· อ่านประมาณ 1 นาที

สารบัญ

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