Wie kann man "FEHLER: Spalte c.relhasoids existiert nicht" in Postgres beheben?

33

Ich versuche, den Befehl CREATE TABLE in Postgresql zu erstellen. Wenn ich nach dem Erstellen einer Tabelle den Tabellennamen TABLE eingebe , funktioniert dies.

Aber ich Punch in \ d Tabellennamen , halte ich unten einen Fehler.

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

Ich habe versucht, mit dem Tabellennamen DROP DATABASE eine Datenbank neu zu erstellen und eine Tabelle mehrmals neu zu erstellen. Aber es hat nicht funktioniert.

Anregungen wäre dankbar! Vielen Dank.

Nao
quelle
Welche Version verwenden Sie?
Richyen
Es wurde gelöst! Vielen Dank an alle! Suchen Sie pg_hba.conf createdb Nao Dann hat es funktioniert.
Nao
Einfache Lösung, die funktioniert hat, ist hier - stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy
Was meinst du mit "Wenn ich den Tabellennamen TABLE eingebe, funktioniert es"
Adelin

Antworten:

30

Ich kann Ihren Fehler reproduzieren, wenn ich Postgres v.12 und einen älteren Client (v.11 oder früher) verwende:

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

Dies liegt daran, dass in Version 12 Tabellen-OIDs nicht mehr als spezielle Spalten behandelt werden und die relhasoidsSpalte daher nicht mehr erforderlich ist. Stellen Sie sicher, dass Sie eine psqlBinärdatei der Version 12 verwenden, damit dieser Fehler nicht auftritt.

Möglicherweise verwenden Sie nicht unbedingt. Die psqlallgemeinere Antwort lautet daher, sicherzustellen, dass Sie einen kompatiblen Client verwenden.

Richyen
quelle
Ich danke dir sehr! Ich verwende v11.5 ... Ich werde versuchen, postgress erneut zu deinstallieren und neu zu installieren.
Nao
Diese Antwort führte mich zu dem Schuldigen in meinem Fall: Ich habe mehrere PgAdmin-Installationen, und die Windows-Suche gab mir nur eine alte zur Verwendung. Daher habe ich einen alten PgAdmin mit einem Postgres v12 verwendet.
Funforums
17

Für alle, die Postgres als Docker- Container ausführen :

Anstatt psql vom Host aus auszuführen, führen Sie es aus dem Container heraus aus, z

docker exec -it postgres_container_name psql your_connection_string

Das Postgres- Image wird immer mit der entsprechenden - und daher immer aktualisierten - Version von psql geliefert, sodass Sie sich keine Sorgen machen müssen, dass die richtige Version auf dem Hostcomputer installiert ist.

Joakim
quelle
Das geht wirklich daneben. Sie müssen in der Lage sein, unabhängig auf einen Container zuzugreifen.
Jon M
Ich bin mir nicht sicher, was "unabhängiger Zugriff auf einen Container" in diesem Zusammenhang bedeutet oder warum der Befehl in meiner Antwort dies irgendwie nicht zulässt.
Joakim
Weil ein direkter Zugriff auf den Container möglicherweise nicht immer möglich ist. Das Problem hier scheint einen separaten Postgres-Dienst zu erfordern. Ein Downgrade des psql-Clients oder ein Upgrade des Servers ist die Lösung. das Problem nicht einfach umgehen und zusammen ausführen. Dies ist aufgrund anderer architektonischer Einschränkungen nicht immer möglich.
Jon M
Na sicher; Ich habe nicht vorgeschlagen, Docker als Lösung zu verwenden . Deshalb habe ich mit "Für alle, die Postgres als Docker-Container ausführen" geführt.
Joakim
Können Sie bitte ein Beispiel für "your_connection_string" posten?
Olle Härstedt
2

Ich hatte dieses Problem heute, konnte aufgrund dessen nicht weiterarbeiten, seltsamerweise funktioniert der Anwendungscode einwandfrei.

Später wurde festgestellt, dass dieses Problem nur auftritt, wenn ich den OmniDb-Client verwende, mit dem ich eine Verbindung zur Datenbank herstelle.

Ich habe den Client auf Standard-pgAdmin 4 umgestellt, das mit der Postgres-Installation geliefert wird. Das Problem tritt nicht mehr auf. PgAdmin 4. Link: https://www.pgadmin.org/download/pgadmin-4-windows/

Es ist möglich, dass der OmniDb-Client älter ist, aber keine Zeit für die Fehlerbehebung, wenn Sie pgAdmin 4 verwenden.

Ich hoffe, das hilft.

Manohar Reddy Poreddy
quelle
0

Ich hatte heute auch das gleiche Problem. In meinem Fall wurde das Problem behoben, als ich die Version 12 löschte und die Version 11 installierte. Scheint, dass v12 einige Funktionen hat, die entlang der anderen Spalten erstellt werden müssen.

Danilo Silva
quelle
Sie haben wahrscheinlich psqlvon Ihrer Postgres 11-Installation aus eine Verbindung zu Postgres 12 hergestellt - Sie sollten dies psqlfür Postgres 12 verwendet haben
a_horse_with_no_name