TeleDB提供了一些特性用于把復雜的 postgresql.conf文件分解成子文件。在管理多個具有相關但不完全相同配置的服務器時,這些特性特別有用。
除了單個參數設置,postgresql.conf文件可以包含包括指令,它指定要讀入和處理的另一個文件,就好像該文件被插入到配置文件的這個點。這個特性允許一個配置文件被劃分成物理上獨立的部分。包括指令看起來像:
include 'filename'
如果文件名不是一個絕對路徑,它將作為包含引用配置文件的目錄的相對位置。包括可以被嵌套。
也有一個include_if_exists指令,它的作用和include指令一樣,不過當被引用的文件不存在或者無法被讀取時其行為不同。一個通常的include將認為這是一個錯誤情況,
而include_if_exists僅僅記錄一個消息并且繼續處理引用配置文件。
postgresql.conf文件也可以包含include_dir指令,它指定要被包含的配置文件的一整個目錄。它的用法類似:
include_dir 'directory'
非絕對目錄名被當做包含引用配置文件的目錄的相對路徑。在該指定目錄中,只有以后綴名.conf結尾的非目錄文件才會被包括。以. 字符開頭的文件名也會被忽略,因為在某些平臺上它們是隱藏文件。一個包括目錄中的多個文件被以文件名順序處理(根據 C 區域規則排序,即數字在字母之前并且大寫字母在小寫字母之前)。
包括文件或目錄可以被用來在邏輯上分隔數據庫配置的各個部分,而不是用一個很大的postgresql.conf文件。考慮一個有兩臺數據庫服務器的公司,每一個都有不同的內存量。很可能配置的元素都會被共享,例如用于日志的參數。但是兩者關于內存的參數將會不同。并且還可能會有服務器相關的自定義。一種管理這類情況的方法是將你的站點的自定義配置修改分成三個文件。你可以把下面的內容加入到你的postgresql.conf文件末尾來包括它們:
include 'shared.conf' include 'memory.conf' include 'server.conf'
所有的系統將會有相同的shared.conf。每個有特定內存量的服務器可以共享相同的memory.conf。你可能對所有 8GB 內存的服務器有一個,而對那些 16GB 內存的服務器有另一個。并且最后server.conf可以裝有真正服務器相關的配置信息。
另一中可能性是創建一個配置文件目錄并把這個信息放到其中的文件里。例如,一個conf.d目錄可以在postgresql.conf的末尾被引用:
include_dir 'conf.d'
然后你可以這樣命名conf.d目錄中的文件:
00shared.conf 01memory.conf 02server.conf
這種命名習慣建立了這些文件將被載入的清晰順序。這是很重要的,因為在服務器讀取配置文件時,對于一個特定的參數只有最后碰到的一個設置才會被使用。在這個例子中,conf.d/02server.conf設置的東西將會覆蓋在 conf.d/01memory.conf中相同參數的值。
你還可以使用這種配置目錄方法,在命名文件時更有描述性:
00shared.conf 01memory-8GB.conf 02server-foo.conf
這種形式的安排為每個配置文件變體給定了一個唯一的名稱。當多個服務器把它們的配置全部存儲在一個位置(例如在一個版本控制倉庫中)時,這可以幫助消除歧義(在版本控制下存儲數據庫配置文件是另一個值得考慮的好方法)。
TeleDB通常將配置文件拆分為 postgresql.conf和postgresql.conf.user文件,postgresql.conf文件中配置通用的,實例初始化運行必要的參數;postgresql.conf.user中配置由實例初始化化時模版提供的通用配置參數,postgresql.conf.user文件中參數設置優先級更高,當兩個配置文件中有相同參數設置時,postgresql.conf中的設置將被postgresql.conf.user覆蓋;在控制臺頁面修改的參數,將記錄在postgresql.conf.user中。
不建議使用ALTER SYSTEM來修改參數,該方式修改的參數值會被記錄在postgresql.auto.conf中,該配置文件參數加載優先級高于postgresql.conf.user和postgresql.conf,將覆蓋這兩個配置文件中的參數,會導致通過控制臺頁面修改參數無法生效的問題。