2013-04-09 25 views
3

我搜索了,但無法得到明確的線索。 postgres中有'公共'模式。但架構在哪裏定義?當我創建一個新的數據庫時,我只會看到它。更多我想知道的是它在哪裏定義以及如何改變它。其中公共架構在postgres中定義

在此先感謝。

回答

4

當初始化數據庫集羣時,將使用initdb命令在template0template1數據庫中創建public架構。

創建新數據庫時,除非指定了其他模板,否則將複製(克隆)數據庫以創建新數據庫。模板數據庫的所有內容都被複制,因此新數據庫以public模式開始。

您可以自定義template1數據庫 - 或者創建新數據庫作爲模板,並使用CREATE DATABASE命令的TEMPLATE選項指定它們。

參見the documentation on template databases

如果您需要自定義模板,我建議將一個新的數據庫作爲模板並根據需要進行自定義。 DROPpublic模式是完全合理的。

+0

如何在模板中顯示定義?我知道了。忘記問題。 :)我想我的伴侶有時會錯誤地將他的模式放入模板1中。所以每當創建一個新的數據庫時,他的模式總是被複制。謝謝。 – Yang 2013-04-09 01:51:53

1

正如你所猜測的;它是在創建數據庫時創建的。

除了它是您在createdb之後獲得的默認模式,它是默認的search_path之外,沒有別的特別之處了。您可以免費使用DROP它,創建另一個名爲「公共」或完全沒有名爲「公共」的操作。

只要確保您在search_path中有用,或者您可能最終不得不全天輸入完全限定的名稱。

+0

是的。但我的問題在哪裏定義?當我創建一個新的數據庫時,總是有幾個表。我猜他們來自「公共」模式。希望我的理解是正確的。所以我想檢查'公共'的定義。 – Yang 2013-04-09 00:12:11

+0

根據你的編輯,我相信你正在談論[系統目錄](http://www.postgresql.org/docs/9.1/static/catalogs.html)。這些實際上生活在他們自己的模式中,但神奇地總是模式搜索路徑的一部分。 – 2013-04-09 00:16:41

+0

離系統目錄可能不遠。我在我的服務器中有幾個數據庫。所有的表都在'公共'模式中定義('\ d'可以顯示它),但是隻有創建新數據庫時,一個數據庫中的表總是存在。我明白原因在於他們處於「公共」模式。但爲什麼只有這個數據庫中的幾個表,而不是其他表也是'公共'模式。我正在檢查它。 – Yang 2013-04-09 01:36:19

相關問題