pg_dump不能导出访问权限 pg_dumpall可以导出访问权限

本文对比了pg_dump和pg_dumpall在导出数据库时对访问权限处理的不同。pg_dump无法导出访问权限,而pg_dumpall可以。通过示例展示了使用这两个工具进行数据库导出和导入的步骤,以及在导入过程中权限设置的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pg_dump导出,psql导入:
[highgo@hg lib]$ ./pg_dump -h localhost -U highgo --port=5866 -f my_dump.sql  --inserts
[highgo@hg lib]$ psql 
psql (4.0.0)
Type "help" for help.


highgo=# 
highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | highgo=CTc/highgo+
           |        |          |             |             | =c/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | highgo=CTc/highgo+
           |        |          |             |             | =Tc/highgo
(4 rows)


highgo=# drop database test;
DROP DATABASE
highgo=# create database test;
CREATE DATABASE
highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | highgo=CTc/highgo+
           |        |          |             |             | =c/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(4 rows)


highgo=# \q
[highgo@hg lib]$ pwd
/highgo/hgdb4_server/lib
[highgo@hg lib]$ pg_restore -h localhost -p 5866 -U highgo -d test --create --verbose --format custom "/highgo/hgdb4_server/lib/my_dump.sql"
pg_restore: [archiver] did not find magic string in file header
[highgo@hg lib]$ psql -h localhost -U highgo -d test < my_dump.sql 
SET
SET
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
SET
SET
SET
CREATE TABLE
ALTER TABLE
ALTER TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
REVOKE
REVOKE
GRANT
GRANT
[highgo@hg lib]$ psql
psql (4.0.0)
Type "help" for help.


highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | highgo=CTc/highgo+
           |        |          |             |             | =c/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(4 rows)


highgo=# 
========================================================================================
========================================================================================


pg_dumpall导出,psql导入:


 ./pg_dumpall -h localhost -U highgo --port=5866 -f my_dumpall.sql  --inserts


[highgo@hg lib]$ psql 
psql (4.0.0)
Type "help" for help.


highgo=# 
highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/highgo       +
           |        |          |             |             | highgo=CTc/highgo
(4 rows)


highgo=# drop database test;
DROP DATABASE
highgo=# create database test;
CREATE DATABASE
highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(4 rows)


highgo=# CREATE ROLE highgo;
ERROR:  42710: role "highgo" already exists
highgo=# ALTER ROLE highgo WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS;
ALTER ROLE
highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(4 rows)


highgo=# ALTER ROLE test WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md505a671c66aefea124cc08b76ea6d30bb';
ALTER ROLE
highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(4 rows)


highgo=# \q
[highgo@hg lib]$ psql -h localhost -U highgo -d test < my_dumpall.sql 
SET
SET
SET
ERROR:  42710: role "aaa" already exists
ALTER ROLE
ERROR:  42710: role "highgo" already exists
ALTER ROLE
ERROR:  42710: role "test" already exists
ALTER ROLE
ERROR:  42P04: database "highgo" already exists
REVOKE
REVOKE
GRANT
GRANT
ERROR:  42P04: database "test" already exists
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "highgo" as user "highgo".
SET
SET
SET
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
SET
SET
SET
ERROR:  42P07: relation "test" already exists
ALTER TABLE
ALTER TABLE
INSERT 0 1
INSERT 0 1
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "template1" as user "highgo".
SET
SET
SET
SET
SET
SET
SET
SET
COMMENT
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
You are now connected to database "test" as user "highgo".
SET
SET
SET
SET
SET
SET
SET
SET
CREATE EXTENSION
COMMENT
REVOKE
REVOKE
GRANT
GRANT
[highgo@hg lib]$ psql
psql (4.0.0)
Type "help" for help.


highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | highgo=CTc/highgo+
           |        |          |             |             | =c/highgo
 test      | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | highgo=CTc/highgo+
           |        |          |             |             | =Tc/highgo
