2013-11-22 5 views
3

나는 id 컬럼을 가진 test 테이블을 가지고있다. id 열은 "test_id_seq"라는 시퀀스로 업데이트되었습니다. 이 테스트 테이블은 사용자 "A"와 다른 사용자 "B"가 읽기 권한을 가지고 만들어졌습니다. 사용자 "B"로부터 테이블에 대한 덤프를 생성하는 동안. 이 같은 오류를 보여주는포스트 그레스에서 시퀀스 테이블없이 테이블 덤프

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

다음 주석을 사용하여

pg_dump의 : [아카이브 (dB)] 쿼리 실패 : ERROR :

test_id_seq 관계에 대한 거부 권한은 덤프 어떤 옵션이 있습니까 테이블 만?

순서는 열을 기준으로, 그것은 그것으로 덤프, 그래서 덤프를 생성하는 사용자가 권한이 SERIAL/ BIGSERIAL 사이비를 사용할 때 발생 ( GRANT SELECT ON sequence_name TO username)

에 액세스하는 데 필요한 "소유"입니다

+0

정말 어떤 종류의 덤프가 필요합니까? 사용자 B에게도 액세스 할 수있는 데이터가 필요하면 --data-only 옵션을 사용하십시오. –

+0

테이블 구조와 데이터가 필요합니다. 그게 가능하니? – Rafiu

+0

시퀀스는 구조의 일부로 간주됩니다. "B"에게 서열을 덤프 할 수있는 권한을 부여하지 않는 이유는 무엇입니까? –

답변

9

-T 옵션을 사용하지 않았습니까?

pg_dump -U B -T test_id_seq rafiu > test.sql 

이 순서가없는 pgdump가 필요합니다.

2

데이터 유형. 평소와 같이 계속 작동 순서에 test.ID에 대한 기본 값을 할당, 그 후

ALTER SEQUENCE test_id_seq OWNED BY none; 

을하지만, 덤프하려는 시도를 pg_dump를하지 않습니다 것입니다 그러나, 순서는 여전히 이후 발행하여 컬럼에서 분리 할 수 ​​있습니다 테이블과 시퀀스. 테이블이 (되지 SERIAL 사용) 기존의 시퀀스의 시작에서 생성 된 경우


후 결과는 ALTER 시퀀스에 대한 필요없이 동일하다.

예 : 테이블로 pg_dump -t test1로 덤프 할 것이 경우

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

: seq1에 다른 참조하고 읽을 수있는 권한에 대한 필요없이

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

.

관련 문제