PG备份与回复

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 格式,列之间以逗号隔离。

你可能感兴趣的:(PG备份与回复)