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);