Jak naprawić błąd „ERROR: kolumna c.relhasoids nie istnieje” w Postgresie?

33

Próbuję utworzyć polecenie UTWÓRZ TABELĘ w Postgresql. Po utworzeniu tabeli, jeśli wprowadzę nazwę tabeli TABLE , to działa.

Ale wciskam \ d nazwę tabeli , poniżej pojawia się błąd.

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

Próbowałem DROP DATABASE nazwa tabeli ponownie utworzyła bazę danych i ponownie utworzyłem tabelę kilka razy. Ale to nie zadziałało.

Wszelkie sugestie będą mile widziane! Dziękuję Ci.

Nao
źródło
Jakiej wersji używasz?
richyen
Zostało rozwiązane! Dziękuję bardzo wszystkim! zlokalizuj pg_hba.conf utworzony Nao Potem działało.
Nao,
Oto proste rozwiązanie, które zadziałało - stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy
Co rozumiesz przez „jeśli wybiję nazwę tabeli TABELI, to zadziała”
Adelin

Odpowiedzi:

30

Jestem w stanie odtworzyć błąd, jeśli korzystam z Postgres v.12 i starszego klienta (v.11 lub wcześniejszego):

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

Wynika to z faktu, że w w. 12 identyfikatory OID tabeli nie są już traktowane jako specjalne kolumny , a zatemrelhasoids kolumna nie jest już potrzebna. Upewnij się, że używasz pliku psqlbinarnego v. 12, aby nie napotkać tego błędu.

Niekoniecznie używasz psql, więc bardziej ogólną odpowiedzią jest upewnienie się, że używasz kompatybilnego klienta.

richyen
źródło
Dziękuję bardzo! Używam wersji 11.5 ... Spróbuję odinstalować i ponownie zainstalować postgress.
Nao
Ta odpowiedź doprowadziła mnie do winowajcy w moim przypadku: mam wiele instalacji PgAdmin, a wyszukiwanie w systemie Windows dawało mi tylko starą. Dlatego korzystałem ze starego PgAdmin z Postgres v12.
funforums
17

Dla każdego, kto używa Postgres jako kontener Docker :

Zamiast uruchamiać psql z hosta, uruchom go z wnętrza kontenera, np

docker exec -it postgres_container_name psql your_connection_string

Obraz Postgres zawsze jest dostarczany z odpowiednią - a więc zawsze aktualizowaną - wersją psql, więc nie musisz się martwić o zainstalowanie poprawnej wersji na komputerze hosta.

joakim
źródło
To naprawdę nie ma sensu. Musisz mieć możliwość niezależnego dostępu do kontenera.
Jon M
Nie jestem pewien, co oznacza „niezależny dostęp do kontenera” w tym kontekście lub dlaczego polecenie w mojej odpowiedzi w jakiś sposób na to nie pozwala?
joakim
Ponieważ konieczność bezpośredniego dostępu do kontenera może nie zawsze być możliwa. Problem wydaje się wymagać osobnej usługi postgres. Obniżenie poziomu klienta psql lub uaktualnienie serwera jest rozwiązaniem; nie tylko omijając problem i uruchamiając go razem. Nie zawsze jest to możliwe z powodu innych ograniczeń architektonicznych.
Jon M
Oczywiście; Nie sugerowałem używania Dockera jako rozwiązania . Dlatego prowadziłem z „Dla każdego, kto korzysta z Postgres jako kontener Docker”.
joakim
Czy możesz podać przykład „twoja_nazwa_ciągania”?
Olle Härstedt
2

Miałem ten problem dzisiaj, nie mogłem kontynuować pracy z tego powodu, co dziwne, kod aplikacji działa dobrze.

Później okazało się, że ten problem występuje tylko wtedy, gdy korzystam z klienta OmniDb, którego używam do łączenia się z bazą danych.

Zmieniłem klienta na domyślny pgAdmin 4, który jest dostarczany z instalacją Postgres i problem już nie występuje pgAdmin 4. Link: https://www.pgadmin.org/download/pgadmin-4-windows/

Możliwe, że klient OmniDb może być starszy, ale nie ma czasu, aby go rozwiązać, używając na razie pgAdmin 4.

Mam nadzieję, że to pomaga.

Manohar Reddy Poreddy
źródło
0

Też miałem dzisiaj ten sam problem. W moim przypadku problem został rozwiązany, gdy usunąłem wersję 12 i zainstalowałem wersję 11. Wydaje się, że wersja 12 ma pewne funkcje, które należy utworzyć wzdłuż innych kolumn.

Danilo Silva
źródło
Prawdopodobnie korzystałeś psqlz instalacji Postgres 11 do łączenia się z Postgres 12 - powinieneś był użyć psqlPostgres 12
a_horse_w_na_nazwa