- 浏览: 244047 次
最新评论
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 ',';"
在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 ',';"
发表评论
-
pg 锁
2016-01-14 16:26 0pg 锁 ... -
postgresql 的三类日志
2016-01-14 15:59 18539一、PostgreSQL有3种日志: 1)pg_log(数据 ... -
pg存储过程--创建分区表
2016-01-13 15:46 01)将普通表改成按时间字段分区表 调用select fun_c ... -
pg常用自制shell脚本-tina
2016-01-13 15:30 49531)小型监控: 1.在pg库主机上部署,每5分钟执行一次,插入 ... -
postgresql 时间类型和相关函数
2016-01-13 10:41 5471今天来好好学习一下postgresql涉及时间的字段类型和一些 ... -
pg 表空间
2016-01-07 16:28 3128一、说明 在数据库运维工作中,经常会有数据目录使用率较高 ... -
pg 定期vacuum和reindex
2016-01-07 14:56 8619定期vacuum和reindex: 一 ... -
pg 序列
2016-01-06 16:58 1625一、简介 一个序列对象通常用于为行或者表生成唯一的标识符。 ... -
pg 简单备份和恢复
2016-01-06 15:53 3772pg的备份和恢复 pg_dump ... -
ERROR: invalid page header in block 27073 of relation base/21078/45300926
2016-01-06 15:12 2147突然断网,检查后通知我们UPS断电,db所在主机重启 1、连上 ... -
pg_cancel_backend()和pg_terminate_backend()
2016-01-05 17:42 3556pg_cancel_backend()和pg_terminat ... -
canceling statement due to conflict with recovery
2016-01-05 17:12 1697报错: canceling statement due to ... -
postgresql dblink 使用
2015-12-31 14:33 2047dblink的使用 pg的跨库查询工具 select dbli ... -
root用户不能使用psql或者pg_dump等pg命令
2015-12-24 14:40 7048root用户不能使用psql或者pg_dump等pg命令 [ ... -
postgresql新建库2个常见报错
2015-12-22 16:43 6290今天使用pg建库发现两个报错: ERROR: new c ... -
安装postgresql 9.1.1
2015-12-22 16:25 642安装postgresql 9.1.1 ---版本自选,步骤相同 ... -
pgbadger监控安装和使用
2015-12-21 10:01 2036pgbadger监控安装和使用 https://github ... -
oracle,postgresql,mysql一些使用上的区别记录
2015-12-16 11:38 01.限制行数: select * from ta where ... -
postgresql存储过程实例:已审核证书存入临时表
2015-12-14 16:44 656存储过程实例: 需求: 思路:建立存储过程 代码逻辑: 1 ... -
pg 函数sfa_tmp_sleep()执行越来越慢-sql分析
2015-12-11 09:48 680pg 函数sfa_tmp_sleep()执行越来越慢 ...
相关推荐
pgadmin命令操作 pgadmin是一款功能强大的 PostgreSQL 数据库管理工具,提供了图形化的界面来管理和维护 PostgreSQL 数据库。下面我们将详细介绍pgadmin命令操作的知识点: 数据库备份 pgadmin提供了两种方式来...
**PostgreSQL COPY命令详解** 在数据库管理中,PostgreSQL是一个功能强大的开源关系型数据库系统,以其稳定性和灵活性受到广大开发者的青睐。在处理大量数据导入导出时,使用`COPY`命令可以显著提高效率,相较于...
与传统的COPY命令相比,它能更快地将数据写入数据库,因为它是以二进制格式传输的,而不是文本格式。此外,它利用PostgreSQL的流复制机制,可以并行处理多个数据流,进一步提高导入速度。这对于需要快速恢复数据或者...
PG导入导出命令详解
pg_bulkload是一种用于PostgreSQL的高速数据加载工具,相比copy命令。最大的优势就是速度。优势在让我们跳过shared buffer,wal buffer。直接写文件。pg_bulkload的direct模式就是这种思路来实现的,它还包含了数据...
clj-pgcopy 使用二进制格式的PostgreSQLCOPY实现,将数据快速导入到PostgreSQL。 因为有时jdbc/insert! 和朋友不够快。 该库使用基于类型的分派来确定正确的postgres二进制格式。 有关更多信息,请参见部分。 ...
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 参数是表示只导出数据,其他的额外信息不需要,该参数也...
4. 运行批处理:使用PG.BAT命令执行修改,通常会提示用户确认操作。 5. 重启计算机:更改后的设置需重启生效。 映射文件(如8168CP.map、8168D.map)可能是为了帮助工具识别和解析配置文件中的特定数据结构,提供更...
标题中的“PG8168 RTL8168 RTL8111b网卡MAC刷新工具”是指一种专用于更新这些特定型号网卡物理地址(MAC)的软件工具。在IT领域,MAC地址是网络接口控制器(NIC)的唯一标识,通常由六组两字节的十六进制数字组成,...
pg_dump和pg_restore案例,其中简单罗列了一些应用过程中可能用到的sql语句。
pg-copy-streams COPY FROM / COPY TO用于node-postgres。 从一个数据库流到另一个数据库,然后进行填充。如何? 什么? ?? 您是否知道PostgreSQL支持将二进制数据直接流进表或从表流出? 这意味着您可以选择自己...
标题中的“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_”暗示了这是一个与Xilinx公司的DDS(Direct Digital Synthesis,直接数字频率合成)编译器相关的资源,版本号可能是14.1。DDS是一种广泛应用于...
标题中的"pg055axibridgepcie_055PG.com_055pg.com_www.055PG.COM_https//:055"似乎是一个标识符,结合描述中的"AXI Memory Mapped to PCI Express (PCIe)",我们可以推测这可能是一份关于在系统设计中使用AXI...
要备份整个Greenplum数据库,你可以使用以下`pg_dump`命令: ```bash pg_dump -h hostname -U username -F c -b -v -n schemaname -f dumpfilename dbname ``` 这里: - `-h` 是数据库服务器的主机名或IP地址。 - ...
### PG12864F型LCD功能介绍 #### 一、引言 PG12864F型LCD作为Protus软件中的一个重要元件,在电子设计自动化(EDA)的学习过程中扮演着不可或缺的角色。该元件主要用于模拟液晶显示屏的功能,帮助用户理解和实现...
ora2pg是一个强大的工具,专为在Linux环境中将Oracle数据库的数据迁移到PostgreSQL而设计。这个"ora2pg完整安装包.zip"包含了进行迁移过程所需的所有组件,包括ora2pg本身以及一系列的依赖库和软件。 ora2pg是开源...
- 确认 `pg_config` 命令可用且路径正确: `which pg_config` 和 `pg_config --pgxs`。 ##### 4. 初始化数据库 - 创建数据库数据目录: `mkdir /usr/pgsql-9.5/data`。 - 创建日志目录: `mkdir -p /usr/pgsql-9.5/log...
【pgAdmin3】是PostgreSQL数据库管理系统的一个图形化管理工具,专为简化数据库的管理和开发而设计。在Mac OS X操作系统环境下,用户可以利用pgAdmin3进行直观且高效的数据库操作,无需深入掌握SQL命令行界面的复杂...