PostgreSQL中数据库脱机/联机操作的等效命令是什么
PostgreSQL 实现数据库定时停用/启用方案
PostgreSQL 没有和 MSSQL Server 完全一一对应的 Take Offline/Bring Online 原生脱机/联机命令,但可以通过以下方案实现「每日定时停用数据库数小时、禁止所有业务访问」的需求,按适配度从高到低排序:
方案1:设置数据库级连接禁止(最推荐,效果完全匹配脱机需求)
PostgreSQL 支持数据库级的连接开关参数,设置后直接拒绝所有普通用户到目标库的新连接,配合踢掉现有连接的操作,就能达到和MSSQL脱机一致的访问阻断效果,操作无锁、秒级生效,不需要重启实例。
停用(对应MSSQL Take Offline)操作
切换到postgres系统库,执行以下SQL:
-- 1. 关闭目标库的新连接准入 ALTER DATABASE <你的目标数据库名> SET allow_connections = off; -- 2. 强制断开该库当前所有已建立的业务连接 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '<你的目标数据库名>' AND pid <> pg_backend_pid(); -- 排除当前执行命令的连接,避免命令中途被断开
执行完成后,除PostgreSQL超级用户外,所有账号都无法连接该数据库,库的所有读写访问会被完全阻断。
启用(对应MSSQL Bring Online)操作
需要恢复访问时,执行以下SQL即可:
-- 重新开放目标库的连接准入 ALTER DATABASE <你的目标数据库名> SET allow_connections = on;
- 注意:该参数仅超级用户有权限修改,不会修改数据库内的任何数据,也不会变更数据库文件状态,安全无风险。
- 版本说明:
allow_connections参数从 PostgreSQL 14 版本开始提供。
方案2:撤销数据库连接权限(兼容所有PG版本)
如果使用的PostgreSQL版本低于14,通过撤销公共连接权限的方式可以实现完全相同的阻断效果:
停用操作
-- 1. 撤销所有普通用户的目标库连接权限 REVOKE CONNECT ON DATABASE <你的目标数据库名> FROM PUBLIC; -- 如果之前给个别业务账号单独授过连接权限,需要逐个撤销,示例: -- REVOKE CONNECT ON DATABASE <你的目标数据库名> FROM <业务账号名>; -- 2. 踢掉现有连接 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '<你的目标数据库名>' AND pid <> pg_backend_pid();
启用操作
-- 恢复公共连接权限 GRANT CONNECT ON DATABASE <你的目标数据库名> TO PUBLIC; -- 如果之前撤销过个别账号的权限,对应重新授权即可
定时自动执行配置
需要每日固定时间自动停用/启用的话,直接把对应SQL配置到系统定时任务即可,以Linux下常用的crontab为例(假设目标库名为business_db,每天凌晨2点停用、6点恢复):
# 编辑postgres用户的定时任务 crontab -u postgres -e
写入以下规则:
# 每日2点整停用数据库 0 2 * * * psql -c "ALTER DATABASE business_db SET allow_connections = off; SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='business_db' AND pid<>pg_backend_pid();" # 每日6点整启用数据库 0 6 * * * psql -c "ALTER DATABASE business_db SET allow_connections = on;"
注意事项
- 多库共用同一个PG实例的场景下,不要直接停整个PG实例来实现单库停用,这种方式会中断实例下所有数据库的服务,影响范围过大。只有实例上仅运行这一个业务库时,才可以考虑通过
systemctl stop postgresql/systemctl start postgresql的服务启停命令实现停用需求。 - PostgreSQL 没有MSSQL那种「脱机后可直接移动/编辑数据库物理文件」的状态,如果需要操作数据库物理文件,必须先停止整个PostgreSQL服务再操作。
内容的提问来源于stack exchange,提问作者Prasanna Kumar J
相关产品推荐
相关产品推荐

