postgresql backup
postgresql版本10.1 postgis版本2.5.3 pgadmin4版本2.0
自己使用过的几种方式:
1.用pgadmin4备份(一个数据库一个数据库的备份)
在需要备份的数据库名称上面右键=》选择backup=》弹出框中设置备份的选项依次是备份文件保存路径(如:C:\Test\1.backup)、备份的格式(普通还是压缩之类的,我是选的默认的custom)、第三个选项Compression ratio暂时不知道是什么保持默认什么都不填、Encoding我选择的是utf8因为建库的时候我也是选择的使用utf8来建库、最后两个选项job和role我都没填保持默认空,然后确认进行备份=》右下角会弹出备份进行情况信息sucessful...
还原的时候首先要新建一个同名的数据库=》数据库名称上面右键=》选择restore=》弹出框的设置:format默认,filename选择上面备份的文件,job默认空,role默认空=》开始备份即可,但是我的最后完成情况是failed,然后打开备份的数据库发现里面的表都是有的数据也是完整的,看起来是完全备份成功了的。我后来才发现这个failed导致我的表的主键序列都没有得到备份,所以在使用自增主键的时候有问题会重新从1开始自增。最后我是用语句再去为表建立的主键序列并设置相应的起始数值为当前主键+1,比较麻烦。
2.用navicat premiun版本12.0.18
先用navicat连接上我们的备份数据库和目标数据库,这里用navicat自带的数据传输工具将备份数据库中的表直接复制到目标数据库的时候它有的表会报错:xxxsep不存在之类的。应该也就是表主键对应的序列不存在的问题导致不能这样备份。然后我先将表转存为sql文件后发现报错的表在创建主键的时候都有一句"Id" int8 NOT NULL DEFAULT nextval('"xxxxx_seq"'::regclass)这种格式的话,应该就是问题的关键因为不存在这个指定的xxxxx_seq序列。我把这句语句改成了"Id" serial,再把改完后的sql文件放到目标数据库下去执行,成功生成了表和里面的数据。
3.直接备份postgresql的data文件夹
这种方式就是将数据库安装目录下的data文件夹直接全部拷贝到另外一个安装的postgresql数据库对应的目录下取代原有的data文件夹,会备份原数据库所有的信息。首先拷贝备份数据库安装目录下的data文件夹(需要先停掉数据库服务)=》然后停掉目标数据库的服务,将目标数据库的data文件夹删除或者重命名=》拷贝备份数据库的data文件夹到目标数据库目录相应的位置取代原有的data文件夹=》移除目标postgres服务,在CMD中输入,cd "C:\Program Files\PostgreSQL\10\bin" 执行目录跳转到Postgre安装目录下的bin目录下,再输入 pg_ctl unregister -N "postgresql-10"(这里也是PostgerSql的服务名称)=》重新创建postgres服务,cmd的执行目录确保是"C:\Program Files\PostgreSQL\10\bin" 输入pg_ctl register -N "postgres" -D "C:\Program Files\PostgreSQL\10\data"=》启动服务,cmd 输入 net start postgres=》启动完成后就可以连接数据库测试了