【问题标题】:Importing table from Postgres to MS Access and losing records将表从 Postgres 导入 MS Access 并丢失记录
【发布时间】:2017-12-14 11:16:54
【问题描述】:

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

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

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

其他信息...

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

为什么我会丢失记录,我可以做些什么来解决它?

谢谢

【问题讨论】:

标签: database postgresql ms-access


【解决方案1】:

如果您尝试一次从数据库中“吞食”所有记录,则 ODBC 驱动程序将在某个时候停止获取并返回它所拥有的内容而不会发出警告。它很烦人。据我所知,这与 32 位限制无关。

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

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

您还可以对特定查询中的连接字符串进行一次性编辑。您可以添加以下内容来完成这项工作:

UseDeclareFetch=1;Fetch=25000;

【讨论】:

    猜你喜欢
    • 2017-01-08
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多