I need to upgrade a postgresql database inside a running container. For that I need to stop the old server so I can start the new. The problem is that I didn’t find how to stop the running postgres process thourgh systemctl, pg_ctl or service.
pg_ctl:
root@postgres-7ffd788bc9-g2dkv:/# su postgres
$ pg_ctl status
sh: 1: pg_ctl: not found
systemctl:
root@postgres-7ffd788bc9-g2dkv:/# systemctl status postgresql
bash: systemctl: command not found
service (returns nothing):
root@postgres-7ffd788bc9-g2dkv:/# service postgresql status
root@postgres-7ffd788bc9-g2dkv:/#
The postgresql was created using this kubernetes yaml:
spec:
containers:
- name: postgres
image: postgres:10.4
The server is running:
root@postgres-7ffd788bc9-g2dkv:/# psql postgresql://user:[email protected]:5432/postgresdb
psql (12.5 (Debian 12.5-1.pgdg90+1), server 10.4 (Debian 10.4-2.pgdg90+1))
Type "help" for help.
postgresdb=# select VERSION();
version
----------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 10.4 (Debian 10.4-2.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
(1 row)
What do you suggest to do?
2
Answers
What I did at the end is creating a parallel postgres pod in Kubernetes which holds the new version. Then I dumped database from old server, copied it to the new server, and used it to initialize the data base there.
Here are the steps one by one:
Create a parallel postgres service with the new version
In old version pod:
ssh to new-pod
extra step that I needed, becuase for some reason new pod didn't had 'postgres' user created: get into postgres client using your credentials:
then exit postgres and exit to normal user
how about stopping the container, changing the version in the yaml then rebuild ?