web-dev-qa-db-ja.com

pgAdmin 4の原因不明のエラー

Debian OSでpgAdmin 4を使用しています。約1か月前は問題なく動作していましたが、今日ではSQLクエリツールが不可解なエラーメッセージ「table_oid」を表示しています。右クリックメニューの[データの表示/編集]オプションは、psqlコマンドラインからクエリを実行するのと同様に正常に機能します。サーバー接続を削除して再起動してみましたが、役に立ちませんでした

Pgadmin4.logファイルには、このエラーステートメントが数回含まれています。

2019-07-26 16:12:17,304: ERROR  pgadmin:    'table_oid'
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/lib/python3/dist-packages/flask_login/utils.py", line 228, in decorated_view
    return func(*args, **kwargs)
  File "/usr/share/pgadmin4/web/pgadmin/tools/sqleditor/__init__.py", line 432, in poll
    trans_obj.check_updatable_results_pkeys()
  File "/usr/share/pgadmin4/web/pgadmin/tools/sqleditor/command.py", line 899, in check_updatable_results_pkeys
    is_query_resultset_updatable(conn, sql_path)
  File "/usr/share/pgadmin4/web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py", line 38, in is_query_resultset_updatable
    table_oid = _check_single_table(columns_info)
  File "/usr/share/pgadmin4/web/pgadmin/tools/sqleditor/utils/is_query_resultset_updatable.py", line 61, in _check_single_table
    table_oid = columns_info[0]['table_oid']
KeyError: 'table_oid'

このエラーにより、約2時間前に戻りました。どんな助けでも大歓迎です!

9
Arban Nichols

このエラーに関するチケットは、postgresバグトラッカーに存在します。
問題はpython3-psycopg2が原因です。最新のpgadmin4バージョンにはpsycopg2 2.8が必要です。しかし、Debian/Ubuntuの安定版を使用している場合、aptはv2.7をインストールしました。
したがって、pipを使用して最新バージョンを追加する必要があります。

Sudo pip3 install -U psycopg2

次に、/ usr/local/libをpgadmin PythonPathに追加します(パスの最初になることを願っています)。

nano ~/.config/pgadmin/pgadmin4.conf # or with a right click on the system tray icon
# add /usr/local/lib/python3.7/dist-packages to the PythonPath.

別のバージョンのPythonを使用している場合は、このパスを変更する必要があります。
お役に立てれば。

編集(Quique応答を読んだ後):
psycopg2の2つのバージョンがある場合、これは問題ではありません。 v2.8には/ usr/local/libからのみアクセスできます。
v2.7 debianパッケージをアンインストールしようとすると、それに依存する他のパッケージ(QGISなど)で問題が発生する可能性があります。

6
vidlb

vidlbは適切です。いくつかの詳細を追加します。

  1. を使用してpsycopg2 2.8をインストールするには、最初にpsycopg2 debianパッケージをアンインストールする必要があります。これにより、pgadmin4もアンインストールされます。
Sudo apt-get remove --purge psycopg2
Sudo pip3 install -U psycopg2
Sudo apt install pgadmin4
  1. Pythonパスを更新する最も簡単な方法は、pgadminシステムトレイアイコンをマウスの右ボタンでクリックし、[構成...]を選択することです。Python =タブ、Pythonパスボックスに/usr/local/lib/python3.6/dist-packages(またはシステムの正しいパス)。または、~/.config/pgadmin/pgadmin4.confのようになります
[General]
ApplicationPath=
BrowserCommand=
FixedPort=false
PortNumber=1
PythonPath=/usr/local/lib/python3.6/dist-packages
5
Quique

PgAdmin 4.11は、psycopg2ではなくpsycopg2-binaryに依存するようになりました。 2.8の場合、2.7をアンインストールする必要はありません。

pip3 install --user psycopg2-binary
2
RLee

VidlbとQuiqueに感謝します。

Vidlbが前述したように、現在pgadmin4のpsycopg2パッケージに関連するバグがあります。 DebainとUbuntuでこの問題に問題がある場合は、このバグについて下記のリンクを参照してください。 警告ステータスレポートを表示する前に、Redmineのアカウントを持っている必要があります。

Bug#452

特に注7には、DebianおよびUbuntuユーザー向けのクイックフィックスがあります。 stretchからbusterにも更新しました(stretchにはaptがないためPython 3.7のサポート。Pythonアップデートを手動でインストールする気がありませんでした。

これですべてうまくいきました、乾杯!

2
Arban Nichols