Jak na aktualizaci TimescaleDB

Co nás čeká?

TimescaleDB je populární rozšíření pro PostgreSQL, které umožňuje efektivní zpracování časových řad. Při aktualizaci TimescaleDB je důležité dodržet správné postupy, aby byla zachována stabilita a funkčnost databází, které toto rozšíření používají. Tento návod vás provede jednotlivými kroky aktualizace TimescaleDB.

Kontrola stávající verze TimescaleDB

Než začnete s aktualizací, zkontrolujte, jakou verzi TimescaleDB máte aktuálně nainstalovanou a aktivní v databázích.

Příkaz pro kontrolu nainstalované verze rozšíření TimescaleDB:

sudo -u postgres psql -c "SELECT default_version, installed_version FROM pg_available_extensions WHERE name = 'timescaledb';"

Tento dotaz zobrazí verze, které jsou dostupné a aktuálně nainstalované. Například, můžete vidět nainstalovanou verzi 2.11.2.

Aktualizace balíčků TimescaleDB

Pro aktualizaci samotných balíčků TimescaleDB, včetně dodatečných komponent jako jsou TimescaleDB tools a TimescaleDB loader, použijte následující příkaz:

sudo dnf upgrade timescaledb-*

Tento příkaz zajistí, že všechny součásti TimescaleDB, které máte nainstalované (včetně nástrojů a loaderu), budou aktualizovány na nejnovější verzi. To vám umožní plně využívat všechny nové funkce a vylepšení, které TimescaleDB nabízí.

Identifikace databází, které používají TimescaleDB

Dalším krokem je identifikace databází, které používají rozšíření TimescaleDB. Můžete to provést pomocí dotazu v PostgreSQL:

sudo -u postgres psql -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" | 
while read dbname; do 
  sudo -u postgres psql -d "$dbname" -c "SELECT '$dbname' as database, extname as extension FROM pg_extension WHERE extname = 'timescaledb';"; 
done

Tento příkaz prochází všechny databáze (kromě šablonových) a kontroluje, zda obsahují rozšíření TimescaleDB. Pokud ano, vypíše název databáze a rozšíření.

To znamená, že rozšíření TimescaleDB je používáno v databázi zabbix, jak je vidět na řádku s výsledkem (1 row). Tento výstup potvrzuje, že databáze zabbix má aktivní rozšíření TimescaleDB, a je tedy potřeba ji zahrnout do aktualizačního procesu.

Aktualizace rozšíření TimescaleDB v databázích

Po aktualizaci balíčků a identifikaci databází je třeba provést aktualizaci rozšíření TimescaleDB v jednotlivých databázích. To provedete následujícím SQL příkazem pro každou databázi, která používá TimescaleDB:

sudo -u postgres psql -d <vaše_databáze> -c "ALTER EXTENSION timescaledb UPDATE;"

Tento příkaz aktualizuje rozšíření na nejnovější verzi v konkrétní databázi. Ujistěte se, že nahradíte <vaše_databáze> názvem databáze, kterou chcete aktualizovat.

Pokud během aktualizace narazíte na chybu s hláškou:

ERROR: loader version out-of-date
HINT: Please restart the database to upgrade the loader version.

Je potřeba restartovat PostgreSQL server. Ujistěte se, že nahradíte číslo verze v příkazu podle vaší aktuální verze PostgreSQL serveru:

sudo systemctl restart postgresql-<verze>.service

Například pro PostgreSQL 16 použijte:

sudo systemctl restart postgresql-16.service

Po restartu serveru opakujte příkaz pro aktualizaci rozšíření TimescaleDB:

sudo -u postgres psql -d <vaše_databáze> -c "ALTER EXTENSION timescaledb UPDATE;"

Tímto způsobem zajistíte, že rozšíření TimescaleDB bude úspěšně aktualizováno a bude plně funkční.

Restart PostgreSQL serveru po aktualizaci

Po úspěšné aktualizaci rozšíření TimescaleDB je doporučeno restartovat PostgreSQL server, aby byly všechny změny plně aplikovány a nové verze komponent správně načteny.

Ujistěte se, že nahradíte číslo verze v příkazu podle vaší aktuální verze PostgreSQL serveru:

sudo systemctl restart postgresql-<verze>.service

