Raf*_*fiu 3 postgresql postgresql-9.1
我有一个名为test with id column的表.并且id列已通过名为"test_id_seq"的序列进行更新.该测试表由用户"A"创建,另一个用户"B"具有读取权限.从用户"B"创建表的转储时.使用以下评论
pg_dump -U B -t test rafiu > test.sql
Run Code Online (Sandbox Code Playgroud)
它显示错误
pg_dump:[archiver(db)]查询失败:错误:关系test_id_seq的权限被拒绝
有没有选项只能转储表吗?
您是否尝试过使用该-T
选项来忽略序列?
pg_dump -U B -T test_id_seq rafiu > test.sql
Run Code Online (Sandbox Code Playgroud)
这应该是没有那个序列的pgdump.
当序列由列“拥有”时,它会随列一起转储,因此生成转储的用户必须有权访问它 ( GRANT SELECT ON sequence_name TO username
)
使用SERIAL
/BIGSERIAL
伪数据类型时会发生这种情况。但是,之后仍然可以通过发出以下命令将序列与列分离:
ALTER SEQUENCE test_id_seq OWNED BY none;
Run Code Online (Sandbox Code Playgroud)
之后,为test.ID
with 序列分配默认值将继续照常工作,但 pg_dump 不会尝试将序列与表一起转储。
如果表是从一开始就使用预先存在的序列(不使用SERIAL
)创建的,那么结果是相同的,无需 ALTER SEQUENCE。
例子:
create sequence seq1;
create table test1 (id int default nextval('seq1'));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该表将被转储pg_dump -t test1
为:
CREATE TABLE test1 (
id integer DEFAULT nextval('seq1'::regclass)
);
Run Code Online (Sandbox Code Playgroud)
没有其他参考seq1
,也不需要阅读许可。
归档时间: |
|
查看次数: |
6665 次 |
最近记录: |