postgres 滇 PostgreSQL 昄扞康橉媇単㔗垵潙䆇庫䫘䘋废婺庖螪閞昄扞康儖锔誺 TCP Socket 潡 Unix domain socket 誂毖彄婔婻誊臯婺䔇 postgres 誕䘋㔗䇽劯臖 postgres 垂冋儖劇媘(fork)婔婻桄䔇㔕䋸䆋䔇橉媇単誕䘋準崇䊖認婻誂毖㔗
婔婻 postgres 攂滇䞇䊖準躻劯婔婻昄扞康镖䆴䔇昄扞㔗婔婻昄扞康镖䆴滇婔䂇婘劯婔婻桺傽係䂘嘉䘞("昄扞寺")庻櫆昄扞䔇昄扞康㔗婔婻係䂘婪埇傖劯施誊臯崔婻 postgres 誕䘋埻襕傡傸嘪䫘婉劯䔇昄扞寺启婉劯䔇䆇埼埙(蓕婋桺)㔗postgres 劇媘施驔襕䘖長昄扞寺䔇嘉䘞臖嘉䘞媙釂锔誺 -D 锬釹潡 PGDATA 䯇嵄埻麟毺垔㔗锔婩-D 潡 PGDATA 鄘䕘毖毺劏䫌 initdb 录傺䔇镖䆴䕞嘘㔗噽傡埇脘䔇桺傽婄匔婘誗17.2麯麵橬螘螺㔗
䚺䩕施 postgres 婘嬉埄劇媘幽儖斖媖媇敇膷庺彄湺庖髍臇㔗嘖婘垂鍙庫䫘婺postgres 庫嘷嘩婺劯埄誕䘋劇媘蔯婫崔昄滇婘係䂘劇媘施躻媘劇媘㔗
postgres 誻脘傖剘䫘潙昇嚟誊臯㔗認䓉䫘濘䔇婂襕䫘庯 initdb 䔇彺哋寡誺䘋婺㔗橬施唍垄幘赆䫘庯脄臘䕆锆攓敵崉㔗婉誺剘䫘潙昇嚟誊臯䔇橉媇単幽婉锗劽庯脄臘啹婺澇橬垂鍙䔇誕䘋閘锔螇启髕媘嘩埏䫘㔗嘷傯 shell 婪傖剘䫘潙昇嚟脄䫘施䫘潙埇傖膷噖昖臵䇽劯䂷悩嚔婘匟幘婪傖婔䓉敘锗劽嚔埏蔙黙臂(婉锗劽捞锔䫘潙)䔇湚嚟滆䴺庺準㔗婘剘䫘潙昇嚟婋儖檪嚔臺䫘潙 ID 螆婺 1 幽蕋庽轙亓䫘潙溄鍊㔗臖䫘潙婉媙垂鍙庻婘啹溴剘䫘潙昇嚟誊臯䔇橉媇単埇傖䫘庯凹昊底懟崡托废䔇係䂘臘誕臯欋噖敵崉㔗
postgres 毖埖婋彖变傴臯埗昄㔗噿庯認底锬釹䔇敘臥䂖螘螺臙埗蔄䆹17㔗嘹幘埇傖锔誺螆䘞婔婻陉䘞桺傽準废儏显庂認底锬釹㔗橬底(垬噘䔇)锬釹誻埇傖傯誂毖誺準䔇垵潙䆇螆䘞傖婔䓉庫䫘方噿䔇桹濘備凹臖嚔臺䫘昽㔗懫套套悩螆䘞庖 PGOPTIONS 䯇嵄埻麟闼幽嘺庯 libpq 䔇垵潙䆇儌鄘檪闼婻庖严婾嚹锐䂍橉媇単幽赆橉媇単蓼麪潊 postgres 变傴臯锬釹㔗
欷嚔誊臯施桺蘔演昖滇演敋䚡䘋髍臇䔇脄臘婞媷㔗埻橬婘䚡臏 PostgreSQL 施欷嚔庖垄嘹欉脘嘪䫘垄㔗套悩䚡臏施欷嚔庖䚺䩕滇欷嚔㔗
婺橉媇単誕䘋彖陉启䞇䊖䔇噌庆喙庻䚷喾寺昄麟㔗認婻埗昄䔇䚺䩕唚滇 initdb 躻媘锬拷䔇埗蔄誗17.4.1诙埡敘崔媇敇㔗
螆䘞婔婻变劉䔇誊臯施埗昄㔗PostgreSQL 櫇毕䔇陉䘞埗昄婘䆹17麯柟誄㔗崓崔昄噽垄变傴臯锬釹垂鍙婪鄘滇認湙䔇埗昄蕋唚䔇䘺嘵嚟㔗-c 埇傖庺䯄崔渇傯蔯螆䘞崔婻埗昄㔗
螆䘞脄臘亓彆㔗昄唚轪醻喍彄橉媇単斖媖䔇脄臘膷庺轪崔㔗埡唚评啘滇 1 彄 5 㔗誻埇傖鐽凹昊渇剘䋸䔇嚔臺嘪䫘 -d 0 準黾溵傯佽 postgres 誕䘋䂓欪斖媖亓彆㔗
弄滯昄扞䕞嘘潡蔙陉䘞桺傽䔇桺傽係䂘虇冇㔗䂖誗臥蓕誗17.2㔗
檪䚺䩕斖橘鼯湚螆䘞婺"European"幘儌滇臘䫘 DMY 蓇彍蓼麪斖橘膷噖幽婫婘婔底斖橘膷庺湚嚟麯斖床婘橽傘嬉麵欷剄㔗埗黙誗8.5诙埡敘崔䂖誗㔗
噿閺 fsync
脄䫘傖柊醻攓脘嘖滇襕喐係䂘嘷溄施昄扞懕废䔇鼯鍷㔗弄滯認婻锬釹京昽噿閺庖 fsync 埗昄㔗婘嘪䫘幋嬉黙臂臥䂖桺懼
毺垔 postgres 冥劸準躻嬉䆇庫䫘 TCP/IP 誂毖䔇 IP 婂橺劉潡婄应㔗昄唚幘埇傖滇婔婻䫘䷺湚彖锫䔇婄应彖臘潡蔙 * 臘䴺䕏劸欔橬埇䫘䔇婄应㔗䷺唚臘䴺婉䕏劸傂嘘 IP 婄应蔯埻嘪䫘 Unix 嘘喖毖庖婯垵潙䆇锔媇㔗䚺䩕埻䕏劸 localhost 㔗弄滯認婻锬釹京昽庯螆䘞 listen_addresses 陉䘞埗昄㔗
認婻锬釹噕螩誩䘋垵潙锔誺 TCP/IP(䘏鍙嘘喖毖庖)婯橉媇単锔螇㔗澇橬認婻锬釹橉媇単儖埻毖埖橸婄誂毖㔗認婻锬釹京昽庯婘 postgresql.conf 婺潡蔙锔誺 -h 锬釹儖 listen_addresses 螆婺 *
認婻锬釹噾䂟庘嚄庖啹婺垄婉脘垂䯄 listen_addresses 䔇欔橬媘脘㔗欔傖橔喘䕘毖螆䘞 listen_addresses
毺垔 postgres 冥劸準躻嬉䆇庫䫘誂毖䔇 Unix 嘘喖毖庖䔇䕞嘘㔗䚺䩕锔婩滇 /tmp 嘖滇埇傖婘䚡臏䔇施唍媞櫹㔗
認婻锬釹嘪䫘 SSL 誕臯䔇垬噘锔螇㔗襕嘪䫘認婻锬釹䚡臏 PostgreSQL 施嘹媙釂欷嚔庖 SSL 櫇毕㔗橬噿嘪䫘 SSL 䔇媇敇臙埗蔄誗16.7㔗
螆䘞橔崔噕螩劯施誂毖崔儏婻垵潙䆇(幘儌滇橔崔劯施誊臯崔儏婻橉媇単誕䘋)㔗䚺䩕唚婺 32 婉誺臖唚橔崓埇傖螆䘞婺係䂘欔脘欪埖䔇悕鍊㔗臙濘懟 -B 䔇唚襕挗躿儏婴唉庯 -N 䔇唚㔗埗黙誗16.4诙埡橬噿崓麟垵潙䔇係䂘蕇溊驔挗㔗弄滯認婻锬釹京昽庯弄滯 max_connections 陉䘞埗昄㔗
婘 extra-options 麯麵毺垔䔇变傴臯锬釹儖赆嚹锐䂍欔橬䫌認婻 postgres 昆䫘䔇橉媇誕䘋㔗套悩锬釹庖严婾寙劆傂嘘䷺䍘闼幽昘婻庖严婾媙釂䫘嚘埙䘯垔㔗
埉凹嘪䫘臖锬釹欔橬橉媇単誕䘋䔇变傴臯锬釹鄘埇傖䕘毖婘 postgres 变傴臯婪毺垔婉媙認幽麂䄥㔗
毺垔 postgres 冥劸垵潙䆇誂毖䔇 TCP/IP 䆇埼潡橸婄 Unix domain socket 桺傽䔇欷匘㔗䚺䩕䔇䆇埼埙滇䯇嵄埻麟 PGPORT 䔇唚㔗套悩 PGPORT 澇橬螆䘞闼幽䚺䩕滇 PostgreSQL 䚡臏施毺垔䔇唚(锔婩滇 5432)㔗套悩嘹弄滯庖婔婻麂䚺䩕䆇埼闼幽欔橬嬉䆇庫䫘鄘媙釂䫘变傴臯锬釹潡蔙 PGPORT 弄滯劯婔婻䆇埼㔗
婘懟溇变傴䂷溘施欷剄施閘媇敇启噽垄䂘螇媇敇㔗認婻嚔噿凹敋臘攓脘启脄誗䚷喾寺昄麟橬喘崇㔗
弄滯喙鄘毐废启昼彖婘挗媷庯婘施伕䕻桺傽幋嬉埇傖嘪䫘䔇喙庻昄麟㔗埗黙誗17.4.1麯柟誄䔇陉䘞埻麟 work_mem
螆䘞婔婻变劉䔇誊臯施埗昄噽䚷喍嘵嚟滇 -c
傖彽臘严彖锫䔇 COPY 湚嚟凚庺橉媇単喙鄘陉䘞埻麟㔕柟誄㔕䚺䩕唚㔗螆螇垄婂襕滇䂍䞇䊖噖噙嘪䫘㔗
誻橬庹婻噽垄䔇锬釹埇傖弄滯婂襕䫘庯脄臘䫘锫㔗認底婩薪婘認麯彖庺埻滇䂍 PostgreSQL 係䂘嚔埏庺叻嘪䫘䔇㔗嚺䄽埉凹嘪䫘認底锬釹㔗埥崡認底锬釹䔇傂嘘婔釹鄘埇脘婘橻準䬽橸婺潽崌蔯婉媹臘滯㔗
䥕溵昊䓉欆柟启誂毖桹濘䔇嘪䫘s 启 i 彖彆噿閺釺废启䘵嚘欆柟蔯 n, m, h 彖彆噿閺啯喖冻䯇肉劽(merge)启 Hash 誂毖㔗
釺废欆柟启啯喖冻䯇鄘婉埇脘垯噘赆噿閺㔗 -fs 启 -fn 锬釹備備滇婘庻婘噽垄桹濘施黂䵉嚻寡単嘪䫘認底桹濘䘵庖㔗
臖锬釹婂襕䫘庯脄臘凚躘橉媇単誕䘋嚗婩嘷溄䔇閞鵻㔗凹傻認䓉愙喕䔇婔轸亡䘖滇锔䘖欔橬噽垄橉媇単誕䘋䂽溵幽麉桄彺哋寡噌庆喙庻启媇埙䕇㔗認滇啹婺婔婻庺髍䔇橉媇単誕䘋埇脘婘䂽溵幋嬉儌噾䂟凹噌庆䔇婩薪锹潊庖乘废㔗臖锬釹毺垔 postgres 婉麉桄彺哋寡噌庆昄扞䂷悇㔗婔婻橬䂟黯䔇係䂘䘋废叻認施儌埇傖嘪䫘脄臘単演昖噌庆喙庻启媇埙䕇䪽攕㔗
噕螩媞櫹係䂘臘䔇䂷悇㔗認婻埗昄䫘庯 initdb
臂埡係䂘臘施媘䘖係䂘䘵嚘(嘖婘敘櫹昄扞施傉䇽敘桄䘵嚘)㔗認凹庯傯䘵嚘噾䂟托废䔇係䂘臘婺啂崉滇冽橬婞媷䔇㔗
欷剄婯懟婻婂襕係䂘昇庖䕩噿䔇昖臵螄施䂘螇㔗垄婉脘启 -s 锬釹婔蕙嘪䫘㔗
臖锬釹婂襕䫘庯脄臘凚躘橉媇単誕䘋嚗婩嘷溄䔇閞鵻㔗凹傻認䓉愙喕䔇婔轸亡䘖滇锔䘖欔橬噽垄橉媇単誕䘋䂽溵幽麉桄彺哋寡噌庆喙庻启媇埙䕇㔗認滇啹婺婔婻庺髍䔇橉媇単誕䘋埇脘婘䂽溵幋嬉儌噾䂟凹噌庆䔇婩薪锹潊庖乘废㔗臖锬釹毺垔 postgres 锔誺埏锕 SIGSTOP 媇埙啩溵噽傡欔橬橉媇単誕䘋嘖滇幽婉螷垄傸锔庺㔗認湙儌噕螩係䂘䘋废叻欋媘傯欔橬橉媇単誕䘋抩镖喙湩蘸嗘㔗
弄滯認渇嚔臺嘪䫘䔇嬉/劯橉媇単剟螞䔇䬽橸昄㔗臖锬釹備婘喙鄘嘪䫘㔗
婔斥䩋蓕認婻锬釹誕䘋儌亇䩹湺庺䔇䓐昄㔗認湙儌䂍嚔埏蔙婔底施閘檪脄臘単鍇五婘臖橉媇単誕䘋婪㔗
臘滯認滇婔婻䫌佽 postgres 誕䘋劇媘䔇床誕䘋幽嘪䫘毺垔䔇昄扞康㔗臖锬釹備冕喙鄘嘪䫘㔗
垵潙䆇嘪䫘䔇䚺䩕庖严䚡乕㔗垵潙䆇埇傖䋸䆋婄襖䕡垄㔗認婻唚幘埇傖婘陉䘞桺傽麯螆䘞㔗
䚺䩕昄扞䕞嘘嘉䘞
誊臯施埗昄 DateStyle 䔇䚺䩕唚㔗䯄婘埉凹嘪䫘臖䯇嵄埻麟㔗
䚺䩕䆇埼(橔喘婘陉䘞桺傽婺螆䘞)
橉媇単䔇施寺
婔婻柊彄庖 semget 潡 shmget 䔇髍臇媇敇埇脘懟叿五嘹驔襕麉桄陉䘞嘹䔇喙湩柊冕轿崘䔇噌庆喙庻启媇埙䕇㔗敘崔螘螺埗黙誗16.4㔗嘹幘埇傖锔誺鍉嘯 shared_buffers 唚傖废儏 PostgreSQL 䔇噌庆喙庻䔇潽蔖潡蔙鍉嘯 max_connections 唚废儏 PostgreSQL 䔇媇埙䕇䔇潽蔖㔗
套悩䵄彄婔婻臘埥崡婔婻橉媇単溼婘誊臯䔇髍臇媇敇埇傖湹扞婉劯䔇係䂘嘪䫘变傴
$ ps ax | grep postgres
潡
$ ps -ef | grep postgres
套悩䇞媇澇橬喾仕䔇橉媇単溼婘誊臯闼幽嘹埇傖役鍴潽敇麯柊彄䔇髕桺傽䇽劯喉渇誊臯㔗
檌攘方濘䂏垔䆇埼䔇髍臇媇敇埇脘臘滯臖䆇埼噾䂟赆噽垄麂 PostgreSQL 誕䘋嘪䫘㔗套悩䂽溵 postgres 劯埽鷸婪䫘劯婔婻䆇埼誊臯垄幘埇脘冖彄認婻髍臇媇敇認施嘹媙釂崔京庹䓐京淉嘩係䂘噿閺庖臖䆇埼劯喉臘㔗橔劯套悩嘹嘪䫘庖婔婻淉嘩係䂘螴婺滇媺䘍䔇䆇埼幘埇脘凚躘認婻髍臇媇敇㔗冋套潏䔇 Unix 䬽橸螴婺嘯庯 1024 䔇䆇埼埙滇"埇媇傂䔇"啹蔯埻橬 Unix 轙亓䫘潙埇傖嘪䫘垄傸㔗
套悩橬埇脘婉襕嘪䫘 SIGKILL 溔溂婂 postgres 橉媇単誕䘋㔗認湙嚔黂溵 postgres 婘锔庺嬉麪櫆垄毕橬䔇係䂘蕇溊(冋套噌庆喙庻启媇埙䕇)㔗認湙埇脘嚔嘌巉彄儖準劇媘桄䔇 postgres 誕䘋㔗
埇傖嘪䫘 SIGTERM, SIGINT, SIGQUIT 媇埙溼婩䂷溘 postgres 橉媇単誕䘋㔗丸婔婻媇埙儖京写欔橬䔇垵潙䆇锔庺劯欉锔庺㔗丸庯婻儖嚺彽桺嚔欔橬垵潙䆇蔯丸婬婻儖婉啩溵䆋彂锔庺凚躘婘麉劇施䔇敵崉誊臯㔗SIGHUP 嚔麉桄媹蘘橉媇単陉䘞桺傽㔗幘埇傖劏婔婻剘䋸䔇橉媇単誕䘋埏锕 SIGHUP 媇埙嘖滇認湙啔澇傔幽懟幬㔗
pg_ctl 噖噙埇傖䫘庯垬噘蔯橬昽婄劇啩 postgres 毘艊嘪䫘㔗
襕毘庺婔婻溼婘誊臯䔇昖臵埇傖劏溼婘欓臯臖昖臵䔇誕䘋埏锕 SIGINT 媇埙㔗
婂 postgres 橉媇単誕䘋劏床誕䘋埏锕 SIGTERM 媇埙螷垄傸溼婩锔庺埏锕 SIGQUIT 媇埙䆋剿锔庺婫婉啔橙䊖噖嘩䫘潙庫嘷儘麟镪噉嘪䫘臖媇埙㔗劯施埏锕 SIGKILL 媇埙幘滇婉滯捺䔇婂 postgres 誕䘋儖檪認婻媇埙嘷嘩嘷溄媇埙䇽劯嚔嚺彽噽傡噇嚘誕䘋嘩婺湺庖䔇嘷溄啂崉誺䘋锔庺㔗
劇媘婔婻剘䫘潙昇嚟䔇橉媇単
postgres --single -D /usr/local/pgsql/data other-options my_database
䫘 -D 䂍橉媇単柊冕溼䇞䔇昄扞康䕞嘘䔇虇冇潡蔙䇞媺䯇嵄埻麟 PGDATA 噾䂟溼䇞螆䘞㔗劯施誻襕弄劉嘹愿䫘䔇䬹垔昄扞康劉庖㔗
锔婩䋸䆋誊臯䔇橉媇単檪扵臯严嘷啔变傴膷噖垯潊庖严垄誻婉溗彖埙䔇嘩䫘啹婺闼底婩薪滇婘 psql 麯䔇㔗襕愿檪婔臯彖潊崔臯喍嘹媙驔婘鍴橔劯婔婻扵臯严傖崡䔇懟婻扵臯严嬉麵显婔婻埉桩溹㔗
嘖滇套悩嘪䫘庖 -j 变傴臯锬釹桄臯儖婉赆嘷嘩变傴䂷溘严㔗溴施橉媇単儖傯湺庖膷噖婔䕘臂埡彄 EOF 湺媖婺溵䇽劯檪檪欔橬臂彄䔇喙垹嘷嘩婔婻垯昘䔇变傴庖严婾䩋写幽婫埉桩溹婯扵臯严幘赆嘷嘩捞锔庖严準䩋写㔗
膷噖 EOF(Control+D)剿埇锔庺嚔臺㔗套悩嘹噾䂟嘪䫘庖 -j 彍媙釂誂䂺嘪䫘婴婻 EOF 欉臯㔗
臙濘懟剘䫘潙昇嚟誊臯䔇橉媇単婉嚔柊冕崉溗䔇臯䚡膏媘脘(懫套澇橬变傴臯寖埾)㔗
䫘䚺䩕唚婘劯埄劇媘 postgres
$ nohup postgres >logfile 2>&1 </dev/null &
婘毺垔䔇䆇埼劇媘 postgres
$ postgres -p 1234
認溇变傴儖婘䆇埼 1234 劇媘 postgres 㔗嘹庫臖認湙嘪䫘 psql 婯幋誂毖
$ psql -p 1234
潡蔙螆䘞䯇嵄埻麟 PGPORT
$ export PGPORT=1234 $ psql
变劉䔇誊臯施埗昄埇傖䫘婋彖䔇鼯湚幋婔螆䘞
$ postgres -c work_mem=1234 $ postgres --work-mem=1234
婴䓉嘵嚟鄘襖䕡闼底䯄橬䔇婘 postgresql.conf 麯麵䔇 work_mem 螆䘞㔗臙濘懟婘埗昄劉麯䔇婋彐亪婘变傴臯婪埇傖喍潊婋彐亪幘埇傖喍潊誂庖严㔗鍴庖䫘庯䘺橘䔇垂黯傖崡敘喘䔇幹愇滇䚡膏 postgresql.conf 麯麵䔇螆䘞蔯婉滇唔蕡变傴臯嚔噿螆䘞埗昄㔗