PostgreSQL参数重载信号SIGHUP的处理

article/2025/11/10 5:08:07

前边讲过,配置文件重载可以使用SIGHUP信号,也可以使用 pg_ctl reload,后者实际上也是发送SIGHUP给postmaster。

1、postmaster 的SIGHUP处理

下边的代码位于 src/backend/postmaster/postmaster.c 中的函数 SIGHUP_handler

	ereport(LOG,(errmsg("received SIGHUP, reloading configuration files")));ProcessConfigFile(PGC_SIGHUP);SignalChildren(SIGHUP);if (StartupPID != 0)signal_child(StartupPID, SIGHUP);if (BgWriterPID != 0)signal_child(BgWriterPID, SIGHUP);if (CheckpointerPID != 0)

首先就是日志信息,我们reload后在日志里能看到它;然后给所有后端进程发送SIGHUP,告知它们也要重载;再然后是通知各服务进程。但这里没看到通知worker进程的代码,也许在其它地方,也许就是没有,有机会再详细去看。

2、后端进程SIGHUP处理

代码位置 src/backend/tcop/postgres.c

void
PostgresSigHupHandler(SIGNAL_ARGS)
{int			save_errno = errno;ConfigReloadPending = true;SetLatch(MyLatch);errno = save_errno;
}

跟postmaster不太一样,后端进程并没有做处理,只是改了标志,然后在消息处理循环中:

	if (ConfigReloadPending){ConfigReloadPending = false;ProcessConfigFile(PGC_SIGHUP);}

3、指定后端进程重载配置

上边的代码可以看出,子进程并没有检查信号来自何处。

quanzl-mac:bin quanzl$ ./psql flying
psql.bin (11beta2)
Type "help" for help.flying=# select pg_backend_pid();pg_backend_pid
----------------11918
(1 row)

修改配置文件 log_statement = 'all'(默认none) 通过终端给它发信号:

quanzl-mac:bin quanzl$ vi ../data/postgresql.conf
quanzl-mac:bin quanzl$ kill -s SIGHUP 11918

可以看到发送信号后 log_statement 发生变化:

flying=# show log_statement;log_statement
---------------none
(1 row)flying=# show log_statement;log_statement
---------------all
(1 row)

而另行登录一个客户端:

quanzl-mac:bin quanzl$ ./psql flying
psql.bin (11beta2)
Type "help" for help.flying=# show log_statement;log_statement
---------------none
(1 row)

即使修改文件,通知某个进程重新载入,其它进程并不受影响,因为新的子进程仍然从主进程fork出来。并不是说这地方有问题,只是验证一下我们在代码中看到的东西而已。了解这个点,以后也许可以帮我们解决问题。

4、参数上下文

这里我看到:ProcessConfigFile(PGC_SIGHUP),使用的上下文都是 PGC_SIGHUP。从上周GUC文章可以知道,这个过程中,不允许修改PGC_INTERNAL和PGC_POSTMASTER参数,其它都是可以的。

 

欢迎关注公众号,文章同步

转载于:https://my.oschina.net/quanzl/blog/3083549


http://chatgpt.dhexx.cn/article/Cbg8rTUv.shtml

相关文章

Unix/Linux编程:SIGHUP信号

当会话首进程打开了一个控制终端之后它同时也成为了该终端的控制进程;当一个控制进程失去其终端连接后,内核会向其发送一个SIGHUP信号来通知它这一事实(还会发送一个SIGCONT信号以确保当该进程之前被一个信号停止时重新开始该进程)。一般来讲&#xff0c…

Linux(程序设计):59---SIGHUP、SIGPIPE、SIGURG信号处理(附SIGURG信号处理普通数据与外带数据案例)

本文介绍3个与网络编程有关的3个信号 一、SIGHUP信号处理 信号产生的情景: 1.如果终端接口检测到一个连接断开,则将此信号送给与该终端相关的控制进程(会话首进程) 此信号被送给session结构中s_leader字段所指向的进程。仅当终端…

图解sql server 命令行工具sqlcmd的使用

一 操作实例 安装了sql server后此工具已经有了; 以sa登录; 打个命令,没反映; 可执行操作系统命令;加上!!即可; 查看帮助; 再打命令,也没反映;查询结果不显示&#xff1…

在ubuntu中使用命令行工具sqlcmd连接sql server数据库

步骤: 首先安装sqlcmd工具 注意:如果你连接的用户是 root用户,命令中带有 sudo 的,sudo都可以酌情去掉,不行再加上 1 安装curl软件包: sudo apt install curl 2 导入公共存储库 GPG 密钥 curl https:…

ssms,新建查询设置字体_如何在SSMS查询编辑器中使用SQLCMD命令

ssms,新建查询设置字体 SQLCMD Mode allows creating, testing, executing SQLCMD commands or scripts in SQL Server Management Studio directly in the query editor. This option is available since SQL Server 2005. SQLCMD模式允许直接在查询编辑器中在SQL Server Man…

使用SQLCMD在SQLServer执行多个脚本

