2012-03-15 41 views
1

我使用以下命令從服務器的數據庫中轉儲一些結構,以便能夠在本地硬盤上創建數據樣本。如何排除導出中的PL/pgSQL函數?

pg_dump -h myserver.com -U product_user -s -f ./data/base.structure.postgresql.sql -F p -v -T public.* -T first_product.* -T second_product.* -T another_product.locales mydatabase 

我需要排除一些模式,否則它會以權限或其他錯誤結束。即使是我排除架構公衆,它轉儲所有功能在該模式,就像這樣:

REVOKE ALL ON FUNCTION gin_extract_trgm(text, internal) FROM PUBLIC; 
psql:./data/base.structure.postgresql.sql:8482: ERROR: function gin_extract_trgm(text, internal) does not exist 

我知道這來自於PostgreSQL裏的全文或相似的插件,但我不使用它,不需要它在我的機器上,所以我想排除這些功能。

我該怎麼做?

回答

3

我需要一些模式

的pg_dump有一個開關排除到排除模式

pg_dump -N schema ... 

我引述the manual about pg_dump

-N模式
--exc lude-schema = schema

請勿轉儲與架構模式匹配的任何架構。該模式按照與-n相同的規則進行解釋。 -N可以被多次提供 以排除匹配任何幾種模式的模式。
...


隨着的PostgreSQL 9.1或以後你有了新的選擇,以擴展移動到一個單獨的模式 - 即使預裝舊式模塊。您可以使用新的擴展名註冊舊對象,然後使用新工具。與fulltext和​​你可能意味着fuzzystrmatchtsearch2。例如:

註冊現有的舊式對象的擴展fuzzystrmatch

CREATE EXTENSION fuzzystrmatch SCHEMA public FROM unpackaged; 

刪除擴展:

DROP EXTENSION fuzzystrmatch; 

它安裝到另一個模式:

CREATE EXTENSION fuzzystrmatch SCHEMA my_schema; 

當然,如果擴展名的對象正在使用,則不能刪除擴展名。
另外,如果您安裝到另一個架構,則需要對其功能進行架構驗證,或將架構添加到search_path

6

有辦法做到這一點。假設您的備份名爲backup.dump。你需要做的是:

$ pg_restore -l -f out.txt backup.dump 

這將創建一個文件out.txt,其中包含轉儲中的對象列表。您需要編輯該文件並刪除不想恢復的項目。那麼你這樣做:

$ pg_restore -L out.txt -h your.host.name -U username .... backup.dump 

這將使用一個文件out.txt(你編輯)來選擇將被恢復的東西。非常方便,特別是在轉儲很大並且不能重新轉儲數據庫的情況下。