`
LJ你是唯一LT
  • 浏览: 244047 次
社区版块
存档分类
最新评论

pg copy命令导数

阅读更多
copy
在vim里面,用%s/|//g把所有的|符号替换掉,以,隔开字段
[root@localhost tmp]# cat a.txt
SanFrancisco,41,55,0,1994-11-29
xinzhou,32,32,0.11,2014-08-26
meiguo,25,65,0.58,2015-06-09
califonia,25,65,0.58,2013-04-09
shandong,25,65,0.58,2013-04-09
qingdao,85,20,0.64,2013-04-09

导出
tina=# copy weather to '/tmp/b.sql' delimiter ',';
导出指定的列
tina=# copy weather(city,temp_lo) to '/tmp/c.sql' delimiter ',';  --这里with写可不写
导出成csv格式
tina=# copy weather(city,temp_lo) to '/tmp/c.sql' delimiter ':' csv header;
[root@localhost tmp]# cat c.sql
city:temp_lo   --有列名
San Francisco:41
xinzhou:32
meiguo:25
califonia:25
shandong:25
qingdao:85
SanFrancisco:41

导入
tina=# copy weather from '/tmp/a.txt' with delimiter ',';
COPY 6
tina=# select * from weather;
     city      | temp_lo | temp_hi | prcp |    date   
San Francisco |      41 |      55 |    0 | 1994-11-29
xinzhou       |      32 |      32 | 0.11 | 2014-08-26
meiguo        |      25 |      65 | 0.58 | 2015-06-09
califonia     |      25 |      65 | 0.58 | 2013-04-09
shandong      |      25 |      65 | 0.58 | 2013-04-09
qingdao       |      85 |      20 | 0.64 | 2013-04-09

postgresql copy这个命令,用起来也很灵活,是迁移数据的一个好工具
Syntax:
COPY table_name [ ( column [, ...] ) ]
    FROM { 'filename' | STDIN }
    [ [ WITH ] ( option [, ...] ) ]
COPY { table_name [ ( column [, ...] ) ] | ( query ) }
    TO { 'filename' | STDOUT }
    [ [ WITH ] ( option [, ...] ) ]
where option can be one of:
    FORMAT format_name
    OIDS [ boolean ]
    DELIMITER 'delimiter_character'
    NULL 'null_string'
    HEADER [ boolean ]
    QUOTE 'quote_character'
    ESCAPE 'escape_character'
    FORCE_QUOTE { ( column [, ...] ) | * }
    FORCE_NOT_NULL ( column [, ...] ) |
    ENCODING 'encoding_name'
语法也是很简明的,介绍几个常用的选项
DELIMITER :指定分隔符
HEADER:声明文件包含一个头标识,包含字段名称


===========
1、从数据库导出数据到文件标识符
命令:
\copy 表名 to 文件名|标准输出 [delimiter  as  ‘分隔符’]  [null  as ‘null表示的字符串’ ] [csv  quote  as ‘引号的类型’]

解释:
可以将表中的数据输出到 文件或标准输出。

delimiter as ‘分隔符’ :说明输出设备的文本中表的每个字段用什么字符分割,默认是tab;
null  as ‘null表示的字符串’:说明输出设备的文本中表的NULL值的表示方法,默认为“\N”;
csv quote as ‘引号类型’ :说明导出的csv文件中的引号类型是什么,
对于Postgres7.4以前的版本,不支持csv的导入与导出,这时不要使用这个可选项。
例子:
aa=#\copy  testtable to data.csv  delimiter as ‘,’ csv quote as ‘”‘

这条命令将testtable表中的内容作为SQL语句,导出data.csv文件中。
delimiter as ‘,’   :说明data.txt文本中表的每个字段用“逗号”分割;
csv quote as ‘”‘ :说明csv中的引号类型是“双引号”。
像前面说的:这个例子不适用在Postgres7.4以前的版本。

2、从文件标识符导入数据到数据库
命令:
\copy 表名 from 文件名|标准输入 [delimiter  as  ‘分隔符’]  [null  as ‘null表示的字符串’ ]   [csv  quote  as ‘引号的类型’]
例子:
aa=#\copy  testtable from data.csv  delimiter as ‘,’ csv quote as ‘”‘
这条命令将data.csv文件中的文本,作为sql语句导入到testtable表,
delimiter as ‘,’   :说明data.txt文本中表的每个字段用“逗号”分割;
csv quote as ‘”‘ :说明csv中的引号类型是“双引号”。




----插入大量数据对比-----
CREATE TABLE linshi_tina                   
(sample_hash character varying(41) NOT NULL)

[root@pg tina_shell]# cat a.sql                                                                       
#!/bin/bash                                                                                           
psql -d tinadb -U postgres -c "insert into linshi_tina values('7CDB19E3DC5DF148B41CEFB4CD182F09');"
psql -d tinadb -U postgres -c "insert into linshi_tina values('65B4C5B18015A82F9EE49FFEC628664C');"
psql -d tinadb -U postgres -c "insert into linshi_tina values('E628646309E6E28CA27F8D15C5F02B6B');"
psql -d tinadb -U postgres -c "insert into linshi_tina values('D1B6994BF42E79433BE5872C7361F86B');"
psql -d tinadb -U postgres -c "insert into linshi_tina values('6DDEA8AAAD54412ACE381D49C17019CF');"

chmod +x a.sql
nohup ./a.sql &


24w行 insert耗时 27分钟  32G内存  双核cpu

---想要插入的更快,应该使用copy命令
tm_samples=# copy linshi_tina from '/tmp/cml.txt';
COPY 216487

21w行,2s就操作完成了~~~~

[root@pg tmp]# head -5 cml.txt
231A840852611943F4810C69259112E1
8C24C421F8B2B1ADFCDC5AF02FB63A78
B079287F028C32D5E85B58CA8ABAA90A
88E75A42356727FF677623E8921806CB
4D5472FA110D7E4AB688C7FBD675D0B3

如果是两个字段的话,就用,隔开
[postgres@pg ~]$ psql
psql (9.1.1)
Type "help" for help.

postgres=# \c tina
You are now connected to database "tm_samples" as user "postgres".
tina=# copy linshi_tina from '/tmp/tmp.txt' with delimiter ',';
COPY 159831
tina=#


如果是只导入部分字段内容
tina=# copy t_test_wubao(sample_hash,sample_state,last_modified_time) from '/tmp/out_list2_wubao.txt' with delimiter ',';
COPY 8943                                                                                                                 
tina=#                               

注意,字符串不需要带上单引号,否则单引号也会导进去
15B7D437459115BF1DC2D176374F0DCC.4BA89099,0,2016-03-09 14:30:02
155052FE5F4B57620D249439B25382ED.4B8E6378,0,2016-03-09 14:30:02
0102455AC7E25EC362668E039C931F0B.9458EBDC,0,2016-03-09 14:30:02

select sample_hash from t_test_wubao where '%''';  单引号转义-两个单引号

跨版本的导入:
9.1 导出:
[postgres@pg ~]$ psql -d tm_samples                                                                                                                   
psql (9.1.1)                                                              
Type "help" for help.                                                     
                                                                          
tina=# copy linshi_tina to '/tmp/linshi_tina.txt' with delimiter ',';
COPY 159831           

9.4 创建表并导入:
CREATE TABLE linshi_tina
(
  sample_hash character varying(41) NOT NULL,
  sample_crc32 character varying
)
WITH (
  OIDS=FALSE
);  

[postgres@datanode1 ~]$ psql -p 1922 -d tina
psql (9.4.5)
Type "help" for help.

tina=# copy linshi_tina from '/tmp/linshi_tina.txt' with delimiter ',';
COPY 159831
tina=#     


分区表的导出导入:
tina=# copy test_tina to '/tmp/test_tina20160309.txt' with delimiter ',';  --总表里面无数据,需要去每一个分区导
COPY 0
tina=#


拼写sql:
select 'copy '||tablename|| ' to ''/tmp/'||tablename|| '.txt''' ||' with delimiter '','';' from pg_tables where schemaname='public' and tablename like 'test_tina20%' order by tablename;
copy test_tina20110701 to '/tmp/test_tina20110701.txt' with delimiter ',';
copy test_tina20110801 to '/tmp/test_tina20110801.txt' with delimiter ',';
copy test_tina20110901 to '/tmp/test_tina20110901.txt' with delimiter ',';

去后台执行copy命令,并将txt全部拷贝到目标主机:

清空所有的子分区表,否则数据会是追加!!
select 'truncate table '||tablename||';' from pg_tables where schemaname='public' and tablename like 'test_tina20%' order by tablename;
truncate table test_tina20110701;
truncate table test_tina20110801;
truncate table test_tina20110901;

select 'copy '||tablename|| ' from ''/tmp/'||tablename|| '.txt''' ||' with delimiter '','';' from pg_tables where schemaname='public' and tablename like 'test_tina20%' order by tablename;
"copy test_tina20110701 from '/tmp/test_tina20110701.txt' with delimiter ',';"
"copy test_tina20110801 from '/tmp/test_tina20110801.txt' with delimiter ',';"
"copy test_tina20110901 from '/tmp/test_tina20110901.txt' with delimiter ',';"

分享到:
评论

相关推荐

    pgadmin命令操作

    pgadmin命令操作 pgadmin是一款功能强大的 PostgreSQL 数据库管理工具,提供了图形化的界面来管理和维护 PostgreSQL 数据库。下面我们将详细介绍pgadmin命令操作的知识点: 数据库备份 pgadmin提供了两种方式来...

    postgreSQL copy

    **PostgreSQL COPY命令详解** 在数据库管理中,PostgreSQL是一个功能强大的开源关系型数据库系统,以其稳定性和灵活性受到广大开发者的青睐。在处理大量数据导入导出时,使用`COPY`命令可以显著提高效率,相较于...

    pgcopy:使用二进制副本快速加载数据

    与传统的COPY命令相比,它能更快地将数据写入数据库,因为它是以二进制格式传输的,而不是文本格式。此外,它利用PostgreSQL的流复制机制,可以并行处理多个数据流,进一步提高导入速度。这对于需要快速恢复数据或者...

    postgresql之pg_dump命令详解 - wling_89的专栏 - 博客频道 - CSDN_NET.mht

    PG导入导出命令详解

    pg_bulkload-VERSION3_1_16.tar.gz

    pg_bulkload是一种用于PostgreSQL的高速数据加载工具,相比copy命令。最大的优势就是速度。优势在让我们跳过shared buffer,wal buffer。直接写文件。pg_bulkload的direct模式就是这种思路来实现的,它还包含了数据...

    clj-pgcopy:从Clojure将数据快速导入Postgres

    clj-pgcopy 使用二进制格式的PostgreSQLCOPY实现,将数据快速导入到PostgreSQL。 因为有时jdbc/insert! 和朋友不够快。 该库使用基于类型的分派来确定正确的postgres二进制格式。 有关更多信息,请参见部分。 ...

    postgresql数据库--psql、pg_dump命令带密码执行sql语句

    pg_dump: pg_dump -a -t tbl_test "host=127.0.0.1 hostaddr=127.0.0.1 port=5432 user=postgres password=123456 dbname=postgres" > /userdir/tbl_data a 参数是表示只导出数据,其他的额外信息不需要,该参数也...

    用于修改RTL8101E/RTL8111DL网卡MAC地址等内容的PG8168

    4. 运行批处理:使用PG.BAT命令执行修改,通常会提示用户确认操作。 5. 重启计算机:更改后的设置需重启生效。 映射文件(如8168CP.map、8168D.map)可能是为了帮助工具识别和解析配置文件中的特定数据结构,提供更...

    PG8168 RTL8168 RTL8111b网卡MAC刷新工具

    标题中的“PG8168 RTL8168 RTL8111b网卡MAC刷新工具”是指一种专用于更新这些特定型号网卡物理地址(MAC)的软件工具。在IT领域,MAC地址是网络接口控制器(NIC)的唯一标识,通常由六组两字节的十六进制数字组成,...

    pg_dump和pg_restore案例应用相关命令.sql

    pg_dump和pg_restore案例,其中简单罗列了一些应用过程中可能用到的sql语句。

    node-pg-copy-streams:从COPY TO COPY复制到node-postgres。 从一个数据库流到另一个数据库

    pg-copy-streams COPY FROM / COPY TO用于node-postgres。 从一个数据库流到另一个数据库,然后进行填充。如何? 什么? ?? 您是否知道PostgreSQL支持将二进制数据直接流进表或从表流出? 这意味着您可以选择自己...

    src_过pg_过windowspg_64位SSDThook实现方法_过PG_

    标题中的“src_过pg_过windowspg_64位SSDThook实现方法_过PG_”似乎是指一个关于在64位Windows系统下绕过Process Guard (PG)并通过修改System Service Dispatch Table (SSDT)实现hook的技术教程。描述中的“WINDOWS ...

    pg141-dds-compiler_Xilinx_pg141-dds_pg141-dds-compiler_

    标题中的“pg141-dds-compiler_Xilinx_pg141-dds_pg141-dds-compiler_”暗示了这是一个与Xilinx公司的DDS(Direct Digital Synthesis,直接数字频率合成)编译器相关的资源,版本号可能是14.1。DDS是一种广泛应用于...

    pg055axibridgepcie_055PG.com_055pg.com_www.055PG.COM_https//:055

    标题中的"pg055axibridgepcie_055PG.com_055pg.com_www.055PG.COM_https//:055"似乎是一个标识符,结合描述中的"AXI Memory Mapped to PCI Express (PCIe)",我们可以推测这可能是一份关于在系统设计中使用AXI...

    Greenplum使用pg_dump备份数据库1

    要备份整个Greenplum数据库,你可以使用以下`pg_dump`命令: ```bash pg_dump -h hostname -U username -F c -b -v -n schemaname -f dumpfilename dbname ``` 这里: - `-h` 是数据库服务器的主机名或IP地址。 - ...

    PG12864F功能介绍

    ### PG12864F型LCD功能介绍 #### 一、引言 PG12864F型LCD作为Protus软件中的一个重要元件,在电子设计自动化(EDA)的学习过程中扮演着不可或缺的角色。该元件主要用于模拟液晶显示屏的功能,帮助用户理解和实现...

    ora2pg完整安装包.zip

    ora2pg是一个强大的工具,专为在Linux环境中将Oracle数据库的数据迁移到PostgreSQL而设计。这个"ora2pg完整安装包.zip"包含了进行迁移过程所需的所有组件,包括ora2pg本身以及一系列的依赖库和软件。 ora2pg是开源...

    GPU数据库PG_strom的安装及使用

    - 确认 `pg_config` 命令可用且路径正确: `which pg_config` 和 `pg_config --pgxs`。 ##### 4. 初始化数据库 - 创建数据库数据目录: `mkdir /usr/pgsql-9.5/data`。 - 创建日志目录: `mkdir -p /usr/pgsql-9.5/log...

    pgAdmin3.zip

    【pgAdmin3】是PostgreSQL数据库管理系统的一个图形化管理工具,专为简化数据库的管理和开发而设计。在Mac OS X操作系统环境下,用户可以利用pgAdmin3进行直观且高效的数据库操作,无需深入掌握SQL命令行界面的复杂...

Global site tag (gtag.js) - Google Analytics