pg_dump 备份压缩与分割
压缩与分割的原理都是利用 Linux 的管线(PIPE)命令。
1)压缩备份
pg_dump testdb| gzip > filename.gz
2)恢复
gunzip -c filename.gz | psql dbname
3)分割备份
pg_dump dbname | split -b 1m
4)恢复
cat filename* | psql dbname
copy 导入导出
语法COPY命令概述
copy
命令用于表与文件(和标准输出,标准输入)之间的相互拷贝;
copy to
由表至文件,copy from
由文件至表;
copy
命令始终是到数据库服务端找文件,以超级用户执行导入导出权限要求很高,适合数据库管理员操作;
\copy
命令可在客户端执行导入客户端的数据文件,权限要求没那么高,适合开发人员,测试人员使用。
COPY 基本语法参考:
COPY -- copy data between a file and a table Synopsis
COPY table_name [ ( column ...] ) ] FROM { 'filename' | command' | STDIN } [ [ WITH ] ( option [, ] ) ]
COPY { table_name column_name [, ...] ) ] | ( query ) } TO { 'filename' | PROGRAM 'command' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]
where option can be one of:
FORMAT format_name OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER 'delimiter_character' NULL 'null_string'
HEADER [ boolean ] QUOTE 'quote_character' ESCAPE 'escape_character'
FORCE_QUOTE { ( column_name [, ...] ) | * } FORCE_NOT_NULL ( column_name [, ...] ) ENCODING 'encoding_name'
COPY 命令示例:
表与文件(和标准输出,标准输入)之间的相互拷贝,类似于 Oracle 的 sqlldr,把文本文件的内容导入到数据库,同时也可以把表的数据导出生成文本文件,实现数据库表和文本文件之间数据的迁移,非常方便,比 sqlldr 易用性好。
[postgres@db2 ttdata]$ cat test_copy.txt
1 a
2 b
3 c
注意:上面列之间要用 tab 键隔开。
[postgres@db2 ttdata]$ psql psql
Type "help" for help.
testdb=# create table test_copy(id int4,name varchar(32));
testdb=# \copy test_copy from /home/postgres/test_copy.txt ; #把文本数据导入到表中
testdb=#\copy test_copy to /home/postgres/test_copy1.txt ; #以 tab 制表符隔离
testdb=#\copy test_copy to /home/postgres/test_copy1.txt.csv with csv; #以逗号隔离
testdb=#\copy test_copy from /home/postgres/test_copy1.txt.csv with csv;
testdb=# copy test_copy from '/home/postgres/test_copy1.txt.csv' with csv;
总结:copy 与\copy 命令都能实现数据文件与表的数据传递,两者都在 psql 环境下执行。
主要不同在于数据文件的路径寻址:
1) copy 命令始终是到数据库服务端找文件;
2) \copy 命令可在客户端执行导入客户的数据文件。
另外,常用的数据文件列之间默认是 tab 制表符,可以用 csv 格式,列之间以逗号隔离。
网友评论