No se puede obtener autorización para ejecutar pg_dumpall

No se puede obtener autorización para ejecutar pg_dumpall

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_dumpallen el contexto preciso que mencionas, es decir:

  • el esquema de autenticación está configurado md5en pg_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 postgresopció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 suen 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 malikaruminombre, a diferencia de la contraseña de postgres, o una contraseña de base de datos.

sudo -u postgres somepostgrescommandes solo una variante de lo sudo someadmincommandque puedes hacer si eres el administrador de esta estación de trabajo Ubuntu.

información relacionada