2012-11-16 23 views
1

我正在做一些postgres數據庫的維護工作,一個特定的表有兩個狀態列,我想轉換成一個位掩碼列。這個數據庫使用了許多不同的存儲過程來進行數據操作,而這些數據操作很難被單元測試覆蓋。如何確定哪些存儲過程在其查詢中使用某個表?

有沒有辦法判斷這個表是否在任何存儲過程的查詢中使用?那麼,除了使用psql中的\df+開關手動檢查每個過程的身體。

回答

3

不幸的是,沒有。 plpgsql函數的主體只是一個在調用時保存並執行的字符串。當你創建一個函數時,只會在其上運行表面語法檢查。

有時這是一種祝福。其他時候,這是一個詛咒。

我在這種情況下做了什麼:轉儲模式並用vim(或grep或您選擇的工具)搜索轉儲。

pg_dump $DB -p $PORT -s -f filename.pgsql 

如果您的所有功能駐留在一個特定的模式(!同一個詞,含義不同),補充一下:-n $SCHEMA

+0

謝謝,這是完美的! –

+1

你不需要轉儲數據庫/模式:pg_catalog.pg_proc有prosrc列,其中包含源代碼 – mys

+0

@OndrejIvanic:是的,但通過掃描轉儲,你可以找到* all *引用,包括註釋和其他對象。 –

相關問題