zoukankan      html  css  js  c++  java
  • PostgresSQL使用Copy命令能大大提高数据导入速度

    最近在做会员系统,其中会员系统有一份企业信息初始化的数据,需要从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导入的文本内容要以 作为行结束符(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.使用?可以查看在命令行模式下所有的命令以及命令说明。

  • 相关阅读:
    【Delphi】VCL 使用TCoolBar控件,在系统触发UAC界面时,引发CMSysFontChanged事件导致界面卡死或弹出System Error 1400错误
    【Delphi】 FMX 下 TImageList的使用方法:获取其中一张图片
    如何在电脑睡眠状态下保持程序运行
    【Delphi】使用TIdHTTPServer开发HTTP服务端在Windows2008部署后,外网无法访问
    fedora 25 virtualbox 增强功能安装
    在Win8系统中如何将一般类型的文件放在开始菜单中
    mac上的替代软件
    spring boot 1.4.1 with jsp file sample
    macbook pro 重装系统
    找不到或无法加载主类 org.codehaus.plexus.classworlds.launcher.Launcher
  • 原文地址:https://www.cnblogs.com/junge8618/p/5513966.html
Copyright © 2011-2022 走看看