PostgreSQL关闭数据库服务的三种模式

 更新时间:2024年07月11日 10:07:26   作者:不剪发的Tony老师  
PostgreSQL 提供了三种关闭数据库服务的不同方式,它们最终都是发送一个关闭信号到 postgres 主服务进程,本文将给大家详细的介绍一下这三种模式,需要的朋友可以参考下

PostgreSQL 提供了三种关闭数据库服务的不同方式,它们最终都是发送一个关闭信号到 postgres 主服务进程。

智能关闭模式

智能关闭(Smart Shutdown)模式向 postgres 主服务进程发送一个 SIGTERM 信号。此时服务器不允许新的客户端连接,同时等待已有会话正常完成工作。当所有会话都主动终止连接之后关闭服务。如果数据库服务正在执行恢复操作时发送了关闭命令,恢复操作和流复制都会等待所有常规会话终止后停止。

使用 pg_ctl 工具关闭数据库服务的命令如下:

$ pg_ctl stop -m smart

其中,-m 参数用于指定关闭模式,smart 表示智能模式。

PostgreSQL 智能关闭模式类似于 Oracle 数据库中的正常关闭(shutdown normal)模式。

快速关闭模式

快速关闭(Fast Shutdown)模式对应的信号为 SIGINT。此时服务器不允许新的客户端连接,同时向所有的服务进程发送 SIGTERM 信号,回滚进行中的事务并且强制断开所有客户端的连接,然后关闭数据库。

使用 pg_ctl 工具快速关闭数据库服务的命令如下:

$ pg_ctl stop -m fast

$ pg_ctl stop

其中,fast 表示快速模式,它也是默认模式。

PostgreSQL 快速关闭模式类似于 Oracle 数据库中的立即关闭(shutdown immediate)模式。

立即关闭模式

第三种模式是立即关闭(Immediate Shutdown),对应的系统信号为 SIGQUIT。

主服务器进程向所有的子进程发送 SIGQUIT 信号,如果 5 秒内子进程没有终止,继续发送立即终止的 SIGKILL 信号。当所有子进程退出后,主服务进程立即终止,不会执行常规的数据库关闭流程。这种模式会导致下一次启动数据库服务时需要执行恢复操作(重做 WAL 日志),只推荐在紧急情况下使用。

使用 pg_ctl 工具立即关闭数据库服务的命令如下:

$ pg_ctl stop -m immediate

其中,immediate 表示立即模式。

PostgreSQL 快速关闭模式类似于 Oracle 数据库中的立即关闭(shutdown abort)模式。

注意事项

三种关闭模式中,智能模式最安全,能够确保数据的完整性和一致性;但是这种模式可能耗时较长,因为它需要等待客户端主动断开连接。快速模式可能导致事务的中断,但不会导致数据不一致,优点在于速度较快,一般情况下推荐使用这种模式。 立即模式速度最快,但是可能会导致数据不一致,再次启动时可以通过 WAL 日志回放恢复到一致状态,只有在紧急情况或者其他模式无法关闭时推荐使用。

除了 Windows 之外的其他操作系统也可以直接使用 kill 命令发送信号关闭数据库,例如:

$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

postmaster.pid 文件中存储了主服务进程(postgres)的 PID。

不建议使用 SIGKILL 信号关闭服务,这种方式会阻止服务释放共享内存和信号量。而且,这种方式终止主服务器进程时不会发送信息到子进程,因此还需要手动关闭每个子进程。

Oracle 数据库还支持一种事务关闭(shutdown transactional)模式,不允许新客户连接,但是会等待进行中的事务完成提交后断开客户端连接,然后关闭数据库。PostgreSQL 没有这种对应的关闭模式。

到此这篇关于PostgreSQL关闭数据库服务的三种模式的文章就介绍到这了,更多相关PostgreSQL关闭数据库服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • postgres之jsonb属性的使用操作

    postgres之jsonb属性的使用操作

    这篇文章主要介绍了postgres之jsonb属性的使用操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • PostgreSQL使用执行计划的入门到实战调优指南

    PostgreSQL使用执行计划的入门到实战调优指南

    在数据库性能优化领域,执行计划(Execution Plan)是开发者与数据库优化器对话的翻译器,PostgreSQL的执行计划不仅揭示了SQL语句的执行路径,更通过成本估算、实际耗时等关键指标,,为性能瓶颈定位提供了科学依据,本文将系统讲解PostgreSQL执行计划的核心机制与调优方法
    2026-01-01
  • PostgreSQL向量库pgvector的使用示例

    PostgreSQL向量库pgvector的使用示例

    本文主要介绍了PostgreSQL向量库pgvector的使用示例,pgvector是PostgreSQL的向量扩展,支持高达16000维向量存储及HNSW、IVFFlat索引,下面就来具体介绍一下
    2025-08-08
  • PostgreSQL  JOIN 联表查询实战演练(内连接 / 外连接 / 交叉连接)

    PostgreSQL  JOIN 联表查询实战演练(内连接 / 外连接

    本文介绍了PostgreSQL中的JOIN查询,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN和CROSS JOIN,通过实际示例和Java代码,展示了如何在Java应用程序中执行这些JOIN操作,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • PostgreSQL排查连接锁问题的常用SQL语句

    PostgreSQL排查连接锁问题的常用SQL语句

    正常情况下,PostgreSQL只要连上了就能愉快地使用了,但是在一些特别的场景,如压测或者某些不可描述的异常,会出现数据库连接异常的情况,比如连接数占满了,所以本文给大家介绍了PostgreSQL排查连接锁问题的常用SQL语句,需要的朋友可以参考下
    2024-04-04
  • postgresql 除法保留小数位的实例

    postgresql 除法保留小数位的实例

    这篇文章主要介绍了postgresql 除法保留小数位的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL 流复制配置环境搭建过程

    PostgreSQL 流复制配置环境搭建过程

    PostgreSQL 流复制是 9.0 提供的一种新的 WAL 传递方法,使用流复制时,每当 Primary 节点 WAL 产生,就会马上传递到 Standby 节点,流复制提供异步和同步两种模式,同步模式可以保障数据 0 丢失,这篇文章主要介绍了PostgreSQL 流复制搭建,需要的朋友可以参考下
    2023-09-09
  • PostgreSQL 自定义自动类型转换操作(CAST)

    PostgreSQL 自定义自动类型转换操作(CAST)

    这篇文章主要介绍了PostgreSQL 自定义自动类型转换操作(CAST),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL AUTO INCREMENT(自动增长) 的使用

    PostgreSQL AUTO INCREMENT(自动增长) 的使用

    本文主要介绍 PostgreSQL的自动增长机制,包括 SERIAL(传统方式)、IDENTITY(推荐标准)和 SEQUENCE(底层对象)三种实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-11-11
  • PostgreSQL已经存在的表怎么设置id自增长详解

    PostgreSQL已经存在的表怎么设置id自增长详解

    这篇文章主要介绍了如何为已有的PostgreSQL表设置ID字段为自增,包括创建序列、设置默认值、可能的表结构修改以及重置序列的步骤,需要的朋友可以参考下
    2025-03-03

最新评论