Como configurar o postgresql pela primeira vez?

197

Acabei de instalar o postgresql e especifiquei a senha x durante a instalação. Quando tento fazer createdbe especificar qualquer senha, recebo a mensagem:

createdb: não foi possível conectar-se ao banco de dados postgres: FATAL: falha na autenticação da senha do usuário

O mesmo para createuser.

Como devo começar? Posso me adicionar como usuário ao banco de dados?

Rohit Banga
fonte
4
É o mesmo que esta pergunta, feita um ano depois. Mas acredito que este tenha uma resposta primária perigosa . Você não deve estar configurando o postgresusuário. É o SUPostgreSQL, e você abre para ataques de login contra ele. Crie outro superusuário e reserve o bloqueado postgrespara administradores UNIX com root.
Evan Carroll

Respostas:

329

As outras respostas não foram completamente satisfatórias para mim. Aqui está o que funcionou para o postgresql-9.1 no Xubuntu 12.04.1 LTS.

  1. Conecte-se ao banco de dados padrão com o usuário postgres:

    sudo -u postgres psql template1

  2. Defina a senha para o usuário postgres e saia do psql (Ctrl-D):

    ALTER USUÁRIO postgres com senha criptografada 'xxxxxxx';

  3. Edite o pg_hba.confarquivo:

    sudo vim /etc/postgresql/9.1/main/pg_hba.conf

    e mude "peer" para "md5" na linha referente ao postgres:

    local todos os      postgres      peer md5

    Para saber em qual versão do postgresql você está executando, procure a pasta version em /etc/postgresql. Além disso, você pode usar o Nano ou outro editor em vez do VIM.

  4. Reinicie o banco de dados:

    sudo /etc/init.d/postgresql restart

    (Aqui você pode verificar se funcionou psql -U postgres).

  5. Crie um usuário com o mesmo nome que você (para encontrá-lo, você pode digitar whoami):

    sudo createuser -U postgres -d -e -E -l -P -r -s <my_name>

    As opções dizem ao postgresql para criar um usuário que possa efetuar login, criar bancos de dados, criar novas funções, seja um superusuário e terá uma senha criptografada. Os realmente importantes são -P -E, para que você seja solicitado a digitar a senha que será criptografada e -d para que você possa fazer um createdb.

    Cuidado com as senhas : ele primeiro solicitará o dobro da nova senha (para o novo usuário), repetida e depois a senha do postgres (a especificada na etapa 2).

  6. Novamente, edite o pg_hba.confarquivo (consulte a etapa 3 acima) e altere "peer" para "md5" na linha referente a "todos" outros usuários:

    local tudo md5 todos      os      pares

  7. Reinicie (como na etapa 4) e verifique se você pode fazer login sem -U postgres:

    psql template1

    Observe que, se você fizer um mero psql, ele falhará, pois tentará conectá-lo a um banco de dados padrão com o mesmo nome que você (por exemplo whoami). template1 é o banco de dados do administrador que está aqui desde o início.

  8. Agora createdb <dbname>deve funcionar.

Manur
fonte
Este procedimento também funcionou muito bem no Ubuntu 13.10. Lembre-se de sudo na etapa 5 ao criar um usuário.
David den Haring
2
Funcionou muito bem no Ubuntu 14.04 LTS, bem
ilhnctn
2
apenas como uma observação, a linha de entrada pg_hba.confdeve ser a primeira linha, caso contrário, poderá ser ignorada por causa de outras regras (pgsql 9.3.5 em F21). Levei algum tempo para descobrir isso, que as linhas de comentários e alterações já comentadas para o usuário do postgresql não serão suficientes.
dashesy
Eu acho que isso mudou na PG 9.4, já que eu tenho apenas local all all peerno ponto 3 para o qual eu mudei agora md5. OK?
Léo Léopold Hertz 준영 10/07/2015
1
Atualize a resposta para 2017! PostgreSQL 9.6 e UBUNTU 16 LTS ... De maneira simples ?
Peter Krauss
55

No Linux, o PostgresQL geralmente é configurado para permitir que o usuário root efetue login como superusuário postgresdo postgres a partir do shell (console ou ssh).

$ psql -U postgres

Então você apenas criaria um novo banco de dados, como de costume:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

Isso deve funcionar sem tocar pg_hba.conf. Se você quiser fazer isso usando alguma ferramenta da GUI na rede - precisará mexer pg_hba.conf.

Oliver Weichhold
fonte
Estou trabalhando no Windows, executei o initdb para o meu diretório e tenho os arquivos de configuração presentes. agora createdb funciona, mas quando faço o teste psql, recebo a mensagem AVISO: A página de códigos do console (437) difere da página de códigos do Windows (1252) Os caracteres de 8 bits podem não funcionar corretamente. Consulte a página de referência do psql "Usuários do Notes para Windows" para obter detalhes. e nenhum dos comandos funciona.
Rohit Banga
7
psql: FATAL: Peer authentication failed for user "postgres"mesmo com sudo.
Peter Krauss
Resposta perfeita, eu não queria tocar nos arquivos de configuração e isso funcionou perfeitamente no PostgreSQL 10.10 no Ubuntu. Você deve conseguir se conectar a partir de então psql -d mydatatabase -U myuser.
ranu
21