使用SQLCMD在SQLServer执行多个脚本 概述: 作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百个sql文件,并且有执行顺序&…

sqlcmd命令执行大的SQL脚本

前言 这两天从服务器导出一个150多MB的脚本文件,导入到我本地的SQLServer数据库中时,直接打开执行提示内存不足的错误,于是google搜索发现微软针对此类情况有不少命令行工具,其中有一款sqlcmd 实用工具,官方文档地址为…

sql安装弹出sqlcmd_使用SQL Server命令行(sqlcmd)

sql安装弹出sqlcmd 介绍 (Introduction) Sqlcmd allows executing queries, T-SQL sentences and SQL Server scripts using the command line. Sqlcmd允许使用命令行执行查询,T-SQL语句和SQL Server脚本。 In the previous article How to work with the command…

SQL Server Management Studio 查询中使用 SQLCMD 模式

从 SQL Server 2005 开始,可以在 SQL Server Management Studio 查询编辑器中使用 SQLCMD 模式执行 TSQL。要在查询编辑器中编写或编辑 SQLCMD 脚本,需要启用 SQLCMD 模式。默认情况下,此模式是关闭的。 若要启用 SQLCMD 模式,请单…

sqlcmd去掉表头和X行受影响

使用sql语句导出到文件 sqlcmd -d test01 -U test01 -P test01 -S testdb.database.windows.net -Q "select * from test01" -o "test01.csv" -s "," -W -h-1 -k1 -d:数据库名 -U 用户名 -P 密码 -S 服务器名 -Q 执行查询后退出 -o 输出…

sqlcmd 命令

SQLCMD的介绍 文章转载自:http://blog.sina.com.cn/s/blog_3eec0ced0100mhm2.html 最近经常用到超过80M *.sql文件的导入问题。 上网找了一下,发现超过80M的文件是不能在查询分析器中执行的。 找了些解决方案,个人感觉最简单的方法就是这个…

cmd执行服务器sql文件命令行,Dos命令提示符下 - 用sqlcmd执行*.sql语句

Dos命令提示符下 - 用sqlcmd执行*.sql语句 1)在Dos命令下执行sqlcmd命令(当然事先需要将sqlcmd增加到环境变量中去), 2)下面白色部分替换为服务器名或计算机名即可 sqlcmd -S (local) -U sa -P 123 -d testdb -i C:\temp\data.sql 参数说明:-S 服务器地址 -U 用户名 -P 密码…

sql安装弹出sqlcmd_SQL Server中SQLCMD实用工具概述

sql安装弹出sqlcmd This article is aimed at helping you understand the sqlcmd utility. Of course, this is a tool most of us have used it at several occasions given that the tool has been around for a decade now. However, to be a solid starting point, this a…

SQLServer知识:sqlcmd用法笔记

今天给大家介绍sqlcmd用法笔记,希望对大家能有所帮助! 1、介绍 sqlcmd是一个 Microsoft Win32 命令提示实用工具,可以通过该命令工具实现SQL语句、脚本的执行,并且可以实现脚本任务的自动化。 2、使用场景 2.1 针对大文件脚本的执…

Sqlcmd使用详解

Sqlcmd实用工具,可以输入 TRANSACT-SQL 语句、 系统过程和脚本文件,通过各种可用模式: 通过命令提示符。在中查询编辑器在 SQLCMD 模式下。在 Windows 脚本文件。在 SQL Server 代理作业的操作系统 (Cmd.exe) 作业步骤。 该实用工具使用 OD…

如何在CMD下写SQL语句

1、WinX->搜索环境变量 2、选择环境变量 3、在系统变量中找到Path,并双击进入 4、选择新建 5、选择安装MySQL的盘,找到bin,并复制路径到刚刚新建的Path中,例如笔者安装的盘是D盘 6、把复制好的路径放到Path中 7、WinR->直…

jquery设置cookie、删除cookie、获取cookie

1.引入两个js 去bootcdn搜索就行。 jquery.js <script src"https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>jquery cookie <script src"https://cdn.bootcdn.net/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js"…

关闭浏览器 清除cookie

根据客户要求使用dedecms v5.6版本&#xff0c;发现了一个会员登录的bug&#xff01;看来dedecms也不过如此&#xff01; 首先说说bug所在&#xff1a;在会员登录页面 /member/index.php 登录的时候 有效期如果选择‘即时’&#xff0c;那么就永远也登不上去了&#xff01; 原因…

删除cookie删不掉的问题

文章转自&#xff1a; https://blog.csdn.net/swimming_in_it_/article/details/80290547 https://blog.csdn.net/huanshiwushuang/article/details/70172536 http://php.js.cn/blog/delete-cookie/ 不知道能不能解决你的问题,但是我来说说我的经历&#xff0c;昨天在用Yii…

Javascript清除所有的cookie

只需一个js函数即可&#xff1a; //清除所有cookie函数function clearAllCookie() {var keys document.cookie.match(/[^ ;](?\)/g);if(keys) {for(var i keys.length; i--;)document.cookie keys[i] 0;expires new Date(0).toUTCString()}} 测试的所有代码如下&#xf…