Ошибка доступа в базу данных PostgreSQL - PullRequest
0 голосов
/ 27 августа 2018

Редактировать Пропустить первую часть, я обнаружил (ну, они говорят мне), что проблема в базе данных \ edit

У меня есть проект python + django, который я храню на двух компьютерах. Я имею в виду две копии одного и того же проекта, и иногда я работаю над одним, иногда над другим. С copy-paste я теряю секретный ключ в settings.py (они были разные, но я перезаписываю). Я не знаю, как работает генерация и хранение секретных ключей, но для восстановления я запускаю новый проект, взял ключ и скопировал файлы следующим образом:

1) сделать копию проекта

2) удалил исходный проект, но сохранил копию

3) запустил новый проект с тем же именем (поэтому в той же папке, что и оригинал)

4) скопировал новый секретный ключ

5) скопировал файлы из копии старого проекта в новый проект (так что settings.py потерялся и новый секретный ключ с ним, но у меня есть копия)

6) изменил секретный ключ с новым секретным ключом

Но это не работает и выдает ту же ошибку, что и раньше:

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors.<locals>.wrapper
at 0x0000000004ADAEA0>
Traceback (most recent call last):
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 216, in ensure_connection
    self.connect()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\po
stgresql\base.py", line 174, in get_new_connection
    connection = Database.connect(**conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\psycopg2\__init__.py"
, line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATALE:  autenticazione con password fallita per l'ut
ente "gm"


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\utils\autorelo
ad.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\core\managemen
t\commands\runserver.py", line 120, in inner_run
    self.check_migrations()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\core\managemen
t\base.py", line 442, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
loader.py", line 49, in __init__
    self.build_graph()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
loader.py", line 209, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
recorder.py", line 61, in applied_migrations
    if self.has_table():
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
recorder.py", line 44, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_
names(self.connection.cursor())
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 255, in cursor
    return self._cursor()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 232, in _cursor
    self.ensure_connection()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 216, in ensure_connection
    self.connect()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\utils.py",
line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 216, in ensure_connection
    self.connect()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\po
stgresql\base.py", line 174, in get_new_connection
    connection = Database.connect(**conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\psycopg2\__init__.py"
, line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: FATALE:  autenticazione con password fallita p
er l'utente "gm"

переведено: аутентификация с паролем не пройдена для пользователя 'gm'

Я не уверен, когда это произошло в первый раз, но у меня есть другая проблема, вероятно связанная: я не могу получить доступ к базе данных. Может быть, это причина первой проблемы, а не секретного ключа.

Я использую PostgreSQL и обращаюсь к нему, используя стандартную утилиту pgAdmin III. Это дает мне начальный экран с серверами: PostgreSQL 9.5, я нажимаю на него правой кнопкой мыши и выбираю connect, он запрашивает пароль, я выдаю, но выдает ошибку:

An error has occurred. Error connecting to the server: FATALE: autenticazione con password fallita per l'utente 'postgres'.

переведено: аутентификация с паролем для пользователя 'postgres' не удалась

Я создал только одну базу данных и пользователя, поэтому у меня есть стандартные postgres и моя база данных «possedimenti_db» с пользователем по имени «gm».

Что я могу сделать? Я не против присутствующих данных, я могу удалить все, но если это не делает меня доступным, я не знаю, как удалить.

Спасибо

My settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'possedimenti_db',
        'USER': 'gm',
        'PASSWORD': database_key,
        'HOST': host_key,
        'PORT': '5432',
    }
}

database_key и host_key импортируются из внешнего файла.

Кроме того, ключ_базы_данных отличается от пароля, который я использую для доступа к базе данных с помощью pgAdmin. В моем другом ПК это работает. Я попытался изменить его в другом пароле, но он все равно выдает ту же ошибку.

Редактировать Вы можете прочитать решение в комментариях к ответу, но проблема заключалась в том, что мой пользователь не определил пароль.

1 Ответ

0 голосов
/ 27 августа 2018

Используйте 'django.db.backends.postgresql_psycopg2' вместо 'django.db.backends.postgresql'.

Вы должны установить psycopg2. Используйте эту команду: pip install psycopg2

Вот пример:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': 'team_db',                     
        'USER': 'jason',                      
        'PASSWORD': 'abcd',                 
        'HOST': 'localhost',                    
        'PORT': '5432',                      
    }
}
...