diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml index 09caea1314..954a48c16a 100644 --- a/doc/src/sgml/ref/initdb.sgml +++ b/doc/src/sgml/ref/initdb.sgml @@ -1,5 +1,5 @@ @@ -41,7 +41,6 @@ Postgres documentation -L directory --noclean-n --debug-d - --template-t @@ -58,8 +57,8 @@ Postgres documentation Creating a database system consists of creating the directories in which the database data will live, generating the shared catalog tables - (tables that do not belong to any particular database), and - creating the template1 + (tables that belong to the whole cluster rather than to any particular + database), and creating the template1 database. When you create a new database, everything in the template1 database is copied. It contains catalog tables filled in for things like the @@ -67,8 +66,9 @@ Postgres documentation - You must not execute initdb as root. This is - because you cannot run the database server as root either, but the + You must not execute initdb as root; it must + be run by the Unix user account that will run the database server. + This is because you cannot run the database server as root either, but the server needs to have access to the files initdb creates. Furthermore, during the initialization phase, when there are no users and no access controls installed, Postgres @@ -78,10 +78,14 @@ Postgres documentation - Although initdb will attempt to create the respective - data directory, chances are that it won't have the permission to do so. Thus - it is a good idea to create the data directory before running initdb - and to hand over the ownership of it to the database superuser. + Although initdb will attempt to create the + specified data directory, often it won't have permission to do so, + since the parent of the desired data directory is often a root-owned + directory. To set up an arrangement like this, create an empty data + directory as root, then use chown to hand over + ownership of that directory to the database user account, then + su to become the database user, and + finally run initdb as the database user. @@ -96,7 +100,7 @@ Postgres documentation This option specifies where in the file system the database should be stored. This is the only information required by - initdb, but you can avoid it by + initdb, but you can avoid writing it by setting the PGDATA environment variable, which can be convenient since the database server (postmaster) can find the database @@ -125,7 +129,7 @@ Postgres documentation Makes initdb prompt for a password - of the database superuser. If you don't plan on using password + to give the database superuser. If you don't plan on using password authentication, this is not important. Otherwise you won't be able to use password authentication until you have a password set up. @@ -166,28 +170,6 @@ Postgres documentation - - --template - -t - - - Replace the template1 - database in an existing database system, and don't touch anything else. - This is useful when you need to upgrade your template1 - 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 throughout the life of the database system. You can't - destroy anything by running initdb - with the - - option. - - - - --noclean -n @@ -195,8 +177,8 @@ Postgres documentation By default, when initdb determines that an error prevented it from completely creating the database - system, it removes any files it may have created before determining - that it can't finish the job. This option inhibits any tidying-up and is + system, it removes any files it may have created before discovering + that it can't finish the job. This option inhibits tidying-up and is thus useful for debugging. @@ -211,7 +193,7 @@ Postgres documentation messages of lesser interest for the general public. The bootstrap backend is the program initdb uses to create the catalog tables. This option generates a tremendous - amount of output. + amount of extremely boring output. diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index df2b3f49d2..b52e655f7f 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -15,16 +15,14 @@ # changed to add site-local standard data. Either one can be copied # to produce a new database. # -# Optionally, we can skip creating the complete database cluster and -# just create (or replace) the template databases. -# -# To create all those things, we run the postgres (backend) program and -# feed it data from the bki files that were installed. +# To create template1, we run the postgres (backend) program and +# feed it data from the bki files that were installed. template0 is +# made just by copying the completed template1. # # # Copyright (c) 1994, Regents of the University of California # -# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.119 2001/01/04 17:25:09 petere Exp $ +# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.120 2001/01/20 22:09:24 tgl Exp $ # #------------------------------------------------------------------------- @@ -38,7 +36,7 @@ exit_nicely(){ echo 1>&2 echo "$CMDNAME failed." 1>&2 if [ "$noclean" != yes ]; then - if [ "$template_only" != yes ] && [ "$made_new_pgdata" = yes ]; then + if [ "$made_new_pgdata" = yes ]; then echo "Removing $PGDATA." 1>&2 rm -rf "$PGDATA" || echo "Failed." 1>&2 fi @@ -169,7 +167,6 @@ MULTIBYTEID=0 # Set defaults: debug= noclean= -template_only= show_setting= # Note: There is a single compelling reason that the name of the database @@ -202,10 +199,6 @@ do noclean=yes echo "Running with noclean mode on. Mistakes will not be cleaned up." ;; - --template|-t) - template_only=yes - echo "Updating template0 and template1 databases only." - ;; # The sysid of the database superuser. Can be freely changed. --sysid|-i) POSTGRES_SUPERUSERID="$2" @@ -232,7 +225,7 @@ do -D*) PGDATA=`echo $1 | sed 's/^-D//'` ;; -# The directory where the database templates are stored. Normally +# The directory where the .bki input files are stored. Normally # they are in PREFIX/share and this option should be unnecessary. -L) datadir="$2" @@ -278,7 +271,6 @@ if [ "$usage" ]; then echo " -i, --sysid SYSID Database sysid for the superuser" echo "Less commonly used options: " echo " -L DIRECTORY Where to find the input files" - echo " -t, --template Re-initialize template databases only" echo " -d, --debug Generate lots of debugging output" echo " -n, --noclean Do not clean up after errors" echo @@ -400,16 +392,13 @@ umask 077 pgdata_contents=`ls -A "$PGDATA" 2>/dev/null` if [ x"$pgdata_contents" != x ] then - if [ "$template_only" != yes ] - then - ( - echo "$CMDNAME: The directory $PGDATA exists but is not empty." - echo "If you want to create a new database system, either remove or empty" - echo "the directory $PGDATA or run initdb with an argument" - echo "other than $PGDATA." - ) 1>&2 - exit 1 - fi + ( + echo "$CMDNAME: The directory $PGDATA exists but is not empty." + echo "If you want to create a new database system, either remove or empty" + echo "the directory $PGDATA or run initdb with" + echo "an argument other than $PGDATA." + ) 1>&2 + exit 1 else if [ ! -d "$PGDATA" ]; then echo "Creating directory $PGDATA" @@ -470,32 +459,26 @@ echo $short_version > "$PGDATA"/base/1/PG_VERSION || exit_nicely # # CREATE GLOBAL TABLES # -# XXX --- I do not believe the "template_only" option can actually work. -# With this coding, it'll fail to make entries for pg_shadow etc. in -# template1 ... tgl 11/2000 -if [ "$template_only" != yes ] -then - echo "Creating global relations in $PGDATA/global" - [ "$debug" = yes ] && echo "Running: $PGPATH/postgres $BACKENDARGS template1" +echo "Creating global relations in $PGDATA/global" - cat "$GLOBAL_BKI" \ - | sed -e "s/POSTGRES/$POSTGRES_SUPERUSERNAME/g" \ - -e "s/PGUID/$POSTGRES_SUPERUSERID/g" \ - -e "s/ENCODING/$MULTIBYTEID/g" \ - | "$PGPATH"/postgres $BACKENDARGS template1 \ - || exit_nicely +[ "$debug" = yes ] && echo "Running: $PGPATH/postgres $BACKENDARGS template1" - echo $short_version > "$PGDATA/PG_VERSION" || exit_nicely +cat "$GLOBAL_BKI" \ +| sed -e "s/POSTGRES/$POSTGRES_SUPERUSERNAME/g" \ + -e "s/PGUID/$POSTGRES_SUPERUSERID/g" \ + -e "s/ENCODING/$MULTIBYTEID/g" \ +| "$PGPATH"/postgres $BACKENDARGS template1 \ +|| exit_nicely - cp "$PG_HBA_SAMPLE" "$PGDATA"/pg_hba.conf || exit_nicely - cp "$PG_IDENT_SAMPLE" "$PGDATA"/pg_ident.conf || exit_nicely - cp "$POSTGRESQL_CONF_SAMPLE" "$PGDATA"/postgresql.conf || exit_nicely - chmod 0600 "$PGDATA"/pg_hba.conf "$PGDATA"/pg_ident.conf \ +echo $short_version > "$PGDATA/PG_VERSION" || exit_nicely + +cp "$PG_HBA_SAMPLE" "$PGDATA"/pg_hba.conf || exit_nicely +cp "$PG_IDENT_SAMPLE" "$PGDATA"/pg_ident.conf || exit_nicely +cp "$POSTGRESQL_CONF_SAMPLE" "$PGDATA"/postgresql.conf || exit_nicely +chmod 0600 "$PGDATA"/pg_hba.conf "$PGDATA"/pg_ident.conf \ "$PGDATA"/postgresql.conf -fi - ########################################################################## #