如何修复Postgres中的“错误:列c.relhasoids不存在”?


33

我正在尝试在Postgresql中创建TABLE命令。创建表后,如果我在TABLE 表名中打孔,它将起作用。

但是我打入\ d 表名,下面一直出现错误。

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

我尝试使用DROP DATABASE 表名重新创建数据库,然后再次重新创建表几次。但这没有用。

任何建议,将不胜感激!谢谢。


您使用什么版本?
richyen

解决了!谢谢大家!谢谢!找到pg_hba.conf createdb Nao然后工作了。

简单的解决方案,工作在这里- stackoverflow.com/a/58462270/984471
马诺哈尔·雷迪Poreddy

您的意思是“如果我在TABLE表名中打孔,它将起作用。”
Adelin

Answers:


30

如果我使用的是Postgres v.12和较旧的客户端(v.11或更早版本),则可以重现您的错误:

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

这是因为在第12版中,表OID不再被视为特殊列,因此relhasoids不再需要该列。请确保您使用的是v。12 psql二进制文件,这样就不会遇到此错误。

您可能不一定使用psql,所以这里更通用的答案是确保您使用的是兼容的客户端。


非常感谢!我正在使用v11.5 ...我将尝试再次卸载并重新安装postgress。

这个答案使我想到了罪魁祸首:我安装了多个PgAdmin,而Windows搜索仅让我使用了一个旧的。因此,我在Postgres v12中使用了旧的PgAdmin。
funforums

17

对于将Postgres作为Docker容器运行的任何人:

而不是从主机运行psql,而是从容器内部运行它,例如

docker exec -it postgres_container_name psql your_connection_string

Postgres的形象总是附带相应的,因而总是更新版本psql的,所以你不必担心有安装在主机上的正确版本。


这真的错了。您需要能够独立访问容器。
乔恩·M

我不确定在这种情况下“独立访问容器”是什么意思,或者为什么我答复中的命令以某种方式不允许这样做?
joakim

因为不一定总是必须直接访问容器。这里的问题似乎需要单独的postgres服务。解决方案是降级psql客户端或升级服务器。不只是绕过问题并一起运行。由于其他架构限制,这并非总是可能的。
乔恩·M

当然; 我不建议使用Docker 作为解决方案。这就是为什么我领导“对于将Postgres作为Docker容器运行的任何人”的原因。
joakim

您可以举一个“ your_connection_string”的例子吗?
OlleHärstedt

2

我今天遇到这个问题,由于这个原因我无法继续工作,奇怪的是应用程序代码运行正常。

后来,发现仅当我使用用于连接数据库的OmniDb客户端时,才会出现此问题。

我已将客户端切换为Postgres安装随附的默认pgAdmin 4,并且不再出现pgAdmin 4问题。链接:https : //www.pgadmin.org/download/pgadmin-4-windows/

OmniDb客户端可能更旧,但现在没有时间对其进行故障排除,现在使用pgAdmin 4。

希望能有所帮助。


0

我今天也遇到同样的问题。就我而言,当我删除版本12并安装版本11时,该问题已解决。似乎v12具有必须与其他列一起创建的某些功能。


您可能正在使用psqlPostgres 11安装来连接到Postgres 12-应该使用psqlPostgres 12
a_horse_with_no_name

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.