PostgreSQL视图在Access中返回重复数据问题求助
问题:Access查询PostgreSQL视图返回重复数据
环境信息
- Postgres v9.4
- MS-Access 365 v2303
- PostgreSQL Unicode驱动v13.02
- 连接参数:
PORT=5432;A1=7.4-1;B0=255;B1=8190;B6=0;C2=dd_
查询结果对比
在PostgreSQL中
- 查询
Deposits表:
返回5条不同的正确数据。SELECT * FROM "Deposits" WHERE "Deposit_Slip_Number"='2305-6'; - 查询
vw_rptDeposits_OnBankStatement视图:
返回15条不同的正确数据。SELECT * FROM "vw_rptDeposits_OnBankStatement" WHERE "Deposit_Slip_Number"='2305-6';
在Access中
- 查询
Deposits直通表:
返回5条不同的正确数据。SELECT * FROM Deposits WHERE Deposit_Slip_Number='2305-6'; - 查询
vw_rptDeposits_OnBankStatement直通视图:
返回15条数据,但全部与第一条重复,数据异常。SELECT * FROM vw_rptDeposits_OnBankStatement WHERE Deposit_Slip_Number='2305-6';
已排查操作
- 重启机器、Postgres服务
- 更换Postgres服务器
- 确认驱动未更新,仅修改过该视图,其他视图显示正常,所有表/视图均为无DNS的代码链接直通对象
可能的原因及解决方法
视图缺少唯一标识字段
Access的ODBC直通视图需要明确的唯一主键或唯一标识字段来区分每条记录。如果PostgreSQL视图未返回唯一标识字段,Access会重复填充第一条记录到所有行。- 解决:修改PostgreSQL视图,确保返回包含唯一标识的字段(如原表主键列),且该字段在视图结果集中保持唯一。
ODBC驱动与视图的兼容性问题
当前使用的PostgreSQL驱动v13.02与Postgres v9.4可能存在视图字段解析的兼容性问题,尤其是视图包含复杂关联、聚合或特殊字段类型时。- 解决:
- 给视图中所有字段显式指定别名,避免字段名冲突或类型模糊;
- 检查视图中是否存在Access无法识别的PostgreSQL特定字段类型,转换为通用类型(如
TEXT、INT); - 测试升级/降级驱动版本(需兼容Postgres v9.4),匹配数据库与驱动的版本适配性。
- 解决:
视图SQL逻辑的ODBC解析异常
由于仅修改过该视图,需排查视图的关联、分组等逻辑是否使用了Access ODBC不支持的PostgreSQL特定语法,导致结果集被错误处理。- 解决:简化视图SQL,逐步移除复杂逻辑(如多表关联、子查询),每一步测试Access查询结果,定位到导致重复的具体逻辑后,调整为Access ODBC兼容的写法。
内容的提问来源于stack exchange,提问作者BWhite
相关产品推荐
相关产品推荐

