共計 3705 個字符,預計需要花費 10 分鐘才能閱讀完成。
這篇文章主要講解了“PostgreSQL 的 pg_promote 有什么作用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“PostgreSQL 的 pg_promote 有什么作用”吧!
在 PG 12 以前的版本, 備庫提升為主庫需在備庫主機上執行命令或者通過生成觸發文件進行觸發, 在 PG 12 中, 可通過客戶端連接到數據庫后執行 pg_promote 函數實現.
下面以一個簡單的例子進行說明.
搭建流復制環境
參照
PostgreSQL DBA(31) – Backup Recovery#4(搭建流復制)
, 注意在 PG 12,recovery.conf 文件已廢棄, 相關的配置信息已合并至 postgresql.conf 文件中.
下面是搭建完畢后, 在主庫創建數據表 t1 后, 備庫的情況.
備庫
[pg12@localhost pg12db1]$ pg_ctl start
waiting for server to start....2019-06-20 17:04:04.361 CST [23158] LOG: starting PostgreSQL 12beta1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit
2019-06-20 17:04:04.362 CST [23158] LOG: listening on IPv4 address 0.0.0.0 , port 5432
2019-06-20 17:04:04.362 CST [23158] LOG: listening on IPv6 address :: , port 5432
2019-06-20 17:04:04.365 CST [23158] LOG: listening on Unix socket /tmp/.s.PGSQL.5432
2019-06-20 17:04:04.422 CST [23158] LOG: redirecting log output to logging collector process
2019-06-20 17:04:04.422 CST [23158] HINT: Future log output will appear in directory pg_log .
done
server started
[pg12@localhost pg12db1]$ psql -d testdb
psql (12beta1)
Type help for help.
testdb=# select count(*) from t1;
psql: ERROR: relation t1 does not exist
LINE 1: select count(*) from t1;
^
testdb=# select count(*) from t1;
count
-------
0
(1 row)
下面通過遠程客戶端連接到備庫, 執行函數 pg_promote 提升備庫為主庫.
[pg12@localhost pg12db1]$ psql -h 192.168.26.27 -U pg12 -d testdb
psql (12beta1)
Type help for help.
testdb=# -- Wait for at most 30 seconds.
testdb=# SELECT pg_promote(true, 30);
pg_promote
------------
t
(1 row)
日志輸出
,,,,, SELECT pg_promote(true, 30); ,,, psql
2019-06-20 17:14:22.584 CST,,,23160,,5d0b4c04.5a78,5,,2019-06-20 17:04:04 CST,1/0,0,LOG,00000, received promote request ,,,,,,,,,
2019-06-20 17:14:22.584 CST,,,23167,,5d0b4c04.5a7f,2,,2019-06-20 17:04:04 CST,,0,FATAL,57P01, terminating walreceiver process due to administrator command ,,,,,,,,,
2019-06-20 17:14:22.625 CST,,,23160,,5d0b4c04.5a78,6,,2019-06-20 17:04:04 CST,1/0,0,LOG,00000, invalid record length at 0/5016D48: wanted 24, got 0 ,,,,,,,,,
2019-06-20 17:14:22.625 CST,,,23160,,5d0b4c04.5a78,7,,2019-06-20 17:04:04 CST,1/0,0,LOG,00000, redo done at 0/5016D10 ,,,,,,,,,
2019-06-20 17:14:22.625 CST,,,23160,,5d0b4c04.5a78,8,,2019-06-20 17:04:04 CST,1/0,0,LOG,00000, last completed transaction was at log time 2019-06-20 17:04:49.180746+08 ,,,,,,,,,
2019-06-20 17:14:22.649 CST,,,23160,,5d0b4c04.5a78,9,,2019-06-20 17:04:04 CST,1/0,0,LOG,00000, selected new timeline ID: 2 ,,,,,,,,,
2019-06-20 17:14:22.738 CST,,,23160,,5d0b4c04.5a78,10,,2019-06-20 17:04:04 CST,1/0,0,LOG,00000, archive recovery complete ,,,,,,,,,
2019-06-20 17:14:22.755 CST,,,23158,,5d0b4c04.5a76,3,,2019-06-20 17:04:04 CST,,0,LOG,00000, database system is ready to accept connections ,,,,,,,,,
2019-06-20 17:14:22.764 CST,,,23277,,5d0b4e6e.5aed,1,,2019-06-20 17:14:22 CST,,0,FATAL,XX000, archive command failed with exit code 127 , The failed archive command was: /home/pg12/archive.sh ,,,,,,,,
2019-06-20 17:14:22.766 CST,,,23158,,5d0b4c04.5a76,4,,2019-06-20 17:04:04 CST,,0,LOG,00000, archiver process (PID 23277) exited with exit code 1 ,,,,,,,,,
2019-06-20 17:15:22.779 CST,,,23329,,5d0b4eaa.5b21,1,,2019-06-20 17:15:22 CST,,0,FATAL,XX000, archive command failed with exit code 127 , The failed archive command was: /home/pg12/archive.sh ,,,,,,,,
2019-06-20 17:15:22.781 CST,,,23158,,5d0b4c04.5a76,5,,2019-06-20 17:04:04 CST,,0,LOG,00000, archiver process (PID 23329) exited with exit code 1 ,,,,,,,,,
[pg12@localhost pg_log]$
pg_control 中的狀態
[pg12@localhost pg12db1]$ pg_controldata|grep state
Database cluster state: in production
從日志 狀態可看出, 備庫已提升為主庫(出錯提示是沒有找到歸檔命令).
感謝各位的閱讀,以上就是“PostgreSQL 的 pg_promote 有什么作用”的內容了,經過本文的學習后,相信大家對 PostgreSQL 的 pg_promote 有什么作用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!