数据转换为 PostgreSQL
DBase II, III, IV+
- 将 .dbf 文件转换为 PostgreSQL by Tomasz Judycki
MS Access
介绍
此页面旨在为将 MS Access 数据转换为 PostgreSQL 提供一个快速的用户指南。它基于作者的经验 将 Microsoft Access 转换为 PostgreSQL by Jon Hutchings (2001-07-20),本文件不打算用作其他版本的转换指南。
步骤 1 - 在您的工作站上运行 MS Access
转换过程的第一步是下载 PostgreSQL 上升工具。可以从作者的网站获取。我强烈建议您阅读作者的文档,并注意下面列出的此工具的限制。
此工具采用 MS Access 97 数据库的形式。
打开后,主屏幕 (frmmain) 包含许多与 SQL 转换相关的选项。
选择要转换的数据库,使用分析功能分析它,并修改需要更改的任何参数。
用您希望为最终 postgres 数据库提供的名称填写 SQL 数据库名称字段,否则您将需要在以后做更多工作。
选中“导出数据”选项以移动数据 - 必要时在“杂项选项”部分修改文件位置。
使用“创建 SQL”创建 SQL 文件,然后“导出 SQL”。这将把阶段 2 中所需的所有文件放置在 pgupt 中“修改参数”屏幕的“杂项”选项卡上指定目录中。
将这些文件 FTP 到 postgres 服务器上的一个合适的空目录。
步骤 2 - 在您的 Linux 服务器上运行 PostgreSQL
登录您的服务器并更改到您上传文件的目录
如果您之前没有为数据库命名,则必须在继续之前执行以下操作
* edit the loadd.sh file (for example joe loadd.sh will open the file in the joe editor).
* Change all references to "test" in the file to the name which you want to give your database.
* HINT - Don't include non alphanumeric charaters in your database name (i.e. don't use -_ '?/!"\| etc.)
* Save and close the file.
* Open the create_schema.sql file and examine the table structure. Ensure that the fieldnames and data types are correct.
发出以下命令以使 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 上设置合适的 ODBC 驱动程序和数据源。
第一步是下载 PostgreSQL ODBC 驱动程序。可以从 PostgreSQL ODBC 网站获取,也可以从 Devart 网站下载替代的 PostgreSQL ODBC 驱动程序。
安装后,使用 Windows 9x/NT 4.0/Windows 2000 PC 上的 ODBC 控制面板,并添加新的用户 DSN 或用户数据源。选择 PostgreSQL 驱动程序,并使用服务器名称、端口、数据库名称、用户名和密码填写详细信息,以连接到您的 postgresql 服务器。
步骤 5 - 在 MS Access 中配置。
要为新创建的 PostgreSQL 数据库创建基于 Microsoft Access 的前端,请执行以下操作
复制原始的 Access 数据库。
在 Microsoft Access 中打开它。
选择“表格”选项卡。
选择“新建”。
选择“链接表格”。
在“文件类型”列表中,选择“ODBC 数据库”。
在数据源对话框中,找到您之前创建的数据源(在 NT 4.0 上,这通常位于“机器数据源”选项卡上)。
选择要链接的表格。
链接后,您可以自由删除旧的本地表格并压缩数据库。
注意 - 如果任何字段名称在转换期间发生更改(通常是由于在字段和表名称中使用非字母字符),那么您的查询、窗体和报表等将需要更新以反映此更改。
限制
首先,此脚本仅在 Postgres 6.5.3 和 Access 97 上进行了测试,它可能适用于其他组合,但未经作者测试。
其次,此工具存在一些限制,这些限制是我发现的,它们是
1. The tool expects at least one relationship, so simple single table database conversions will fail. 2. The tool assumes you will be using the standard postgesql server port. 3. Using this tool it is possible to generate trigger and function names longer than 32 characters which can cause postgresql some problems
Oracle 到 PostgreSQL
安装 ora2pg
要安装 ora2pg,请按照以下步骤操作
aptitude install ora2pg
将数据导入到新的 Oracle 安装中
将数据 (dump) 导入 Oracle 是一个两阶段过程
* Crear usuarios requeridos * Importar los datos
创建用户
从装有浏览器和 ssh 的计算机上,运行以下命令
ssh -L 9999:localhost:8080 [email protected]
验证身份后,将浏览器指向以下地址
https://127.0.0.1:9999/apex
您应该看到 Oracle 管理控制台。从那里创建 Oracle 所需的用户。
导入数据
要将数据导入 Oracle,首先将 EXPDAT.DMP 备份复制到客户端 PC 的某个文件夹中:例如,-
scp EXPDAT.DMP [email protected]:.
现在以 root 用户身份登录到客户端机器,将 Oracle 备份移动到 oracle 用户的主目录,切换到 oracle 用户并修改环境
ssh [email protected] mv EXPDAT.DMP ~oracle/ su - oracle export ORACLE_HOME=/usr/lib/oracle/product/10.2.0/server export ORACLE_SID=XE export PATH=$PATH:$ORACLE_HOME/bin
最后,运行 imp 命令将备份导入数据库
imp system/manager FILE=EXPDAT.DMP FULL=Y
如果您在最后看到消息“Import terminated successfully without warnings.”,恭喜您,您的 Oracle 数据库已成功运行!导出 PostgreSQL 数据
我们已经准备好导出 Oracle 数据库。我们需要进行一些配置,然后我们可以将数据库导入 PostgreSQL 脚本并将其导入到 PostgreSQL 中。
我们将使用 ora2pg 工具,该工具已安装。在使用它之前,我们需要准备 ora2pg 的配置文件,首先将示例配置文件复制到当前目录,作为 oracle 用户
su - oracle export ORACLE_HOME=/usr/lib/oracle/product/10.2.0/server export ORACLE_SID=XE export PATH=$PATH:$ORACLE_HOME/bin
您可能希望将下面 3 个 export 语句放在 oracle 用户的 .bash_profile 中,以便每次执行“su”时自动设置这些变量。
cp /usr/share/doc/ora2pg/examples/ora2pg.conf.gz . gunzip ora2pg.conf.gz
编辑 ora2pg.conf 并根据表格进行修改
Linea Original: ORACLE_HOME /usr/local/oracle/oracle816 Cambiar para: ORACLE_HOME /usr/lib/oracle/product/10.2.0/server Linea Original: ORACLE_DSN dbi:Oracle:host=thedb.mydom.fr;sid=TEST Cambiar para: ORACLE_DSN dbi:Oracle:host=127.0.0.1;sid=XE Linea Original: # EXPORT_SCHEMA 1 Cambiar para: EXPORT_SCHEMA 1 Linea Original: # SCHEMA APPS Cambiar para: SCHEMA <name of database schema owner that you created earlier in APEX> Linea Original: TYPE TABLE Cambiar para: (see under)
不幸的是,ora2pg 不允许一次性导出整个数据库,因此我们必须使用多个命令导出数据库的不同组件。可以导出的组件是
TABLE PACKAGE COPY (or DATA, but COPY is faster) VIEW GRANT SEQUENCE TRIGGER FUNCTION PROCEDURE TABLESPACE
保存 ora2pg.conf 并运行以下脚本以将每个命名的组件导出到当前目录中的名为 <component>.out 的文件中
for i in TABLE PACKAGE COPY VIEW GRANT SEQUENCE TRIGGER FUNCTION PROCEDURE TABLESPACE ; do perl -p -i -e "s/^TYPE\s+.*/TYPE $i/; s/^OUTPUT\s+.*/OUTPUT $i.sql/" ora2pg.conf; ora2pg ora2pg.conf; done
结果是,在当前目录中获得以下文件,它们可以作为 PostgreSQL 脚本运行
TABLE.sql PACKAGE.sql COPY.sql VIEW.sql GRANT.sql SEQUENCE.sql TRIGGER.sql FUNCTION.sql PROCEDURE.sql TABLESPACE.sql
MySQL
使用“mysql2pgsql.perl”脚本
注意事项
* No se migra estructura de un atributo con comentarios. * Los atributos no deben tener caracteres raros Ej.ñ.
下载脚本并将其保存为 mysql2pgsql.perl
- mysql2pgsql - 一个 Perl 脚本,用于将 MySQL 数据库转储转换为 PostgreSQL 兼容格式,by Maxim Rudensky and Valentine Danilchuk
使用步骤
- 备份 MySQL 数据库结构。
mysqldump --database --table --no-data > mysql_.sql
- 转换为 PostgreSQL 可加载的格式。
perl mysql2pgsql.perl mysql_.sql postgres_.sql --nodrop
- --nodrop 选项会删除表删除操作,如果您想查看更多选项,请使用 --help。
su postgres createdb NombreDB psql -f postgres_.sql -u dad NombreDB
- 对于数据,使用 --complete-insert 和 -c 选项仅从 MySQL 导出数据。