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