You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Postgres-FDW连接Access时出现Error 3073:操作需用可更新查询

解决Access更新PostgreSQL FDW外部表时的Error 3073问题

以下是针对该问题的具体解决方法,按优先级排序:

1. 确保Access识别到表的主键

Access的可更新查询依赖明确的主键来定位行,而FDW外部表默认可能不会被Access自动识别主键:

  • 在Access中右键点击链接的my_tbl,选择设计视图,选中id字段,点击工具栏的主键图标(钥匙形状),手动设置主键。
  • 如果Access不允许在设计视图修改,可在PostgreSQL端为外部表添加主键约束(需确保底层远程表已有主键):
    ALTER TABLE my_tbl ADD CONSTRAINT pk_my_tbl PRIMARY KEY (id);
    

2. 使用直通查询(Pass-Through Query)绕过Access的查询解析

Access会对本地SQL查询做语法转换,可能与PostgreSQL FDW的兼容性冲突,直通查询会直接将SQL发送给PostgreSQL执行:

  • 在Access中新建查询,切换到SQL视图,点击设计选项卡中的「直通」按钮(图标为数据库+闪电)。
  • 输入以下语句并执行:
    UPDATE my_tbl SET my_column = NULL WHERE id = 1337;
    

3. 检查并更新PostgreSQL ODBC驱动

旧版本的psqlODBC驱动对FDW表的更新支持不完善:

  • 下载并安装最新版的PostgreSQL ODBC驱动。
  • 在ODBC数据源配置的「高级」标签中,尝试调整以下参数:
    • 关闭Use Declare/Fetch选项。
    • 将Protocol设置为7.4+或更高版本。

4. 验证FDW外部表的可更新配置

确保PostgreSQL端的FDW外部表未被设置为只读:

  • 检查外部表定义,确认创建时未添加READ ONLY属性:
    SELECT relname, reloptions FROM pg_class WHERE relname = 'my_tbl';
    
  • 若存在read_only=true,则重新创建外部表并移除该属性。

5. 确认数据库用户权限

确保Access使用的PostgreSQL用户拥有my_tbl的UPDATE权限:

GRANT UPDATE ON my_tbl TO your_access_db_user;

内容的提问来源于stack exchange,提问作者octavio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:17:21