【问题标题】:Convert Access to PostgreSQL?将访问转换为 PostgreSQL?
【发布时间】:2009-03-12 02:11:35
【问题描述】:

一个客户的 Access 数据库已经超出了他们的规模,现在我需要将其转换为 PostgreSQL。我没有太多的 Access 经验,所以乍一看似乎最好的解决方案是使用文本文件或其他东西导出数据。

对于将 DDL 和数据从 Access 中取出并转化为真实内容的简单方法,有人有什么好的建议吗?

【问题讨论】:

标签: postgresql


【解决方案1】:

基于 http://www.postgresonline.com/journal/archives/24-Using-MS-Access-with-PostgreSQL.html,但针对 Access 2019 进行了更新,提供了更多详细信息:

  1. 安装 PostgreSQL ODBC 驱动程序。

    1. 您可能已经从installing PostgreSQL 安装了它。如果没有,您可以从https://www.postgresql.org/ftp/odbc/versions/msi/ 安装它们。
    2. 如果您的 Access 是 32 位,则应安装 32 位驱动程序,如果 Access 是 64 位,则应安装 64 位驱动程序。您可以通过文件 > 帐户 > 关于 Access 来查看 Access 是 32 位还是 64 位。
    3. 在安装新版本之前卸载旧版本的 PostgreSQL 驱动程序。
    4. 请参阅Setting up PostgreSQL ODBC on Windows 了解更多提示。
  2. 外部数据 > 新数据源 > 来自其他来源 > ODBC 数据库。键盘快捷键是 Alt > X > N1 > T > C。

  3. 选择通过创建链接表链接到数据源,然后按确定

  4. 点击 DSN 名称旁边的新建...

  5. 如果您的数据库是 UTF-8 或非拉丁编码,请选择 PostgreSQL Unicode。如果您的数据库编码是 SQL_ASCII、EUC_JP、BIG5、Shift-JIS 或 LATIN 字符集,请选择 PostgreSQL ANSI。由 Access 2000 或更高版本创建的数据库采用 UTF-8 格式。如果 Access 是 64 位,请选择 64 位版本。点击下一步>

  1. 如对话框所述,“输入您要将连接保存到的文件数据源的名称。或者,通过单击浏览找到要保存到的位置。”点击下一步>。点击完成

  2. 填写数据库、服务器、端口、用户名和密码字段。

  3. 点击Connection并取消选中Bools as char

  1. 点击Page 2,勾选True is -1,取消勾选Updatable Cursors。点击确定。点击确定

  2. 如果您收到“无法使用输入的文件数据源参数建立连接”的错误消息,请从“开始”菜单打开 ODBC 数据源(64 位)(或 Windows 7 或更早版本的控制面板中的 ODBC 管理员),单击 添加...,选择 PostgreSQL Unicode(x64),单击 完成,输入数据库的详细信息,然后点击Test

  1. 选择新创建的 .dsn 文件并点击确定。
  1. 现在选择您想要的表格并点击保存密码。如果您缺少表上的主键,Access 将提示您输入要用作主键的字段或字段集。这不会对实际表进行任何结构更改,但在链接结构中,Access 会假装这是主键并相应地将其用于表更新等。这对于不存在主键概念并且您希望可更新视图可从 Access 更新的视图特别有用。如果您对问题单击“确定”或“取消”而不选择一组字段,则该表将被标记为只读,这是许多报告视图的理想行为。

将数据从 Access 表导出到 PostgreSQL:

  1. 选择表格。

  2. 将表重命名为您想要的名称。

  1. 确保您在 Postgres 中使用的用户的默认架构是您要将数据导出到的架构。
  1. 外部数据 > 更多(在导出部分)> ODBC 数据库,然后选择您创建的 DSN。
    1. 这里有个问题是 PostgreSQL 将维护表中字段的大小写和表名,因此最好先将所有字段重命名为小写,这样您就不必在每次使用时都引用它们.

【讨论】:

    【解决方案2】:
    • 在 Windows 计算机上安装 Postgres ODBC 驱动程序。
    • 为您的新数据库创建一个带有“PostgreSQL Unicode”驱动程序的数据源
    • 对于每个表:
      • 使用“文件 -> 导出”选择类型“ODBC 数据库”
      • 确认表名
      • 选择“计算机数据源”
      • 选择您的数据源

    如果您没有太多桌子,效果很好。我需要自动执行此操作,因此我创建了一个 VBS 脚本,它会在适当的时间发出键盘敲击,如下所示:

    set shell=CreateObject("Wscript.Shell")
    shell.Run("db1.mdb")
    WScript.Sleep(5000);
    
    shell.sendkeys("tablename1");
    WScript.Sleep(1000);
    shell.sendkeys("%fx"); ' Menu File, Export
    WScript.Sleep(1000);
    shell.sendkeys("%todbc"); ' Type: ODBC Databases
    shell.sendkeys("~"); ' Enter
    

    等等

    【讨论】:

      【解决方案3】:

      您应该能够编写一些可以使用 ODBC 或其他东西看到它们的东西,但如果失败了,您可以使用 dump it to a text file 或使用 a commercial tool

      【讨论】:

        【解决方案4】:

        这是一个很久没有更新的旧脚本,但我用于类似目的:http://code.activestate.com/recipes/52267/

        另一个商业选项:http://www.datanamic.com/dbzipper/index.html

        【讨论】:

          【解决方案5】:

          Access 是一个很棒的程序,但由于无法轻松导出或连接到外部 ODBC 源而受到阻碍。

          使用 ODBC 驱动程序是理想的,但设置看起来有点令人生畏。

          所以我只是将表格一一导出为 CSV 文件,然后通过 DBeaver 将每个表格导入 Postgres 数据库,这是一个非常好的免费数据库管理工具 - 在这里查看 - https://dbeaver.io

          【讨论】:

            猜你喜欢
            • 2014-11-25
            • 2021-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-17
            • 2016-12-24
            • 1970-01-01
            • 2014-01-21
            相关资源
            最近更新 更多