Come correggere "ERRORE: la colonna c.relhasoids non esiste" in Postgres?


33

Sto provando a CREARE il comando TABELLA in Postgresql. Dopo aver creato una tabella, se inserisco il nome della tabella TABLE , funziona.

Ma io pugno in \ d nome della tabella , continuo a ricevere un errore di seguito.

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

Ho provato a DROP DATABASE il nome della tabella ricreato un database e ricreato una tabella più volte. Ma non ha funzionato.

Tutti i suggerimenti sarebbero apprezzati! Grazie.


Quale versione stai usando?
Richyen,

È stato risolto! Grazie mille a tutti! individuare pg_hba.conf createb Nao Quindi ha funzionato.
Nao,

Soluzione semplice che ha funzionato è qui - stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy

Cosa intendi con "se inserisco il nome della tabella TABLE, funziona".
Adelin,

Risposte:


30

Sono in grado di riprodurre il tuo errore se utilizzo Postgres v.12 e un client precedente (v.11 o precedente):

[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=# 

Questo perché nella v. 12, gli OID della tabella non vengono più trattati come colonne speciali e quindi la relhasoidscolonna non è più necessaria. Assicurati di utilizzare un psqlbinario v. 12 in modo da non riscontrare questo errore.

Potrebbe non essere necessariamente in uso psql, quindi la risposta più generale qui è assicurarsi di utilizzare un client compatibile.


Grazie mille! Sto usando la v11.5 ... Proverò a disinstallare e reinstallare nuovamente Postgress.
Nao,

Questa risposta mi ha portato al colpevole nel mio caso: ho più installazioni di PgAdmin e la ricerca di Windows mi ha dato solo una vecchia da usare. Quindi stavo usando un vecchio PgAdmin con Postgres v12.
funforums

17

Per chiunque esegua Postgres come contenitore Docker :

Invece di eseguire psql dall'host, eseguilo dall'interno del contenitore, ad es

docker exec -it postgres_container_name psql your_connection_string

L' immagine di Postgres viene sempre fornita con la versione corrispondente, e quindi sempre aggiornata, di psql, quindi non devi preoccuparti di avere la versione corretta installata sul computer host.


Questo manca davvero il punto. Devi essere in grado di accedere a un contenitore in modo indipendente.
Jon M,

Non sono sicuro di cosa significhi "accedere in modo indipendente a un contenitore" in questo contesto o perché il comando nella mia risposta non lo consenta in qualche modo?
Joakim,

Perché dover accedere direttamente al contenitore potrebbe non essere sempre possibile. Il problema qui sembra richiedere un servizio Postgres separato. Il downgrade del client psql o l'aggiornamento del server è la soluzione; non semplicemente aggirando il problema ed eseguendolo insieme. Ciò non è sempre possibile a causa di altri vincoli architettonici.
Jon M,

Ovviamente; Non ho suggerito di utilizzare Docker come soluzione . Ecco perché ho guidato con "Per chiunque esegua Postgres come contenitore Docker".
Joakim,

Potete per favore pubblicare un esempio di "your_connection_string"?
Olle Härstedt,

2

Ho avuto questo problema oggi, non sono riuscito a continuare a lavorare a causa di questo, stranamente il codice dell'applicazione sta funzionando bene.

Successivamente, ho riscontrato che questo problema si verifica solo se utilizzo il client OmniDb che utilizzo per connettermi al DB.

Ho commutato il client su pgAdmin 4 predefinito fornito con l'installazione di postgres e il problema non si verifica più pgAdmin 4. Link: https://www.pgadmin.org/download/pgadmin-4-windows/

È possibile che il client OmniDb potrebbe essere più vecchio, ma non c'è tempo per risolverlo, usando pgAdmin 4 per ora.

Spero che aiuti.


0

Ho avuto lo stesso problema anche oggi. Nel mio caso, il problema è stato risolto quando ho eliminato la versione 12 e installato la versione 11. Sembra che v12 abbia alcune funzionalità che devono essere create lungo le altre colonne.


Probabilmente stavi usando psqldalla tua installazione di Postgres 11 per connetterti a Postgres 12 - avresti dovuto usarlo psqlper Postgres 12
a_horse_with_no_name

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.