PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# pg_ctl

## 名称

pg_ctl -- 初始化，启动，停止，或者控制PostgreSQL服务器

## 大纲

`pg_ctl` `init[db]` [`-s`] [`-D` `datadir`] [`-o` `initdb-options`]

`pg_ctl` `start` [`-w`] [`-t` `seconds`] [`-s`] [`-D` `datadir`] [`-l` `filename`] [`-o` `options`] [`-p` `path`] [`-c`]

`pg_ctl` `stop` [`-W`] [`-t` `seconds`] [`-s`] [`-D` `datadir`] [`-m` `s[mart]` | `f[ast]` | `i[mmediate]` ]

`pg_ctl` `restart` [`-w`] [`-t` `seconds`] [`-s`] [`-D` `datadir`] [`-c`] [`-m` `s[mart]` | `f[ast]` | `i[mmediate]` ] [`-o` `options`]

`pg_ctl` `reload` [`-s`] [`-D` `datadir`]

`pg_ctl` `status` [`-D` `datadir`]

`pg_ctl` `promote` [`-s`] [`-D` `datadir`]

`pg_ctl` `kill` `signal_name` `process_id`

`pg_ctl` `register` [`-N` `servicename`] [`-U` `username`] [`-P` `password`] [`-D` `datadir`] [`-S` `a[uto]` | `d[emand]` ] [`-w`] [`-t` `seconds`] [`-s`] [`-o` `options`]

`pg_ctl` `unregister` [`-N` `servicename`]

## 描述

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

`init`或者`initdb`模式创建了一个新的 PostgreSQL数据库集群。一个数据库集群是通过 单一服务器实例管理的数据库集合。这个模式调用`initdb`命令。 参阅initdb获取详情。

在`start`模式里会启动一个新的服务器。服务器是在后台启动的， 标准输入被附着到了`/dev/null`上(或者Windows上的`nul`上)。 缺省在类Unix系统上，服务器的标准输出和标准错误将被定向到 pg_ctl的标准输出(而不是标准错误)。 pg_ctl的标准输出应该重定向到一个 文件或者用管道输出到类似rotatelogs这样的日志滚动程序， 否则，`postgres`将把它的输出写到控制终端(在后台) 并且将不会脱离shell的进程组。 在Windows上，缺省服务器的标准输出和标准错误被发送到终端。 通过使用`-l`添加到服务器的输出到日志文件来 改变缺省操作。推荐使用`-l`或者输出重定向。

在`stop`模式下，那个正在特定数据目录中运行的服务器将被关闭。 你可以用`-m`选项选择三种不同的关闭模式： "Smart"模式等待所有活跃客户端中断连接并且结束任何在线备份。 如果终止服务器热备份，恢复和流复制，则切断了所有客户端。 "Fast"模式并不等待客户端中断连接并且终止正在进行的在线备份。 所有活跃事务都被回滚并且客户端都被强制断开。然后关闭服务器。 "Immediate"模式将在没有干净关闭的情况下立即中断所有服务器进程。 这么做将导致在重新启动的时候的恢复。

`restart`模式实际上是先执行一个停止， 然后紧跟一个启动。它允许变换`postgres`的命令行选项。 如果服务器启动期间在命令行上指定相对路径，那么`restart` 可能会失败。

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

`status`模式检查一个服务器是否在指定的数据目录上运行， 如果是，那么显示其PID和调用它的命令行选项。 如果服务器不运行，那么进程返回退出状态3。如果没有指定一个可访问的数据目录， 该进程返回退出状态4。

在`promote`模式中，在指定数据目录中运行的备份服务器被执行以退出 恢复并且开始读写操作。

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

`register`模式允许你在Microsoft Windows上注册一个系统服务。 `-S`选项允许选择服务启动类型， "auto" (系统启动时自动启动服务)或者"demand" (命令中启动服务)。

