美文网首页PostGIS
postgresql----COPY之表与文件之间的拷贝

postgresql----COPY之表与文件之间的拷贝

作者: 不玩了啊 | 来源:发表于2020-07-27 15:06 被阅读0次

    postgresql----COPY之表与文件之间的拷贝

    postgresql提供了COPY命令用于表与文件(和标准输出,标准输入)之间的相互拷贝,copy to由表至文件,copy from由文件至表。

    示例1.将整张表拷贝至标准输出

    test=# copy tbl_test1to stdout;1HA122ha543

    示例2.将表的部分字段拷贝至标准输出,并输出字段名称,字段间使用','分隔

    test=# copy tbl_test1(a,b)tostdout delimiter',' csv header;

    a,b1,HA2,ha

    示例3.将查询结果拷贝至标准输出

    test=# copy (selecta,bfromtbl_test1exceptselecte,ffromtbl_test2 )tostdout delimiter','quote'"' csv header;

    a,b2,ha

    将标准输入拷贝至表中需要注意几点

    1.字段间分隔符默认使用【Tab】键

    2.换行使用回车键

    3.结束使用反斜线+英文据点(\.)

    4.最好指定字段顺序,要不然可能会错位赋值

    示例4.将标准输入拷贝至表中

    test=# copy tbl_test1(a,b,c)from stdin;

    Enter data tobe copied followedby a newline.Endwitha backslashanda periodona lineby itself.>>1    公举    公主>>2    万岁    万万岁>> \.

    COPY 2test=#select*from tbl_test1 ;

    a |b|  c    ---+------+--------1|HA|122|ha|5431|公举| 公主

    2|万岁| 万万岁

    (4rows)

    示例5.从标准输入拷贝至表中,并将标准输入第一行作为字段名(和表中不符也没关系,copy会自动忽略第一行),字段分隔符为','

    test=# copy tbl_test1(a,b,c)fromstdin delimiter',' csv header;

    Enter data tobe copied followedby a newline.Endwitha backslashanda periodona lineby itself.>> a,b,c>>3,你好,hello>>4,超人,super>> \.

    COPY 2test=#select*from tbl_test1 ;

    a |b|  c    ---+------+--------1|HA|122|ha|5431|公举| 公主

    2|万岁| 万万岁

    3|你好| hello

    4|超人| super

    (6rows)

    以上是表与标准输出和标准输入间的相互拷贝,表与文件的拷贝和以上完全相同,只是将标准输出和标准输入换成文件。需要注意的是:

    1.数据库用户必须有文件所在的路径的写权限。

    2.如果表存在中文字符,导出至csv文件时需要设置编码为GBK,否则使用excel打开是中文显示乱码。

    3.将文件导入表中时仍要考虑编码问题

    示例6.将表拷贝至csv文件中

    test=# copy tbl_test1to'/tmp/tbl_test1.csv'delimiter',' csv header;

    COPY 6

    使用excel打开文件,中文显示为乱码

    示例7. 将表以GBK编码拷贝至csv文件中

    test=# copy tbl_test1to'/tmp/tbl_test1.csv'delimiter','csv header encoding'GBK';

    COPY 6

    使用excel打开,中文显示正常

    示例8.将刚才导出的文件再次拷贝至表中,使用默认编码UTF8

    test=# copy tbl_test1(a,b,c)from'/tmp/tbl_test1.csv'delimiter',' csv header;

    ERROR:  invalid byte sequence forencoding "UTF8":0xb9CONTEXT:  COPY tbl_test1, line 4

    示例9.将刚才导出的文件再次拷贝至表中,使用GBK编码

    test=# copy tbl_test1(a,b,c)from'/tmp/tbl_test1.csv'delimiter','csv header encoding'GBK';

    COPY 6

    相关文章

      网友评论

        本文标题:postgresql----COPY之表与文件之间的拷贝

        本文链接:https://www.haomeiwen.com/subject/kxmzlktx.html