質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1681閲覧

PostgreSQL利用のDjangoでpython manage.py migrateができない

blackPorgy_

総合スコア46

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/30 07:01

GeoDjangoではじめる地理空間情報
https://homata.gitbook.io/geodjango/geodjango/install

上記のサイトを参考に、GeoDjangoで簡単な地図アプリを開発しようとしています。現在、上記サイトの『GeoDjangoのインストール』に取り組んでいますが、python manage.py migrateを実行すると以下のエラーが発生します。

Python

1(略) 2psycopg2.OperationalError: server closed the connection unexpectedly 3 This probably means the server terminated abnormally 4 before or while processing the request. 5(略) 6django.db.utils.OperationalError: server closed the connection unexpectedly 7 This probably means the server terminated abnormally 8 before or while processing the request.

コマンド実行からエラー発生(表示)までは1分ほどかかります。
このエラーの解決方法を知りたいです。

##開発環境
macOS Catalina 10.15.7(仮想環境はvenvで作成)
Python 3.7.4
PostgreSQL 12.4
Django 3.1.1
psycopg2 2.8.1

##問題が発生するまで
基本的には、上記サイトの手順に従っています(ユーザ名はusernameに変更しています)。

  • Djangoのチュートリアル終了後、GeoDjango用の環境構築を開始。createdb -U username -E UTF-8 geodjangodbを実行しDBを作成(この際パスワードは要求されず)
  • psql -U username -d geodjangodb -c "CREATE EXTENSION postgis;"を実行しPostGISのエクステンションを作成(この際もusernameのパスワードは要求されず)
  • psql -U postgres -d geodjangodb -c "select * from pg_available_extensions;"でエクステンションを確認(この際もusernameのパスワードは要求されず)。結果は以下。

Python

1 name | default_version | installed_version | comment 2------------------------------+-----------------+-------------------+ 3(省略) 4 postgis | 3.0.2 | 3.0.2 | PostGIS geometry, geography, and raster spatial types and functions 5 (省略)    6(59 rows)
  • psql -U postgres -lでデータベースの確認(この際もusernameのパスワードは要求されず)。結果は以下。

Python

1 Name | Owner | Encoding | Collate | Ctype | Access privileges 2-------------+------------+----------+---------+-------+--------------------------- 3 geodjangodb | username | UTF8 | C | C | 4 gis-db | username | UTF8 | C | C | 5 postgres | username | UTF8 | C | C | 6 template0 | username | UTF8 | C | C | =c/username + 7 | | | | | username=CTc/username 8 template1 | username | UTF8 | C | C | =c/username + 9 | | | | | username=CTc/username 10(5 rows)
  • アプリケーションを作成 python manage.py startapp world
  • psycopg2はパッケージバージョンでインストールpip install psycopg2
  • settings.pyを以下のように編集

Python

1DATABASES = { 2 'default': { 3 'ENGINE': 'django.contrib.gis.db.backends.postgis', <-- 変更 4 'NAME': 'geodjangodb', <-- 変更 データベース名 5 'USER': 'username', <-- 追加 ユーザ名 6 'HOST':'localhost', <-- 追加 ホスト名 7 'PASSWORD': 'xxxxxxxx', <-- 追加 パスワード 8 } 9} 10#'django.contrib.gis'と'world'を追加。 11INSTALLED_APPS = ( 12 'django.contrib.admin', 13 'django.contrib.auth', 14 'django.contrib.contenttypes', 15 'django.contrib.sessions', 16 'django.contrib.messages', 17 'django.contrib.staticfiles', 18 'django.contrib.gis', <-- 追加 19 'world.apps.WorldConfig', <-- 追加 (obsolete: world) 20)
  • PostGISのデータベースにテーブルを作成するためにpython manage.py migrateを実行→上記エラー発生

##試したこと
データベースが起動していないのではという指摘があったため、こちらの記事を参考にPostgreSQLの起動を行いましたが、解決できませんでした(brewを使った方法と、pg_ctlを使った方法のどちらもを試しました)。その他、作成したgeodjangodbを一旦消して作り直したり、元記事の通りユーザを切り替えてトライしてみたりしましたが、状況は変わりませんでした。なお、python manage.py migrateでエラーが発生したのは、PostgreSQLに切り替えてからであり、チュートリアルの時点(SQlite3を利用)の時点では正常に実行できていました。

不明な点、明確でない点などあればご質問いただけると助かります。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PostgreSQLへアクセスするためによく使われるライブラリとして、「psycopg2-binary」があります。
私はこれを使って、PostgreSQLへ接続しています。
まず、Python仮想環境から「psycopg2-binary」をインストールします。

Terminal

1(venv~)$ pip install psycopg2-binary

次に、設定ファイル(settings.py)のデータベース設定部分の定義を以下のように修正してみてください。
USER/PASSWORDはsettings.pyには直接書かず、環境変数で渡すと良いです。
または、__init__.py に書くようにすると良いでしょう。
HOST/PORTは、特別な設定をしていなければ、下記のように省略も可能です。

Python

1DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.postgresql_psycopg2', 4 'NAME': 'geodjangodb', 5 'USER': os.environ.get('DB_USER'), 6 'PASSWORD': os.environ.get('DB_PASSWORD'), 7 'HOST': '', 8 'PORT': '', 9 } 10}

投稿2020/12/28 23:51

_whitecat_22

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問