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

1

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

Estou ciente desta postagem: Falha na autenticação de senha do Postgres . Na verdade, já foi marcado da última vez que tive esse problema. Eu não reivindico nenhum conhecimento significativo de postgres. Eu nem sempre recebo o que deveria ser um comando psql e o que é suposto ser um comando bash, e os blogs e o que eu não vi nem sempre deixam isso claro para mim. O PG é apenas meu backend para meus projetos Django. Eu certamente não entendo como estou tendo esse problema novamente.

Meu usuário do Ubuntu é malikarumi. Eu tenho dois usuários postgres, maikarumi e postgres. O Postgres é o superusuário. Eu tentei fazer do malikarumi um superusuário há algum tempo atrás, mas isso aparentemente falhou e não, eu 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 em seguida:

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

Note que não há nada, nenhuma ajuda, nenhuma indicação do que está errado ou o que fazer sobre isso.

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

Depois tentei novamente com uma senha em branco e um 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 o 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 o 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 (mais uma vez - como 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

Ele 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 permite entrar ...

Então eu reiniciei a máquina inteira 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"   

Por isso, 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. BTW, eu fui ao postgres docs oficial muitas vezes e encontrá-los denso e pouco compreensível. Se você também conhece um bom tutorial básico para uma pessoa que não seja db como eu, isso seria útil. Obrigado.

    
por Malik A. Rumi 09.09.2016 / 23:54

1 resposta

0

Espera-se que todos os fracassos mencionados ocorram, dado o contexto, exceto aquele:

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 se soma. A mesma senha deve funcionar tão bem para pg_dumpall no contexto exato que você menciona, ou seja:

  • o esquema de autorização está definido como md5 in pg_hba.conf (antes de você alterá-lo no restante da postagem).
  • o usuário do banco de dados de destino é postgres por meio da opção -U postgres .
  • 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 corre mal é tentar su em vez de usar sudo , sendo este último o método recomendado no Ubuntu. p>

Use este comando no prompt do shell:

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

Ele pedirá uma senha, exibindo algo como:

[sudo] password for malikarumi:

Observe que ele espera sua senha , o mesmo que você usa ao abrir sua sessão sob o nome malikarumi , em oposição à senha de postgres ou a uma senha do banco de dados.

sudo -u postgres somepostgrescommand é apenas uma variante do sudo someadmincommand que você tem permissão para fazer se você for o administrador desta estação de trabalho do Ubuntu.

    
por Daniel Vérité 11.09.2016 / 18:47