Todo lo que intento hacer es hacer una copia de seguridad de mi clúster de base de datos existente para actualizar de Postgresql 9.4.8 a 9.5. Estoy en Ubuntu 16.04.
Estoy al tanto de esta publicación:La autenticación de contraseña de Postgres falla. De hecho, ya estaba marcado como favorito desde la última vez que tuve este problema. No pretendo tener ningún conocimiento significativo de Postgres. No siempre entiendo lo que se supone que es un comando psql y lo que se supone que es un comando bash, y los blogs y lo que no he visto no siempre me lo dejan claro. PG es sólo mi backend para mis proyectos Django. Ciertamente no entiendo cómo estoy teniendo este problema nuevamente.
Mi usuario de Ubuntu es malikarumi. Tengo dos usuarios de Postgres, maikarumi y postgres. Postgres es el superusuario. Intenté convertir a Malikarumi en superusuario también hace algún tiempo, pero aparentemente falló y no, no sé por qué.
Aquí está mi primer intento de hoy:
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup
pg_dumpall: query failed: ERROR: permission denied for relation pg_authid
pg_dumpall: query was: SELECT oid, rolname, rolsuper, rolinherit,rolcreaterole, rolcreatedb, rolcanlogin, rolconnlimit, rolpassword, rolvaliduntil, rolreplication, pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, rolname = current_user AS is_current_user FROM pg_authid ORDER BY 2
Esto vino a continuación:
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password:
Tenga en cuenta que no hay nada, ni ayuda, ni indicación de qué está mal o qué hacer al respecto.
Password:
Password:
pg_dump: [archiver (db)] connection to database "esselldb" failed: FATAL: password authentication failed for user "postgres"
pg_dumpall: pg_dump failed on database "esselldb", exiting
Luego lo intenté nuevamente con una contraseña en blanco y un punto y coma.
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres;
Password:
pg_dumpall: could not connect to database "template1": fe_sendauth: no password supplied
Tenga en cuenta que la contraseña funciona para psql
malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql
psql (9.4.8)
Type "help" for help.
Pero el comando no, con o sin punto y coma
postgres=# pg_dumpall > 9-4-backup
postgres-# pg_dumpall > 9-4-backup;
ERROR: syntax error at or near "pg_dumpall"
LINE 1: pg_dumpall > 9-4-backup
Esto funciona
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ sudo cat pg_hba.conf
[sudo] password for malikarumi:
Aparentemente, este es el usuario de Unix, no el usuario de la base de datos. Pero es, y siempre ha sido, la misma contraseña.
cambié esto
# Database administrative login by Unix domain socket
local all postgres md5
para mirar, como se sugirió en la publicación anterior (nuevamente, ¿cómo podría volver a cambiar?)
Pero no pude reiniciar postgres.
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ pg_ctl stop
pg_ctl: command not found
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ cd ~
malikarumi@Tetuoan2:~$ pg_ctl stop
pg_ctl: command not found
Tampoco funcionó desde psql
postgres=# pg_ctl stop
postgres-# pg_ctl stop;
ERROR: syntax error at or near "pg_ctl"
LINE 1: pg_ctl stop
^
postgres=#
Pero al menos psql todavía me deja entrar....
Así que reinicié toda la máquina y lo intenté de nuevo. ¿Sabes lo que pasó?
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
pg_dumpall: could not connect to database "template1": FATAL: Peer authentication failed for user "postgres"
Lo cambié con éxito, pero todavía no puedo hacerlo funcionar. NOTA: ¡NO me pidió mi contraseña!
Entonces probé esto
malikarumi@Tetuoan2:~$ su postgres
Password: the right one
su: Authentication failure
malikarumi@Tetuoan2:~$ su postgres
Password: a blank one
su: Authentication failure
Y ahora estás al día. Por cierto, he consultado los documentos oficiales de Postgres muchas veces y los encuentro densos y apenas comprensibles. Si también conoce un buen tutorial básico para una persona que no es db como yo, sería útil. Gracias.
Respuesta1
Se espera que ocurran todas las fallas mencionadas, dado el contexto, excepto aquella:
malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password:
Aquí informas una falla, pero en la otra situación a continuación:
malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql
usted informa un éxito.
Pero eso no cuadra. La misma contraseña debe funcionar igual de bien pg_dumpall
en el contexto preciso que mencionas, es decir:
- el esquema de autenticación está configurado
md5
enpg_hba.conf
(antes de cambiarlo en el resto de la publicación). - el usuario de la base de datos de destino es postgres a través de la
-U postgres
opción. - el comando se llama shell de su propio usuario de Unix
malikarumi
.
Después de cambiar con éxito el esquema de autenticación a peer
(última parte de su pregunta), lo que sale mal es que intenta su
en lugar de usar sudo
, siendo este último el método recomendado en Ubuntu.
Utilice este comando en el símbolo del shell:
malikarumi@Tetuoan2:~$ sudo -u postgres pg_dumpall >9-4-backup
Le pedirá una contraseña y mostrará algo como:
[sudo] password for malikarumi:
Tenga en cuenta que esperatu contraseña, el mismo que usas al abrir tu sesión bajo el malikarumi
nombre, a diferencia de la contraseña de postgres, o una contraseña de base de datos.
sudo -u postgres somepostgrescommand
es solo una variante de lo sudo someadmincommand
que puedes hacer si eres el administrador de esta estación de trabajo Ubuntu.