Não é possível obter autorização para executar o pg_dumpall

Não é possível obter autorização para executar o pg_dumpall

Tudo o que estou tentando fazer é fazer backup do meu cluster de banco de dados existente para atualizar do Postgresql 9.4.8 para 9.5. Estou no Ubuntu 16.04.

Estou ciente desta postagem:A autenticação de senha do Postgres falha. Na verdade, ele já estava marcado desde a última vez que tive esse problema. Não reivindico nenhum conhecimento significativo do postgres. Nem sempre entendo o que deveria ser um comando psql e o que deveria ser um comando bash, e os blogs e o que não vi nem sempre deixam isso claro para mim. PG é apenas meu backend para meus projetos Django. Certamente não entendo como estou tendo esse problema novamente.

Meu usuário do Ubuntu é malikarumi. Tenho dois usuários do postgres, maikarumi e postgres. Postgres é o superusuário. Eu tentei fazer de malikarumi um superusuário há algum tempo, mas aparentemente falhou e não, não sei por quê.

Aqui está minha primeira tentativa hoje:

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

Isso veio a seguir:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

Observe que não há nada, nenhuma ajuda, nenhuma indicação do que está errado ou do que fazer a respeito.

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

Então tentei novamente com uma senha em branco e ponto e vírgula

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres;
Password: 
pg_dumpall: could not connect to database "template1": fe_sendauth: no password supplied

Observe que a senha 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.

Mas o comando não, com ou sem ponto e vírgula

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

Isso funciona

malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ sudo cat pg_hba.conf
[sudo] password for malikarumi: 

Aparentemente, este é o usuário unix, não o usuário do banco de dados. Mas é, e sempre foi, a mesma senha.

Eu mudei isso

# Database administrative login by Unix domain socket
local   all             postgres                                md5

para peer, como sugerido no post anterior (de novo - como isso poderia mudar de volta?!)

Mas não consegui reiniciar o 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

Também não funcionou no psql

postgres=# pg_ctl stop
postgres-# pg_ctl stop;
ERROR:  syntax error at or near "pg_ctl"
LINE 1: pg_ctl stop
        ^
postgres=# 

Mas pelo menos o psql ainda me deixa entrar....

Então reiniciei toda a máquina e tentei novamente. Você sabe o que aconteceu

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
pg_dumpall: could not connect to database "template1": FATAL:  Peer authentication failed for user "postgres"   

Então eu mudei com sucesso, mas ainda não consigo fazê-lo funcionar. NOTA: NÃO me pediu minha senha!

Então eu tentei isso

malikarumi@Tetuoan2:~$ su postgres
Password: the right one
su: Authentication failure
malikarumi@Tetuoan2:~$ su postgres
Password: a blank one
su: Authentication failure

E agora você está atualizado. Aliás, já consultei os documentos oficiais do postgres muitas vezes e os considero densos e pouco compreensíveis. Se você também conhece um bom tutorial básico para uma pessoa que não usa banco de dados como eu, isso seria útil. Obrigado.

Responder1

Espera-se que todas as falhas mencionadas aconteçam, dado o contexto, exceto aquela:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

Aqui você relata uma falha, mas na outra situação abaixo:

malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql

você relata um sucesso.

Mas isso não faz sentido. A mesma senha deve funcionar igualmente bem pg_dumpallno contexto exato que você mencionou, ou seja:

  • o esquema de autenticação está definido como md5in pg_hba.conf(antes de alterá-lo no restante da postagem).
  • o usuário do banco de dados de destino é postgres por meio da -U postgresopção.
  • o comando é chamado de shell do seu próprio usuário unix malikarumi.

Depois de alterar com sucesso o esquema de autenticação para peer(última parte da sua pergunta), o que dá errado é tentar suem vez de usar sudo, sendo este último o método recomendado no Ubuntu.

Use este comando no prompt do shell:

malikarumi@Tetuoan2:~$ sudo -u postgres pg_dumpall >9-4-backup

Ele irá pedir uma senha, exibindo algo como:

[sudo] password for malikarumi:

Observe que ele esperasua senha, o mesmo que você usa ao abrir sua sessão com o malikaruminome, em oposição à senha do postgres, ou uma senha do banco de dados.

sudo -u postgres somepostgrescommandé apenas uma variante do que sudo someadmincommandvocê pode fazer se for o administrador desta estação de trabalho Ubuntu.

informação relacionada