Versão curta:
Eu recebo:
erro: falha na conexão com o servidor no soquete "/var/run/postgresql/.s.PGSQL.5432": FATAL: Falha na autenticação de peer para o usuário "admin"
quando tento createdb --username admin --password mynewdb
... mas criei o usuário "admin" no Linux e no PostgreSQL, então não entendo porque não posso usá-los.
Versão longa:
Estou tentando criar um usuário "admin" para executar o SQL em uma nova máquina Ubuntu/AWS. Eu criei o usuário com
$ sudo useradd -g admin admin
Então eu defino a senha deles usando:
$ sudo passwd admin
Eu sei que a senha foi definida corretamente, porque posso alternar para o usuário "admin" digitando essa senha, com:
$ su - admin
Também criei uma função de banco de dados para o usuário, com:
CREATE ROLE admin WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'samepassword';
e posso ver que o usuário foi criado com \du
(de dentro psql
):
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
admin | Superuser, Create role, Create DB | {}
Além disso, posso confirmar, a partir do meu pg_hba.conf
arquivo, que o Postgres deve usar a senha "peer" (ou seja, sistema) para esse usuário:
local all all peer
E reiniciei o Postgres, só por segurança:
sudo service postgresql restart
No entanto, apesar de todos os itens acima, quando tento criar um novo banco de dados com esse usuário "admin", usando createdb
, recebo minha senha duas vezes e falha:
$ createdb --username admin --password mynewdb
Password:
Password:
createdb: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed:
FATAL: Peer authentication failed for user "admin"
Eu tentei ler outras respostas SO para este erro, mas todas elas sugerem coisas que eu tentei (ou seja, alterar pg_hba.conf
, reiniciar o Postgres, etc.) Eu adoraria ouvi-los.
Como alguém do Stack Overflow explicou, não basta apenas adicionar o
--username admin
argumento; você também precisa estar logado (no seu sistema operacional) como esse usuário.