postgresql 與大多數資料庫一樣,通過schema,邏輯上劃分對象的歸屬,如圖。

使用者還可以參考《postgresql 邏輯結構 和 權限體系 介紹》
<a href="https://yq.aliyun.com/articles/41210">https://yq.aliyun.com/articles/41210</a>
因為有了schema的概念,在通路資料庫中的對象時,我們需要指定是哪個schema下面的。
例如schema_a.table。
為了友善使用者使用,postgresql 還有一個用戶端的環境參數叫search_path,用來控制搜尋路徑的順序。
例如 search_path= '"$user",public' 表示優先搜尋與目前使用者名同名的schema,如果沒有則搜尋public schema。
例如 目前使用者為a, 在資料庫中有一張表是a.tbl還有一張表public.tbl。 那麼select * from tbl,通路的是a.tbl。
我們在寫函數時,很容易忽略一點,就是搜尋路徑。
比如我寫了一個這樣的函數
會有點亂哦,tbl_core_bus表到底是哪個schema下的呢?
與search_path有關,是以如果在search_path中沒有這個表時,通路這個函數就會報錯。
是以在寫函數時務必注意,使用schema,避免這種問題。
上面的函數可以改成如下,在通路對象的前面加上schema表示
或者改成如下,設定函數的參數search_path
或者改成如下,在函數内使用set指令設定search_path
祝大家玩得開心,歡迎随時來 阿裡雲促膝長談業務需求 ,恭候光臨。
阿裡雲的小夥伴們加油,努力 做好核心與服務,打造最貼地氣的雲資料庫 。