2013-11-22 2 views
3

У меня есть таблица с именем test с столбцом id. И столбец id обновлен последовательностью, называемой «test_id_seq». Эта тестовая таблица была создана пользователем «A», а другой пользователь «B» имеет разрешение на чтение. Создавая дамп для таблицы от пользователя «B». Используя следующий комментарийДамп таблицы без таблицы последовательности в postgres

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

он, показывая ошибку как

pg_dump: [архиватор (дБ)] Сбой запроса: ОШИБКА: разрешение отказано в связи test_id_seq

Есть ли возможность сбросить только таблица?

+0

Какую свалку вы действительно требуете? Если вам нужны данные, доступные также для пользователя B, используйте опцию -data-only. –

+0

Мне нужна структура и данные таблицы. Это возможно. – Rafiu

+0

Последовательность считается частью структуры. Любая причина не предоставлять разрешение «B» для сбрасывания последовательности? –

ответ

9

Вы пробовали использовать опцию -T, чтобы пренебречь последовательностью?

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

Это должно принимать pgdump без этой последовательности.

2

Когда последовательность «принадлежит» в колонке, он свалил с ним, так что пользователь производит дамп должен иметь права доступа к нему (GRANT SELECT ON sequence_name TO username)

Это происходит при использовании SERIAL/BIGSERIAL псевдо- типы данных. Однако последовательность все еще может быть отделена от колонки после помощью следующей команды:

ALTER SEQUENCE test_id_seq OWNED BY none; 

После этого присвоение значения по умолчанию для test.ID с последовательностью будет продолжать работать в обычном режиме, но pg_dump не будет делать попытки сбросить последовательность с таблицей.


Если таблица создается с самого начала с уже существующей последовательности (не используя SERIAL), то результат такой же, без необходимости АЪТЕК ПОСЛЕДОВАТЕЛЬНОСТИ.

Пример:

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 и нет необходимости для разрешения, чтобы читать его.

Смежные вопросы