?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
有幾種關(guān)閉數(shù)據(jù)庫(kù)服務(wù)的方法。通過(guò)給postgres 進(jìn)程發(fā)送不同的信號(hào),你就可以控制關(guān)閉服務(wù)器的不同方法。
這是智能關(guān)機(jī)模式。在接受SIGTERM后, 服務(wù)器將不允許新連接,讓存在的會(huì)話和它們的工作正常。僅當(dāng)所有的會(huì)話終止后它才關(guān)閉。 如果服務(wù)器處聯(lián)機(jī)備份模式,此外,它將等待直到在線備份模式不再是活動(dòng)的。但聯(lián)機(jī)備份模式是活動(dòng)的, 仍然允許新的連接,但是只能是超級(jí)用戶(這一例外允許連接到超級(jí)用戶終止聯(lián)機(jī)備份模式)。 如果服務(wù)器在恢復(fù)時(shí)請(qǐng)求智能關(guān)機(jī),恢復(fù)和流媒體復(fù)制將在所有通常的會(huì)話都終止后才停止。
這是快速關(guān)閉模式。不再允許新的連接,向所有活躍服務(wù)進(jìn)程發(fā)送SIGTERM (讓它們立刻退出),然后等待所有子進(jìn)程退出并關(guān)閉數(shù)據(jù)庫(kù)。 如果服務(wù)處于在線備份模式,將終止備份模式,使備份無(wú)用。
這是立即關(guān)閉模式。主進(jìn)程postgres 向所有子進(jìn)程發(fā)送SIGQUIT 并且立即退出(所有子進(jìn)程也會(huì)立即退出),而不會(huì)妥善地關(guān)閉數(shù)據(jù)庫(kù)系統(tǒng)。 這樣做會(huì)導(dǎo)致下次啟動(dòng)時(shí)的恢復(fù)(通過(guò)重放WAL日志)。 我們推薦只在緊急的時(shí)候使用這個(gè)方法。
pg_ctl程序提供了一個(gè)發(fā)送這些信號(hào)關(guān)閉服務(wù)的便利接口。 另外,你在非windows系統(tǒng)下可以用kill直接發(fā)送這些信號(hào)。 可以用ps命令或者從數(shù)據(jù)目錄里的 postmaster.p id文件中找出postgres的 PID。所以,舉例來(lái)說(shuō),要做一次快速關(guān)閉:
$kill-INT`head-1/usr/local/pgsql/data/postmaster.p id`
Important: 關(guān)閉服務(wù)器時(shí)最好不要使用SIGKILL。 這樣做將會(huì)阻止服務(wù)器釋放共享內(nèi)存和信號(hào)量,則可以開(kāi)始一個(gè)新的服務(wù)器之前,可能需要手動(dòng)完成。 此外,使用SIGKILL殺掉postgres進(jìn)程,還沒(méi)有傳遞信號(hào)到它的子進(jìn)程, 所以必須手工殺死個(gè)別子進(jìn)程。
要終止單個(gè)會(huì)話同時(shí)允許其他會(huì)話繼續(xù),使用pg_terminate_backend()
(參閱Table 9-55)
或發(fā)送SIGTERM信號(hào)到該會(huì)話相關(guān)的子進(jìn)程。