【发布时间】:2009-03-12 02:11:35
【问题描述】:
一个客户的 Access 数据库已经超出了他们的规模,现在我需要将其转换为 PostgreSQL。我没有太多的 Access 经验,所以乍一看似乎最好的解决方案是使用文本文件或其他东西导出数据。
对于将 DDL 和数据从 Access 中取出并转化为真实内容的简单方法,有人有什么好的建议吗?
【问题讨论】:
标签: postgresql
一个客户的 Access 数据库已经超出了他们的规模,现在我需要将其转换为 PostgreSQL。我没有太多的 Access 经验,所以乍一看似乎最好的解决方案是使用文本文件或其他东西导出数据。
对于将 DDL 和数据从 Access 中取出并转化为真实内容的简单方法,有人有什么好的建议吗?
【问题讨论】:
标签: postgresql
基于 http://www.postgresonline.com/journal/archives/24-Using-MS-Access-with-PostgreSQL.html,但针对 Access 2019 进行了更新,提供了更多详细信息:
安装 PostgreSQL ODBC 驱动程序。
外部数据 > 新数据源 > 来自其他来源 > ODBC 数据库。键盘快捷键是 Alt > X > N1 > T > C。
选择通过创建链接表链接到数据源,然后按确定。
点击 DSN 名称旁边的新建...
如果您的数据库是 UTF-8 或非拉丁编码,请选择 PostgreSQL Unicode。如果您的数据库编码是 SQL_ASCII、EUC_JP、BIG5、Shift-JIS 或 LATIN 字符集,请选择 PostgreSQL ANSI。由 Access 2000 或更高版本创建的数据库采用 UTF-8 格式。如果 Access 是 64 位,请选择 64 位版本。点击下一步>。
如对话框所述,“输入您要将连接保存到的文件数据源的名称。或者,通过单击浏览找到要保存到的位置。”点击下一步>。点击完成。
填写数据库、服务器、端口、用户名和密码字段。
点击Connection并取消选中Bools as char。
点击Page 2,勾选True is -1,取消勾选Updatable Cursors。点击确定。点击确定。
如果您收到“无法使用输入的文件数据源参数建立连接”的错误消息,请从“开始”菜单打开 ODBC 数据源(64 位)(或 Windows 7 或更早版本的控制面板中的 ODBC 管理员),单击 添加...,选择 PostgreSQL Unicode(x64),单击 完成,输入数据库的详细信息,然后点击Test。
- 现在选择您想要的表格并点击保存密码。如果您缺少表上的主键,Access 将提示您输入要用作主键的字段或字段集。这不会对实际表进行任何结构更改,但在链接结构中,Access 会假装这是主键并相应地将其用于表更新等。这对于不存在主键概念并且您希望可更新视图可从 Access 更新的视图特别有用。如果您对问题单击“确定”或“取消”而不选择一组字段,则该表将被标记为只读,这是许多报告视图的理想行为。
将数据从 Access 表导出到 PostgreSQL:
选择表格。
将表重命名为您想要的名称。
- 确保您在 Postgres 中使用的用户的默认架构是您要将数据导出到的架构。
- 这里有个问题是 PostgreSQL 将维护表中字段的大小写和表名,因此最好先将所有字段重命名为小写,这样您就不必在每次使用时都引用它们.
【讨论】:
如果您没有太多桌子,效果很好。我需要自动执行此操作,因此我创建了一个 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
等等
【讨论】:
您应该能够编写一些可以使用 ODBC 或其他东西看到它们的东西,但如果失败了,您可以使用 dump it to a text file 或使用 a commercial tool。
【讨论】:
这是一个很久没有更新的旧脚本,但我用于类似目的:http://code.activestate.com/recipes/52267/
【讨论】:
Access 是一个很棒的程序,但由于无法轻松导出或连接到外部 ODBC 源而受到阻碍。
使用 ODBC 驱动程序是理想的,但设置看起来有点令人生畏。
所以我只是将表格一一导出为 CSV 文件,然后通过 DBeaver 将每个表格导入 Postgres 数据库,这是一个非常好的免费数据库管理工具 - 在这里查看 - https://dbeaver.io。
【讨论】: