Eu sou um novato no postgres.
Eu instalei o postgres.app para mac. Eu estava brincando com os comandos psql e acidentalmente deixei cair o banco de dados do postgres. Eu não sei o que estava nele.
Atualmente, estou trabalhando em um tutorial: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/
E eu estou preso em sudo -u postgres psql postgres
MENSAGEM DE ERRO: psql: FATAL: role "postgres" does not exist
$ qual psql
/Applications/Postgres.app/Contents/MacOS/bin/psql
É isso que imprime psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+------------+----------+---------+-------+---------------------------
user | user | UTF8 | en_US | en_US |
template0 | user | UTF8 | en_US | en_US | =c/user +
| | | | | user =CTc/user
template1 | user | UTF8 | en_US | en_US | =c/user +
| | | | | user =CTc/user
(3 rows)
Então, quais são os passos que devo tomar? Excluir tudo relacionado ao psql e reinstalar tudo?
Obrigado pela ajuda pessoal!
macos
postgresql
terminal
user805981
fonte
fonte
brew services start postresql
seja executado.Respostas:
NOTA: Se você instalou o postgres usando homebrew, consulte o comentário em @ user3402754 abaixo.
Observe que a mensagem de erro NÃO fala sobre um banco de dados ausente, mas sobre uma função ausente. Posteriormente no processo de login, ele também pode tropeçar no banco de dados ausente.
Mas o primeiro passo é verificar a função que falta: Qual é a saída dentro
psql
do comando\du
? No meu sistema Ubuntu, a linha relevante fica assim:Se não houver pelo menos uma função
superuser
, você terá um problema :-)Se houver um, você pode usá-lo para fazer login. E olhando para a saída do seu
\l
comando: As permissões parauser
nos bancos de dadostemplate0
etemplate1
são as mesmas que no meu sistema Ubuntu para o superusuáriopostgres
. Então, acho que sua configuração é simplesuser
como superusuário. Então você pode tentar este comando para fazer login:Se
user
é realmente o superusuário do banco de dados, você pode criar outro superusuário do banco de dados e um banco de dados vazio e privado para ele:Mas como a instalação do postgres.app parece não fazer isso, você também não deve. Simples adapte o tutorial.
fonte
CREATE USER postgres WITH SUPERUSER PASSWORD 'password';
estou usando o postgres v10.homebrew
então você precisa rodar/usr/local/opt/postgres/bin/createuser -s postgres
no seu terminal/usr/local/opt/postgresql/bin/createuser -s postgres
/usr/local/opt/postgresql@11/bin/createuser -s postgres
A chave é "Eu instalei o postgres.app para mac". Este aplicativo configura a instalação local do PostgreSQL com um superusuário de banco de dados cujo nome da função é igual ao seu nome (abreviado) de login.
Alguns scripts (por exemplo, um backup de banco de dados criado com
pgdump
um sistema Linux) e tutoriais assumem que o superusuário possui o nome de função tradicionalpostgres
.Você pode fazer com que sua instalação local pareça um pouco mais tradicional e evitar esses problemas executando uma única vez:
o que fará com que esses FATAL: o papel "postgres" não exista desapareça.
fonte
/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres
(para a versão 9.2.4, obviamente)./Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres
correu corretamente para mim.brew link postgresql
após a instalação, não há necessidade de acrescentar todo o caminho paracreateuser
, uma simplescreateuser -s postgres
vai trabalhar muitocreateuser -s postgres
trabalhou para mim. Eu instalei o postgres com o HomebrewPara MAC:
brew install postgres
initdb /usr/local/var/postgres
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
ou/usr/local/opt/postgres/bin/createuser -s postgres
que usará apenas a versão mais recente.pg_ctl -D /usr/local/var/postgres start
Para iniciar o servidor na inicialização
mkdir -p ~/Library/LaunchAgents
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Agora, ele está configurado, efetue login usando
psql -U postgres -h localhost
ou use o PgAdmin for GUI.Por padrão, o usuário
postgres
não terá nenhuma senha de login.Verifique este site para obter mais artigos como este: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
fonte
brew services start postgresql
para começar postgresou faça um superusuário postgresl apenas com
fonte
Isso acontece quando você executa
initdb
com um usuário cujo ID não épostgres
, sem especificar opostgres
nome de usuário com--username=postgres
ou-U postgres
.O cluster do banco de dados é criado com a conta de usuário do sistema que você usou para executar o initdb e recebe permissões de superusuário.
Para corrigi-lo, basta criar um novo usuário nomeado
postgres
com a opção--superuser
usando ocreateuser
utilitário que acompanha o Postgres. O utilitário pode ser encontrado nobin
diretório do Postgres . por exemploSe você tiver um nome de host ou porta personalizado, defina as opções apropriadas .
Não se esqueça de excluir a outra conta de usuário criada para você pelo initdb.
fonte
Para mim, esse código funcionou:
veio daqui: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
fonte
Eu precisava desabilitar
$PGUSER
:fonte
Primeiro você precisa criar um usuário:
Depois de criar um banco de dados:
Mude
$USER
para o nome de usuário do seu sistema.Você pode ver a solução completa aqui .
fonte
Executar isso na linha de comando deve corrigi-lo
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
fonte
Descartar o
postgres
banco de dados realmente não importa. Esse banco de dados está inicialmente vazio e seu objetivo é simplesmente que opostgres
usuário tenha um tipo de "casa" para se conectar, caso seja necessário.Ainda assim, você pode recriá-lo com o comando SQL
CREATE DATABASE postgres;
Observe que o tutorial mencionado na pergunta não está escrito
postgres.app
em mente. Ao contrário do PostgreSQL para Unix em geral,postgres.app
tenta se parecer com um aplicativo normal, em oposição a um serviço que seria executado por umpostgres
usuário dedicado com privilégios diferentes do seu usuário normal.postgres.app
é executado e gerenciado por sua própria conta.Então, ao invés deste comando
sudo -u postgres psql -U postgres
:, seria mais do espírito do postgres.app apenas emitir:,psql
que se conecta automaticamente a um banco de dados que corresponde ao nome do usuário e a uma conta db com o mesmo nome que é superusuário, então ele pode fazer qualquer coisa em termos de permissão.fonte
ERROR: cannot drop the currently open database
quando tento excluir o banco de dados do usuário? Portanto, não é uma boa prática usar este postgres.app?Postgres.app
é para fins de teste e desenvolvimento; é um pacote PostgreSQL da Heroku, projetado para tornar mais fácil para os usuários de Mac que desenvolvem com Ruby on Rails testar com PostgreSQL em vez do SQLite padrão. Os usos do Rails costumavam testar com SQLite e implantar no PostgreSQL, o que causava todo tipo de problemas, então o Heroku tentou facilitar também o teste no PostgreSQL.Postgres.app
é bom para teste, mas eu não consideraria usá-lo para produção ou dados reais, não é para isso que serve.Pelo que vale, tenho o ubuntu e muitos pacotes instalados e entrou em conflito com ele.
Para mim, a resposta certa foi:
fonte
Este é o único que o corrigiu para mim:
fonte
sudo
obter privilégios temporários de superusuário.No sistema Ubuntu, limpei o PostgreSQL e o reinstalei. Todos os bancos de dados são restaurados. Isso resolveu o problema para mim.
Conselho - Faça o backup dos bancos de dados para estar do lado mais seguro.
fonte
Eu não acho que o sudo seja necessário aqui porque o psql -l retorna uma lista de bancos de dados. Isso me diz que o initdb foi executado no usuário atual do usuário, não no usuário do postgres.
Você pode apenas:
E continue o tutorial.
Eu sugeriria os pontos gerais do AH de criar o usuário e o banco de dados do postgres, porque muitos aplicativos podem esperar que isso exista.
Uma breve explicação:
O PostgreSQL não será executado com acesso administrativo ao sistema operacional. Em vez disso, é executado com um usuário comum e, para oferecer suporte à autenticação de mesmo nível (perguntando ao SO que está tentando se conectar), ele cria um usuário e um banco de dados com o usuário que executa o processo de inicialização. Nesse caso, era seu usuário normal.
fonte
Fiquei preso a esse problema por ter sido executado
brew services stop postgresql
no dia anterior.O dia seguinte:
brew services start postgresql
não funcionaria. Isso ocorre porque, como é mostrado, quando você instala usando o homebrew. O postgresql usa um launchd ... que carrega quando o computador está ligado.resolução:
brew services start postgresql
reinicie o computador.
fonte
O
\du
comando retorna:E esse comando
postgres=# \password postgres
retorna erro:Mas isso
postgres=# \password postgres@implicit_files
corre bem.Também após
sudo -u postgres createuser -s postgres
a primeira variante também funciona.fonte