(4 rows)


highgo=# 
<think>好的,我现在需要回答用户关于pg_dumpall如何转储全局角色和表空间信息的问题。首先,我需要回忆pg_dumpall的基本功能和参数。根据用户提供的引用内容,特别是引用[3],pg_dumpall工具可以转储整个PostgreSQL集簇中的所有数据库,包括全局对象如角色和表空间,而普通的pg_dump不会处理这些全局对象。 接下来,用户想知道具体的使用方法。根据引用[1],有提到单独导出角色和表空间的命令。例如,使用`pg_dumpall -r`导出角色,`pg_dumpall -t`导出表空间。而引用[2]中的命令示例可能展示了完整的备份命令,包含主机、端口、用户等参数。需要将这些信息整合,分步骤说明如何单独转储角色、表空间,以及同时转储两者的方法。 另外,需要确保语法正确,比如参数是否准确。例如,`-r`参数用于角色,`-t`用于表空间,而`-g`在引用[1]中提到可能用于全局对象,但需要确认不同版本的PostgreSQL中参数是否一致。可能用户提到的`-g`是另一个参数,但根据用户提供的引用,应优先使用用户给出的例子,即`-r`和`-t`。 还需要注意转储后的文件如何恢复,比如使用psql执行生成的SQL脚本。同时,提醒用户权限问题,可能需要以postgres用户或超级用户身份运行这些命令。此外,用户可能关心转储时的其他选项,如`-c --if-exists`用于清理现有对象,这在引用[2]中出现过,可以建议在需要时使用这些选项。 最后,生成相关问题,可能需要围绕pg_dumpall的其他功能、参数区别、恢复步骤,或者与pg_dump的对比来提问。确保问题覆盖用户可能感兴趣的扩展内容。</think>### pg_dumpall转储全局角色和表空间的方法 PostgreSQL的`pg_dumpall`工具专门用于备份整个数据库集簇(Cluster),包含所有数据库及全局对象。以下为转储全局角色和表空间的具体方法: --- #### 1. **仅转储全局角色** 使用`-r`或`-g`参数生成包含所有角色/用户定义的SQL脚本: ```bash pg_dumpall -r > pg_roles.sql # 导出所有角色(如用户、权限) ``` 或 ```bash pg_dumpall -g > pg_global.sql # 导出全局对象(包含角色) ``` - **说明**:`-r`仅导出角色,而`-g`会导出角色及其他全局对象(如表空间),但不同版本行为可能有差异[^1][^3]。 --- #### 2. **仅转储表空间** 使用`-t`参数生成表空间定义脚本: ```bash pg_dumpall -t > pg_tablespace.sql ``` - **说明**:生成的脚本包含`CREATE TABLESPACE`语句及其配置[^1]。 --- #### 3. **同时转储角色和表空间** 默认情况下,`pg_dumpall`不加参数会转储所有数据库和全局对象(含角色、表空间): ```bash pg_dumpall -f full_backup.sql -h 主机IP -p 端口 -U 用户名 -v -c --if-exists ``` - **关键参数**: - `-f`:指定输出文件。 - `-h/-p/-U`:连接参数。 - `-v`:输出详细日志。 - `-c --if-exists`:在恢复前清理现有对象(避免冲突)[^2]。 --- #### 4. **恢复方法** 使用`psql`执行生成的SQL脚本: ```bash psql -h 目标主机 -p 端口 -U 超级用户 -f pg_roles.sql psql -h 目标主机 -p 端口 -U 超级用户 -f pg_tablespace.sql ``` - **注意**:需以超级用户执行,且表空间路径需在目标服务器上预先存在。 --- ### 注意事项 1. **权限问题**:执行`pg_dumpall`需具有超级用户权限。 2. **版本兼容性**:导出的脚本可能与不同PostgreSQL版本存在兼容性问题。 3. **依赖顺序**:恢复时先创建表空间,再创建角色,最后恢复数据库。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值