🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Django

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

PostgreSQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

Q&A

解決済

1回答

1976閲覧

DjangoでPostgreSQLを使用したい

user1

総合スコア24

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Django

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

PostgreSQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

0グッド

0クリップ

投稿2020/12/28 01:42

お世話になります。
DjangoでPostgreSQLを使おうとしています。
python manage.py runserver 0.0.0.0:3000でローカルサーバを起動しようとすると以下のようなエラーメッセージが出ます。対処方法を教えて下さい。

発生している問題・エラーメッセージ

# python manage.py runserver 0.0.0.0:3000 2020-12-28 10:23:14,416 [INFO] /root/anaconda3/lib/python3.8/site-packages/django/utils/autoreload.py(Line:597) Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). Exception in thread django-main-thread: Traceback (most recent call last): File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection self.connect() File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 195, in connect self.connection = self.get_new_connection(conn_params) File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection connection = Database.connect(**conn_params) File "/root/anaconda3/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: FATAL: ロール"root"は存在しません The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/root/anaconda3/lib/python3.8/threading.py", line 932, in _bootstrap_inner self.run() File "/root/anaconda3/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/root/anaconda3/lib/python3.8/site-packages/django/utils/autoreload.py", line 54, in wrapper fn(*args, **kwargs) File "/root/anaconda3/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 120, in inner_run self.check_migrations() File "/root/anaconda3/lib/python3.8/site-packages/django/core/management/base.py", line 453, in check_migrations executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) File "/root/anaconda3/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__ self.loader = MigrationLoader(self.connection) File "/root/anaconda3/lib/python3.8/site-packages/django/db/migrations/loader.py", line 49, in __init__ self.build_graph() File "/root/anaconda3/lib/python3.8/site-packages/django/db/migrations/loader.py", line 212, in build_graph self.applied_migrations = recorder.applied_migrations() File "/root/anaconda3/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 73, in applied_migrations if self.has_table(): File "/root/anaconda3/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 56, in has_table return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()) File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 256, in cursor return self._cursor() File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 233, in _cursor self.ensure_connection() File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection self.connect() File "/root/anaconda3/lib/python3.8/site-packages/django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection self.connect() File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/base/base.py", line 195, in connect self.connection = self.get_new_connection(conn_params) File "/root/anaconda3/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection connection = Database.connect(**conn_params) File "/root/anaconda3/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: FATAL: ロール"root"は存在しません

尚、Djangoのsettings.pyのDATABASEのセクションには以下のように環境変数を読み取るような設定にしています。

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'private_diary', 'USER':os.environ.get('DB_USER'), 'PASSWORD':os.environ.get('DB_PASSWORD'), } }

試したこと

直接postgresにログインできるか試しましたがだめでした。

# psql -U postgres -d sampledb psql: FATAL: ユーザ "postgres" で対向(peer)認証に失敗しました

以下のコマンドでログインを試みた所成功しました。

# su - postgres 最終ログイン: 2020/12/27 (日) 10:31:32 JST日時 pts/1 -bash-4.2$

補足情報(FW/ツールのバージョンなど)

・CentOS Linux release 7.7.1908 (Core)
・postgres (PostgreSQL) 9.2.24
・Django 2.2.5

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

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

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

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

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

FKM

2020/12/28 02:53

ログインユーザとスキーマを取り違えていませんか?ログインしてからpsqlコマンドを叩いたときにどうなるか試してみてください。
_whitecat_22

2020/12/28 02:58 編集

環境変数へPostgreSQLへのログインUSER、PASSに指定していますが、その環境変数はどちらに置かれていますか?それが読めていない可能性は無いでしょうか。 また、直接PostgreSQLにもログインできないということですが、もし以下の記事がご参考になれば。 https://qiita.com/_whitecat_22/items/8f80996cac9384089b09
user1

2020/12/29 03:02

_whitecat_22さん ご指摘の通り環境変数が読めていないかもしれません。 Pythonから直接実行すると以下のような実行結果になりました。 この場合具体的にOSのどこの設定を見直せばいいでしょうか。 (base) [root@centos7 ~]# python Python 3.8.5 (default, Sep 4 2020, 07:30:14) [GCC 7.3.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> print(os.environ.get('DB_USER')) None
_whitecat_22

2020/12/29 03:48

一度、PostgreSQLの設定を変えてみて実行してみてください。 PostgreSQLへアクセスするためによく使われるライブラリとして、「psycopg2-binary」があります。 Python仮想環境から「psycopg2-binary」をインストールして、設定ファイル(settings.py)のデータベース設定部分に定義してみてください。 ↑ 私は、Win10/Python3.9/Django3.1.3/PostgreSQL13.1 で、環境が異なるため、上手く行くか保証できない点は、ご了承ください。 ```Terminal (venv~)$ pip install psycopg2-binary ``` USER/PASSWORDは、settings.pyには直接書かず、通常、環境変数で渡します。 やり方としては、`__init__.py` に書く。また、特に本番運用時は、サーバ上(例えば、linuxであれば、bash_profile ファイル内)に書く、ということをします。 HOST/PORTは、特別な設定をしていなければ、下記のように省略も可能です。 ```Python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db_test', 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': '', 'PORT': '', } } ``` なお、開発機(ローカル)でテストして上手く行かない場合、 USER/PASSWORD は、直接指定してみてください。 ただし、GitHubやBitbucketなど、公開リポジトリに挙げる際はそこを****で潰すなどしてから挙げましょう。
guest

回答1

0

ベストアンサー

※※コメント欄に記載した内容を、回答として改めて記載します。※※

環境変数へPostgreSQLへのログインUSER、PASSに指定していますが、その環境変数はどちらに置かれていますか?それが読めていない可能性は無いでしょうか。

また、直接PostgreSQLにもログインできないということですが、もし以下の記事がご参考になれば。

これでダメであれば、一度、PostgreSQLの設定を変えてみて実行してみてください。

PostgreSQLへアクセスするためによく使われるライブラリとして、psycopg2-binaryがあります。
Python仮想環境からpsycopg2-binaryをインストールして、設定ファイル(settings.py)のデータベース設定部分に定義してみてください。

私は、Win10/Python3.9/Django3.1.3/PostgreSQL13.1 で、環境が異なるため、上手く行くか保証できない点は、ご了承ください。

Terminal

1(venv~)$ pip install psycopg2-binary

USER/PASSWORDは、settings.pyには直接書かず、通常、環境変数で渡します。
やり方としては、__init__.py に書く。また、特に本番運用時は、サーバ上(例えば、linuxであれば、bash_profile ファイル内)に書く、ということをします。
HOST/PORTは、特別な設定をしていなければ、下記のように省略も可能です。

Python

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

なお、開発機(ローカル)でテストして上手く行かない場合、USER/PASSWORD は、直接指定してみてください。
ただし、GitHubやBitbucketなど、公開リポジトリに挙げる際はそこを****で潰すなどしてから挙げましょう。

投稿2021/01/12 06:30

_whitecat_22

総合スコア1305

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問