Как исправить «ОШИБКА: столбец c.relhasoids не существует» в Postgres?

33

Я пытаюсь создать команду TABLE в Postgresql. После создания таблицы, если я ввожу имя таблицы TABLE , это работает.

Но я ввожу \ d имя таблицы , я получаю сообщение об ошибке ниже.

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

Я попытался DROP DATABASE имя таблицы воссоздал базу данных и пересоздал таблицу снова несколько раз. Но это не сработало.

Мы ценим любые предложения! Спасибо.

Нао
источник
Какую версию ты используешь?
Ричьен
Это было решено! Спасибо всем большое! найти pg_hba.conf создалb Nao Тогда это сработало.
Нао
Простое решение, которое сработало, здесь - stackoverflow.com/a/58462270/984471
Манохар Редди Поредди
Что вы подразумеваете под «если я введу имя таблицы TABLE, это
сработает

Ответы:

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 идентификаторы таблиц больше не обрабатываются как специальные столбцы и, следовательно, relhasoidsстолбец больше не нужен. Пожалуйста, убедитесь, что вы используете psqlдвоичный файл v. 12, чтобы не встретить эту ошибку.

Возможно, вы не обязательно используете psql, поэтому более общий ответ здесь - убедиться, что вы используете совместимый клиент.

richyen
источник
Спасибо огромное! Я использую v11.5 ... Я попытаюсь удалить и переустановить postgress снова.
Нао
Этот ответ привел меня к виновнику в моем случае: у меня было несколько установок PgAdmin, а поиск Windows давал мне только старую установку. Поэтому я использовал старый PgAdmin с Postgres v12.
funforums
17

Для тех, кто использует Postgres в качестве контейнера Docker :

Вместо запуска psql с хоста, запустите его из контейнера, например

docker exec -it postgres_container_name psql your_connection_string

Postgres изображения всегда поставляется с соответствующим-и , таким образом , всегда обновляется-версии PSQL , поэтому вам не придется беспокоиться о том , правильную версию установленной на хост - машине.

Йоаким
источник
Это действительно не соответствует действительности. Вы должны иметь возможность получить доступ к контейнеру самостоятельно.
Джон М
Я не уверен, что означает «независимый доступ к контейнеру» в этом контексте или почему команда в моем ответе почему-то этого не позволяет?
Иоаким
Потому что наличие прямого доступа к контейнеру не всегда возможно. Проблема здесь, кажется, требует отдельной службы postgres. Понижение версии клиента psql или обновление сервера - это решение; не просто обойти проблему и запустить ее вместе. Это не всегда возможно из-за других архитектурных ограничений.
Джон М
Конечно; Я не предлагал использовать Docker в качестве решения . Вот почему я привел фразу «Для тех, кто использует Postgres в качестве контейнера Docker».
Йоаким
Можете ли вы опубликовать пример "your_connection_string"?
Олле Харстедт
2

У меня была эта проблема сегодня, я не смог продолжить работу из-за этого, как ни странно, код приложения работает нормально.

Позже обнаружил, что эта проблема возникает только в том случае, если я использую клиент OmniDb, который я использую для подключения к БД.

Я переключил клиент на pgAdmin 4 по умолчанию, который поставляется с установкой postgres, и проблема больше не возникает. PgAdmin 4. Ссылка: https://www.pgadmin.org/download/pgadmin-4-windows/

Вполне возможно, что клиент OmniDb может быть старше, но нет времени для его устранения, пока что используется pgAdmin 4.

Надеюсь, это поможет.

Манохар Редди Поредди
источник
0

У меня сегодня тоже была такая же проблема. В моем случае проблема была решена, когда я удалил версию 12 и установил версию 11. Кажется, что v12 имеет некоторые функции, которые должны быть созданы вдоль других столбцов.

Данило Силва
источник
Вероятно, вы использовали psqlиз своей установки Postgres 11 для подключения к Postgres 12 - вы должны были использовать psqlдля Postgres 12
a_horse_with_no_name