Comment réparer «ERREUR: la colonne c.relhasoids n'existe pas» dans Postgres?

33

J'essaie de créer la commande TABLE dans Postgresql. Après avoir créé une table, si je tape le nom de la table TABLE , cela fonctionne.

Mais je tape le nom de la table \ d , je reçois toujours une erreur ci-dessous.

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

J'ai tenté DROP DATABASE nom de table recréé une base de données et recréé une table plusieurs fois. Mais ça n'a pas marché.

Toute suggestion serait appréciée! Je vous remercie.

Nao
la source
Quelle version utilisez-vous?
richyen
C'était résolu! Merci beaucoup à tous! Locate pg_hba.conf createdb Nao Ensuite, cela a fonctionné.
Nao
Une solution simple qui a fonctionné est ici - stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy
Que voulez-vous dire par "si je frappe le nom de la table TABLE, cela fonctionne."
Adelin

Réponses:

30

Je peux reproduire votre erreur si j'utilise Postgres v.12 et un client plus ancien (v.11 ou antérieur):

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

En effet, dans la version 12, les OID de table ne sont plus traités comme des colonnes spéciales et la relhasoidscolonne n'est donc plus nécessaire. Veuillez vous assurer que vous utilisez un psqlbinaire v. 12 afin de ne pas rencontrer cette erreur.

Vous n'utilisez peut-être pas nécessairement psql, donc la réponse plus générale ici est de vous assurer que vous utilisez un client compatible.

richyen
la source
Merci beaucoup! J'utilise la v11.5 ... J'essaierai de désinstaller et de réinstaller postgress à nouveau.
Nao
Cette réponse m'a conduit au coupable dans mon cas: j'ai plusieurs installations PgAdmin, et la recherche Windows m'en donnait seulement une ancienne à utiliser. J'utilisais donc un ancien PgAdmin avec un Postgres v12.
funforums
17

Pour toute personne exécutant Postgres en tant que conteneur Docker :

Au lieu d'exécuter psql à partir de l'hôte, exécutez-le depuis l'intérieur du conteneur, par exemple

docker exec -it postgres_container_name psql your_connection_string

L' image Postgres est toujours livrée avec la version correspondante - et donc toujours mise à jour - de psql afin que vous n'ayez pas à vous soucier d'avoir la bonne version installée sur la machine hôte.

joakim
la source
Cela manque vraiment le point. Vous devez pouvoir accéder à un conteneur indépendamment.
Jon M
Je ne sais pas ce que signifie "accéder à un conteneur indépendamment" dans ce contexte ou pourquoi la commande dans ma réponse ne permet pas cela en quelque sorte?
joakim
Parce que l'accès direct au conteneur n'est pas toujours possible. Le problème semble ici nécessiter un service postgres distinct. La mise à niveau du client psql ou la mise à niveau du serveur est la solution; pas simplement contourner le problème et le faire fonctionner ensemble. Ce n'est pas toujours possible en raison d'autres contraintes architecturales.
Jon M
Bien sûr; Je n'ai pas suggéré d'utiliser Docker comme solution . C'est pourquoi j'ai mené avec «Pour tous ceux qui utilisent Postgres en tant que conteneur Docker».
joakim
Pouvez-vous s'il vous plaît poster un exemple de "your_connection_string"?
Olle Härstedt
2

J'ai eu ce problème aujourd'hui, je n'ai pas pu continuer à travailler à cause de cela, étrangement, le code d'application fonctionne correctement.

Plus tard, j'ai constaté que ce problème se produit uniquement si j'utilise le client OmniDb que j'utilise pour me connecter à la base de données.

J'ai basculé le client sur pgAdmin 4 par défaut fourni avec l'installation postgres et le problème ne se produit plus pgAdmin 4. Lien: https://www.pgadmin.org/download/pgadmin-4-windows/

Il est possible que le client OmniDb soit plus ancien, mais pas le temps de le dépanner, en utilisant pgAdmin 4 pour l'instant.

J'espère que cela pourra aider.

Manohar Reddy Poreddy
la source
0

J'ai aussi eu le même problème aujourd'hui. Dans mon cas, le problème a été résolu lorsque j'ai supprimé la version 12 et installé la version 11. Il semble que la v12 possède certaines fonctionnalités qui doivent être créées le long des autres colonnes.

Danilo Silva
la source
Vous utilisiez probablement psqldepuis votre installation Postgres 11 pour vous connecter à Postgres 12 - vous auriez dû utiliser psqlPostgres 12
a_horse_with_no_name