¿Cómo arreglar "ERROR: la columna c.relhasoides no existe" en Postgres?

33

Estoy tratando de crear el comando TABLE en Postgresql. Después de crear una tabla, si ingreso el nombre de la tabla TABLE , funciona.

Pero tecleo \ d nombre de la tabla , sigo recibiendo un error a continuación.

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

Intenté DROP DATABASE el nombre de la tabla recreé una base de datos y volví a crear una tabla varias veces. Pero no funcionó.

¡Cualquier sugerencia sera apreciada! Gracias.

Nao
fuente
Qué versión estás usando?
richyen
Fue resuelto! Muchísimas gracias a todos! localizar pg_hba.conf createdb Nao Entonces funcionó.
Nao
La solución simple que funcionó está aquí: stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy el
¿Qué quieres decir con "si pongo el nombre de la tabla TABLE, funciona?"
Adelin

Respuestas:

30

Puedo reproducir su error si estoy usando Postgres v.12 y un cliente anterior (v.11 o 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=# 

Esto se debe a que en el v. 12, los OID de tabla ya no se tratan como columnas especiales y, por lo tanto, la relhasoidscolumna ya no es necesaria. Asegúrese de estar utilizando un psqlbinario v. 12 para que no encuentre este error.

Es posible que no esté utilizando necesariamente psql, por lo que la respuesta más general aquí es asegurarse de que está utilizando un cliente compatible.

richyen
fuente
Muchas gracias! Estoy usando v11.5 ... Intentaré desinstalar y reinstalar postgress nuevamente.
Nao
Esta respuesta me llevó al culpable en mi caso: tengo varias instalaciones de PgAdmin, y la búsqueda de Windows solo me daba una vieja para usar. Por lo tanto, estaba usando un viejo PgAdmin con un Postgres v12.
funforums
17

Para cualquiera que ejecute Postgres como un contenedor Docker :

En lugar de ejecutar psql desde el host, ejecútelo desde dentro del contenedor, por ejemplo

docker exec -it postgres_container_name psql your_connection_string

La imagen de Postgres siempre se envía con la versión correspondiente, y por lo tanto siempre actualizada, de psql para que no tenga que preocuparse por tener instalada la versión correcta en la máquina host.

joakim
fuente
Eso realmente pierde el punto. Debe poder acceder a un contenedor de forma independiente.
Jon M
No estoy seguro de lo que significa "acceder a un contenedor de forma independiente" en este contexto o por qué el comando en mi respuesta de alguna manera no lo permite.
joakim
Porque tener que acceder directamente al contenedor no siempre es posible. El problema aquí parece requerir un servicio postgres separado. La solución es degradar el cliente psql o actualizar el servidor; no simplemente evitando el problema y ejecutándolo juntos. Eso no siempre es posible debido a otras restricciones arquitectónicas.
Jon M
Por supuesto; No sugerí usar Docker como solución . Es por eso que lideré con "Para cualquiera que ejecute Postgres como un contenedor Docker".
joakim
¿Puedes publicar un ejemplo de "your_connection_string"?
Olle Härstedt
2

Tuve este problema hoy, no pude continuar trabajando debido a esto, curiosamente, el código de la aplicación funciona bien.

Más tarde, descubrí que este problema solo ocurre si uso el cliente OmniDb que uso para conectarme a la base de datos.

He cambiado el cliente a pgAdmin 4 predeterminado que viene con la instalación de postgres y el problema ya no ocurre pgAdmin 4. Enlace: https://www.pgadmin.org/download/pgadmin-4-windows/

Es posible que el cliente OmniDb sea más antiguo, pero no hay tiempo para solucionarlo, usando pgAdmin 4 por ahora.

Espero que ayude.

Manohar Reddy Poreddy
fuente
0

Tuve el mismo problema hoy también. En mi caso, el problema se resolvió cuando eliminé la versión 12 e instalé la versión 11. Parece que v12 tiene algunas características que deben crearse a lo largo de las otras columnas.

Danilo Silva
fuente
Probablemente estaba usando psqldesde su instalación de Postgres 11 para conectarse a Postgres 12 - debería haber usado psqlpara Postgres 12
a_horse_with_no_name