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_dumpall
no contexto exato que você mencionou, ou seja:
- o esquema de autenticação está definido como
md5
inpg_hba.conf
(antes de alterá-lo no restante da postagem). - o usuário do banco de dados de destino é postgres por meio da
-U postgres
opçã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 su
em 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 malikarumi
nome, em oposição à senha do postgres, ou uma senha do banco de dados.
sudo -u postgres somepostgrescommand
é apenas uma variante do que sudo someadmincommand
você pode fazer se for o administrador desta estação de trabalho Ubuntu.