Estoy tratando de migrar una base de datos de sqlite a postgresql... así que escribí:
sudo -u postgres psql postgres=# ALTER USER postgres WITH PASSWORD 'newpassword';
y la salida devuelve ALTER ROLE
pero cuando python manage.py migrate
recibo siempre el mismo error:
django.db.utils.OperationalError: FATAL: la autenticación de contraseña falló para el usuario "douglas"
Estas son las secciones de la base de datos de mi settings.py.
# Old, using mysqlite """ DATABASES = { #'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), #} 'default': dj_database_url.config(default='postgres://localhost:5432/postgres_db_name'), } """ # New, using postgres DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'douglas_db', 'USER': 'douglas', 'PASSWORD': 'vamointer', 'HOST': '127.0.0.1', 'PORT': '5432', } }
Nota: Cuando ejecuto ' ALTER USER postgres WITH PASSWORD ' pongo la misma contraseña definida en settings.py.
El SQL que está ejecutando no coincide con el usuario que está intentando utilizar.
Deberá crear el usuario si no existe:
CREATE USER douglas WITH PASSWORD 'vamointer';
o si existe, cambie la contraseña de ese usuario .
ALTER USER douglas WITH PASSWORD 'vamointer';
Una vez que hayas hecho eso, deberías tener más suerte. Es posible que también deba asignar permisos a ese usuario .
Si es un tonto como yo y ha usado 'NOMBRE DE USUARIO' en lugar de 'USUARIO' en las configuraciones de su base de datos de Django en settings.py, asegúrese de cambiarlo a 'USUARIO', de lo contrario verá el mismo error. Espero que esto ayude a alguien como yo en el futuro.
Los caracteres especiales en postgresql se convierten en diferentes caracteres durante la ejecución. Asegúrese de no tener caracteres especiales (#, $, etc.) en su contraseña.
Si lo hace, cambie la contraseña de postgresql de la siguiente manera:
sudo -u postgresql psql postgresql=#ALTER USER yourusername WITH PASSWORD 'set_new_password_without_special_character';
Asegúrese de no olvidar el ;
al final del comando postgresql. ¡Luego ejecuta python manage.py
y debería funcionar!