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