Navicat 连接 pgsql 报错: 字段“datlastsysoid“不存在LINE 1: SELECT DISTINCT datlastsysoid FROM pg database

问题分析

        Postgres 15 从pg_database表中删除了 datlastsysoid 字段引发此错误。

解决方案

    方法1:升级navicat

    方法2:降级pgsql

    方法3:修改dll

修改dll 操作:

        1、 打开 Navicat 安装目录,找到libcc.dll文件

        

        2、备份libcc.dll文件,将其复制并粘贴为“libcc.dll.bf”或任何其他名称                    

        3、使用在线工具,  HexEd.it - Browser-based Online and Offline Hex Editing

        4、在文件中搜索“SELECT DISTINCT datlastsysoid”,并将其替换为“SELECT DISTINCT dattablespace”

修改

        5、将另报错,放到 Navicat 安装目录下

        6、重启navicat,可以发现,无论老和新版本的pgsql,都可以正常访问了
 

### 解决方案概述 当使用 Navicat 15 连接到 PostgreSQL 17 版本时,可能会因为 `datlastsysoid` 字段被移除而触发错误。以下是详细的解决方案。 --- #### 方法一:升级 Navicat 到最新版本 Navicat 的较新版本已经修复了与 PostgreSQL 高版本兼容性的问题。建议将 Navicat 升级至至少 v16 或更高版本[^4]。 通过这种方式可以避免手动修改配置文件或 DLL 文件的风险,并获得更好的性能和支持。 --- #### 方法二:降级 PostgreSQL 至较低版本 如果无法立即升级 Navicat,则可以选择安装一个支持 `datlastsysoid` 字段的 PostgreSQL 较低版本(如 PostgreSQL 12)。需要注意的是,这种方法可能会影响数据库的功能特性以及安全性改进[^3]。 --- #### 方法三:修改 Navicat 的核心库 (DLL 文件) 对于希望继续使用 Navicat 15 和 PostgreSQL 17 的用户来说,可以通过修改 Navicat 的核心动态链接库 (`libcc.dll`) 来解决问题: 1. **定位 libcc.dll 文件** - 找到 Navicat 的安装目录下的 `libcc.dll` 文件。 2. **备份原始文件** - 创建一份副本并将它重命名为 `libcc.dll.bak`,以便在出现问题时能够恢复原状。 3. **编辑 DLL 文件** 使用十六进制编辑器(推荐工具如 HxD 或在线工具 https://hexed.it/),打开 `libcc.dll` 并执行以下操作: - 搜索字符串 `"SELECT DISTINCT datlastsysoid"`。 - 替换为 `"SELECT DISTINCT dattablespace"`。 - 注意保持 SQL 查询语法的一致性和完整性。 4. **保存更改后的文件** - 如果遇到权限问题,可先将文件另存为 `.txt` 格式再覆盖原有文件。 5. **测试连接** - 启动 Navicat 并重新尝试连接 PostgreSQL 数据库,验证是否解决了该问题。 > 提醒:此方法涉及对系统文件的手动调整,存在一定风险,请谨慎操作并做好数据保护措施[^4]。 --- #### 示例代码片段 以下是针对 `libcc.dll` 中 SQL 查询语句的具体修改方式展示: ```sql -- 原始查询语句 SELECT DISTINCT datlastsysoid FROM pg_database; -- 修改后的查询语句 SELECT DISTINCT dattablespace FROM pg_database; ``` --- ### 总结 以上三种方法均可有效解决由于 `datlastsysoid` 被移除而导致的连接失败问题。优先考虑升级 Navicat 是最简单可靠的选择;若受限于环境条件,则可通过降级 PostgreSQL 或者修改 Navicat 动态库来实现目标。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值