pg_ctl -- 启动、停止、重启 PostgreSQL

pg_ctl

名称

pg_ctl -- 启动、停止、重启 PostgreSQL

语法

pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl kill [signal_name] [process_id]
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
pg_ctl unregister [-N servicename]

描述

pg_ctl 用于启动、停止、重启 PostgreSQL 后端服务器(postgres),或者显示一个运行着的服务器的状态。尽管可以手动启动服务器,但是 pg_ctl 封装了重新定向日志输出,与终端和进程组合理分离,以及另外提供了一个选项用于有控制的关闭。

在 start 模式里会启动一个新的服务器。服务器是在后台启动的,标准输入被附着到了 /dev/null 上。如果使用了 -l ,那么标准输出和标准错误将被定向到一个日志文件,要么就是重定向到 pg_ctl 的标准输出(而不是标准错误)。如果没有选定日志文件,pg_ctl 的标准输出应该重定向到一个文件或者用管道输出到类似 rotatelogs这样的日志滚动程序,否则,postgres 将把它的输出写到控制终端(在后台)并且将不会脱离 shell 的进程组。

在 stop 模式下,那个正在特定数据目录运行的服务器将被关闭。你可以用 -m 选项选择三种不同的关闭模式:"Smart"模式等待所有客户端中断连接,这是缺省。"Fast"模式并不等待客户端中断连接,所有活跃事务都被回滚并且客户端都被强制断开。"Immediate"模式将在没有干净关闭的情况下强行退出。这么做将导致在重新启动的时候的恢复。

restart 实际上是先执行一个停止,然后紧跟一个启动。它允许变换 postgres 的命令行选项。

reload 模式简单地给 postgres 发送一个 SIGHUP 信号,导致它重新读取配置文件(postgresql.conf,pg_hba.conf 等),这样就允许修改配置文件选项而不用重启系统即可生效。

status 模式监查一个服务器是否在指定的数据目录运行,如果是,那么显示其 PID 和调用它的命令行选项。

kill 模式允许你给一个指定的进程发送信号。这个功能对 Microsoft Windows 特别有用,因为它没有 kill 命令。使用 --help 查看支持的信号名字列表。

register 模式允许你在 Microsoft Windows 上注册一个系统服务。

unregister 模式允许你在 Microsoft Windows 上删除先前用 register 命令注册的系统服务。

选项

-D datadir

声明该数据库的文件系统位置。如果忽略则使用 PGDATA 环境变量。

-l filename

把服务器日志输出附加在 filename 文件上。如果该文件不存在则创建它。umask 设置为 077 ,因此缺省时是不允许从其它用户向日志文件访问的。

-m mode

声明关闭模式。mode 可以是 smartfastimmediate 之一,或者是这三个的首字母之一。

-o options

声明要直接传递给 postgres 的选项。

参数通常都用单或者双引号包围以保证它们作为一个整体传递。

-p path

声明 postgres 可执行文件的位置。缺省位于 pg_ctl 自身所在目录,如果没找到则使用硬编码的安装目录。除非你想干点什么特别的事情,并且想得到类似没有找到 postgres 这样的错误,否则必须使用这个选项。

-s

只打印错误,而不打印提示性信息。

-w

等待启动或者关闭的完成(60 秒超时),这个参数是关闭时的缺省值。成功的关闭是以删除 PID 文件为标志的。对于启动而言,一次成功的 psql -l 就标志着成功。pg_ctl 将企图使用对 psql 合适的端口,如果存在 PGPORT环境变量,那么将用它。否则,它将查找在 postgresql.conf 文件里是否设置了一个端口。如果都没有,它将使用 PostgreSQL 编译时的缺省端口(缺省 5432)。在等待的时候,pg_ctl 将根据启动或者关闭的成功状况返回一个准确的退出代码。

-W

不等待启动或者停止的完成。这是启动和重启的缺省。

Windows 选项

-N servicename

要注册的系统服务的名字。这个名字将用于服务名和显示名。

-P password

用户启动服务的口令

-U username

用于启动服务的用户的用户名。对于域用户,使用 DOMAIN\username 格式。

环境变量

PGDATA
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Active-Active复制是指两个或多个PostgreSQL数据库实例之间的多向同步。在这种复制方式中,每个数据库实例都可以读取和写入数据,而不是像传统的主从复制方式那样只允许主节点写入数据,从节点只允许读取数据。 下面是使用docker-compose容器来实现PostgreSQL Active-Active复制的详细步骤: 1. 创建docker-compose.yml文件并定义两个PostgreSQL容器,如下所示: ``` version: '3' services: postgresql1: image: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: mydb PGDATA: /var/lib/postgresql/data/pgdata volumes: - pgdata1:/var/lib/postgresql/data ports: - "5431:5432" networks: - postgresql postgresql2: image: postgres environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: mydb PGDATA: /var/lib/postgresql/data/pgdata volumes: - pgdata2:/var/lib/postgresql/data ports: - "5432:5432" networks: - postgresql volumes: pgdata1: pgdata2: networks: postgresql: ``` 2. 启动docker-compose容器,运行以下命令: ``` docker-compose up -d ``` 3. 进入postgresql1容器,创建复制用户并授权: ``` docker exec -it postgresql1 bash su postgres psql CREATE USER replication WITH REPLICATION ENCRYPTED PASSWORD 'password'; GRANT ALL PRIVILEGES ON DATABASE mydb TO replication; ``` 4. 修改postgresql.conf文件和pg_hba.conf文件 在postgresql1容器的 /var/lib/postgresql/data 目录下找到postgresql.conf文件和pg_hba.conf文件,修改如下: postgresql.conf: ``` listen_addresses = '*' wal_level = replica max_wal_senders = 10 wal_keep_segments = 32 ``` pg_hba.conf: ``` host replication replication 172.20.0.0/16 md5 ``` 5. postgresql1容器 ``` docker-compose restart postgresql1 ``` 6. 在postgresql2容器中创建复制槽并启动复制流 ``` docker exec -it postgresql2 bash su postgres psql SELECT * FROM pg_create_physical_replication_slot('replication_slot_name'); pg_basebackup -h postgresql1 -D /var/lib/postgresql/data -U replication -v -P --xlog-method=stream pg_ctl -D /var/lib/postgresql/data start ``` 7. 测试Active-Active复制 在任何一个容器中创建表或插入数据,可以在另一个容器中看到相同的数据。如果其中一个容器出现故障,另一个容器可以继续提供服务,因为它们都具有相同的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值