imu-note
いむたろ
いむたろ
@imutaroh
新卒エンジニア / データ基盤 × AI

What

根本の違いは「アプリに内蔵されるか、別プロセスのサーバーか」。

  • SQLite = アプリに組み込まれるライブラリ。DB全体がただの1ファイルで、アプリが直接読み書きする。サーバーは存在しない
  • PostgreSQL = 独立した常駐サーバー。アプリは接続してSQLを送り、結果を受け取る

例えると、SQLiteは自分の手帳に直接書く(速い・手軽・同時に書けるのは実質1人)、PostgreSQLは銀行の窓口に依頼する(窓口が並行処理・権限・整合性をさばく。ただし銀行を維持する必要がある)。Tursoは手帳をクラウド貸金庫に入れたもので、血はSQLiteのまま。

観点SQLite / TursoPostgreSQL
実体1ファイルサーバープロセス
同時書き込み基本1人ずつ多数同時OK(MVCC)
ゆるい厳格+豊富(JSONB・配列など)
機能最小限advisory lock・権限管理・拡張など
運用設定ゼロサーバーの面倒を見る(orマネージド)
得意分野スマホ・組み込み・エッジ・単独ツール複数ユーザーのサーバーアプリ全般

How

選定時はサービス名ではなく血筋から逆算する。「同時書き込みは何人か」「DBファイルを置くディスクは消えないか」を問えば、複数人が同時に使うWebバックエンドならPostgreSQL系(Neon / Supabase / RDS…)、端末内・エッジ・単独小規模ツールならSQLite系(Turso / D1…)に落ちる。

実例(Discord払い出しツール):データ数MB・書き込み月数十回なので性能的にはSQLiteでも足りた。それでもPostgres(Neon)にしたのは、①Render無料枠はディスクが消えるのでどのみち外部に預ける必要がある、②実装がJSONB・advisory lockなどPostgres機能に乗っている、③実務で出会うのは圧倒的にPostgres/MySQL系で学習の汎用性が高い、の3点。

つまずきどころ

「PostgreSQL互換」を名乗るサービス(CockroachDB等)は互換であって本物ではない。マイグレーションツールやSQLの細部で差が出るので、本物のPostgresと同列に扱わない。

関連

Table of contents