通过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
相关产品推荐
相关产品推荐