Například pro PostgreSQL 16 použijte:

sudo systemctl restart postgresql-16.service

Tento krok zajistí, že všechny změny, které byly provedeny během aktualizace, budou plně účinné a databázový server bude připraven pro další provoz.

Automatická aktualizace rozšíření TimescaleDB ve všech databázích (volitelný)

Pokud máte více databází, které používají rozšíření TimescaleDB, a chcete automatizovat proces jejich aktualizace, můžete použít následující příkaz. Tento příkaz provede aktualizaci rozšíření TimescaleDB automaticky ve všech databázích, kde je toto rozšíření aktuálně nainstalováno.

Automatická aktualizace rozšíření TimescaleDB

Následující příkaz prohledá všechny databáze na serveru, zkontroluje, zda v nich je nainstalováno rozšíření TimescaleDB, a pokud ano, provede jeho aktualizaci:

sudo -u postgres psql -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" | 
while read dbname; do 
  if sudo -u postgres psql -d "$dbname" -tAc "SELECT 1 FROM pg_extension WHERE extname = 'timescaledb'" | grep -q 1; then 
    sudo -u postgres psql -d "$dbname" -c "ALTER EXTENSION timescaledb UPDATE;"; 
  fi; 
done

Co tento příkaz dělá:

  • Výběr databází: Vybere všechny databáze kromě šablonových (template0 a template1).
  • Kontrola rozšíření: U každé databáze nejprve zkontroluje, zda je rozšíření TimescaleDB nainstalováno.
  • Aktualizace rozšíření: Pokud je rozšíření TimescaleDB nainstalováno, provede jeho aktualizaci na nejnovější verzi.

Zkopírujte tento kompletní příkaz a spusťte ho v terminálu. Tento příkaz zajistí, že aktualizace proběhne pouze v databázích, kde je rozšíření TimescaleDB aktuálně nainstalováno.

Pokud při pokusu o aktualizaci rozšíření TimescaleDB uvidíte následující chybu:

ERROR: loader version out-of-date
HINT: Please restart the database to upgrade the loader version.

Je potřeba restartovat PostgreSQL server a akci opakovat. Ujistěte se, že nahradíte číslo verze v příkazu podle vaší aktuální verze PostgreSQL serveru:

sudo systemctl restart postgresql-<verze>.service

Například pro PostgreSQL 15 použijte:

sudo systemctl restart postgresql-15.service

Po restartu PostgreSQL serveru a opětovném spuštění příkazu na aktualizaci byste měli vidět potvrzení:

ALTER EXTENSION

Tím se potvrdí, že aktualizace rozšíření TimescaleDB proběhla úspěšně.

Restart aplikací (volitelný)

Po provedení aktualizace je doporučeno restartovat aplikace, které se připojují k databázím s TimescaleDB. Tím zajistíte, že aplikace správně načtou novou verzi rozšíření a předejdete možným problémům s kompatibilitou.

sudo systemctl restart vaše_aplikace

Ověření funkčnosti a optimalizace

Po aktualizaci rozšíření a restartu aplikací zkontrolujte, zda vše funguje podle očekávání. Doporučujeme provést základní dotazy a zkontrolovat, že aplikace pracuje bez problémů.

Navíc můžete provést další optimalizaci, například reindexaci, pokud došlo k významným změnám v datových strukturách nebo indexech.

Další Doporučení

  • Testování na testovacím prostředí: Před aktualizací na produkčním prostředí doporučujeme provést testovací aktualizaci na testovacím serveru, abyste minimalizovali riziko problémů v produkci.
  • Sledování výkonu: Po aktualizaci sledujte výkon TimescaleDB, abyste zjistili, zda došlo k nějakým změnám, a případně upravte nastavení výkonu podle potřeby.
  • Záloha před aktualizací: I když se jedná o menší aktualizaci, doporučujeme provést zálohu databází před provedením změn, abyste měli možnost návratu v případě problémů.
  • Procházení changelogu: Seznamte se s novinkami a změnami v nové verzi TimescaleDB, abyste věděli, jaké nové funkce můžete využít a co je potřeba upravit.

Tímto způsobem zajistíte, že aktualizace TimescaleDB proběhne hladce a že vaše databáze budou i nadále plně funkční a optimalizované.