PostgreSQL 11にアップデートしようとしていたときに起きました。
docker imageを11に変更して、CircleCIでテストを流そうとしたところ、bin/rake db:structure:load
で失敗しました。
psql:/home/circleci/workspace/db/structure.sql:15: ERROR: schema "public" already exists
該当行はCREATE SCHEMA public;
をやろうとしていたのですが、publicは最初から存在するので、そりゃエラーになるわな…と。
今まで出てなかったのに、なんでだろう?と思いつつ、Railsのコードを追ってみました。
search_pathに値があれば、--schema=値
を設定するようだったので、database.ymlを確認したら、schema_search_path: public
と書いていました…。もういつ書いたのかほとんど覚えてないけれど。これをコメントアウトしてからrake db:migrate
を行い、db/sctructure.sql
を再生成したところ、CREATE SCHEMA public;
の表記がなくなりました。
schema_search_pathにはpublic以外のスキーマを作った時に、それらを指定したほうがよさそうです。