INITDB(1)                                               INITDB(1)

       initdb - Create a new Postgres database installation

       initdb [ --pgdata=dbdir | -r dbdir ]
           [ --pglib=libdir | -l libdir ]
           [ --template=template | -t template ]
           [ --username=name | -u name ]
           [ --noclean | -n ] [ --debug | -d ]


       -l libdir

       PGLIB  Where  are  the files that make up Postgres?  Apart
              from files that have to go in  particular  directo-
              ries because of their function, the files that make
              up the Postgres software were installed in a direc-
              tory  called the libdir directory.  An example of a
              file that will be found there that initdb needs  is
              global1.bki.source, which contains all the informa-
              tion that goes into the shared catalog tables.


       -r dbdir

       PGDATA Where in your  Unix  filesystem  do  you  want  the
              database  data  to  go?  The top level directory is
              called the PGDATA directory.


       -u name

       PGUSER Who  will  be  the  Postgres  superuser  for   this
              database  system?  The Postgres superuser is a Unix
              user who owns all files  that  store  the  database
              system  and  also  owns  the postmaster and backend
              processes that access them.  Or just let it default
              to you (the Unix user who runs initdb).

              Note:  Only  the Unix superuser (root) can create a
              database system with an owner  different  from  the
              Postgres superuser.

       Other, less commonly used, parameters are also available:


       -t template
              Replace  the  template1  database  in  an  existing
              database system, and  don't  touch  anything  else.
              This  is  useful when you need to upgrade your tem-
              plate1 database using initdb from a  newer  release
              of  Postgres,  or  when your template1 database has
              become corrupted by some system  problem.  Normally
              the  contents of template1 remain constant through-
              out the life of  the  database  system.  You  can't
              destroy  anything by running initdb with the --tem-
              plate option.


       -n     By default, when initdb determines that error  pre-
              vent  it from completely creating the database sys-
              tem, it removes  any  files  it  may  have  created
              before  determining  that  it can't finish the job.
              That includes any core files left by  the  programs
              it invokes. This option inhibits any tidying-up and
              is thus useful for debugging.


       -d     Print debugging output from the bootstrap  backend.
              The bootstrap backend is the program initdb uses to
              create the catalog tables. This option generates  a
              tremendous  amount of output. It also turns off the
              final vacuuming step.

       Files are also input to initdb:

              If appearing somewhere in the Unix  command  search
              path  (defined  by  the PATH environment variable).
              This is a program that specifies defaults for  some
              of the command options. See below.

              Contents  for  the shared catalog tables in the new
              database system. This file is part of the  Postgres

              Contents  for  the  template1  tables  in  the  new
              database system. This file is part of the  Postgres

       initdb will create files in the PGDATA data area which are
       the system tables and framework for a  complete  installa-

       initdb creates a new Postgres database system.  A database
       system is a collection of databases that are all  adminis-
       tered  by the same Unix user and managed by a single post-

       Creating a database system consists of creating the direc-
       tories  in  which  the database data will live, generating
       the shared catalog tables (tables that don't belong to any
       particular database), and creating the template1 database.
       What  is  the  template1  database?  When  you  create   a
       database,  Postgres does it by copying everything from the
       template1 database. It contains catalog tables  filled  in
       for things like the builtin types.

       After  initdb  creates the database, it completes the ini-
       tialization by running vacuum, which resets some optimiza-
       tion parameters.

       There are three ways to give parameters to initdb.

       o You can use initdb command options.

       o You   can  set  environment  variables  before  invoking

       o You can have a program called postconfig  in  your  Unix
         command  search  path.   initdb invokes that program and
         that program then writes initdb parameters to its  stan-
         dard  output  stream.  This third option is not a common
         thing to do, however.

       Command options always override parameters  specified  any
       other way.  The values returned by postconfig override any
       environment variables, but  your  postconfig  program  may
       base  its  output on the environment variables if you want
       their values to be used.

       The value that postconfig outputs must have the format

       var1=value1 var2=value2 ...

       It can output nothing if it doesn't  want  to  supply  any
       parameters.  The var values are equal to the corresponding
       environment variable names. For example,


       has the same effect as invoking initdb with an environment
       variable  called PGDATA whose value is /tmp/postgres_test.

Application               15 August 1999                        1