PrismaとLitestreamを併用する時の注意

#Prisma #Litestream #SQLite

journal_mode=WAL

Litestreamによるレプリケーションを行うためには、SQLiteのジャーナルモードをWALにする必要がある。

https://litestream.io/tips/#wal-journal-mode

また、この設定はLitestreamがSQLiteのファイルを開いたときに自動的に行われる。

PrismaはWALモードに対応していない

PrismaはWALモードに対応していないため、通常PrismaとLitestreamを併用することはできない。

しかし、一見問題なく動作する上、前述の通りWALモードは自動的に設定されるため、このことに気付きにくい。

マイグレーションの際に問題が生じる

この問題に気付かないままマイグレーションを行うと

Error: SQLite database error
database is locked

となり、手動でロックを解除するまでPrismaによるデータベース操作ができなくなる。

https://github.com/prisma/prisma/issues/3303

対策

Litestream及びSQLiteにアクセスしているアプリケーションを停止し、ジャーナルモードをdeleteに設定した上でマイグレーションを行えば良い。

sqlite-utils(https://github.com/simonw/sqlite-utils)を使うとジャーナルモードの切り替えを簡単に行うことができる。

作成: 2024/02/14 06:40

更新: 2024/04/19 08:08

thumbnail

tuanemuy

プログラミングとか写真とか。