FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
您的足迹: PostgreSQL单用户模式
PostgreSQL单用户模式

单用户模式作用

PG单用户模式(stand-alone)就是在启动 postgres 程序时加上--single参数,这时postgres进程不会进入到后台模式,而是进入到一个交互式的命令行模式,例如:

[yz@localhost postgresql]$ ~/postgresql/pg_bin/bin/postgres --single -F -O -j -c search_path=pg_catalog -c exit_on_error=true template1 -D ~/postgresql/pg_data/
PostgreSQL stand-alone backend 14.0
backend>

单用户模式通常用于修复数据库,使用场景:

  1. 当多用户模式无法工作的时候,可以使用单用户模式连接进数据库。比如当事务年龄极大的时候。
  2. 修复系统表时。
  3. initdb 阶段。

注意:执行命令需要按两次回车键。

维护事务年龄

在PG中事务年龄不能超过2^31(2的31次方),如果超过了,这条数据就会丢失。

PG中不允许这种情况出现,当事务的年龄离2^31还有1千万的时候,数据库的日志中就会有如下告警:

warning:database "highgo" must be vacuumed within 177000234 trabnsactions
HINT: To avoid a database shutdown,execute a database-wide VACUUM in "highgo".

如果不处理,当事务的年龄离2^31还有1百万时,数据库服务器出于安全考虑,将会自动禁止任何来自任何用户的连接,同时在日志中是如下信息:

error: database is not accepting commands to avoid wraparound data loss in database "highgo"
HINT: Stop the postmaster and use a standalone backend to VACUUM in "highgo".

出现这种情况时,只能把数据库启动到单用户模式下,执行VACUUM命令来修复了:

[yz@localhost postgresql]$ ~/postgresql/pg_bin/bin/postgres --single template1 -D ~/postgresql/pg_data/
PostgreSQL stand-alone backend 14.0
backend> vacuum full;

退出单用户模式

使用 Ctrl + D 退出单用户模式。



打赏作者以资鼓励:
移动端扫码阅读: