PostgreSQL备份恢复假死
如果dump出来的是单个表,那么恢复就必须是单个表,即-t tableName
背景:
postgreSQL 提供的备份功能 pg_dump:不支持跨数据库操作、不支持部分数据
需要备份的并非整个DB,而是其中的部分表
1.备份表结构
这里主要需要的信息有:建表SQL、表的主键外键、表的索引
先通过导出数据库结构的方式,用户模式下
pg_dump -U postgres -h 127.0.0.1 -p 5432 -s -f DBName.sql DBName
之后从中找到需要的表SQL,以及关系等
亦可查看得到具体的信息
\d TableName
2.备份数据文件
在目标存放路径下:
采用单个表的方式
pg_dump -U postgres -h 127.0.0.1 -p 5432 -Fc -t record DBName > DBNamerecord.dump
pg_dump -U postgres -h 127.0.0.1 -p 5432 -Fc -t customer DBName > DBNamecustomer.dump
亦或是此种,指定路径
pg_dump -U postgres -h 127.0.0.1 -p 5432 -Fc -t customer DBName > /testspeakdb.dump
说明:-t指定表名,-Fc二进制模式(使用此种即可)
3.新建DB
CREATE DATABASE tbackDBName WITH OWNER = postgres ENCODING=‘UTF-8’;
4.新DB下创建表
据2中表结构,注意暂时创建表,以及表所有权
eg:customer表
CREATE TABLE customer (
phone character varying(20) NOT NULL,
gender character varying(10),
birth_year integer,
);
ALTER TABLE customer OWNER TO postgres;
5.恢复
在dump存放路径下:
pg_restore -U postgres -h 127.0.0.1 -p 5432 -t record -d tbackDBName2 DBNamerecord.dump > a.txt 2>&1
说明:-t指定表名,-d DB名称
6.检查
count、以及查看几行数据
7.表的最终完善
表的主键外键、表的索引
eg:customer表
ALTER TABLE ONLY customer
ADD CONSTRAINT customer_pkey PRIMARY KEY (phone);