2013-11-22 44 views
3

我有一個名爲test的id表,其中包含id列。並且id列已經被稱爲「test_id_seq」的序列更新。該測試表由用戶「A」創建,另一個用戶「B」具有讀取權限。從用戶「B」創建表的轉儲時。使用下面的評論在postgres中轉儲一個沒有序列表的表

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

它顯示像錯誤

的pg_dump:[歸檔(DB)查詢失敗:錯誤:拒絕關係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)該表中,則結果是,無需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和不需要權限讀取它。

相關問題