Use the
initdb
program to create and initialize a new database cluster within your filesystem.
Again, a database cluster is the framework upon which PostgreSQL databases are created. You should already have one cluster
in the data directory which was initialized in Chapter 2.
You may use
initdb
to initialize a new data directory for a database cluster, and instruct
postmaster
to start up using that data cluster instead of the default. Alternatively, you may have two
postmaster
processes running at the same time with different database clusters, provided that they are
configured to listen on different ports.
After you use
initdb
to create a new database cluster, that new cluster's filesystem will be
owned by whatever operating system user you were logged in as when issuing the command.
Warning
|
Do not run the
initdb
program while logged in as the
root
user!
The cluster needs to be created and
owned
by whichever normal user is going to become the new cluster's
database superuser.
|
You can also use
initdb
to correct a corrupted
template1
database by
executing
initb
with the
-t
(or
- -template
) parameter. This
will re-generate the template1 database from scratch.
Here is the syntax for
initdb
:
initdb [ -D
dbdir
| - -pgdata
dbdir
]
[ -i
sysid
| - -sysid
sysid
]
[ -W | - -pwprompt ]
[ -E
encoding
| - -encoding=
encoding
]
[ -L
libdir
| - -pglib=
libdir
]
[ -n | - -noclean ]
[ -d | - -debug ]
[ -t | - -template ]
The following are the valid options for
initdb
:
- [ -D
dbdir
| - -pgdata=
dbdir
]
-
The directory that you wish to initialize a new database cluster within. If you do not specify a directory
name, the command will look at the PGDATA environment variable.
- [ -i
sysid
| - -sysid=
sysid
]
-
The system ID of the database superuser to be created. If unspecified, the ID will be the operating system ID
of the system user who runs the
initdb
program.
- [ -W | - -pwprompt ]
-
Prompt for a password upon connection.
- [ -E encoding | - -encoding=encoding ]
-
The name of the multi-byte encoding type of the template database within this cluster. Whatever type you set
here will become the default type for any databases you later create using this cluster. This is only relevant if
you have enabled multi-byte encoding in PostgreSQL.
- [ -l
libdir
| - -pglib=
libdir
]
-
The location of the PostgreSQL library files used by
initdb
when creating a database
cluster. It is rarely necessary to use this parameter. The location of the libraries is usually known by the
initdb
program, and if it isn't known,
initdb
will prompt you for the
location.
- [ -t | - -template ]
-
The
template
switch, which causes
initdb
to re-initialize only the
template1 database within an already existing database cluster. This can help
during PostgreSQL version updates, or if your template1 database ever becomes
corrupted, or is lost.
- [ -n | - -noclean ]
-
The
noclean
switch, which specifies that
initdb
should
not
clean up its files in the event that it is unable to complete cluster creation due to an
error. This parameter is only useful for debugging purposes.
- [ -d | - -debug ]
-
The debug switch, which causes debugging information from the creation of the catalog tables to be
displayed.
If the command completes successfully,
initdb
will have created a database cluster in the
specified data directory; this cluster can then be used by the backend to store its databases.
Example 9-7 initializes a new database cluster in the
/usr/local/pgsql/booktown
directory:
Example 9-7. Initializing a New Database Cluster
[postgres@booktown ~]$
initdb /usr/local/pgsql/booktown
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/booktown
Creating directory /usr/local/pgsql/booktown/base
Creating directory /usr/local/pgsql/booktown/global
Creating directory /usr/local/pgsql/booktown/pg_xlog
Creating template1 database in /usr/local/pgsql/booktown/base/1
DEBUG: database system was shut down at 2001-08-27 16:51:07 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/booktown/global
DEBUG: database system was shut down at 2001-08-27 16:51:14 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/booktown
or
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/booktown -l logfile start