# PostgreSQL Development Profile GovOPlaN development now defaults to PostgreSQL: ```text postgresql+psycopg://govoplan_dev@127.0.0.1:5432/govoplan_dev ``` The matching pg-tools URL for `psql`, `pg_dump`, and `pg_restore` is: ```text postgresql://govoplan_dev@127.0.0.1:5432/govoplan_dev ``` Store the password in `~/.pgpass` instead of committing it to a `.env` file. The devserver and `govoplan/tools/launch/launch-dev.sh` honor an explicit `DATABASE_URL` if you need a different database. ## Host PostgreSQL Setup Create the default local role and database from a host shell: ```bash export GOVOPLAN_PG_DB=govoplan_dev export GOVOPLAN_PG_USER=govoplan_dev read -rsp "Password for ${GOVOPLAN_PG_USER}: " GOVOPLAN_PG_PASSWORD echo if ! sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${GOVOPLAN_PG_USER}'" | grep -q 1; then sudo -u postgres createuser --pwprompt "${GOVOPLAN_PG_USER}" else sudo -u postgres psql -c "\\password ${GOVOPLAN_PG_USER}" fi if ! sudo -u postgres psql -tAc "SELECT 1 FROM pg_database WHERE datname='${GOVOPLAN_PG_DB}'" | grep -q 1; then sudo -u postgres createdb -O "${GOVOPLAN_PG_USER}" "${GOVOPLAN_PG_DB}" fi sudo -u postgres psql -d "${GOVOPLAN_PG_DB}" -c "ALTER SCHEMA public OWNER TO ${GOVOPLAN_PG_USER};" touch ~/.pgpass chmod 600 ~/.pgpass grep -v "^127.0.0.1:5432:${GOVOPLAN_PG_DB}:${GOVOPLAN_PG_USER}:" ~/.pgpass > ~/.pgpass.tmp || true printf '127.0.0.1:5432:%s:%s:%s\n' "$GOVOPLAN_PG_DB" "$GOVOPLAN_PG_USER" "$GOVOPLAN_PG_PASSWORD" >> ~/.pgpass.tmp mv ~/.pgpass.tmp ~/.pgpass chmod 600 ~/.pgpass ``` Check access: ```bash psql "postgresql://${GOVOPLAN_PG_USER}@127.0.0.1:5432/${GOVOPLAN_PG_DB}" \ -c 'select current_user, current_database();' ``` When running through the VS Codium Flatpak sandbox, host PostgreSQL tools are available through: ```bash flatpak-spawn --host /usr/bin/psql --version flatpak-spawn --host /usr/bin/pg_dump --version flatpak-spawn --host /usr/bin/pg_restore --version ``` ## Run GovOPlaN Against Host PostgreSQL ```bash cd /mnt/DATA/git/govoplan ./.venv/bin/python -m govoplan_core.commands.init_db \ --database-url postgresql+psycopg://govoplan_dev@127.0.0.1:5432/govoplan_dev \ --with-dev-data ./.venv/bin/python -m govoplan_core.devserver --smoke --no-reload ``` For the full backend and WebUI launcher: ```bash cd /mnt/DATA/git/govoplan tools/launch/launch-dev.sh ``` To force the old SQLite fallback for a disposable local run: ```bash cd /mnt/DATA/git/govoplan GOVOPLAN_DEV_DATABASE_BACKEND=sqlite tools/launch/launch-dev.sh ``` ## Disposable Docker Testbed This testbed is for migration and module-permutation checks. It is not a production deployment profile. ```bash cd /mnt/DATA/git/govoplan/dev/postgres cp .env.example .env docker compose --env-file .env up -d ``` Run the integration check from the meta checkout: ```bash cd /mnt/DATA/git/govoplan set -a . dev/postgres/.env set +a tools/checks/postgres-integration-check.py \ --database-url "$GOVOPLAN_POSTGRES_DATABASE_URL" \ --reset-schema ``` `--reset-schema` drops and recreates the `public` schema before every module set. Use it only against this disposable database. Stop the testbed: ```bash cd /mnt/DATA/git/govoplan/dev/postgres docker compose --env-file .env down ``` Remove all test data: ```bash docker compose --env-file .env down -v ```