2 doc/src/sgml/ref/pg_ctl-ref.sgml
3 PostgreSQL documentation
6 <refentry id="app-pg-ctl">
8 <refentrytitle><application>pg_ctl</application></refentrytitle>
9 <manvolnum>1</manvolnum>
10 <refmiscinfo>Application</refmiscinfo>
14 <refname>pg_ctl</refname>
15 <refpurpose>initialize, start, stop, or restart a <productname>PostgreSQL</productname> server</refpurpose>
18 <indexterm zone="app-pg-ctl">
19 <primary>pg_ctl</primary>
24 <command>pg_ctl</command>
25 <arg choice="plain">init[db]</arg>
27 <arg>-D <replaceable>datadir</replaceable></arg>
28 <arg>-o <replaceable>options</replaceable></arg>
32 <command>pg_ctl</command>
33 <arg choice="plain">start</arg>
35 <arg>-t <replaceable>seconds</replaceable></arg>
37 <arg>-D <replaceable>datadir</replaceable></arg>
38 <arg>-l <replaceable>filename</replaceable></arg>
39 <arg>-o <replaceable>options</replaceable></arg>
40 <arg>-p <replaceable>path</replaceable></arg>
45 <command>pg_ctl</command>
46 <arg choice="plain">stop</arg>
48 <arg>-t <replaceable>seconds</replaceable></arg>
50 <arg>-D <replaceable>datadir</replaceable></arg>
52 <group choice="plain">
55 <arg>i[mmediate]</arg>
61 <command>pg_ctl</command>
62 <arg choice="plain">restart</arg>
64 <arg>-t <replaceable>seconds</replaceable></arg>
66 <arg>-D <replaceable>datadir</replaceable></arg>
69 <group choice="plain">
72 <arg>i[mmediate]</arg>
75 <arg>-o <replaceable>options</replaceable></arg>
79 <command>pg_ctl</command>
80 <arg choice="plain">reload</arg>
82 <arg>-D <replaceable>datadir</replaceable></arg>
86 <command>pg_ctl</command>
87 <arg choice="plain">status</arg>
88 <arg>-D <replaceable>datadir</replaceable></arg>
92 <command>pg_ctl</command>
93 <arg choice="plain">kill</arg>
94 <arg><replaceable>signal_name</replaceable></arg>
95 <arg><replaceable>process_id</replaceable></arg>
99 <command>pg_ctl</command>
100 <arg choice="plain">register</arg>
101 <arg>-N <replaceable>servicename</replaceable></arg>
102 <arg>-U <replaceable>username</replaceable></arg>
103 <arg>-P <replaceable>password</replaceable></arg>
104 <arg>-D <replaceable>datadir</replaceable></arg>
106 <arg>-t <replaceable>seconds</replaceable></arg>
107 <arg>-o <replaceable>options</replaceable></arg>
111 <command>pg_ctl</command>
112 <arg choice="plain">unregister</arg>
113 <arg>-N <replaceable>servicename</replaceable></arg>
118 <refsect1 id="app-pg-ctl-description">
119 <title>Description</title>
121 <application>pg_ctl</application> is a utility for initializing a
122 <productname>PostgreSQL</productname> database cluster, starting,
123 stopping, or restarting the <productname>PostgreSQL</productname>
124 backend server (<xref linkend="app-postgres">), or displaying the
125 status of a running server. Although the server can be started
126 manually, <application>pg_ctl</application> encapsulates tasks such
127 as redirecting log output and properly detaching from the terminal
128 and process group. It also provides convenient options for
133 The <option>init</option> or <option>initdb</option> mode creates a
135 <productname>PostgreSQL</productname> database cluster. A database
136 cluster is a collection of databases that are managed by a single
137 server instance. This mode invokes the <command>initdb</command>
138 command. See <xref linkend="app-initdb"> for details.
142 In <option>start</option> mode, a new server is launched. The
143 server is started in the background, and standard input is attached
144 to <filename>/dev/null</filename> (or <literal>nul</> on Windows).
145 On Unix-like systems, by default, the server's standard output and
146 standard error are send to <application>pg_ctl</application>'s
147 standard output (not standard error). The standard output of
148 <application>pg_ctl</application> should then be redirected to a
149 file or piped to another process such as a log rotating program
150 like <application>rotatelogs</>; otherwise <command>postgres</command>
151 will write its output to the controlling terminal (from the
152 background) and will not leave the shell's process group. On
153 Windows, by default the server's standard output and standard error
154 are sent to the terminal. These default behaviors can be changed
155 by using <option>-l</option> to append server output to a log file.
159 In <option>stop</option> mode, the server that is running in
160 the specified data directory is shut down. Three different
161 shutdown methods can be selected with the <option>-m</option>
162 option: <quote>Smart</quote> mode waits for online backup mode
163 to finish and all the clients to disconnect. This is the default.
164 If the server is in recovery, recovery and streaming replication
165 will be terminated once all clients have disconnected.
166 <quote>Fast</quote> mode does not wait for clients to disconnect and
167 will terminate an online backup in progress. All active transactions are
168 rolled back and clients are forcibly disconnected, then the
169 server is shut down. <quote>Immediate</quote> mode will abort
170 all server processes without a clean shutdown. This will lead to
171 a recovery run on restart.
175 <option>restart</option> mode effectively executes a stop followed
176 by a start. This allows changing the <command>postgres</command>
177 command-line options.
181 <option>reload</option> mode simply sends the
182 <command>postgres</command> process a <systemitem>SIGHUP</>
183 signal, causing it to reread its configuration files
184 (<filename>postgresql.conf</filename>,
185 <filename>pg_hba.conf</filename>, etc.). This allows changing of
186 configuration-file options that do not require a complete restart
191 <option>status</option> mode checks whether a server is running in
192 the specified data directory. If it is, the <acronym>PID</acronym>
193 and the command line options that were used to invoke it are
198 <option>kill</option> mode allows you to send a signal to a specified
199 process. This is particularly valuable for <productname>Microsoft Windows</>
200 which does not have a <application>kill</> command. Use
201 <literal>--help</> to see a list of supported signal names.
205 <option>register</option> mode allows you to register a system service
206 on <productname>Microsoft Windows</>.
210 <option>unregister</option> mode allows you to unregister a system service
211 on <productname>Microsoft Windows</>, previously registered with the
212 <option>register</option> command.
216 <refsect1 id="app-pg-ctl-options">
217 <title>Options</title>
222 <term><option>-c</option></term>
225 Attempt to allow server crashes to produce core files, on platforms
226 where this available, by lifting any soft resource limit placed on
228 This is useful in debugging or diagnosing problems by allowing a
229 stack trace to be obtained from a failed server process.
235 <term><option>-D <replaceable class="parameter">datadir</replaceable></option></term>
238 Specifies the file system location of the database files. If
239 this is omitted, the environment variable
240 <envar>PGDATA</envar> is used.
246 <term><option>-l <replaceable class="parameter">filename</replaceable></option></term>
249 Append the server log output to
250 <replaceable>filename</replaceable>. If the file does not
251 exist, it is created. The <systemitem>umask</> is set to 077, so access to
252 the log file from other users is disallowed by default.
258 <term><option>-m <replaceable class="parameter">mode</replaceable></option></term>
261 Specifies the shutdown mode. <replaceable>mode</replaceable>
262 can be <literal>smart</literal>, <literal>fast</literal>, or
263 <literal>immediate</literal>, or the first letter of one of
270 <term><option>-o <replaceable class="parameter">options</replaceable></option></term>
273 Specifies options to be passed directly to the
274 <command>postgres</command> command.
277 The options are usually surrounded by single or double
278 quotes to ensure that they are passed through as a group.
284 <term><option>-p <replaceable class="parameter">path</replaceable></option></term>
287 Specifies the location of the <filename>postgres</filename>
288 executable. By default the <filename>postgres</filename> executable is taken from the same
289 directory as <command>pg_ctl</command>, or failing that, the hard-wired
290 installation directory. It is not necessary to use this
291 option unless you are doing something unusual and get errors
292 that the <filename>postgres</filename> executable was not found.
296 In <literal>init</literal> mode, this option analogously
297 specifies the location of the <filename>initdb</filename>
304 <term><option>-s</option></term>
307 Only print errors, no informational messages.
313 <term><option>-t</option></term>
316 The number of seconds to wait when waiting for start or shutdown
317 to complete. The default is 60 seconds.
323 <term><option>-w</option></term>
326 Wait for the start or shutdown to complete. The default wait time
327 is 60 seconds but can be overridden with the option <option>-t</option>.
328 To wait is the default option for shutdowns. A successful
329 shutdown is indicated by removal of the <acronym>PID</acronym>
330 file. For starting up, a successful <command>psql -l</command>
331 indicates success. <command>pg_ctl</command> will attempt to
332 use the proper port for <application>psql</>. If the environment variable
333 <envar>PGPORT</envar> exists, that is used. Otherwise, it will see if a port
334 has been set in the <filename>postgresql.conf</filename> file.
335 If neither of those is used, it will use the default port that
336 <productname>PostgreSQL</productname> was compiled with
337 (5432 by default). When waiting, <command>pg_ctl</command> will
338 return an accurate exit code based on the success of the startup
345 <term><option>-W</option></term>
348 Do not wait for start or shutdown to complete. This is the
349 default for starts and restarts.
355 <refsect2 id="app-pg-ctl-windows-options">
356 <title>Options for Windows</title>
360 <term><option>-N <replaceable class="parameter">servicename</replaceable></option></term>
363 Name of the system service to register. The name will be used
364 as both the service name and the display name.
370 <term><option>-P <replaceable class="parameter">password</replaceable></option></term>
373 Password for the user to start the service.
379 <term><option>-U <replaceable class="parameter">username</replaceable></option></term>
382 User name for the user to start the service. For domain users, use the
383 format <literal>DOMAIN\username</literal>.
394 <title>Environment</title>
398 <term><envar>PGDATA</envar></term>
402 Default data directory location.
408 <term><envar>PGHOST</envar></term>
412 Default host name or Unix-domain socket location for <xref
413 linkend="app-psql"> (used by the <option>-w</option> option).
419 <term><envar>PGPORT</envar></term>
423 Default port number for <xref linkend="app-psql"> (used by the <option>-w</option> option).
431 For additional server variables, see <xref linkend="app-postgres">.
432 This utility, like most other <productname>PostgreSQL</> utilities,
433 also uses the environment variables supported by <application>libpq</>
434 (see <xref linkend="libpq-envars">).
444 <term><filename>postmaster.pid</filename></term>
448 The existence of this file in the data directory is used to help
449 <application>pg_ctl</application> determine if the server is
450 currently running or not.
456 <term><filename>postmaster.opts</filename></term>
459 <para>If this file exists in the data directory,
460 <application>pg_ctl</application> (in <option>restart</option> mode)
461 will pass the contents of the file as options to
462 <application>postgres</application>, unless overridden
463 by the <option>-o</option> option. The contents of this file
464 are also displayed in <option>status</option> mode.
470 <term><filename>postgresql.conf</filename></term>
474 This file, located in the data directory, is parsed to find the
475 proper port to use with <application>psql</application> when the
476 <option>-w</option> is given in <option>start</option> mode.
489 Waiting for complete start is not a well-defined operation and might
490 fail if access control is set up so that a local client cannot
491 connect without manual interaction (e.g., password authentication). For
492 additional connection variables, see <xref linkend="libpq-envars">,
493 and for passwords, also see <xref linkend="libpq-pgpass">.
498 <refsect1 id="R1-APP-PGCTL-2">
499 <title>Examples</title>
501 <refsect2 id="R2-APP-PGCTL-3">
502 <title>Starting the Server</title>
505 To start up a server:
507 <prompt>$</prompt> <userinput>pg_ctl start</userinput>
512 An example of starting the server, blocking until the server has
515 <prompt>$</prompt> <userinput>pg_ctl -w start</userinput>
520 For a server using port 5433, and
521 running without <function>fsync</function>, use:
523 <prompt>$</prompt> <userinput>pg_ctl -o "-F -p 5433" start</userinput>
528 <refsect2 id="R2-APP-PGCTL-4">
529 <title>Stopping the Server</title>
532 <prompt>$</prompt> <userinput>pg_ctl stop</userinput>
534 stops the server. Using the <option>-m</option> switch allows one
535 to control <emphasis>how</emphasis> the backend shuts down.
539 <refsect2 id="R2-APP-PGCTL-5">
540 <title>Restarting the Server</title>
543 Restarting the server is almost equivalent to stopping the
544 server and starting it again
545 except that <command>pg_ctl</command> saves and reuses the command line options that
546 were passed to the previously running instance. To restart
547 the server in the simplest form, use:
549 <prompt>$</prompt> <userinput>pg_ctl restart</userinput>
555 waiting for it to shut down and to come up:
557 <prompt>$</prompt> <userinput>pg_ctl -w restart</userinput>
562 To restart using port 5433 and disabling <function>fsync</> after restarting:
564 <prompt>$</prompt> <userinput>pg_ctl -o "-F -p 5433" restart</userinput>
569 <refsect2 id="R2-APP-PGCTL-6">
570 <title>Showing the Server Status</title>
573 Here is a sample status output from
574 <application>pg_ctl</application>:
576 <prompt>$</prompt> <userinput>pg_ctl status</userinput>
578 pg_ctl: server is running (pid: 13718)
580 /usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'
583 This is the command line that would be invoked in restart mode.
590 <title>See Also</title>
592 <simplelist type="inline">
593 <member><xref linkend="app-initdb"></member>
594 <member><xref linkend="app-postgres"></member>