From 9d05c9ca73c2b501744d528475532ab728318bde Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Sun, 19 Mar 2023 10:06:45 +0100 Subject: Initial version of "ppq" - portable PostgreSQL This allows running PostgreSQL locally without having to set up a system-wide service. It is portable in the sense that you can move the directory around, and you can run multiple instances side-by-side. --- ppq.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 ppq.sh (limited to 'ppq.sh') diff --git a/ppq.sh b/ppq.sh new file mode 100755 index 0000000..29a9d5e --- /dev/null +++ b/ppq.sh @@ -0,0 +1,50 @@ +#!/bin/sh +set -euo pipefail + +kill_jobs() { + jobs -p | xargs -rn1 kill || true +} + +trap "kill_jobs" EXIT + +POSTGRES="postgres -c unix_socket_directories=${PPQ_POSTGRES_DATA_DIR}" + +# NOTE: Environment variables here are set up by .envrc + +postgres_init () { + local PGDATA_NEW="${PGDATA}.new" + + rm -rf "${PGDATA_NEW}" + pg_ctl -s init -D "${PGDATA_NEW}" -o "-E UTF-8 --no-locale -A trust -U postgres" + echo "${PGDATA_NEW}" + + # Clobber postgresql.conf + ln -fs "${PPQ_POSTGRES_DIR}/postgresql.conf" "${PGDATA_NEW}/" + ln -fs "${PPQ_POSTGRES_DIR}/postgresql_overrides.conf" "${PGDATA_NEW}/" || true + + if [ -f "${PPQ_POSTGRES_DIR}/prepare.sql" ]; then + $POSTGRES --single -D "${PGDATA_NEW}" postgres < "${PPQ_POSTGRES_DIR}/prepare.sql" >/dev/null + fi + + mv "${PGDATA_NEW}" "${PGDATA}" + sync +} + +postgres_start () { + [ -d "${PGDATA}" ] || postgres_init + $POSTGRES +} + + +COMMAND="${1:-}" +[ -n "$COMMAND" ] && shift + +case "$COMMAND" in + start) + postgres_start + ;; + *) + echo "Available commands:" + echo " start - start the PostgreSQL server" + ;; +esac -- cgit v1.2.3