将表从Postgres导入MS Access并丢失记录

时间:2017-12-14 11:16:55

标签: database postgresql ms-access

我有一个包含近700,000条记录的postgres表,我将该表导入MS访问(通过ODBC数据源),最终只有250,000条记录。

我从一个空的MS访问数据库(520千字节)开始。选择(外部数据)/(新数据源)/(来自其他来源)/(ODBC数据库)/(导入源数据)/(机器数据源)我选择我的ODBC postgres数据库,然后选择我想要的表,等待30秒后,我收到一个消息框,说明所有对象都已成功导入,然后询问我是否要保存导入步骤。

没有错误消息,但我的MS访问版本表中的行数约为250,000。

其他信息......

  • 我正在使用MS Office 365版本1710
  • 我正在使用postgres 9.5.7
  • 我使用PostgrSQL ANSI ODBC驱动程序(不确定哪个版本)
  • 没有任何错误消息(或警告)的迹象。
  • 导入后,Access数据库仍然只有375 MB,远远低于2 GB的限制。
  • 我已检查过ODBC数据源'应用程序检查postgres ODBC链接的配置方式,没有明显的问题。
  • 导入后MS访问权限给我的最后一条消息包括'导入的所有对象没有错误'
  • 正在通过的记录与不正常的记录之间没有明显的区别。

为什么我会丢失记录,我该怎么做才能治愈它?

由于

1 个答案:

答案 0 :(得分:0)

如果您一次尝试从数据库中“覆盖”所有记录,则ODBC驱动程序将在某个时刻停止提取并在没有警告的情况下返回它所拥有的内容。它很烦人。据我所知,这与32位限制无关。

解决此问题的方法是不要一次获取所有记录,而是使用驱动程序上的declare / fetch选项。您可以在ODBC设置上永久执行此操作,方法是转到ODBC属性,选择“数据源”,然后选择“页面2”,检查“使用声明/提取”并设置缓存(行数)大小。我推荐一个介于5,000到50,000之间的数字。每个批次代表对数据库的命中,因此您希望它开始时相当大。

从所有实际目的来看,使用declare / fetch对您的应用程序完全透明。你甚至都不会注意到。您将在数据库管理员端,但如果您的提取大小足够大,则不会出现问题。

enter image description here

enter image description here

您还可以对特定查询的连接字符串进行一次性编辑。您可以添加以下内容以使其工作:

UseDeclareFetch=1;Fetch=25000;