## 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]]