Microsoft Access 到 PostgreSQL 转换
作者:Jon Hutchings 2001年7月20日
简介
本页面旨在作为将 MS Access 数据库转换为 PostgreSQL 数据库使用的快速用户指南。希望读者对 Access 和 PostgreSQL 有一定的了解,本文件并非旨在作为这些系统使用指南。
阶段 1 - 在运行 MS Access 的工作站上
转换过程的第一步是下载 PostgreSQL 上移工具。可以从作者网站获得。我强烈建议您阅读作者的文档,并注意下面列出的此工具的局限性。
此工具采用 MS Access 97 数据库的形式。
打开后,主屏幕 (frmmain) 有一些与 SQL 转换相关的选项。
选择要转换的数据库,使用“分析”功能分析它,并修改需要更改的任何参数。
务必填写 SQL 数据库名称字段,其中包含您希望为最终的 postgres 数据库指定的名称,否则您以后需要做更多工作。
选中“导出数据”选项以将数据迁移 - 必要时修改“杂项选项”部分中的文件位置。
使用“创建 SQL”生成 SQL 文件,然后“导出 SQL”。这将在 pgupt 内的“杂项”选项卡指定的目录中放置阶段 2 所需的所有文件。
将这些文件通过 FTP 传输到 postgres 服务器上的适当空目录中。
阶段 2 - 在运行 PostgreSQL 的 Linux 服务器上
登录到您的服务器,并更改到您已上传文件的目录。
如果您没有在早期指定数据库名称,则在继续之前必须执行以下操作:
- 编辑 loadd.sh 文件(例如,joe loadd.sh 将在 joe 编辑器中打开文件)。
- 将文件中所有对“test”的引用更改为要为数据库指定的名称。
- 提示 - 不要在数据库名称中包含非字母数字字符(即,不要使用 -_ '?/!"\| 等)。
- 保存并关闭文件。
- 打开 create_schema.sql 文件并检查表结构。确保字段名和数据类型正确。
发出以下命令使 loadd.sh 可执行:
chmod u+x loadd.sh
在 shell 提示符处使用以下命令执行 loadd.sh 脚本。
./loadd.sh 2> output1
这将执行脚本并将错误和输出放置在一个名为 output1 的文件中。如果一切正常,屏幕应该显示数据库中每个表的 CREATE 语句。如果您只看到两个 CREATE 语句,而您有三个表,则其中一个表尚未转换。在这种情况下,检查日志文件(在本例中为 output1)以了解详细信息。一个常见的原因是使用 SQL 保留字命名表或字段。有关这些保留字的列表,请参阅您版本的 postgres 的 Postgresql 文档。
警告:在成功转换数据库并投入使用后,您不应该重新运行此脚本,因为它会将您的数据库重新初始化为转换时的状态。我建议您在数据库工作后,删除 loadd.sh 脚本上的执行权限,以防止意外执行。
阶段 3 - 在服务器控制台中测试您的数据库
确定转换成功后,您可以通过以通常的方式使用 Postgresql 监控器连接到数据库来测试您的数据库。例如,如果您将数据库命名为“customerdata”,则可以使用
psql customerdata
在 Linux postgres 服务器上的 shell 提示符处连接(您可能需要其他命令行选项来输入用户名和密码等)。连接后,您应该使用\dt命令来显示表列表,并将其与源数据库进行比较。如果这些看起来正确,请尝试一些简单的查询,例如
select * FROM <tablename> ;
这将(以一定速度!)显示所有记录,但更有用的是,您将在最后获得该表的记录计数,您可以将其与之比较以确保所有数据都已正确转换。
阶段 4 - ODBC 配置
如果您希望继续使用 Microsoft Access 97 与转换后的数据库进行交互,您将需要在客户端 PC(s) 上设置合适的 ODBC 驱动程序和数据源。
第一步是下载 PostgreSQL ODBC 驱动程序。可以从PostgreSQL ODBC 网站获得。
安装完成后,使用 Windows 9x/NT 4.0/Windows 2000 PC 上的 ODBC 控制面板添加新的用户 DSN 或用户数据源。选择 PostgreSQL 驱动程序,并使用服务器名称、端口、数据库名称、用户名和密码填写详细信息,以连接到您的 postgresql 服务器。
阶段 5 - MS Access 配置
要创建基于 Microsoft Access 的前端以连接到新创建的 PostgreSQL 数据库,请执行以下操作:
复制您的原始 Access 数据库。
在 Microsoft Access 中打开它。
选择“表”选项卡。
选择“新建”。
选择“链接表”。
在“文件类型”列表中选择 ODBC 数据库。
在数据源对话框中找到您之前创建的数据源(在 NT 4.0 上,这通常位于“机器数据源”选项卡上)。
选择要链接的表。
链接完成后,您可以随意删除旧的本地表并压缩数据库。
注意 - 如果任何字段名在转换过程中发生了更改(通常是由于在字段名和表名中使用了非字母字符),那么您的查询、窗体和报表等将需要更新以反映这一点。
局限性
首先,我只在 Postgres 6.5.3 和 Access 97 上测试了此脚本,其他组合可能有效,但未经我测试。
其次,此工具存在一些局限性,我已经发现了,这些是:
- 该工具期望至少存在一个关系,因此简单的单表数据库转换将失败。
- 该工具假设您将使用标准的 postgesql 服务器端口。
- 使用此工具,可能会生成超过 32 个字符的触发器和函数名称,这会导致 postgresql 出现一些问题。
扩展链接
- ESF 数据库迁移工具包 使用向导将数据从 MS Access 迁移到 PostgreSQL。
- Full Convert 通过 ODBC 在 Microsoft Access、dBase、FoxPro、Microsoft Excel、Firebird、Interbase、MySQL、Oracle、Paradox、Microsoft SQL Server、PostgreSQL、SQL Server、SQL Server Azure、SQL Server Compact(SQLCE)、SQLite、分隔文本文件 (CSV)、XML 和更多之间进行数据库转换和同步。
- DBConvert/DBSync for Access and PostgreSQL 在 MS Access 和 PostgreSQL 之间迁移/同步您的数据。自动将您的 Access 查询转换为 PostgreSQL 视图,反之亦然。