PostgreSQL:也谈 pg_dumpall

pg_dumpall 可以导出所有数据库,类似 pg_dump,但用得非常少,原因可能是多方面的,例如以下:

  1. pg_dumpall 导出所有数据库到一个脚本文件,维护不方便;
  2. pg_dumpall 依次导出所有库,总耗时比并行 pg_dump 各个库要多;
  3. pg_dumpall 仅支持导出文件格式,还原时不能使用 pg_restore 有效使用并行等参数。

诸如以上不足之处,使得 .pg_dumpall. 使用非常有限; 尽管如此,这两天看文档时,发现 pg_dumpall 在取全局对像时非常方便,例如取数据库上的表空间(tablespace),用户(roles)等,这在数据库迁移时非常有用,下面以 9.2 版本为例简单演示下:

导出所有 Role 和 Tablespace

1.1 导出 role 和 tablespace

1
[pg92@redhatB tf]$ pg_dumpall -g > pg92_globle.sql

1.2 查看 pg92_globle 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[pg92@redhatB tf]$ view pg92_globle.sql

--
-- PostgreSQL database cluster dump
--

SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;

Roles


CREATE ROLE francs;
ALTER ROLE francs WITH NOSUPERUSER NOINHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD 'md53dd797adaf7158f9625ccda805c4d881';
CREATE ROLE londiste_reader;
ALTER ROLE londiste_reader WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION;
....


Tablespaces


CREATE TABLESPACE tbs_skytf OWNER postgres LOCATION '/database/pg92/pgdata/pg_tbs/tbs_skytf';
REVOKE ALL ON TABLESPACE tbs_skytf FROM PUBLIC;
REVOKE ALL ON TABLESPACE tbs_skytf FROM postgres;
GRANT ALL ON TABLESPACE tbs_skytf TO postgres;
GRANT ALL ON TABLESPACE tbs_skytf TO skytf;
...
CREATE TABLESPACE tbs_francs OWNER postgres LOCATION '/database/pg92/pgdata/pg_tbs/tbs_francs';
REVOKE ALL ON TABLESPACE tbs_francs FROM PUBLIC;
REVOKE ALL ON TABLESPACE tbs_francs FROM postgres;
GRANT ALL ON TABLESPACE tbs_francs TO postgres;
GRANT ALL ON TABLESPACE tbs_francs TO francs;

备注:上面省略部分输出。

仅导出 Role

1
[pg92@redhatB tf]$ pg_dumpall -r > pg92_roles.sql

仅导出 Tablespace

1
[pg92@redhatB tf]$ pg_dumpall -t > pg92_tablespace.sql

备注: 这里的 -t 是指导出所有表空间,和 pg_dump 的 -t 不一样。

参考

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/237977.html

(0)
上一篇 2022年1月29日 22:32
下一篇 2022年1月29日 22:32

相关推荐

发表回复

登录后才能评论