postgresql15的停止

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统,且因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。介绍过postgresql的启动方法,就很有必要介绍下postgresql的停止方法。

一、停止

1.1,kill term

kill -term `head -1 /usr/postgresql15/data/postmaster.pid`

kill term代表智能关闭,当该命令被执行,将不允许新连接,让现有会话正常停止,所有会话结束后数据库关闭,如果服务器处在线备份模式,它将等待直到在线备份模式不再被激活。

我们开始一个会话,并且不结束,进行数据库智能关闭:

sql 复制代码
postgres=# begin
postgres-# select * from pg_settings;

可以看到,数据库没有停止下来。

我们提交事务,退出连接,这个时候数据库停止下来。

sql 复制代码
postgres=# commit;
WARNING:  there is no transaction in progress
COMMIT

1.2,kill INT

sql 复制代码
kill -INT `head -1 /usr/postgresql15/data/postmaster.pid`

kill -INT,代表快速关闭。服务器不再允许新的连接,并向所有现有服务器进程发送SIGTERM,让它们中断当前事务并立刻退出。然后服务器等待所有服务器进程退出并最终关闭。

我们也还是开启一个连接,开启事务,不提交,然后执行数据库关闭。

sql 复制代码
postgres=# begin;
BEGIN
postgres=*# select * from pg_settings;

可以看到,我们的连接会话被中断,数据库执行了快速停止。

1.3,kill QUIT

sql 复制代码
kill -QUIT `head -1 /usr/postgresql15/data/postmaster.pid`

kill -QUIT,代表立即关闭。服务器将给所有子进程发送SIGQUIT并且等待它们终止。 如果有任何进程没有在 5 秒内终止,它们将被发送SIGKILL。 主管服务器进程将在所有子进程退出之后立刻退出,而无需做普通的数据库关闭处理。 这将导致在下一次启动时(通过重放 WAL 日志)恢复。 只在紧急时才推荐这种方式。

我们创建一个临时表,开启事务,插入数据不提交,执行下立即关闭命令。

sql 复制代码
tpc=# \l
                                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |   Access privileges   
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =c/postgres          +
           |          |          |             |             |            |                 | postgres=CTc/postgres
 test      | tpc      | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | 
 tpc       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | 
(5 rows)

tpc=# 
tpc=# 
tpc=# 
tpc=# 
tpc=# 
tpc=# 
tpc=# create table tpc_test1(table_name varchar(100));
CREATE TABLE
tpc=# 
tpc=# begin 
tpc-# ;
BEGIN
tpc=*# insert into tpc_test1 values('pg_settings');
INSERT 0 1
bash 复制代码
root@tpc:/etc/systemd/system# kill -QUIT `head -1 /opt/postgresql15/data/postmaster.pid`

我们查看关闭日志:

我们启动数据库看看日志,发现数据库进行了数据库恢复:

1.4,pg_ctl命令

postgresql内置了停止数据库的命令工具pg_ctl,我们可以通过该命令进行停止

pg_ctl stop -D /opt/postgresql15/data