へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

Djangonのテスト時でのGot an error creating the test database: permission denied to create database(Postgresql)の解決

事例

コマンド

$ python manage.py test polls

結果(yesが僕の入力)

Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database

Type 'yes' if you would like to try deleting the test database 'test_db.psql', or 'no' to cancel: yes
Destroying old test database 'default'...
Got an error recreating the test database: permission denied to create database

何がおこっていたのか

  • testコマンドを使用すると、【プロジェクト】/settings.pyから、DBにアクセスするための設定が読み込まれる。
  • その設定を使ってPostgresqlのデータベースを新規に作成しようとしていた。
  • 【プロジェクト】/settings.pyに書かれた設定は 'USER' : 'postgres' であった。
  • ユーザー:postgresに、データベースを新規に作成する[CREATEDB]権限を付与していなかった。
  • ユーザー:postgresに、権限を付与する必要がある。

解決法

適当なルート権限を持つユーザ(Linuxのユーザではなく、postgresqlのユーザ)でPostgresqlにログインする。

$ psql

など。

CREATEDBの権限を付与

=# ALTER USER postgres CREATEDB;

出力-->ALTER ROLE

もう一回やってみる

$ python manage.py test polls

Creating test database for alias 'default'...
F
======================================================================
FAIL: test_was_published_recently_with_future_question (polls.tests.QuestionMethodTest)
was_published_recently() should return False for question whose
 ----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/usrNeko/Center2Pokemon/polls/tests.py", line 17, in test_was_published_recently_with_future_question
self.assertEqual(future_question.was_published_recently(), False)
AssertionError: True != False

 ----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
Destroying test database for alias 'default'...

結局testコマンドとはなんだったのか

  • あたらしくDB作ってくれる!
  • しかも書いたやつのテストもやってくれる!
  • テストが終わったら使い終わったDBは消去してくれる!