Як виправити "ПОМИЛКА: стовпчик c.relhasoids не існує" в Postgres?


33

Я намагаюся створити команду TABLE в Postgresql. Після створення таблиці, якщо я пробиваю в назві таблиці TABLE , вона працює.

Але я забиваю \ n ім'я таблиці , я постійно отримую помилку нижче.

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

Я спробував DROP DATABASE ім'я таблиці відтворив базу даних і знову відтворив таблицю. Але це не спрацювало.

Будь-які пропозиції будуть вдячні! Дякую.


Яку версію ви використовуєте?
richyen

Це було вирішено! Дякую вам всім! Знайдіть pg_hba.conf створенийb Nao, тоді він працював.
Нао

Просте рішення , яке працювало тут - stackoverflow.com/a/58462270/984471
Манохар Редді Poreddy

Що ви маєте на увазі під "якщо я пробиваю ім'я таблиці ТАБЛИЦІ, це працює".
Аделін

Відповіді:


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стовпець більше не потрібен. Переконайтеся, що ви використовуєте psqlдвійковий код проти 12, щоб ви не стикалися з цією помилкою.

Можливо, ви не обов'язково використовуєте psql, тому більш загальна відповідь тут - переконатися, що ви використовуєте сумісний клієнт.


Дуже дякую! Я використовую v11.5 ... Спробую ще раз видалити та перевстановити постгрес.
Нао

Ця відповідь привела мене до винуватця у моєму випадку: у мене є декілька інсталяцій PgAdmin, і пошук у Windows дав мені лише стару. Тому я використовував старий PgAdmin з Postgres v12.
funforums

17

Для всіх, хто працює з Postgres як контейнер Docker :

Замість запуску psql від хоста, запустіть його всередині контейнера, наприклад

docker exec -it postgres_container_name psql your_connection_string

Зображення Postgres завжди поставляється з відповідною (і, таким чином, завжди оновленою) версією psql, тому вам не доведеться турбуватися про встановлення правильної версії на хост-машині.


Це дійсно не вистачає суті. Потрібно мати можливість самостійно отримати доступ до контейнера.
Джон М

Я не впевнений, що означає «незалежний доступ до контейнера» в цьому контексті чи чому команда у моїй відповіді якимось чином не дозволяє цього?
joakim

Тому що необхідність безпосередньо отримати доступ до контейнера може бути не завжди можливою. Здається, проблема тут вимагає окремої послуги postgres. Пониження рівня клієнта psql або оновлення сервера - це рішення; а не просто обійти проблему і запустити її разом. Це не завжди можливо через інші архітектурні обмеження.
Джон М

Звичайно; Я не пропонував використовувати Докер як рішення . Ось чому я попросив “Для всіх, хто працює з Postgres як контейнер Docker”.
joakim

Чи можете ви опублікувати приклад "your_connection_string"?
Olle Härstedt

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.