Como corrigir "ERRO: a coluna c.relhasoids não existe" no Postgres?

33

Estou tentando criar o comando TABLE no Postgresql. Depois de criar uma tabela, se eu digitar o nome da tabela TABLE , ela funcionará.

Mas digito o nome da tabela \ d , continuo recebendo um erro abaixo.

ERROR: column c.relhasoids does not exist LINE 1: ...riggers, c.relrowsecurity, c.relforcerowsecurity, c.relhasoi...

Tentei o nome da tabela DROP DATABASE recriado um banco de dados e recriei uma tabela novamente várias vezes. Mas não deu certo.

Todas as sugestões serão apreciadas! Obrigado.

Nao
fonte
Qual versão você está usando?
19619 richyen #
Foi resolvido! Muito obrigado a todos! localize pg_hba.conf createdb Nao Então funcionou.
Nao
Solução simples que trabalhou está aqui - stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy
O que você quer dizer com "se eu digitar o nome da tabela TABLE, funciona".
Adelin

Respostas:

30

Posso reproduzir o seu erro se estiver usando o Postgres v.12 e um cliente mais antigo (v.11 ou anterior):

[root@def /]# psql -h 172.17.0.3
psql (11.5, server 12.0)
WARNING: psql major version 11, server major version 12.
         Some psql features might not work.
Type "help" for help.

postgres=# create table mytable (id int, name text);
CREATE TABLE
postgres=# table mytable;
 id | name 
----+------
(0 rows)

postgres=# \d mytable;
ERROR:  column c.relhasoids does not exist
LINE 1: ...riggers, c.relrowsecurity, c.relforcerowsecurity, c.relhasoi...
                                                             ^
postgres=# 

Isso ocorre porque na v. 12, os OIDs da tabela não são mais tratados como colunas especiais e, portanto, a relhasoidscoluna não é mais necessária. Verifique se você está usando um psqlbinário v. 12 para não encontrar esse erro.

Você pode não estar necessariamente usando psql, portanto, a resposta mais geral aqui é garantir que você esteja usando um cliente compatível.

richyen
fonte
Muito obrigado! Estou usando a v11.5 ... Vou tentar desinstalar e reinstalar o postgress novamente.
Nao
Essa resposta me levou ao culpado no meu caso: eu tenho várias instalações do PgAdmin, e a pesquisa do Windows estava apenas me dando uma antiga. Portanto, eu estava usando um antigo PgAdmin com um Postgres v12.
funforums
17

Para qualquer pessoa que execute o Postgres como um contêiner do Docker :

Em vez de executar o psql no host, execute-o de dentro do contêiner, por exemplo

docker exec -it postgres_container_name psql your_connection_string

A imagem do Postgres sempre é fornecida com a versão correspondente - e, portanto, sempre atualizada - do psql, para que você não precise se preocupar em ter a versão correta instalada na máquina host.

joakim
fonte
Isso realmente erra o ponto. Você precisa acessar um contêiner de forma independente.
Jon M
Não tenho certeza do que "acessar um contêiner independentemente" significa nesse contexto ou por que o comando na minha resposta não está permitindo isso de alguma forma?
joakim
Porque ter que acessar diretamente o contêiner nem sempre é possível. O problema aqui parece exigir um serviço postgres separado. Fazer o downgrade do cliente psql ou o upgrade do servidor é a solução; não simplesmente ignorando o problema e executando-o juntos. Isso nem sempre é possível devido a outras restrições de arquitetura.
Jon M
Claro; Não sugeri o uso do Docker como solução . É por isso que liderei "Para quem executa o Postgres como um contêiner do Docker".
joakim
Você pode postar um exemplo de "your_connection_string"?
Olle Härstedt
2

Eu tive esse problema hoje, não consegui continuar trabalhando devido a isso, estranhamente o código do aplicativo está funcionando bem.

Posteriormente, esse problema só ocorre se eu usar o cliente OmniDb para conectar ao DB.

Mudei o cliente para o padrão pgAdmin 4, que vem com a instalação e o problema do postgres, não está mais ocorrendo. PgAdmin 4. Link: https://www.pgadmin.org/download/pgadmin-4-windows/

É possível que o cliente OmniDb seja mais antigo, mas não há tempo para solucioná-lo, usando o pgAdmin 4 por enquanto.

Espero que ajude.

Manohar Reddy Poreddy
fonte
0

Eu também tive o mesmo problema hoje. No meu caso, o problema foi resolvido quando excluí a versão 12 e instalei a versão 11. Parece que a v12 possui alguns recursos que devem ser criados ao longo das outras colunas.

Danilo Silva
fonte
Você provavelmente estava usando psqlde sua instalação Postgres 11 para se conectar ao Postgres 12 - você deveria ter usado psqlpara Postgres 12
a_horse_with_no_name