Executando o servidor PostgreSQL no Void Linux. Após a instalação, execute initdb como usuário do sistema operacional “postgres”:

[user@host]$ sudo -u postgres -i $ initdb -D "/var/lib/postgresql/data" 

Resultado recebido:

criando diretório / var / lib / postgresql / data … ok criando subdiretórios … ok selecionando default max_connections … 100 selecionando default shared_buffers … 128 MB selecionando dynamic shared implementação de memória … posix criando arquivos de configuração … ok executando script de bootstrap … ok executando inicialização pós-bootstrap … local: Não é possível definir LC_MESSAGES para o local padrão: Não existe esse arquivo ou diretório ok sincronizando dados com o disco … ok

AVISO: habilitando a autenticação “confiável” para conexões locais Você pode mudar isso editando pg_hba.conf ou usando a opção -A, ou –auth-local e –auth-host, na próxima vez você executa o initdb.

Sucesso. Agora você pode iniciar o servidor de banco de dados usando: pg_ctl -D / var / lib / postgresql / data -l logfile start

Em seguida, comecei a criar o serviço, conceda a propriedade ao “postgres” e inicie-o:

[user@host]$ ln -s /etc/sv/postgresql /var/service [user@host]$ sudo chown postgres: /var/service/postgresql [user@host]$ sudo sv start postgresql [user@host]$ ls -l /var/service/postgresql lrwxrwxrwx 1 postgres postgres 18 nov 2 17:05 /var/service/postgresql -> /etc/sv/postgresql 

Executando:

[user@host]$ sudo -u postgres psql ... 

me dará o seguinte erro:

psql: FATAL: role "postgres" does not exist 

Eu “tentei conceder a propriedade de /etc/sv/postgresql para “postgres”, mas sem sorte.

Estas foram minhas fontes:

https://wiki.voidlinux.eu/PostgreSQL

Erro PostgreSQL: Fatal: a função “nome de usuário” não existe

Não sei o que fazer a seguir.

EDITAR: Tropeçou em psql: FATAL: o papel “postgres” não existe . Não é possível executar psql -l porque recebo o mesmo erro, independentemente do usuário que executo psql como.

Comentários

  • Diga-nos qual versão do Postgres você está tentando instalar e onde obteve o pacote. A mensagem de erro é clara o suficiente: role "postgres" does not exist: não há função de banco de dados chamada " postgres ". É a única instalação do Postgres na mesma máquina? (Então, você tem certeza de se conectar à instância certa?) Em caso afirmativo, a pergunta é: qual função de banco de dados é configurada por sua instalação. Não ' não conheço o Void Linux ou o gerenciador de pacotes XPBS o suficiente para dizer mais. Pode ser mais adequado para superusuário.SE ou unix.SE.
  • A versão é postgresql-9.6.10_1. Sim, é ' a única instalação do PostgreSQL em meu sistema e há apenas uma instância do servidor em execução. Devo mover a questão então? Não ' não sei …
  • Não tenho certeza se há algum especialista em VOID Linux ou XPBS por aqui … A chave é encontrar o nome do Função Postgres criada por initdb e, em seguida, conecte-se com o usuário do sistema operacional de mesmo nome para ter acesso concedido pelo " trust " método de autenticação. Obviamente, não " postgres " (que seria o padrão normal).
  • Eu imaginei isso, mas eu ' não consegui encontrar a função. Como mencionei na pergunta, não posso ' usar o psql, então posso ' listar as funções existentes. Existe algo relevante escrito no arquivo postgresql.conf, talvez? Algo que devo procurar? Eu ' fiz o greped e obtive session_replication_role = 'origin'. Acho que não uso muito disso.
  • :%s/XPBS/XBPS/g

Resposta

Não é uma resposta completa, mas considere o manual sobre initdb aqui :

-U username
--username= username

Seleciona o nome de usuário do superusuário do banco de dados. O padrão é o nome do usuário efetivo executando initdb. Não é realmente importante qual é o nome do superusuário, mas pode-se escolher manter o nome usual postgres, mesmo se o nome do usuário do sistema operacional for diferente.

Significa …

  1. Ao executar initdb como usuário do sistema operacional postgres, a função inicial de superusuário do banco de dados é postgres também – no Postgres padrão. Já ouvi falar de sistemas que violam essa regra …

  2. Você deve ser capaz de forçar o nome postgres com --username=postgres para o superusuário inicial – a menos que seu pacote tenha mexido seriamente com tudo isso.

Comentários

  • Uau , isso me apontou a direção certa, certo. Eu sabia que vi aquele -U sinalizar em algum lugar e era daqui: stackoverflow.com/questions/50746147/… Posso ter interpretado mal a resposta de Laurenz ' lá, mas corri initdb -U UTF8 -D /var/lib/postgresql/data e adivinhe a função inicial de superusuário do banco de dados era. De qualquer forma, acabei quase quebrando todo o meu sistema devido à exaustão. Um dia bastante produtivo. Obrigado por sua dedicação Erwin, sua ajuda é muito apreciada.
  • @Jakov: -U UTF8. Ai. Era para ser -E UTF8, presumo? Desculpe pelo dia perdido devido a uma carta embaralhada sorrateira. Então, novamente: se você tivesse mostrado seu comando real na pergunta para começar, poderíamos ter economizado metade do seu dia …

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *