我想在我的postgres數據庫中備份所有函數。如何僅在Postgres中備份函數?如何在Postgres中只備份函數
17
A
回答
36
使用pg_getfunctiondef
;見system information functions。 PostgreSQL 8.4中添加了pg_getfunctiondef
。
SELECT pg_get_functiondef('proc_name'::regproc);
要轉儲所有功能於一身的模式,你可以查詢pg_catalog
系統表;說,如果你從public
想要的一切:
SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public';
是微不足道的改變上面說「所有模式,除了那些pg_
開始」代替,如果這就是你想要的。
在psql
你可以轉儲這一個文件:
psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
要運行在另一個數據庫的輸出,使用類似:
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
如果你DB之間像複製功能儘管如此,考慮將函數定義的授權副本作爲SQL腳本存儲在版本控制系統(如svn或git)中,最好將其打包爲PostgreSQL擴展。請參閱packaging extensions。
17
你不能告訴pg_dump
只轉儲函數。但是,您可以創建沒有數據的轉儲(-s
)並在恢復時對其進行過濾。請注意0部分:這將生成一個適用於pg_restore
的文件。
先取轉儲:
pg_dump -U username -Fc -s -f dump_test your_database
然後創建的功能列表:
pg_restore -l dump_test | grep FUNCTION > function_list
最後恢復它們(-L
指定上面創建的列表文件):
pg_restore -U username -d your_other_database -L function_list dump_test
相關問題
- 1. 如何使用PGADMIN 9.6在PostgreSQL中只備份所有函數備份?
- 2. PHP postgres備份
- 3. 如何在postgres數據庫中創建單個表的備份?
- 4. 在熱備份中更改postgres用戶密碼只讀模式
- 5. postgres備份腳本不是postgres用戶
- 6. Postgres複製+增量備份
- 7. Django db備份postgres錯誤
- 8. 從Heroku導出備份Postgres
- 9. 錯誤恢復postgres數據庫備份
- 10. 遠程觸發postgres數據庫備份
- 11. 如何備份數據庫備份每天在SQL Server 2005中
- 12. 如何在Postgres中執行函數
- 13. 如何使用java備份postgres數據庫
- 14. 如何備份/恢復獨立的heroku postgres數據庫?
- 15. 如何使用java創建postgres數據庫備份
- 16. 如何在批處理文件中通過pg_dump備份所有數據庫 - postgres
- 17. 如何在wordpress中備份數據庫?
- 18. 如何在表中備份?
- 19. 只備份public_html的PHP備份腳本
- 20. 如何存儲在備份文件一定數量的備份
- 21. POSTGRES:如何在函數內調用pg_bulkload
- 22. 如何在C++中使用備份API進行備份
- 23. Postgres 9.3備份和恢復錯誤
- 24. Ubuntu上的Postgres備份腳本+ cron
- 25. Postgres從內部備份到雲
- 26. 函數中的Postgres %%
- 27. Azure備份 - Azure備份如何執行塊級增量備份
- 28. 備份SQL模式只?
- 29. Android備份/恢復:如何備份內部數據庫?
- 30. Android 2.2數據備份:如何備份DefaultSharedPreferences?
另外我想將這些函數還原到另一個db.How我可以這樣做。函數只需要恢復 – vmb
@vmb輸出是SQL函數定義,因此將它們管入psql中。查看更新的答案。更好的是,創建一個擴展並將其打包。 –
應該注意,'pg_get_functiondef('proc_name':: regproc)'**不會**轉儲函數的權限('GRANT'和'REVOKE'語句),有時候這些權限可能被認爲是函數定義的一部分。 – NumberFour