Postgres - upgrade v ramci kontejneru

Postgres - upgrade v ramci kontejneru
« kdy: 30. 04. 2021, 10:55:48 »
Ahoj,
rad bych ze zkusenejsich zeptal, zda nemate zkusenosti s upgradem Postgre instanci (z verze 10 -> 13), ktere bezi v kontejneru. Tedy samotny db engine bezi v kontejneru, data jsou prolinkovana z kontejneru ven.
Existuje moznost vymenit pouze kontejner s verzi 10 za kontejner s verzi 13 a nasledne spustit pg_upgrade nebo to databaze nerozchodi? Z dokumentace jsem to pochopil tak, ze to podle vseho nepujde (musel bych definovat nove cesty pro cluster data, coz nechci), ale treba nejaka cesta existuje?
Dalsi zvazovanou variantou je totiz dump aktualnich db, vymena kontejneru a import do nove verze ... coz mi nicmene prijde pri vetsim mnozstvi instanci a db v nich pracnejsi.
Diky za pripadne info ci zkusenosti!


Re:Postgres - upgrade v ramci kontejneru
« Odpověď #1 kdy: 30. 04. 2021, 11:10:36 »
Nikdy jsem nic takového nezkoušel, nicméně pg_upgrade funguje tak, že musíte mít vedle novou instanci Postgresu, a tudíž v jednu chvíli musíte mít nainstalovanou jak starou, tak novou verzi (ve vašem případě 10 a 13). Uděláte initdb vůči nové verzi (nesmíte ji nastartovat), pak vypnete starou verzi a zavoláte pg_upgrade. Když to projde (migrace z 10 na 13) by neměla být problémová, tak pak můžete smazat (předpokládám, že máte backup) starou verzi, a pokud vám nevyhovuje aktuální adresa nové instance, tak přesunout novou instanci, kam chcete. Jen někde musíte změnit PGDATA, aby se odkazoval na novou instanci. Z praktických důvodů (aby šlo jednoduše volat pg_upgrade) se do cesty v PGDATA dává verze pg.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #2 kdy: 30. 04. 2021, 14:35:56 »
Pro upgrade ale nepotřebujete mít tu starou verzi PostgreSQL nainstalovanou, ne? Je potřeba mít data ze staré verze a k tomu novou verzi Postgresu. Tj. postup s kontejnery by měl být takový, že zastavíte kontejner se starou verzí, zazálohujete data. Pak z kontejneru s novou verzí spustíte initdb do nového datového adresáře, pak spustíte pg_upgrade z adresáře s původními daty do adresáře s novými daty a na závěr už jen spustíte kontejner s novou verzí, ke kterému bude připojen adresář s daty v nové verzi. Díky kontejneru ani nemusíte PGDATA měnit – prostě jen datový adresář přilinkujete na správné místo.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #3 kdy: 30. 04. 2021, 14:51:03 »
Pro upgrade ale nepotřebujete mít tu starou verzi PostgreSQL nainstalovanou, ne? Je potřeba mít data ze staré verze a k tomu novou verzi Postgresu. Tj. postup s kontejnery by měl být takový, že zastavíte kontejner se starou verzí, zazálohujete data. Pak z kontejneru s novou verzí spustíte initdb do nového datového adresáře, pak spustíte pg_upgrade z adresáře s původními daty do adresáře s novými daty a na závěr už jen spustíte kontejner s novou verzí, ke kterému bude připojen adresář s daty v nové verzi. Díky kontejneru ani nemusíte PGDATA měnit – prostě jen datový adresář přilinkujete na správné místo.

To si jsem jistý, že u pg_upgrade to tak není (možná si to pletete s MySQL). Podívejte se na povinné argumenty pro pg_upgrade. Zadáváte tam cestu ke starým binárkám. U Postgresu nové binárky neumí přečíst starý systémový katalog. Klienti se umí připojit ke staré verzi Postgresu (psql, nebo pg_dump), ale ta stará verze musí běžet.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #4 kdy: 30. 04. 2021, 15:23:00 »
Já to řešil kdysi, a problém byl, že kontejner neobsahoval ty správné verze binárek (staré i nové zároveň), jak píšete.

Existuje https://github.com/tianon/docker-postgres-upgrade který by to měl řešit, ale já jsem to tenkrát vzdal, a vrátil se k MySQL pro kontejnerové nasazení, takže zkušenosti s tím nemám.


Re:Postgres - upgrade v ramci kontejneru
« Odpověď #5 kdy: 30. 04. 2021, 15:47:03 »
Pro upgrade ale nepotřebujete mít tu starou verzi PostgreSQL nainstalovanou, ne?

