※当サイトではアフィリエイト広告を利用しています。

django

[Django] postgresqlのdatabaseを初期化する方法

概要

  • djangoのデータベースにpostgresqlを使っている
  • modelsの変更が複雑になり、migrationsを初期化したい
  • 開発環境であれば、現状のデータベースを削除して、再度同じ名前のデータベースを作ったほうが早い

実現したいこと

migrationsの初期化

初期化方法

postgresqlが起動していない場合は下記のコマンドで起動する

sudo service postgresql start

現在のユーザーから postgres ユーザー(PostgreSQLのデフォルト管理者ユーザー)にスイッチし、そのユーザーの環境設定で新しいシェルセッションを開始する。

sudo su - postgres

PostgreSQL データベースに接続する

psql -U postgres

データベースを削除して再度同じ名前でデータベースを作る
※データベースの権限は仕様によって変更する

drop database your_db_name;
create database your_db_name;
grant all privileges on database your_db_name to your_db_user;

データベースの接続(ctrl+D)を解除して、元のユーザーでmakemigrationsおよびmigrateを実行する(migrationsファイルは__init__.py以外を削除しておく)

python manage.py makemigrations
python manage.py migrate

まとめ

migrationsの削除に関しては履歴の削除などの方法が考えられるが、初期化であればデータベースを1から構築するほうが早い。簡易的な修正であれば、showmigrationsで履歴を確認して、履歴を削除して、migrationsファイルを削除するといった方法を取ることも考えられる。