`unregister`模式允许你在Microsoft Windows 上注销系统服务。这个撤销了`register`命令的影响。

## 选项

`-c`
`--core-file`

  尝试允许服务器崩溃产生核心文件，在平台上这是可能的，通过提高核心文件上的 任何软件资源限制。 这对于调试或者诊断通过允许堆栈跟踪从失败服务器进程中获得的问题是非常有用的。

`-D `datadir``
`--pgdata `datadir``

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

`-l `filename``
`--log `filename``

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

`-m `mode``
`--mode `mode``

  声明关闭模式。`mode`可以是 `smart`，`fast`或者 `immediate`之一，或者是这三个的首字母之一。 如果忽略则使用`smart`。

`-o `options``

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

  通常被单引号或者双引号包围的选项确保它们作为一个整体传递。

`-o `initdb-options``

  指定直接被传递给`initdb`命令的选项。

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

`-p `path``

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

  在`init`模式中，这个选项类似地指定 `initdb`可执行文件的位置。

`-s`
`--silent`

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

`-t`
`--timeout`

  当等待启动或者关闭完成的时候，等待的最大秒数，缺省是60秒。

`-V`
`--version`

  打印pg_ctl版本并且退出。

`-w`

  等待启动或者停止的完成。这是停止的缺省选项，而不是启动的。 当等待启动的时候，`pg_ctl`反复尝试连接到服务器。 当等待停止的时候，`pg_ctl`等待服务器删除PID文件。 该选项允许启动时SSL缩写项。 `pg_ctl`返回基于成功启动或者停止的退出码。

`-W`

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

`-?`
`--help`

  显示关于pg_ctl命令行参数的帮助，并且退出。

### Windows选项

`-N `servicename``

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

`-P `password``

  用户启动服务的口令。

`-S `start-type``

  启动系统服务注册的类型。启动类型是`auto`或者`demand`， 或者这两者之一的首字母。如果忽略，则使用`auto`。

`-U `username``

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

## 环境变量

`PGDATA`

  缺省数据目录位置。

`pg_ctl`， 类似于大多数其它的PostgreSQL功能， 也可以使用通过libpq支持的环境变量（参阅第 31.14 节）。 其它的服务器变量，参阅postgres。

## 文件

`postmaster.pid`

  这个文件存在于数据目录中是为了帮助pg_ctl 判断服务器当前是否在运行。

`postmaster.opts`

  如果这个文件存在于数据目录中，那么 pg_ctl(在`restart`模式下) 将把文件的内容当作传递给postgres命令的选项传递过去， 除非被`-o`选项覆盖。 在`status`模式中显示这个文件的内容。

## 例子

### 启动服务器

启动服务器:

    $ pg_ctl start

启动服务器，等待直到服务器接受连接：

    $ pg_ctl -w start

使用端口5433启动服务器，而且不带`fsync`运行，使用：

    $ pg_ctl -o "-F -p 5433" start

### 停止服务器

停止服务器，使用：

    $ pg_ctl stop

使用`-m`选项允许控制服务器如何关闭。

    $ pg_ctl stop -m fast

### 重启服务器

重启服务器这个命令几乎等于先停止服务器然后再启动它， 只不过`pg_ctl`保存并重新使用上一次运行服务器的命令行参数。 重启服务器的最简单的方法是：

    $ pg_ctl restart

重启服务器，等待其停止和重启：

    $ pg_ctl -w restart

使用5433端口重启并且重启后关闭`fsync`：

    $ pg_ctl -o "-F -p 5433" restart

### 显示服务器状态

下面是来自pg_ctl的状态输出的例子：

    $ pg_ctl status
    pg_ctl: server is running (PID: 13718)
    /usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data" "-p" "5433" "-B" "128"

这就是在restart模式中被调用的命令行。

## 又见

initdb, postgres

上一页 | 起始页 | 下一页
pg_controldata | 上一级 | pg_resetxlog