To si jsem jistý, že u pg_upgrade to tak není (možná si to pletete s MySQL). Podívejte se na povinné argumenty pro pg_upgrade. Zadáváte tam cestu ke starým binárkám. U Postgresu nové binárky neumí přečíst starý systémový katalog. Klienti se umí připojit ke staré verzi Postgresu (psql, nebo pg_dump), ale ta stará verze musí běžet.
Myslel jsem, že jsem dělal upgrade bez přítomnosti staré verze databáze – ale nejspíš jsem tenkrát obnovil data ze zálohy a nepoužil jsem pg_upgrade.

V tom případě je potřeba použít speciální upgradovací kontejner, ve kterém budou obě verze PostgreSQL. Jak píše R.S., takový kontejner už někdo vytvořil.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #6 kdy: 30. 04. 2021, 17:40:50 »
Já to řešil kdysi, a problém byl, že kontejner neobsahoval ty správné verze binárek (staré i nové zároveň), jak píšete.

Existuje https://github.com/tianon/docker-postgres-upgrade který by to měl řešit, ale já jsem to tenkrát vzdal, a vrátil se k MySQL pro kontejnerové nasazení, takže zkušenosti s tím nemám.

já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #7 kdy: 30. 04. 2021, 18:08:47 »
A co takhle rozjet docker s novym postgres a pouzit data migration tool?

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #8 kdy: 30. 04. 2021, 20:48:48 »
já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?
Je to jako s každým jiným nástrojem – nějakou práci to zjednoduší, jiná se tím zkomplikuje. Nainstalovat jeden PostgreSQL na jeden server je samozřejmě jednodušší pomocí balíčkovacího manažeru, ale když na tom serveru budu chtít mít třeba pět verzí PostgreSQL kvůli testování, záleží už na konkrétní distribuci, zda má PostgreSQL zabalený tak, že více verzí umožňuje (zrovna kvůli těm upgradům to asi bude u PostgreSQL běžné, ale u jiného softwaru ne).

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #9 kdy: 01. 05. 2021, 06:16:00 »
já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?
Je to jako s každým jiným nástrojem – nějakou práci to zjednoduší, jiná se tím zkomplikuje. Nainstalovat jeden PostgreSQL na jeden server je samozřejmě jednodušší pomocí balíčkovacího manažeru, ale když na tom serveru budu chtít mít třeba pět verzí PostgreSQL kvůli testování, záleží už na konkrétní distribuci, zda má PostgreSQL zabalený tak, že více verzí umožňuje (zrovna kvůli těm upgradům to asi bude u PostgreSQL běžné, ale u jiného softwaru ne).

To právě u pg není vůbec žádný problém.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #10 kdy: 01. 05. 2021, 08:29:38 »
To právě u pg není vůbec žádný problém.
On to není vůbec žádný problém u spousty programů. Ale málokterý z nich pro to má v distribucích speciální podporu.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #11 kdy: 01. 05. 2021, 09:03:12 »
já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?
Je to jako s každým jiným nástrojem – nějakou práci to zjednoduší, jiná se tím zkomplikuje. Nainstalovat jeden PostgreSQL na jeden server je samozřejmě jednodušší pomocí balíčkovacího manažeru, ale když na tom serveru budu chtít mít třeba pět verzí PostgreSQL kvůli testování, záleží už na konkrétní distribuci, zda má PostgreSQL zabalený tak, že více verzí umožňuje (zrovna kvůli těm upgradům to asi bude u PostgreSQL běžné, ale u jiného softwaru ne).

V jedne firme delaly takove all in one baliky s webovkou, a to v sobe melo svoje vlastni postgres v dockeru. Jednotlive vzajemne nezavisle webovky ktere bezi na serveru muzou mit takto vzajemne izolovane databaze.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #12 kdy: 02. 05. 2021, 19:45:39 »
Preco si to komplikovat a na starej verzii nepustit  pg_dump a na novej psql dump.sql? Az tak casto to zase robit nebudes aby to bolo nutne automatizovat, interval bude cca rovnaky ako vychadzaju nove verzie postgresu. V postgres ten dump funguje v pohode, neni to taky porod ako importovat komplet cely server na mysql. I ked je nie len koli takymto problemom je lepsie mat stavovu aplikaciu (ako je db) mimo kontajnery.

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #13 kdy: 02. 05. 2021, 19:50:02 »
To právě u pg není vůbec žádný problém.
On to není vůbec žádný problém u spousty programů. Ale málokterý z nich pro to má v distribucích speciální podporu.

U  pg to nie je realne ziadny problem, staci pouzit repozitare z postgresql.org. V jednotlivych linuxovych distrach sa zvedsa rozne verzie pg nevedu...

Re:Postgres - upgrade v ramci kontejneru
« Odpověď #14 kdy: 02. 05. 2021, 23:04:10 »
BTW nemala by byť DB správne mimo kontainerov (ak nepočítam vývoj)?! Čím bližšie je DB k HW tým lepší výkon nie? Do kontainerov iba bezstavovú aplikáciu ako píše Death Walker...