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.


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.


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.


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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.