If you are logged in as the
root
user, instead of using the
su -c
command
in the previous steps, you will now need to login as the
postgres
user you added in step 1. Once you
are logged in as the
postgres
user, issue the command shown in Example 2-15.
Example 2-15. Initializing the database
$
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
The
-D
option in the previous command is the location where the data will be stored. This
location can also be set with the PGDATA environment variable. If you have set
PGDATA, the
-D
option is unnecessary. If you would like to use a
different directory to hold these data files, make sure the
postgres
user account can write to that
directory. When you execute
initdb
you will see something similar to what is shown in Example 2-16.
Example 2-16. Output from initdb
$
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
This database system will be initialized with username "postgres."
This user will own all the data files and must also own the server process.
Creating directory /usr/local/pgsql/data
Creating directory /usr/local/pgsql/data/base
Creating directory /usr/local/pgsql/data/global
Creating directory /usr/local/pgsql/data/pg_xlog
Creating template1 database in /usr/local/pgsql/data/base/1
DEBUG: database system was shut down at 2001-08-24 16:36:35 PDT
DEBUG: CheckPoint record at (0, 8)
DEBUG: Redo record at (0, 8); Undo record at (0, 8); Shutdown TRUE
DEBUG: NextTransactionId: 514; NextOid: 16384
DEBUG: database system is in production state
Creating global relations in /usr/local/pgsql/data/global
DEBUG: database system was shut down at 2001-08-24 16:36:38 PDT
DEBUG: CheckPoint record at (0, 108)
DEBUG: Redo record at (0, 108); Undo record at (0, 0); Shutdown TRUE
DEBUG: NextTransactionId: 514; NextOid: 17199
DEBUG: database system is in production state
Initializing pg_shadow.
Enabling unlimited row width for system tables.
Creating system views.
Loading pg_description.
Setting lastsysoid.
Vacuuming database.
Copying template1 to template0.
Success. You can now start the database server using:
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
or
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
Note: You can indicate that PostgreSQL should use a different data directory by specifying the directory location with
the
-D
option. This path must be initialized through
initdb
.
When the
initdb
command has completed, it will provide you with information on starting the
PostgreSQL server. The first command displayed will start
postmaster
in the foreground. After
entering the command as it is shown in Example 2-17, the prompt will be inaccessible until
you press CTRL-C on the keyboard to shut down the
postmaster
process.
Example 2-17. Running postmaster in the foreground
$
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
DEBUG: database system was shut down at 2001-10-12 23:11:00 PST
DEBUG: CheckPoint record at (0, 1522064)
DEBUG: Redo record at (0, 1522064); Undo record at (0, 0); Shutdown TRUE
DEBUG: NextTransactionId: 615; NextOid: 18720
DEBUG: database system is in production state
Starting PostgreSQL in the foreground is not normally required. We suggest the use of the second command displayed.
The second command will start
postmaster
in the background. It uses
pg_ctl
to
start the postmaster service, as shown in Example 2-18.
Example 2-18. Running postmaster in the background
$
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /tmp/pgsql.log start
postmaster successfully started
The major difference between the first command and the second command is that the second runs
postmaster
in the background, as well as redirects any debugging information to
/tmp/pgsql.log
. For normal operation, it is generally better to run
postmaster
in
the background, with logging enabled.
Note: The
pg_ctl
application can be used to start and stop the PostgreSQL server. See
Chapter 9 for more on this command.