Esta é a minha solução:

su root
su postgres
psql
Admdebian
fonte
4
Isso funcionará em muitos casos, porque muitos sites terão o pg_hba.conf autenticado pelo usuário do postgres db na conta do sistema postgres (método de mesmo nível). No entanto, o login bem-sucedido dependerá, em última análise, do conteúdo do pg_hba.conf para qualquer site específico.
Reed Sandberg
1
Trabalhou para mim. Substituí a primeira linha por sudo bash.
precisa saber é o seguinte
Eu não entendo como isso ajuda, .. pelo meu entendimento, isso registra no root e no postgres e executa o psql. O que exatamente está acontecendo? Obrigado!
Olleh 27/02/19
20

Existem dois métodos que você pode usar. Ambos exigem a criação de um usuário e um banco de dados.

  1. Usando createuser e createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Usando os comandos de administração SQL e conectando-se com uma senha sobre TCP

    $ sudo -u postgres psql postgres

    E, então, no shell psql

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;

    Então você pode fazer o login,

    $ psql -h localhost -d mydatabase -U myuser -p <port>

    Se você não conhece a porta, sempre pode obtê-la executando o seguinte, como o postgresusuário,

    SHOW port;

    Ou,

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Sidenote: o postgresusuário

Sugiro NÃO modificar o postgresusuário.

  1. Normalmente está bloqueado no sistema operacional. Ninguém deve "logar" no sistema operacional como postgres. Você deveria ter root para se autenticar como postgres.
  2. Normalmente não é protegido por senha e delega para o sistema operacional host. Isso é uma coisa boa . Isso normalmente significa que, para efetuar login como postgreso equivalente do PostgreSQL ao SQL Server SA, é necessário ter acesso de gravação aos arquivos de dados subjacentes. E isso significa que você normalmente pode causar estragos de qualquer maneira.
  3. Ao manter isso desativado, você remove o risco de um ataque de força bruta por meio de um superusuário nomeado. Ocultar e obscurecer o nome do superusuário tem vantagens.
Evan Carroll
fonte
Com o primeiro método, o usuário acaba sem privilégios. Acabei usando isso em vez do primeiro comando:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert
O @FabienSnauwaert -sfaz do usuário um superusuário.
Evan Carroll
16

EDIT: Aviso: Por favor, leia a resposta postada por Evan Carroll . Parece que esta solução não é segura e não é recomendada.

Isso funcionou para mim na instalação padrão do Ubuntu 14.04 64 bits .

Segui as instruções, com pequenas modificações, encontradas em http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Instale o postgreSQL (se ainda não estiver na sua máquina):

sudo apt-get install postgresql

  1. Execute o psql usando o usuário do postgres

sudo –u postgres psql postgres

  1. Defina uma nova senha para o usuário do postgres:

\password postgres

  1. Sair do psql

\q

  1. Edite /etc/postgresql/9.3/main/pg_hba.conf e altere:

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

Para:

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

  1. Reinicie o postgreSQL:

sudo service postgresql restart

  1. Crie um novo banco de dados

sudo –u postgres createdb mytestdb

  1. Execute o psql com o usuário do postgres novamente:

psql –U postgres –W

  1. Liste os bancos de dados existentes (seu novo banco de dados deve estar lá agora):

\l

Robert
fonte
1
Fiz uma votação baixa porque acho que ativar o postgresusuário é uma má ideia. stackoverflow.com/a/41604969/124486
Evan Carroll
4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`
Suman Astani
fonte
3

Você provavelmente precisa atualizar seu pg_hba.confarquivo. Este arquivo controla quais usuários podem efetuar login a partir de quais endereços IP. Eu acho que o usuário do postgres é bastante bloqueado por padrão.

Neall
fonte
2
Para RHEL6.4 e postgres 8.4, o arquivo estava localizado /var/lib/pgsql/data/pg_hba.conf. Mude identpara trustfor host(e localse você estiver usando ssh).
DavidG
3

Se você estiver executando o macOS como eu, talvez não tenha o usuário do postgres.

Ao tentar executar sudo -u postgres psql, estava recebendo o errosudo: unknown user: postgres

Felizmente, existem executáveis ​​que o postgres fornece.

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

Então, consegui acessar psqlsem problemas.

psql
psql (10.2)
Type "help" for help.

nick=#

Se você estiver criando uma nova instância do postgres do zero, aqui estão as etapas que eu segui. Usei uma porta não padrão para poder executar duas instâncias.

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

Depois editei /var/postgres/var-10-local/postgresql.confcom minha porta preferida, 5433.

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

Feito!

Nick Woodhams
fonte
2

No MacOS, segui as etapas abaixo para fazê-lo funcionar.

Pela primeira vez, após a instalação, obtenha o nome de usuário do sistema.

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

Agora que você efetuou login no sistema, pode criar o banco de dados.

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT
Super Nova
fonte
0

Basta navegar até o diretório da instalação e executar este arquivo "pg_env.bat"; então, vá para a pasta bin e execute o arquivo pgAdmin.exe. Isso deve funcionar sem dúvida!

Wellington Ribeiro
fonte