我在 Debian 操作系统上使用 pgAdmin 4。大约一个月前它运行良好,但今天 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'
这个错误让我耽误了大约两个小时。任何帮助都将不胜感激!
答案1
postgres 错误跟踪器中有一个关于此错误的票据。
问题是由于 python3-psycopg2 造成的。最新的 pgadmin4 版本需要 psycopg2 2.8。但如果您使用的是 Debian/Ubuntu 稳定版,apt 会安装 v2.7。
因此我们需要使用 pip 添加最新版本:
sudo pip3 install -U psycopg2
然后在 pgadmin PythonPath 中添加 /usr/local/lib(并希望它在路径中位于第一个):
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,这不是问题;v2.8 只能通过 /usr/local/lib 访问。
如果您尝试卸载 v2.7 debian 软件包,则依赖于它的其他软件包(例如 QGIS)可能会出现一些问题。
答案2
vidlb 是正确的,我只想补充几个细节:
- 为了安装 psycopg2 2.8,您必须首先卸载 psycopg2 debian 包,这也将卸载 pgadmin4。
sudo apt-get remove --purge psycopg2
sudo pip3 install -U psycopg2
sudo apt install pgadmin4
- 更新 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
答案3
非常感谢 vidlb 和 Quique!
正如 vidlb 上面所述,目前存在与 pgadmin4 的 psycopg2 包相关的错误。如果有人在 Debain 和 Ubuntu 上遇到此问题,请参阅下面有关此错误的链接。警告在查看状态报告之前,您必须拥有一个 Redmine 帐户。
注释 #7 特别为 Debian 和 Ubuntu 用户提供了快速修复。我还从拉紧到破坏者因为拉紧没有对 Python 3.7 的 apt 支持,而且我不想手动安装 Python 更新。
现在一切都很好,加油!
答案4
PgAdmin 4.11 现在依赖于 psycopg2-binary,而不是 psycopg2。您不需要卸载 2.7 以使用 2.8,只需:
pip3 install --user psycopg2-binary