POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

news/2024/7/9 21:45:25 标签: 数据库, postgresql

7c9db544e85e6d67156b2602973de604.png

开头还是介绍一下群,如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群(共1170人左右 1 + 2 + 3)

首先道歉,昨天关于POSTGRESQL 的文章中的部分内容个人觉得有误导的部分或者说没有解释清楚的地方。虽然相关的部分是官方的提供的相关的文件,特通过此文更新相关的内容。

在上一篇文章中,有这样一个部分

d81833a97a405969275cdf27bb99242a.png

13580199c3b75f6cab503c481325deb4.png

因为这个地方有不同的意见

1  实际上这块的部分代表了reload 的部分,而通常我们撰写这块的方式是

ExecReload=/usr/local/postgres/bin/pg_ctl reload -D ${PGDATA}

3f21587c2216634f5b0126f658d2541c.png

但是官方安装完毕后,这个部门给的命令是 kill -HUP $MAINPID ,熟悉这PG 这块的小伙伴,都明白,kill 在对于PG 来说是一个要了命的命令,所以本文最后会给出更新的部分,咱们不按官方的来。

但是问题又来了,为甚一个RELOAD的命令本身,在官方的命令里面,是通过 kill 来完成的,而不是我们常用的命令。

这里为避免歧义,特此解释:

"kill -hup" 是一个用于发送 SIGHUP 信号给进程的命令。SIGHUP 信号是一种发送给进程的 POSIX 信号,代表终端挂起信号(hangup signal)。

当一个进程收到 SIGHUP 信号时,通常会导致该进程重新加载配置文件、重新初始化或重新启动。这通常用于实现热重载配置或重新加载程序的功能。

所以说 kill -hup 并不是等同于 kill -9 XXX (两个没有可比性), 他是通过kill命令来给进程发送信号的。

0a36bfa5cdea2a9b060c6851471ef109.png

* Re-read config files, and tell children to do same.
 */
