You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:21:51