Postgresで「エラー:列c.relhasoidsが存在しない」を修正する方法


33

PostgresqlでCREATE TABLEコマンドを作成しようとしています。テーブルを作成した後、TABLE table nameをパンチインすると機能します。

しかし、私は\ d table nameをパンチインします、以下のエラーが出ます。

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

DROP DATABASE テーブル名でデータベースを再作成し、テーブルを数回再作成しようとしました。しかし、それはうまくいきませんでした。

任意の提案をいただければ幸いです!ありがとうございました。


どのバージョンを使用していますか?
richyen

解決しました!本当にありがとうございました!pg_hba.conf createdb Naoを見つけてください。
Nao、

-ここで働いていたシンプルなソリューションstackoverflow.com/a/58462270/984471
ManoharさんレディPoreddy

「TABLEテーブル名をパンチインしても機能する」とはどういう意味ですか
Adelin

回答:


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

これは、v。12では、テーブルOIDが特別な列として扱われなくなったため、relhasoids列が不要になったためです。psqlこのエラーが発生しないように、v。12 バイナリを使用していることを確認してください。

必ずしも使用しているpsqlとは限らないため、ここでのより一般的な答えは、互換性のあるクライアントを使用していることを確認することです。


どうもありがとうございます!私はv11.5を使用しています... postgressをアンインストールして再インストールしてみます。
Nao、

私の場合、この回答が原因を突きつけました。複数のPgAdminインストールがあり、Windows検索で古いものを使用するだけでした。したがって、私はPostgres v12で古いPgAdminを使用していました。
funforums

17

PostgresDockerコンテナとして実行している人のために:

ホストからpsqlを実行する代わりに、コンテナ内から実行します。

docker exec -it postgres_container_name psql your_connection_string

Postgresのの対応-ので、常に更新され、バージョンと画像は常に船psqlのホスト・マシンにインストールされている正しいバージョンを持っていることについて心配する必要はありませんので。


それは本当にポイントを逃しています。コンテナに個別にアクセスできる必要があります。
Jon M

このコンテキストで「コンテナに個別にアクセスする」とはどういう意味か、または返信のコマンドがなぜそれを許可していないのかわかりません。
joakim

コンテナに直接アクセスする必要があることは必ずしも可能ではないからです。ここでの問題は、別個のpostgresサービスを必要とするようです。psqlクライアントのダウングレード、またはサーバーのアップグレードが解決策です。単に問題を回避して一緒に実行するだけではありません。他のアーキテクチャ上の制約により、これが常に可能であるとは限りません。
Jon M

もちろん; Docker をソリューションとして使用することはお勧めしませんでした。それが私が「PostgresをDockerコンテナとして実行している人のために」を導いた理由です。
joakim

「your_connection_string」の例を投稿していただけますか?
OlleHärstedt

2

今日、この問題が発生しました。これが原因で作業を続行できませんでした。不思議なことに、アプリケーションコードは正常に機能しています。

後で、この問題は、DBへの接続に使用するOmniDbクライアントを使用している場合にのみ発生していることがわかりました。

クライアントをデフォルトのpgAdmin 4に切り替えました。これはpostgresのインストールに付属しており、問題はもう発生していません。pgAdmin4リンク:https ://www.pgadmin.org/download/pgadmin-4-windows/

OmniDbクライアントは古い可能性がありますが、今のところpgAdmin 4を使用してトラブルシューティングする時間はありません。

お役に立てば幸いです。


0

今日も同じ問題がありました。私の場合、バージョン12を削除してバージョン11をインストールしたときに問題は解決しました。v12には、他の列に沿って作成する必要があるいくつかの機能があるようです。


psqlPostgres 11からPostgres 12に接続するために使用している可能性がありますpsql
-Postgres

0

私も同じ問題を抱えていました。しかし、私は最新のビルドを14/10/2019にダウンロードすることによって解決策を見つけましたリンクに従ってください:https ://postbird.paxa.kuber.host/2019_10_14.06_42-master-7a9e949

それが役に立てば幸い

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.