PostGIS(+PostgreSQL)を使ってるPythonアプリの開発環境に、SQLAlchemy用のマイグレーションツールであるAlembicを導入したらいくつかハマったので備忘録です。
spatial_ref_sysテーブルの除外
PostgreSQL+PostGISでDBを作ると(自分はDocker Imageから作成)自動でspatial_ref_sysテーブルというのが作られるっぽいです(正確にはPostGISのエクステンション追加のタイミングかも)。PostGISが使用する空間参照系が定義されているらしい。sqlalchemyでそのモデル定義を書くことはなさそうだしAlembicに勝手にテーブル削除とかもされたくないので自動生成の対象から外した方が良い気がします。これはalembicのenv.pyにてテーブル名から除外することで対応できます(以下参照)。
geoalchemy2が定義されてない
マイグレーション時にNameErrorが発生します(name 'geoalchemy2' is not defined)。これはversions以下に自動生成されたスクリプトに自分で都度import文を追記するか、script.py.mako(マイグレーション時に使われるテンプレート)にimport文を追記する必要がありました。1度の変更で済むので後者の方が楽そうです。以下を参考にさせていただきました。
おまけ
あとPostGIS関係ないのですが、Dockerコンテナ上で「alembic upgrade head」実行する際にalembicが見つからないと言われハマってたのですが(インストールできてるのに)、これはalembic.iniがいる階層じゃないとコマンド実行できないというやつでした。下記URLみたいに「~.iniが見つからない」まで教えてくれてたらすぐ気づいたかも……勉強ですなあ。
他にも何かあったかもなんですが、とりあえず今回は以上であります。