重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在北美,人们对于
成都创新互联专注于中大型企业的成都网站设计、成都网站建设和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户上千家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
PostgreSQL
的热情不断升温。随着
PostgreSQL
的发展,
PostgreSQL
8.x
已经从技术上超越
MySQL
5.x
,而市场的超越相信只是时间问题。而最终,用户也许有机会享受到可媲美
Oracle
的开源数据库也未尝没有可能。
我供职的互联网公司,服务约
50
万商务用户,经过多次的升级移植,目前公司已经全部将后台数据库从
MySQL
移植到
PostgreSQL
,而个人完成了其中一半的数据库移植工作,所以对数据库从
MySQL
移植到
PostgreSQL
积累了一些经验。在此整理成文,希望能对大家使用
PostgreSQL
有一些启发。
1)
准备:
使用
MySQL
数据备份工具对数据库进行全备份:
mysqldump
-h
[hostname]
-u
[username]
-p
[password]
--extended-insert=false
[dbname]
mysql-db.sql
注意
disable
extended-insert
,
PostgreSQL
不支持
MySQL
的
extended-insert
2)
转化:
将
mysql-db.sql
转为
PostgreSQL
可以导入的
SQL
Script.
MySQL
和
PostgreSQL
在
SQL
语义上存在一定差异,比如
MySQL
不支持
sequence
,触发器等功能,但为此又提供了一些自有的语法规则,而对比一些系统函数,
MySQL
和
PostgreSQL
又存在比较大的差别。为此,我编写了一段语义分析和转化的程序
mysql2psql
mysql2psql
mysql-db.sql
postgres-db.sql
3)
导入:
使用
PostgreSQL
提供的
pgAdmin
将数据文件导入数据库。
4)
SQL
语句的修改:
在实际的应用中,前端的系统往往会嵌入一些具有数据库特性的
SQL
语句,而随着后台数据库的改变,前端的系统程序也同样需要做出相应的修改。
MySQL
和
PostgreSQL
最常见的不同之处包括:Group
by,Join的使用差异,系统函数的命名和调用的差异等等。
一. 如果B数据库是新建的,为了移植数据库,那就直接附加,分下列步骤:
1. 打开配置管理器
2. 停止SQL Server服务
3. 在C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data目录下找到数据库文件,复制到B电脑上,B电脑打开数据库附加A数据库就好了。
二. 如果B数据库已经曾在,可以使用导出任务
打开数据库,右键点在数据库上,找到导出任务
按照向导选择该到处的数据表和视图。填写两个数据库的验证信息
高版本PG可以用oracle_fdw来做,类似DBLINK,很方便。也可以用oracle的spool导出,然后用Postgres的COPY导入,速度也较快。
PostgreSQL的现有版本在不增加可供购买的商业应用包时,并不降低其使用价值,反而由于它的plpgsql包和C及ODBC接口的存在,使数据库系统在二次开发的过程中,可最大程度地保护已经投入的程序资产。 宿主平台在Linux和类UNIX平台上,PostgreSQL8.2.4 比较适合 RedHat 的 AdvanceServer4和 Kylin2.1,这两个平台对于这一版本的PostgreSQL有最为接近的升级兼容性,两者的表示层都是BSD血统,使用的C库都在一个版本层中,系统的主要部分都很成熟,移植的问题基本上不存在。 对于Windows平台,目前典型的是2K和2K3,以及XP。在2K平台上兼容性极好,运行稳定,并且在数据库内部的操作与其它平台上的版本完全一致,这给数据库应用在不同平台之间的移植打下了良好的基础。 Windows平台安装实践所选择的平台是Windows2K。安装过程和一般应用程序的安装差不多,根据自己的需要指定安装选项,没有过多的要求。安装完毕并启动后,做以下几件事: (1)写一个文本文件,并命名为“pgpass.conf”,内容为: localhost:5432:postgres:postgres:qazwsxedc 其中“localhost”表示使用了UNIX域的Socket方式,这是为安全而考虑的。 第二个字段是端口,第三个字段是数据库名,第四个字段是帐户名,第五个 字段是口令。可以有多行,每行代表一个数据库帐户。 (2)上述文件放到以下路径: C:\Documents and Settings\postgresql\Application Data\postgresql 如果是不同的帐户,例如我使用的帐户是“campus”,那么路径为: C:\Documents and Settings\campus\Application Data\postgresql (3)打开ODBC数据源 -- 控制面板 -- 管理工具 -- ODBC数据源,在选项卡“用户DSN”中选择“添加”并打开,在列表中选择“PostgreSQL Unicode”并按“完成”。如果需要,也可以在选项卡“系统DSN”中按同一步骤添加。 (4)在列表中选择“PosgreSQL30W”,打开“配置”窗口,依次填入必要的信 息。在我的例子中,Database是“center”,Server是“Localhost”, Port是5432,UserName和Password根据自己的情况填写。 (5)按“Test”按钮,对话窗出现,显示“Connect successful”,然后按“Save”保存并退出。 (6)在VB、VC或是ASP中,按通常的方法选择数据源,这就完成了PostgreSQL在Windows系统上的全部安装过程。 我的应用数据库安装方法采用以文本文件的形式加上批处理过程来进行。关于建库的一段语句如下: select 'Create table space ...' ; CREATE TABLESPACE campus_center -- 创建表空间 OWNER campus LOCATION 'E:/cps/campus_center' ; select 'Create database Center ... ...' ; create database center -- 创建数据库 with template = template0 owner = campus tablespace = campus_center encoding = 'euc_cn' ; select 'Create Procedural Language PL/pgSQL ...' ; CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' -- 注册使用的解释器 HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator其中,在建库时一定要指定参数“encoding = 'euc_cn'”,否则在Windows平台上会出现乱码。 批处理文件的内容大致如下: @echo off mem initdb.bat mkdir E:\cps\campus_center "D:\Program Files\PostgreSQL\8.2\bin\psql.exe" -h localhost -p 5432 postgres "postgres" -f .\00_wincenter_make.sql .\initwin.log 2 .\initwin2.log ... ...命令“mkdir”建立一个操作系统目录,作为将要建立的应用所使用的表空间。注意第二条命令“psql.exe”使用了全路径,后面的语句都是在一行上,不可中断。命令使用文件“00_wincenter_make.sql”来创建数据库,产生的标准输出和标准错误分别向文件“initwin.log”和“initwin2.log”中写入,可用于建库过程中的诊断。后续语句可仿此办理,但输出换向符应由“”改为“”,以追加信息到诊断日志尾部。 通常在诊断日志文件“initwin2.log”中找不到字符串“ERROR”时,可以认为应用数据库已经成功安装并运行了。 注意事项:如果在VB下使用PostgreSQL8.2.4,那么VB的版本要低于VS2005,否则接口不兼容。这也是所谓“.net”战略的排他性。