postgres数据库备份与恢复(宿主机和容器)

数据备份与恢复

pg_dump

docker容器操作:

导出数据库:

1
2
3
docker exec -t -u postgres {容器 id} pg_dump {数据库名称} -c > {文件名称}
示例:
docker exec -t -u postgres 6666 pg_dump isip -c > dump.sql

恢复数据库:

1
2
3
cat your_dump.sql | docker exec -i {容器 id} psql -U {用户名} -d {数据库名称}
示例:
cat your_dump.sql | docker exec -i 6666 psql -U postgres -d isip

宿主机操作:

宿主机备份数据库:

1
2
3
pg_dump -h {主机ip} -U {用户名} {数据库名称} > {备份地址文件}
示例:
pg_dump -h 192.168.199.253 -U isip isip > /tmp/beifen253.sql

宿主机恢复数据库:

1
2
3
psql -h {主机 ip} -U {用户名} -d {数据库名称} <  {备份地址文件}
示例:
psql -h 192.168.199.253 -U isip -d isip < /beifen.253.sql

copy

docker 容器操作:

导出数据:

1
2
3
docker exec -t -u {用户名} {容器id} psql -d {数据库名称} -c 'copy {表名称}({字段名},{字段名}) to stdout with csv' > {文件名}
示例:
docker exec -t -u postgres b57988 psql -d isip -c 'copy result(target,comp_uuid,version,create_time,update_time) to stdout with csv' > result.csv

导入数据:

1
2
3
4
5
docker cp {文件名} {容器 id}:{文件地址}
示例:
docker cp new_result.csv b579:/

\copy result(target,comp_uuid,version_uuid,create_time,update_time) from 'new_result.csv' with csv;

宿主机操作:

宿主机导出数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
copy {表名称} to {文件名} with {文件格式}

示例:
COPY user TO '/tmp/data/test.csv' WITH csv;

也可以导出指定的属性:
COPY user(name,password) TO '/tmp/data/test.csv' WITH csv;

也可以使用select 语句:
COPY (select * from user) TO '/tmp/data/test.csv' WITH csv;

也可以指定要导出哪些字段:
COPY (select name,age from user) TO '/tmp/data/test.csv' WITH csv header;

宿主机导入数据:

1
2
3
4
5
6
7
copy {表名称} from {文件名称} whth {文件格式}

示例:
COPY user FROM '/tmp/data/test.csv' WITH csv;

如果导出的时候,指定了header属性,那么在导入的时候,也需要指定:
COPY user(name, age) FROM '/tmp/data/test.csv' WITH csv header;

修改自增长 id

1
2
3
select setval('{表名称}_id_seq',(select max(id) from {表名称}));
示例:
select setval('isip_id_seq',(select max(id) from isip));

强制杀死数据库进程

1
2
3
select pg_terminate_backend(pid) from pg_stat_activity where DATNAME = '表名称'
示例:
select pg_terminate_backend(pid) from pg_stat_activity where DATNAME = 'isip'

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!