# Switch The Running Postgres Server Version

I use [asdf](https://github.com/asdf-vm/asdf) install and manage multiple versions of Postgres on my Mac OSX machine. With `asdf` and project-based `.tools-versions` files, I can control what version of Postgres (`psql`) I use at a project-level.

The one snag with this workflow is managing the currently running server version. Lets say I need to switch from a project using `12.3` to a project using `13.1`. If the Postgres server running on my machine is using the Postgres server 12.3, then I'll need to manually stop that server and start up the Postgres server 13.1.

This can be done like so:

```bash
# stop the 12.3 server
$ $HOME/.asdf/installs/postgres/12.3/bin/pg_ctl \
    -D $HOME/.asdf/installs/postgres/12.3/data \
    stop

# start the 13.1 server
$ $HOME/.asdf/installs/postgres/13.1/bin/pg_ctl \
    -D $HOME/.asdf/installs/postgres/13.1/data \
    start
```

This uses the specific asdf-versioned `pg_ctl` command to stop and start the servers.

I've found it tedious to dig up these commands each time I need to switch, so I added a [`switch_pg` function to my `~/.zshrc` config](https://gist.github.com/jbranchaud/3cda6be6e1dc69c6f55435a387018dac).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ploegert.gitbook.io/til/programmy/databases/postgres/commands/switch-the-running-postgres-server-version.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
