脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页数据库PostgreSQL→ PostgreSQL关闭数据库服务

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关闭数据库服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

    • 这篇文章主要介绍了PostgreSQL 远程连接配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
      2021-01-01
    • 这篇文章主要介绍了postgresql 中的参数查看和修改方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
      2021-01-01
    • 这篇文章主要介绍了Postgre数据库Insert和Query性能优化的步骤,大家可以参考使用
      2013-11-11
    • 最近对SQL Server到PostgreSQL的数据迁移时出现了问题,返回的错误为:invalid byte sequence for encoding "UTF8": 0x00。经查证pg源代码,该问题引起的原因是sql server的字符类型字段中含有空字符\0,该字符在pg中不支持。
      2014-09-09
    • 和MySQL不同,在 PostgreSQL 中,设置主键从1开始自增并重新开始自增是通过序列(sequence)来实现的,本文给大家分享PostgreSQL设置主键从1开始自增的详细步骤,感兴趣的朋友一起看看吧
      2023-11-11
    • 本文主要介绍逻辑备份和连续归档方式的备份及还原,文件系统级备份由于比较简单,这里不在赘述,以下操作使用的数据库版本为PostgreSQL 12.5,不同的数据库版本在进行连续归档操作时会有细微差异,需要的朋友可以参考下
      2024-04-04
    • 这篇文章主要介绍了PostgreSQL 对IN,EXISTS,ANY/ALL,JOIN的sql优化方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
      2021-01-01
    • 这篇文章主要给大家介绍了关于PostgreSQL中使用数组改进性能的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2018-12-12
    • PostgreSQL是一种开源的关系型数据库,它提供了多种管理工具来操作数据库,下面这篇文章主要给大家介绍了关于postgresql行转列与列转行的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
      2023-06-06
    • 这篇文章主要介绍了浅析postgresql 数据库 TimescaleDB 修改分区时间范围,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
      2021-01-01

    最新评论