- 数日間 SQLite を触ってみて分かった、いくつかの驚くべき欠点
ALTER COLUMN はサポートされていない。カラムを変更するための公式な推奨事項は「新しいテーブルを作成すること」
DROP CONSTRAINT はサポートされていない。制約を削除するための公式な推奨事項は「新しいテーブルを作成すること」
- SQLite にはカラムのデータ型がない。データ型(5種類しかない)は値にだけあるため、どこにでも何でも入れられる
- サポートされていない、または存在しない型のカラムを指定しても、警告やエラーなしに誤った動作をする。
CREATE TABLE my_table (id bigserial, messages jsonb[]) のようなスキーマを適用すると動いているように見えるため、最初の1日は SQLite が serial と配列をサポートしていると勘違いしていた
CREATE TABLE my_table (...) STRICT を使うことで、サポートされている5種類の型 integer、real、text、blob、any のいずれかだけを許可できる
- SQLite の新しい
jsonb サポートには最近かなり注目が集まっていた。Postgres と違って、jsonb は実際にはデータ型ではなく、組み込みの jsonb* 関数に入出力されるフォーマットである。永続保存されるときは、5つの基本型の1つである blob になる
timestamptz のような、他の非常に重要な型も欠けている。日付/時刻が必要なら、Unix タイムスタンプの integer または ISO8601 形式の string として保存し、そのための複数の組み込み関数が提供されている
- SQLite にはストリーミング関連の印象的な機能があり、使ってみたいとは思うが、最初の DX 体験は間違いなく少しぎこちなかった
- 人はどれほど強くある物語に引き込まれているのだろうと思うことがある。たとえば、Postgres は本当に世界最高のデータベースなのか? 今回の体験は、間違いなく私の確信をさらに強めた。Yes, Postgres が最高だ
6件のコメント
SQLiteではなく、SQLHeavyを求めているような感じですね。
こういうDBもあれば、ああいうDBもありますよね。SQLiteはSQLiteなりの哲学で運用されているのだと感じました。
なぜSQLiteをPostgresのように使おうとしたのでしょうか?
まるでLinuxを初めて使った人が「Hancom Officeもうまく動かないし、自分がやっているゲームも動きません。やっぱりOSはWindowsだ!」と言っているような感じです。
Hacker Newsに上がってくるSQLiteに関する大げさな噂話(hype)は、少し過剰ではないでしょうか? SQLiteが独立して運用するRDBMSを置き換えられるという主張が、2022年からHacker Newsで数多く投稿されてきました。
1: https://news.ycombinator.com/item?id=31318708
2. https://news.ycombinator.com/item?id=31152490
3. https://news.ycombinator.com/item?id=34812527
4. https://news.ycombinator.com/item?id=36208568
そのほか: https://hn.algolia.com/?dateEnd=1720854657&dateRange=custom&da…
Postgres や MySQL などのデータベース製品群を使うのがオーバーキルだと感じられる場合、SQLite は十分に魅力的な代替案になり得ると思います。
たとえば小規模なサービスでは、マネージド DB のコストが本体より高くつくようなケースもありますし、自前で運用するのもまた負担があります。
一方で SQLite の場合、ある程度の規模までは性能面で不足はないと言われていますし、特に Litestream のようなツールを使えば運用負担もほとんどないので、利点があるように思います。
レプリケーション機能まで行かなくても、sqlite はバックアップも簡単ですし、サービスデーモンの状態だけ管理すればいいので本当に便利なのですが、JPA につなげようとするとあれこれ対応が必要になるので、他人に引き継がなければならないプロジェクトでは使えないと感じました。元記事のようにデータスキーマをもう少し厳密に扱いたいという意志があるなら、そういう用途には向いていません。
前のコメントを書きかけでやめてしまったのですが、sqlite に関する根拠の薄いうわさが、まるで sqlite が万能であるかのような錯覚を招いている、という話をしたかったのです