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)を使うとジャーナルモードの切り替えを簡単に行うことができる。