Google Cloud SQL でデータベースが削除できなくなった

テスト用に動かしていて、一度作り直そうと思ってブラウザのコンソールから削除しようとしたら「不明なエラーが発生しました。」とだけ表示された。

エラーログを見たら

"ERROR:  must be owner of database db_name"  

と出ていたので、オーナー違うとのこと。
DB には接続できるのでDBの所有者を確認してみる。

SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner"
FROM pg_catalog.pg_database d

DB名とともに何やら見慣れない cloudsqladmin さんと cloudsqlsuperuser さん、あと自分で作成したユーザーが出てきた。

誰やねんと思い、詳細を見てみる

SELECT * FROM pg_user;

あ、他にもユーザーいる。

  • cloudsqladmin
  • cloudsqlsuperuser
  • cloudsqlagent
  • cloudsqlreplica

調べてわかったこと

ブラウザ経由での DB 作成・削除は cloudsqlsuperuser として実行される。
最初の SQL で確認した template1 のオーナーは cloudsqlsuperuser だったので納得。

今回の件で言うと、 rails 経由で別ユーザーで作成してしまったため、ブラウザからは削除できなくなった。

直接 SQL でデータベース削除して解決。