if [[ $zsv_name == *.* ]]; then # slotted install ala gentoo slot=${zsv_name#*.} run=( /usr/lib/postgresql-$slot/bin/postmaster ) configfile=/etc/postgresql-$slot/postgresql.conf pg_data_dir=/var/lib/postgresql/$slot/data else run=( postmaster ) # pg_data_dir=/var/lib/postgresql/data # configfile=$pg_data_dir/postgresql.conf configfile=/var/lib/postgresql/data/postgresql.conf fi parse_postgresql_config() { typeset -gA conf : ${PGDATA:=$configfile:h} : ${pg_user:=postgres} [[ -r $configfile ]] || exit 1 setopt extended_glob sed -n ' s/[ ]*#.*//; /\([_a-zA-Z0-9]*\)[ ]=/ { s/\([_a-zA-Z0-9]*\)[ ]=/\1/; p } ' <$configfile | while read key val; do [[ -n $key ]] || continue # [[ $val == '=*' ]] && val=${val/#=[$IFS]#} conf[$key]=${(Q)val} done reload_files+=( $configfile ${conf[hba_file]:-$PGDATA/pg_hba.conf} ${conf[ident_file]:-$PGDATA/pg_ident.conf} ) # fill in defaults : ${conf[data_directory]:=$PGDATA} : ${conf[port]:=5432} : ${conf[unix_socket_directory]:=/run/postgresql} : ${conf[unix_socket_directories]:=$conf[unix_socket_directory]} # get values : ${pg_data_dir:=$conf[data_directory]} : ${pg_port:=$conf[port]} : ${pg_sockdir:=$conf[unix_socket_directories]} # add overrides to default values to $args [[ $configfile != $PGDATA/postgresql.conf ]] && \ args+=( --config-file=$configfile ) [[ $pg_data_dir != $conf[data_directory] ]] && \ args+=( --data-directory=$pg_data_dir ) [[ $pg_port != $conf[port] ]] && \ args+=( --port=$pg_port ) [[ $pg_sockdir != $conf[unix_socket_directories] ]] && \ args+=( -k $pg_sockdir ) cwd=$PGDATA run=( chpst -u $pg_user $run -D $PGDATA ) pg_socket=${pg_sockdir%/}/.s.PGSQL.${pg_port} } cond() { [[ -e $configfile ]] } do_check() { parse_postgresql_config zsv_check_unix $pg_socket } checkf do_check zsv_run_postgresql() { parse_postgresql_config # TODO: support multiple socket directories if ! [[ -d $pg_sockdir && -k $pg_sockdir ]]; then mkdir -p $pg_sockdir || exit $? chown $pg_user: $pg_sockdir chmod 0775 $pg_sockdir fi # check for stale socket if [[ -e $pg_socket ]]; then if zsv_check_unix $pg_socket; then exit 2 else rm -f $pg_socket fi fi zsv_generic } # vim: ft=zsh noet ts=4 sts=4 sw=4