static void
process_pm_reload_request(void)
{
 pending_pm_reload_request = false;

 ereport(DEBUG2,
   (errmsg_internal("postmaster received reload request signal")));

 if (Shutdown <= SmartShutdown)
 {
  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)
   signal_child(CheckpointerPID, SIGHUP);
  if (WalWriterPID != 0)
   signal_child(WalWriterPID, SIGHUP);
  if (WalReceiverPID != 0)
   signal_child(WalReceiverPID, SIGHUP);
  if (AutoVacPID != 0)
   signal_child(AutoVacPID, SIGHUP);
  if (PgArchPID != 0)
   signal_child(PgArchPID, SIGHUP);
  if (SysLoggerPID != 0)
   signal_child(SysLoggerPID, SIGHUP);

  /* Reload authentication config files too */
  if (!load_hba())
   ereport(LOG,
   /* translator: %s is a configuration file */
     (errmsg("%s was not reloaded", HbaFileName)));

  if (!load_ident())
   ereport(LOG,
     (errmsg("%s was not reloaded", IdentFileName)));

代码中,在接受到kill -hup 主进程号后,开始针对PG的配置文件,和 PG的 hba 文件和 ident 等部分信息的加载。

下面重写了相关的文件,昨天昨天文件的替换

# It's not recommended to modify this file in-place, because it will be
# overwritten during package upgrades.  It is recommended to use systemd
# "dropin" feature;  i.e. create file with suffix .conf under
# /etc/systemd/system/postgresql-14.service.d directory overriding the
# unit's defaults. You can also use "systemctl edit postgresql-14"
# Look at systemd.unit(5) manual page for more info.

# Note: changing PGDATA will typically require adjusting SELinux
# configuration as well.

# Note: do not use a PGDATA pathname containing spaces, or you will
# break postgresql-14-setup.
[Unit]
Description=PostgreSQL 14 database server
Documentation=https://www.postgresql.org/docs/14/static/
After=syslog.target
After=network-online.target

[Service]
Type=notify

User=postgres
Group=postgres


# Location of database directory
Environment=PGDATA=/pgdata/data/   #请根据实际情况修改你的PG数据库目录地址到这个位置
Environment=PGPORT=5432            #请根据实际情况修改此位置为你的PG的端口号


# StandardOutput=syslog

# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

#请根据实际的情况,来编辑下方的

ExecStart=/usr/local/postgres/bin/postmaster -D ${PGDATA}
ExecStop=/usr/local/postgres/bin/pg_ctl stop -D ${PGDATA} -m fast
ExecReload=/usr/local/postgres/bin/pg_ctl reload -D ${PGDATA}
ExecStatus=/usr/local/postgres/bin/pg_ctl status -D ${PGDATA}


#ExecReload=/bin/kill -HUP $MAINPID
#KillMode=mixed
#KillSignal=SIGINT
 
# Do not set any timeout value, so that systemd will not kill postmaster
# during crash recovery.
TimeoutSec=0

# 0 is the same as infinity, but "infinity" needs systemd 229
TimeoutStartSec=0

TimeoutStopSec=1h

[Install]
WantedBy=multi-user.target

更详细的分析和解释请参加  德哥相关文字

https://developer.aliyun.com/article/60259

e4d815f178b7b6ce8e3d0c1f02b05803.png


http://www.niftyadmin.cn/n/4944692.html

相关文章

Vue2-TodoList案例

TodoList案例 组件化编码流程&#xff08;通用&#xff09;整体思路1、分析结构2、拆html和css3、初始化列表4、实现添加列表功能5、实现勾选功能6、实现删除功能7、实现底部统计功能8、实现全选框的交互&#xff08;1&#xff09;每个todo控制全选框&#xff08;2&#xff09;…

Webpack和Parcel详解

构建工具和打包器是在开发过程中帮助组织、优化和打包项目的工具。它们可以处理依赖管理、资源优化、代码转换等任务&#xff0c;从而使开发流程更高效。以下是关于构建工具和打包器的一些指导&#xff1a; **Webpack&#xff1a;** Webpack 是一个功能强大的模块打包器&#…

如何使用Python编写小游戏?

大家好&#xff0c;我是沐尘而生&#xff0c;如果你是一个热爱编程的小伙伴&#xff0c;又想尝试游戏开发&#xff0c;那么这篇文章一定能满足你的好奇心。不废话&#xff0c;让我们马上进入Python游戏开发的精彩世界吧&#xff01; Python游戏开发的魅力 编写小游戏不仅仅是锻…

LLM - 大模型评估指标之 BLEU

目录 一.引言 二.BLEU 简介 1.Simple BLEU 2.Modified BLEU 3.Modified n-gram precision 4.Sentence brevity penalty 三.BLEU 计算 1.计算句子与单个 reference 2.计算句子与多个 reference 四.总结 一.引言 机器翻译的人工评价广泛而昂贵&#xff0c;且人工评估可…

Oracle外部表ORACLE_LOADER方式加载数据

当数据源为文本或其它csv文件时&#xff0c;oracle可通过使用外部表加载数据方式&#xff0c;不需要导入可直接查询文件内的数据。 1、如下有一个文件名为&#xff1a;test1.txt 的数据文件。数据文件内容为&#xff1a; 2、使用sys授权hr用户可读写 DATA_PUMP_DIR 目录权限&a…

vue2+Spring Boot2.7 大文件分片上传

之前我们文章 手把手带大家实现 vue2Spring Boot2.7 文件上传功能 将了上传文件 但如果文件很大 就不太好处理了 按正常情况甚至因为超量而报错 这里 我弄了个足够大的文件 我们先搭建 Spring Boot2.7 环境 首先 application.yml 代码编写如下 server:port: 80 upload:path:…

快速搭建图书商城小程序的简易流程与优势

很多人喜欢阅读电子书&#xff0c;又有很多人依旧喜欢实体书&#xff0c;而实体书店拥有一个图书商城小程序便成为了满足用户需求的理想选择。如果您也想进入这一充满潜力的领域&#xff0c;但担心开发难度和复杂流程&#xff0c;别担心&#xff01;您能做到快速搭建一个专业、…

Flink SQL TopN

Flink SQL 对于批处理&#xff08;Batch&#xff09;和流处理&#xff08;streaming&#xff09;模式的SQL&#xff0c;都支持 Top-N 查询。Top-N 查询可以根据指定列排序后获得前 N 个最小或最大值。并且该结果集还可用于进一步分析。Flink 使用 OVER 窗口子句和过滤条件的组合…