postgres数据库的数据备份与恢复

先给数据库添加环境变量
vi ~/.bash_profile
添加信息
export PATH=$PATH:/usr/local/pgsql/bin

执行命令 source ~/.bash_profile 是其生效


pg_dump命令备份的文件,如果文件格式是.sql则用psql命令进行恢复。如果是.backup格式则用pg_restore命令进行恢复

备份表数据
比如只备份数据库名称为 geodb下的某个表(fwlzm)数据,在root账号下执行
pg_dump -U sde -d geodb -t fwlzm -f /home/postgres/dump/fwlzm.sql

恢复表数据
恢复表数据有两种方式,第一种是删除之前的表,然后进行恢复;第二种是删除表里面的数据,然后进行恢复

第一种,先删除之前的表
psql -U sde -d geodb -c "DROP TABLE fwlzm;" 删除整个表
psql -U sde -d geodb -f /home/postgres/dump/fwlzm.sql 恢复数据

第一种,先删除之前的表里面的数据
psql -U sde -d geodb -c "TRUNCATE fwlzm;"  删除表数据
psql -U sde -d geodb -c "\copy fwlzm FROM '/home/postgres/dump/fwlzm.sql'" (数据能进去,但是无法判断里面的索引是否存在,导入的时候会提示索引已存在)


备份数据库
pg_dump -U user -d dbname -f <backup_file_name>.sql

pg_dump -U userszdt -d geosztd -f /home/postgres/dump/geosztd.sql
备份test库的数据,test库里面有sde空间数据库(账号用sde这个账号)
pg_dump -U sde -d test -f /home/postgres/dump/testdb.sql

恢复数据
恢复sde库的数据,先删除sde 整个schema
DROP SCHEMA IF EXISTS sde CASCADE;
然后执行恢复语句
psql -U sde -d test -f /home/postgres/dump/testdb.sql

恢复数据库
使用psql和pg_restore恢复数据的区别是,pg_restore恢复数据是没有 -f 这个参数

删除数据库(这个一般不建议在程序里面使用,在程序里面可以选择恢复某个shcema数据或表数据)
DROP DATABASE geosztd;

如果备份的.sql文件是整个数据库的内容。想从备份文件中,恢复指定的某个表的数据,可以先把表删了,然后执行如下命令。该命令是从备份文件中恢复表名为t_users的数据
psql -U userszdt -d geosztd -t t_users -f /home/postgres/dump/geosztd.sql
恢复多个表数据(中间用逗号分隔)
psql -U userszdt -d geosztd -t t_goods,t_orders -f /home/postgres/dump/geosztd.sql

恢复某个schema的数据,先把该shema删除
psql -U userszdt -d geosztd -n mis -f /home/postgres/dump/geosztd.sql

使用pg_dump备份文件,然后使用 pg_restore命令恢复文件时,备份文件的格式不能是.sql文件。.sql文件要用psql命令来恢复。可以自定义成.backup文件。
使用这套组合,测试了一下,恢复数据的时候,比如要恢复某个schema下面的所有数据,就需要先删除该scheme下面的所有表,然后再恢复数据
可以删除整个schema,然后执行恢复操作

普通数据库的备份和恢复
pg_dump -U userszdt -d geosztd -Fc -f /home/postgres/dump/geosztd.backup
如果是要恢复整个schema的数据,先删除该schema,比如删除public整个shema
DROP SCHEMA IF EXISTS public CASCADE;
pg_restore -U userszdt -d geosztd /home/postgres/dump/geosztd.backup

恢复数据库下面某个schema的数据
pg_restore -U userszdt -d geosztd -n mis /home/postgres/dump/geosztd.backup

有空间数据的备份和恢复,主要是要注意数据库的账号,应该是sde
pg_dump -U sde -d test -F c -f test.backup
pg_restore -U sde -d test /home/postgres/dump/test.backup

只恢复指定的schema 如果是想恢复有sde的空间数据库,好像没法单独恢复schema=sde的数据,比如下面整个语句恢复数据失败
pg_restore -U sde -d test -n sde /home/postgres/dump/test.backup

删除某个schema里面的所有表
下面整个语句会生成一个删除指定schema里面的所有表的sql语句,然后执行这个sql语句就能删除下面所有的表了
SELECT 'DROP TABLE IF EXISTS ' || table_name || ' CASCADE;' 
FROM information_schema.tables
WHERE table_schema = 'mis';


备份geodb库的数据,里面有sde整个schema
pg_dump -U sde -d geodb -Fc -f /home/postgres/dump/geodb.backup

pg_restore -U sde -d geodb /home/postgres/dump/geodb.backup

只从备份文件中恢复某张表数据 -t 指定要恢复的表数据
pg_restore -U sde -d geodb -t fwlzm /home/postgres/dump/geodb.backup

只从备份文件中恢复某个schema数据 -n 指定要恢复的schema

pg_restore -U sde -d geodb -n sde /home/postgres/dump/geodb.backup

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值