最近在做会员系统,其中会员系统有一份企业信息初始化的数据,需要从SQL Server数据库导入到PostgreSQL,单表的数据近30万。
最开始的方案是在SQL Server上生成insert into的sql,再把生成的sql在Postgresql上导入。第一次导入时,没有删除索引,用了近2个小时才导完一张单表。
后面在网上找到PostgreSQL有一个Copy命令用于大量数据的导入导出(http://www.2cto.com/database/201309/241346.html),于是就用了Copy来导数据。
Copy的语法介绍:http://blog.sina.com.cn/s/blog_73094447010158zr.html,导入企业信息的Copy命令如下:
COPY tb_uni_enterprise(appid, eid, ename, status, creator, createtime,modifier, modifytime, memo) FROM '/tmp/init/enterprise.sql' DELIMITER '|';

导入数据过程:
/*1.删除索引*/
drop index UQ_IDX_UNI_ENTERPRISE_001;

/*2.清空表数据,注意该步骤,只有测试在重复部署环境时才执行,生产环境只初始化一次,不需要执行 */
truncate tb_uni_enterprise;

/*3.导入数据*/
COPY tb_uni_enterprise(appid, eid, ename, status, creator, createtime,modifier, modifytime, memo) FROM '/tmp/init/enterprise.sql' DELIMITER '|';

/*4.创建索引*/
create unique index UQ_IDX_UNI_ENTERPRISE_001 on TB_UNI_ENTERPRISE (
appid,
eid
);

使用Copy导入数据,30万数据导入约7秒。

第一次使用Copy导入时失败了,提示appid数据太长,原因是把整行数据都当做appid的数据了,Copy导入的文本内容要以\n作为行结束符(http://bbs.chinaunix.net/thread-1830462-1-1.html)。
另外PostgreSQL是安装在Linux环境的,在运行Copy时也有几个问题:
1.使用shell连接服务器后,找不到psql命令,原因是PostgreSQL的命令没有加到$PATH中
Linux中在每个用户的$HOME目录下有一个.bash_profile文件,这个文件是每次用户登录的时候都会执行,可以在.bash_profile中把PostgreSQL的命令加到$PATH中,在PostgreSQL的安装目录有一个set_env.sh的文件,文件中有设置环境变量的shell脚步,可以把该脚步的内容拷贝追加到.bash_profile中,也可以直接在.bash_profile中添加运行set_env.sh脚步语句:./PostgreSQL安装目录/set_env.sh。修改.bash_profile后需要重新登录才会生效。
2.执行Copy命令时没有目录权限
在Linux中安装的PostgreSQL都有一个叫postgres的用户,可以用postgres登录再创建目录,这样创建的目录对postgres来说就有读写权限了。
另外一种方法是用root用户创建目录,然后用"chmod 777 目录名"命令为所有用户加上读写权限。

备注:
测试过程中用到的PostgreSQL命令有
1.psql -U uni_auth 使用指定用于进入命令行
2.进入命令行后,默认的数据库是postgres,需要使用\c uni_auth_db命令来切换数据库
3.使用\?可以查看在命令行模式下所有的命令以及命令说明。

最新文章

  1. js判断页面是pc打开还是手机打开
  2. MFC获取光标相对于控件所在行
  3. 将SQL Azure数据库备份到本地SQL Server 2012
  4. Android中回调接口的使用
  5. [2014.5.22][UBUNTU]Ubuntu与Windows系统时间不同步的问题
  6. web 开发规范
  7. java启动子进程以及进程通信
  8. 在spring boot环境中使用fastjson + redis的高速缓存技术
  9. AJAX扩展-POST传递参数并跳转页面
  10. SPOJ D-QUERY
  11. Splay讲解
  12. 保留最新N份备份目录脚本
  13. 教你如何将word中的表格完美粘贴到ppt中
  14. 时间戳使用的bug,你见过么
  15. jdbc第二天
  16. ShuffleNet
  17. 计蒜客 UCloud 的安全秘钥(困难)(哈希)
  18. Android(java)学习笔记11:生产者和消费者之等待唤醒机制
  19. 【[SCOI2015]小凸玩矩阵】
  20. Linux下压缩/解压

热门文章

  1. 深浅copy和字符串细节方法
  2. css 需要阴影的效果
  3. HDU 5988.Coding Contest 最小费用最大流
  4. [翻译]Javaslang 介绍
  5. C++ 的虚析构函数
  6. How to ignore files and directories in subversion?
  7. js 事件创建发布
  8. java通过IP地址获取物理位置
  9. 【Git】 GitLab服务器社区版安装与配置
  10. git .gitignore未生效