## What
**根本の違いは「アプリに内蔵されるか、別プロセスのサーバーか」。**
- **SQLite** = アプリに組み込まれるライブラリ。DB全体がただの1ファイルで、アプリが直接読み書きする。サーバーは存在しない
- **PostgreSQL** = 独立した常駐サーバー。アプリは接続してSQLを送り、結果を受け取る
例えると、SQLiteは**自分の手帳に直接書く**(速い・手軽・同時に書けるのは実質1人)、PostgreSQLは銀行の窓口に依頼する(窓口が並行処理・権限・整合性をさばく。ただし銀行を維持する必要がある)。Tursoは手帳をクラウド貸金庫に入れたもので、血はSQLiteのまま。
| 観点 | SQLite / Turso | PostgreSQL |
|---|---|---|
| 実体 | 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点。
> [!warning] つまずきどころ
> 「PostgreSQL互換」を名乗るサービス(CockroachDB等)は**互換であって本物ではない**。マイグレーションツールやSQLの細部で差が出るので、本物のPostgresと同列に扱わない。
## 関連
- [[データ基盤]]
- [[Cloud StorageとBigQuery]]