gpt4 book ai didi

postgresql - 在postgres中转储没有序列表的表

转载 作者:行者123 更新时间:2023-11-29 11:37:55 24 4
gpt4 key购买 nike

我有一个名为 test 的表,其中包含 id 列。并且 id 列已按称为“test_id_seq”的序列更新。此测试表由用户“A”创建,另一个用户“B”具有读取权限。在为用户“B”的表创建转储时。使用以下注释

pg_dump -U B -t test rafiu > test.sql

它显示错误如

pg_dump:[archiver (db)] 查询失败:错误:关系 test_id_seq 的权限被拒绝

有没有只转储表的选项?

最佳答案

当列“拥有”序列时,它会随列转储,因此生成转储的用户必须有权访问它(GRANT SELECT ON sequence_name TO username)

这发生在使用 SERIAL/BIGSERIAL 伪数据类型时。但是,之后仍然可以通过发出以下命令将序列从列中分离出来:

ALTER SEQUENCE test_id_seq OWNED BY none;

在那之后,为 test.ID 分配默认值的序列将继续照常工作,但 pg_dump 将不会尝试将序列转储到表中。


如果表是从一开始就使用预先存在的序列创建的(不使用 SERIAL),那么结果是相同的,不需要 ALTER SEQUENCE。

例子:

create sequence seq1;
create table test1 (id int default nextval('seq1'));

在这种情况下,表将使用 pg_dump -t test1 转储为:

CREATE TABLE test1 (
id integer DEFAULT nextval('seq1'::regclass)
);

没有对 seq1 的其他引用,也不需要阅读它的权限。

关于postgresql - 在postgres中转储没有序列表的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com