diff options
Diffstat (limited to 'etc/dev/pgctl')
-rwxr-xr-x | etc/dev/pgctl | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/etc/dev/pgctl b/etc/dev/pgctl new file mode 100755 index 0000000..d1f676f --- /dev/null +++ b/etc/dev/pgctl @@ -0,0 +1,167 @@ +#!/bin/sh +# file : etc/pgctl +# copyright : Copyright (c) 2014-2015 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file +# +# Designed to simplify controlling brep PostgreSQL server instance. + +. `dirname $0`/config + +CMD="$1" +shift + +SOCKET_DIR="$PG_WORKSPACE_DIR" +OUT_FILE="$PG_WORKSPACE_DIR/out" + +# Print usage description and exit. +# +case $CMD in + init|start|stop|status|connect) ;; + *) + echo "Usage: pgctl (init|start|stop|status|connect)" + exit 1 + ;; +esac + +ERROR=0 + +# Initialization includes creating PostgreSQL DB cluster, creating brep DB +# and schema. +# +if test "$CMD" = "init"; then + if test -d "$PG_DATA_DIR"; then + echo "PostgreSQL DB cluster directory $PG_DATA_DIR already exist" + else + echo "creating PostgreSQL DB cluster ..." + pg_ctl initdb -D "$PG_DATA_DIR" + ERROR=$? + + if test $ERROR -eq 0; then + echo "cluster created" + else + echo "cluster creating failed" + exit $ERROR; + fi + fi +fi + +case $CMD in + start|init) + # Start DB server if not running yet. + # + pg_ctl status -D "$PG_DATA_DIR" 1>/dev/null 2>&1 + + if test $? -eq 0; then + echo "PostgreSQL server already running" + else + if test ! -d "$PG_DATA_DIR"; then + echo "PostgreSQL DB cluster not exist; run '$0 init' first" + exit 1 + fi + + echo "PostgreSQL server starting ..." + + mkdir -p `dirname $OUT_FILE` + mkdir -p "$PG_LOG_DIR" + mkdir -p "$SOCKET_DIR" + + pg_ctl start -D "$PG_DATA_DIR" -w -o \ + "-c port=$PG_PORT -c unix_socket_directories=$SOCKET_DIR \ + -c logging_collector=on -c log_directory=$PG_LOG_DIR" \ + 1>"$OUT_FILE" 2>&1 + + ERROR=$? + + if test $ERROR -eq 0; then + echo "server started" + else + cat "$OUT_FILE" 1>&2 + echo "server starting failed" + exit $ERROR + fi + fi + ;; + + status) + echo "checking PostgreSQL server status ..." + pg_ctl status -D "$PG_DATA_DIR" + ;; + + stop) + pg_ctl status -D "$PG_DATA_DIR" 1>/dev/null 2>&1 + + if test $? -eq 0; then + echo "PostgreSQL server stopping ..." + pg_ctl stop -D "$PG_DATA_DIR" "$@" + ERROR=$? + + if test $ERROR -eq 0; then + : # pg_ctl prints "server stopped" on success + else + echo "server stopping failed" + exit $ERROR + fi + else + echo "PostgreSQL server not running" + fi + ;; + + connect) + echo "connecting to PostgreSQL server ..." + psql --host=$SOCKET_DIR --port=$PG_PORT brep + ;; +esac + +if test "$CMD" = "init"; then + # Create brep DB if not exist. + # + psql --host=$SOCKET_DIR --port=$PG_PORT -c "" brep 1>/dev/null 2>&1 + + ERROR=$? + + if test $ERROR -eq 0; then + echo "brep DB already exist" + else + if test $ERROR -eq 2; then + echo "creating brep DB ..." + createdb --host=$SOCKET_DIR --port=$PG_PORT brep + ERROR=$? + + if test $ERROR -eq 0; then + echo "brep DB created" + else + echo "brep DB creating failed" + exit $ERROR; + fi + else + echo "brep DB existence checking failed" + exit $ERROR; + fi + fi + + # Create brep DB schema if not exist. + # + psql --host=$SOCKET_DIR --port=$PG_PORT -c "select count(1) from package" \ + brep 1>/dev/null 2>&1 + + ERROR=$? + + if test $ERROR -eq 0; then + echo "brep DB schema already exist" + else + echo "creating brep DB schema ..." + + psql -v ON_ERROR_STOP=1 --host=$SOCKET_DIR --port=$PG_PORT \ + --file="$PG_SCHEMA_DIR/package.sql" brep 1>"$OUT_FILE" 2>&1 + + ERROR=$? + + if test $ERROR -eq 0; then + echo "brep DB schema created" + else + cat "$OUT_FILE" 1>&2 + echo "brep DB schema creating failed" + exit $ERROR; + fi + fi +fi |