📄 initdb.sh
字号:
#!/bin/sh#-------------------------------------------------------------------------## initdb.sh--# Create (initialize) a Postgres database system. # # A database system is a collection of Postgres databases all managed# by the same postmaster. ## To create the database system, we create the directory that contains# all its data, create the files that hold the global classes, create# a few other control files for it, and create one database: the# template database.## The template database is an ordinary Postgres database. Its data# never changes, though. It exists to make it easy for Postgres to # create other databases -- it just copies.## Optionally, we can skip creating the database system and just create# (or replace) the template database.## To create all those classes, we run the postgres (backend) program and# feed it data from bki files that are in the Postgres library directory.## Copyright (c) 1994, Regents of the University of California### IDENTIFICATION# $Header: /usr/local/cvsroot/pgsql/src/bin/initdb/initdb.sh,v 1.60 1999/05/20 16:50:06 wieck Exp $##-------------------------------------------------------------------------# ----------------# The OPT_..._PARAM gets set when the script is built (with make)# from parameters set in the make file.## ----------------CMDNAME=`basename $0`MULTIBYTEID=0MULTIBYTE=__MULTIBYTE__if [ -n "$MULTIBYTE" ];then MULTIBYTEID=`pg_encoding $MULTIBYTE`fi# Find the default PGLIB directory (the directory that contains miscellaneous # files that are part of Postgres). The user-written program postconfig# outputs variable settings like "PGLIB=/usr/lib/whatever". If it doesn't# output a PGLIB value, then there is no default and the user must# specify the pglib option. Postconfig may validly not exist, in which case# our invocation of it silently fails.# The 2>/dev/null is to swallow the "postconfig: not found" message if there# is no postconfig.postconfig_result="`sh -c postconfig 2>/dev/null`"if [ ! -z "$postconfig_result" ]; then set -a # Make the following variable assignment exported to environment eval "$postconfig_result" set +a # back to normalfi# Set defaults:debug=0noclean=0template_only=0POSTGRES_SUPERUSERNAME=$USERwhile [ "$#" -gt 0 ]do# ${ARG#--username=} is not reliable or available on all platforms case "$1" in --debug|-d) debug=1 echo "Running with debug mode on." ;; --noclean|-n) noclean=1 echo "Running with noclean mode on. " "Mistakes will not be cleaned up." ;; --template|-t) template_only=1 echo "updating template1 database only." ;; --username=*) POSTGRES_SUPERUSERNAME="`echo $1 | sed 's/^--username=//'`" ;; -u) shift POSTGRES_SUPERUSERNAME="$1" ;; -u*) POSTGRES_SUPERUSERNAME="`echo $1 | sed 's/^-u//'`" ;; --pgdata=*) PGDATA="`echo $1 | sed 's/^--pgdata=//'`" ;; -r) shift PGDATA="$1" ;; -r*) PGDATA="`echo $1 | sed 's/^-r//'`" ;; --pglib=*) PGLIB="`echo $1 | sed 's/^--pglib=//'`" ;; -l) shift PGLIB="$1" ;; -l*) PGLIB="`echo $1 | sed 's/^-l//'`" ;; --pgencoding=*) if [ -z "$MULTIBYTE" ];then echo "MULTIBYTE support seems to be disabled" exit 100 fi mb="`echo $1 | sed 's/^--pgencoding=//'`" MULTIBYTEID=`pg_encoding $mb` if [ -z "$MULTIBYTEID" ];then echo "$mb is not a valid encoding name" exit 100 fi ;; -e) if [ -z "$MULTIBYTE" ];then echo "MULTIBYTE support seems to be disabled" exit 100 fi shift MULTIBYTEID=`pg_encoding $1` if [ -z "$MULTIBYTEID" ];then echo "$1 is not a valid encoding name" exit 100 fi ;; -e*) if [ -z "$MULTIBYTE" ];then echo "MULTIBYTE support seems to be disabled" exit 100 fi mb="`echo $1 | sed 's/^-e//'`" MULTIBYTEID=`pg_encoding $mb` if [ -z "$MULTIBYTEID" ];then echo "$mb is not a valid encoding name" exit 100 fi ;; *) echo "Unrecognized option '$1'. Syntax is:" if [ -z "$MULTIBYTE" ];then echo "initdb [-t | --template] [-d | --debug]" \ "[-n | --noclean]" \ "[-u SUPERUSER | --username=SUPERUSER]" \ "[-r DATADIR | --pgdata=DATADIR]" \ "[-l LIBDIR | --pglib=LIBDIR]" else echo "initdb [-t | --template] [-d | --debug]" \ "[-n | --noclean]" \ "[-u SUPERUSER | --username=SUPERUSER]" \ "[-r DATADIR | --pgdata=DATADIR]" \ "[-l LIBDIR | --pglib=LIBDIR]" \ "[-e ENCODING | --pgencoding=ENCODING]" fi exit 100 esac shiftdone#-------------------------------------------------------------------------# Make sure he told us where to find the Postgres files.#-------------------------------------------------------------------------if [ -z "$PGLIB" ]; then echo "$CMDNAME does not know where to find the files that make up " echo "Postgres (the PGLIB directory). You must identify the PGLIB " echo "directory either with a --pglib invocation option, or by " echo "setting the PGLIB environment variable, or by having a program " echo "called 'postconfig' in your search path that outputs an asignment " echo "for PGLIB." exit 20fi#-------------------------------------------------------------------------# Make sure he told us where to build the database system#-------------------------------------------------------------------------if [ -z "$PGDATA" ]; then echo "$CMDNAME: You must identify the PGDATA directory, where the data" echo "for this database system will reside. Do this with either a" echo "--pgdata invocation option or a PGDATA environment variable." echo exit 20fiTEMPLATE=$PGLIB/local1_template1.bki.sourceGLOBAL=$PGLIB/global1.bki.sourceTEMPLATE_DESCR=$PGLIB/local1_template1.descriptionGLOBAL_DESCR=$PGLIB/global1.descriptionPG_HBA_SAMPLE=$PGLIB/pg_hba.conf.samplePG_GEQO_SAMPLE=$PGLIB/pg_geqo.sample#-------------------------------------------------------------------------# Find the input files#-------------------------------------------------------------------------for PREREQ_FILE in $TEMPLATE $GLOBAL $PG_HBA_SAMPLE; do if [ ! -f $PREREQ_FILE ]; then echo "$CMDNAME does not find the file '$PREREQ_FILE'." echo "This means you have identified an invalid PGLIB directory." echo "You specify a PGLIB directory with a --pglib invocation " echo "option, a PGLIB environment variable, or a postconfig program." exit 1 fidone[ "$debug" -ne 0 ] && echo "$CMDNAME: using $TEMPLATE as input to create the template database."if [ $template_only -eq 0 ]; then [ "$debug" -ne 0 ] && echo "$CMDNAME: using $GLOBAL as input to create the global classes." [ "$debug" -ne 0 ] && echo "$CMDNAME: using $PG_HBA_SAMPLE as the host-based authentication" \ "control file." echofi #---------------------------------------------------------------------------# Figure out who the Postgres superuser for the new database system will be.#---------------------------------------------------------------------------if [ -z "$POSTGRES_SUPERUSERNAME" ]; then echo "Can't tell what username to use. You don't have the USER" echo "environment variable set to your username and didn't specify the " echo "--username option" exit 1fiPOSTGRES_SUPERUID=`pg_id $POSTGRES_SUPERUSERNAME`if [ ${POSTGRES_SUPERUID:=-1} -eq -1 ]; then echo "Unable to determine a valid username. If you are running" echo "initdb without an explicit username specified, then there" echo "may be a problem with finding the Postgres shared library" echo "and/or the pg_id utility." exit 10fi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -