服务器 频道

将sybase中的数据导到postgreSQL数据库中

  【IT168 服务器学院】运行环境 (Windows Server2003)

  软件版本: sybase12.5 、 postgreSQL8.0.2

  一:

  先将sybase12.5下载安装。建设备,建库。

  然后下载安装postgreSQL ,只需要建立数据库(数据库可以和sybase的数据库不同名)。

  二:

  在pgsql下建立与sybase相同的表,注意表的结构。

  1) 二者有一些数据类型不同,在sybase中有数据类型decimal,pgsql里没有,但是pgsql里面有一个数据类型numeric,它也是以小数类型存在,numeric(prescision,scale),其中,精度必须是整数,而比例可以是零或者正数,另外, numeric(prescision)

  选择了 0 为比例。不带任何精度或者比例声明. 另外,numeric 在sybase中可以为空,而且空值也可以插入数据库表,但是在pgsql里面虽然它也允许为空但是他不允许空值插入数据库.所以可以在导数据的时候设置成money,然后在更改回numeric.

  2)在sybase中去系统时间的函数是getdate(),而bcp到文本文件*.txt的时候会自动增加到毫秒,格式为 月-日-年 12:00:00:000PM(AM),但是这样的格式不可以插入到pgsql中,应将毫秒前面的“:”更改为“.”,在数据比较多的情况下,例如有3万行数据,可以用editplus的替换工具,查找“:...PM(AM)”替换为“.000PM(AM)”。在pgsql中取系统时间的函数为current_time(current_timestamp),此处选用哪个函数取决与列所选的数据类型,在sybase中的数据类型是datetime,而在pgsql中为timestamp.

  3)在sybase中取当前用户名函数是host_name(),而在pgsql中取当前用户名函数为current_user.

  三:

  1)将sybase中数据利用bcp.exe工具导出为文本文件*.txt,命令为:

  开始菜单→运行→cmd:

  进入*.txt所在目录。

  (*.txt所在目录)> bcp Servername..tablename out filename.txt -c -t"|" -Uusername -Ppassword -Sservername(如果是在服务器上运行此命令可以不用 -Sservername,同时,在-t" "处推荐用“|”,或者是Tab分割符,建议不使用“,”。)

  2)将文本文件*.txt中数据导入到pgsql中,命令为:

  开始菜单→运行→cmd:

  psql Servername username

  (*.txt所在目录)>copy tablename from filename.txt using delimiters ''|'' (此处的filename.txt应为绝对路径,而'' ''中所用的分割符应与上面 sybase 的bcp所用分割符相同。)

  

0
相关文章