Postgresql备份与恢复
pg_dump备份
备份成可insert格式的sql文件:
#pg_dump -h localhost -U postgres -d dbName -f /path/dump.sql
- -h 指定要连接的主机
- -U 连接数据库的用户名
- -d 在导出的数据库名称
- -f 导出保存到的文件,也可以用 > 转储如
#pg_dump -h localhost -U postgres -d dbName > /path/dump.sql
但是这样备份是不能用pg_restore 导入的,如果支持pg_restore导入需加 -F参数
#pg_dump -h localhost -U postgres -d dbName -F c > /path/dump.dat
- -F, --format=c|d|t|p 输出文件格式 ,(c-定制, d-目录, t-tar, p-默认)
如果只想导出单张表:
#pg_dump -h localhost -U postgres -d dbName -t tableName > /path/table.sql
- -t, --table=tableName 只转储单张表的数据
如果只想导出单张表的表结构,不需要导出表数据:
#pg_dump -h localhost -U postgres -d dbName -t tableName --exclude-table-data=tableName > /path/table.sql
- –exclude-table-data不导出指定表的数据
psql 命令
psql也可以转储结询出果,或者把备份的数据导入。
把查询结果导出:
#psql -h localhost -U postgres -d dbName -c "select * from tableName where id>100" > result.txt
- -c ,–command=命令 执行单一命令(SQL或内部指令)然后结束
把pg_dump 导出的普通文档格式的数据导入:
#psql -h localhost -U postgres -d dbName -f result.txt
以上命令将执行文件里的命令。
psql指令 \copy
psql -c 导出的数据没办法直接在shell下执行导入,如果只想导入导出单张表里的部分数据, pg_dump -F c 的格式可以用pg_restore导入, 但是往往pg_dump 没加这个参数,这时候可以在psql shell里执行 \copy 指令来完成部分数据的备份导入,比较方便。
=> \copy (select * from tableName where id>100) to '/path/data.dat' with binary;
以上语句在psql shell里执行, 将根据sql语句导出数据, 如要把导出的数据导入到另一个表里只需如下执行:
=> \copy tableName from '/path/data.dat' with binary;
把可以以copy的方式把数据导出为csv,如下:
=> \copy tableName to '/path/copy.csv' csv header;
或者把csv格式的数据导入,如下:
=> \copy tableName from '/path/copy.csv' DELIMITER ',' csv header;
pg_restore
pg_dump 以-F c 的导出数据,可以用pg_restore 导入:
# pg_restore -h localhost -U postgres -d dbName -t tableName /path/dump.dat