<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wiki - PostgreSQL - Vědomostní báze od initMAX s.r.o.</title>
	<atom:link href="https://www.initmax.cz/wiki/kapitola/postgresql/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.initmax.cz/wiki/kapitola/postgresql/</link>
	<description>Nabízíme monitoring všech prvků infrastruktury; správu identit, automatizaci serverů, služeb i aplikací; správu logů, databází a mnoho více.</description>
	<lastBuildDate>Thu, 06 Nov 2025 06:13:48 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Jak na&#160;aktualizaci TimescaleDB</title>
		<link>https://www.initmax.cz/wiki/jak-na-aktualizaci-timescaledb/</link>
		
		<dc:creator><![CDATA[Tomáš Heřmánek]]></dc:creator>
		<pubDate>Tue, 27 Aug 2024 14:41:53 +0000</pubDate>
				<guid isPermaLink="false">https://www.initmax.cz/?post_type=wiki&#038;p=15077</guid>

					<description><![CDATA[<p>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 ...</p>
<p>The post <a href="https://www.initmax.cz/wiki/jak-na-aktualizaci-timescaledb/">Jak na&nbsp;aktualizaci TimescaleDB</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>TimescaleDB je populární rozšíření pro PostgreSQL, které umožňuje efektivní zpracování časových řad. Při&nbsp;aktualizaci TimescaleDB je důležité dodržet správné postupy, aby byla zachována stabilita a&nbsp;funkčnost databází, které toto rozšíření používají. Tento návod vás provede jednotlivými kroky aktualizace TimescaleDB.</p>


<section id="social-links-block_cf4c9a6cd726e214fa4a92ef8c870d39" data-id="social-links-block_cf4c9a6cd726e214fa4a92ef8c870d39" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>




<h2 class="wp-block-heading">Kontrola stávající verze TimescaleDB</h2>



<p>Než začnete s&nbsp;aktualizací, zkontrolujte, jakou verzi TimescaleDB máte aktuálně nainstalovanou a&nbsp;aktivní v&nbsp;databázích.</p>



<p>Příkaz pro kontrolu nainstalované verze rozšíření TimescaleDB:</p>


<section id="block-code-block_054550ccdb3bb7fb1b49da08af8c16ab" data-id="block-code-block_054550ccdb3bb7fb1b49da08af8c16ab" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -c &quot;SELECT default_version, installed_version FROM pg_available_extensions WHERE name = &#039;timescaledb&#039;;&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>



<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="3282" height="290" src="https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb_runing_version.png" alt="" class="wp-image-15082" srcset="https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb_runing_version.png 3282w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb_runing_version-300x27.png 300w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb_runing_version-1024x90.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb_runing_version-768x68.png 768w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb_runing_version-1536x136.png 1536w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb_runing_version-2048x181.png 2048w" sizes="(max-width: 3282px) 100vw, 3282px" /></figure>
</div>


<p>Tento dotaz zobrazí verze, které jsou dostupné a&nbsp;aktuálně nainstalované. Například, můžete vidět nainstalovanou verzi&nbsp;<code>2.11.2</code>.</p>



<h2 class="wp-block-heading">Aktualizace balíčků TimescaleDB</h2>



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


<section id="block-code-block_2718fe9e9f894adbdae4edb877bef6ff" data-id="block-code-block_2718fe9e9f894adbdae4edb877bef6ff" class="gt-block block-code">
    <pre><code>sudo dnf upgrade timescaledb-*</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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



<h2 class="wp-block-heading">Identifikace databází, které používají TimescaleDB</h2>



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


<section id="block-code-block_4c8e40ce3467ae30606b2d169793b742" data-id="block-code-block_4c8e40ce3467ae30606b2d169793b742" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -t -c &quot;SELECT datname FROM pg_database WHERE datistemplate = false;&quot; | 
while read dbname; do 
  sudo -u postgres psql -d &quot;$dbname&quot; -c &quot;SELECT &#039;$dbname&#039; as database, extname as extension FROM pg_extension WHERE extname = &#039;timescaledb&#039;;&quot;; 
done</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="4476" height="750" src="https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-databases_using_timescaledb.png" alt="" class="wp-image-15090" srcset="https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-databases_using_timescaledb.png 4476w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-databases_using_timescaledb-300x50.png 300w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-databases_using_timescaledb-1024x172.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-databases_using_timescaledb-768x129.png 768w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-databases_using_timescaledb-1536x257.png 1536w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-databases_using_timescaledb-2048x343.png 2048w" sizes="(max-width: 4476px) 100vw, 4476px" /></figure>
</div>


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



<h2 class="wp-block-heading">Aktualizace rozšíření TimescaleDB v&nbsp;databázích</h2>



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


<section id="block-code-block_a84010d456500ac87756fe2f18f2d27f" data-id="block-code-block_a84010d456500ac87756fe2f18f2d27f" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -d &lt;vaše_databáze&gt; -c &quot;ALTER EXTENSION timescaledb UPDATE;&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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



<p>Pokud během aktualizace narazíte na&nbsp;chybu s&nbsp;hláškou:</p>


<section id="block-code-block_b62b4a8850b15a7917a1bf29c236c5af" data-id="block-code-block_b62b4a8850b15a7917a1bf29c236c5af" class="gt-block block-code">
    <pre><code>ERROR: loader version out-of-date
HINT: Please restart the database to upgrade the loader version.</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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


<section id="block-code-block_20b4496acb843c6a5375adb8287bb362" data-id="block-code-block_20b4496acb843c6a5375adb8287bb362" class="gt-block block-code">
    <pre><code>sudo systemctl restart postgresql-&lt;verze&gt;.service</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Například pro PostgreSQL 18 použijte:</p>


<section id="block-code-block_89f74bca8e253c23dafce4a7d377d5a0" data-id="block-code-block_89f74bca8e253c23dafce4a7d377d5a0" class="gt-block block-code">
    <pre><code>sudo systemctl restart postgresql-18.service</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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


<section id="block-code-block_a84010d456500ac87756fe2f18f2d27f" data-id="block-code-block_a84010d456500ac87756fe2f18f2d27f" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -d &lt;vaše_databáze&gt; -c &quot;ALTER EXTENSION timescaledb UPDATE;&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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



<h2 class="wp-block-heading">Restart PostgreSQL serveru po&nbsp;aktualizaci</h2>



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



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


<section id="block-code-block_20b4496acb843c6a5375adb8287bb362" data-id="block-code-block_20b4496acb843c6a5375adb8287bb362" class="gt-block block-code">
    <pre><code>sudo systemctl restart postgresql-&lt;verze&gt;.service</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Například pro PostgreSQL 18 použijte:</p>


<section id="block-code-block_89f74bca8e253c23dafce4a7d377d5a0" data-id="block-code-block_89f74bca8e253c23dafce4a7d377d5a0" class="gt-block block-code">
    <pre><code>sudo systemctl restart postgresql-18.service</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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



<h2 class="wp-block-heading">Automatická aktualizace rozšíření TimescaleDB ve všech databázích (volitelný)</h2>



<p>Pokud máte více databází, které používají rozšíření TimescaleDB, a&nbsp;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.</p>



<h4 class="wp-block-heading">Automatická aktualizace rozšíření TimescaleDB</h4>



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


<section id="block-code-block_0b8e28d15e7126f5f8e814ebab0e06df" data-id="block-code-block_0b8e28d15e7126f5f8e814ebab0e06df" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -t -c &quot;SELECT datname FROM pg_database WHERE datistemplate = false;&quot; | 
while read dbname; do 
  if sudo -u postgres psql -d &quot;$dbname&quot; -tAc &quot;SELECT 1 FROM pg_extension WHERE extname = &#039;timescaledb&#039;&quot; | grep -q 1; then 
    sudo -u postgres psql -d &quot;$dbname&quot; -c &quot;ALTER EXTENSION timescaledb UPDATE;&quot;; 
  fi; 
done
</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h3 class="wp-block-heading">Co tento příkaz dělá:</h3>



<ul class="wp-block-list">
<li><strong>Výběr databází:</strong>&nbsp;Vybere všechny databáze kromě šablonových (<code>template0</code>&nbsp;a&nbsp;<code>template1</code>).</li>



<li><strong>Kontrola rozšíření:</strong>&nbsp;U&nbsp;každé databáze nejprve zkontroluje, zda je rozšíření TimescaleDB nainstalováno.</li>



<li><strong>Aktualizace rozšíření:</strong>&nbsp;Pokud je rozšíření TimescaleDB nainstalováno, provede jeho aktualizaci na&nbsp;nejnovější verzi.</li>
</ul>



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



<p>Pokud při&nbsp;pokusu o&nbsp;aktualizaci rozšíření TimescaleDB uvidíte následující chybu:</p>


<section id="block-code-block_b62b4a8850b15a7917a1bf29c236c5af" data-id="block-code-block_b62b4a8850b15a7917a1bf29c236c5af" class="gt-block block-code">
    <pre><code>ERROR: loader version out-of-date
HINT: Please restart the database to upgrade the loader version.</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




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


<section id="block-code-block_20b4496acb843c6a5375adb8287bb362" data-id="block-code-block_20b4496acb843c6a5375adb8287bb362" class="gt-block block-code">
    <pre><code>sudo systemctl restart postgresql-&lt;verze&gt;.service</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Například pro PostgreSQL 18 použijte:</p>


<section id="block-code-block_a55f7f01f524b36ec9545cfc152f2906" data-id="block-code-block_a55f7f01f524b36ec9545cfc152f2906" class="gt-block block-code">
    <pre><code>sudo systemctl restart postgresql-18.service
</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Po restartu PostgreSQL serveru a&nbsp;<strong>opětovném spuštění příkazu na&nbsp;aktualizaci</strong> byste měli vidět potvrzení:</p>


<section id="block-code-block_b5104fcea2d83d5638eed81c000959cc" data-id="block-code-block_b5104fcea2d83d5638eed81c000959cc" class="gt-block block-code">
    <pre><code>ALTER EXTENSION</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>



<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="4478" height="770" src="https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-upgrade_fail.png" alt="" class="wp-image-15099" srcset="https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-upgrade_fail.png 4478w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-upgrade_fail-300x52.png 300w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-upgrade_fail-1024x176.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-upgrade_fail-768x132.png 768w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-upgrade_fail-1536x264.png 1536w, https://www.initmax.cz/wp-content/uploads/2024/08/timescaledb-upgrade_fail-2048x352.png 2048w" sizes="(max-width: 4478px) 100vw, 4478px" /></figure>
</div>


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



<h2 class="wp-block-heading">Restart aplikací (volitelný)</h2>



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


<section id="block-code-block_193c6755cddd3a4c4b44ebf78c087b0f" data-id="block-code-block_193c6755cddd3a4c4b44ebf78c087b0f" class="gt-block block-code">
    <pre><code>sudo systemctl restart vaše_aplikace</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">Ověření funkčnosti a&nbsp;optimalizace</h2>



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



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



<h2 class="wp-block-heading">Další Doporučení</h2>



<ul class="wp-block-list">
<li><strong>Testování na&nbsp;testovacím prostředí:</strong>&nbsp;Před aktualizací na&nbsp;produkčním prostředí doporučujeme provést testovací aktualizaci na&nbsp;testovacím serveru, abyste minimalizovali riziko problémů v&nbsp;produkci.</li>



<li><strong>Sledování výkonu:</strong>&nbsp;Po&nbsp;aktualizaci sledujte výkon TimescaleDB, abyste zjistili, zda došlo k&nbsp;nějakým změnám, a&nbsp;případně upravte nastavení výkonu podle potřeby.</li>



<li><strong>Záloha před aktualizací:</strong>&nbsp;I&nbsp;když se jedná o&nbsp;menší aktualizaci, doporučujeme provést zálohu databází před provedením změn, abyste měli možnost návratu v&nbsp;případě problémů.</li>



<li><strong>Procházení changelogu:</strong>&nbsp;Seznamte se s&nbsp;novinkami a&nbsp;změnami v&nbsp;nové verzi TimescaleDB, abyste věděli, jaké nové funkce můžete využít a&nbsp;co je potřeba upravit.</li>
</ul>



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


<section id="block-newsletter-block_70763c45357aa02545f9e7fc5788766d" data-id="block-newsletter-block_70763c45357aa02545f9e7fc5788766d" class="gt-block block-newsletter">
    <section id="newsletter" class="newsletter">
	<div class="gradient basic">
		<div class="newsletter__inner width width--general">
			<div class="col left">
									<h2 class="newsletter__title">Buďte v&nbsp;obraze s&nbsp;naším newsletterem</h2>
													<div class="newsletter__content"><p>Díky initMAX newsletteru Vám neunikne žádná z&nbsp;pozvánek na&nbsp;akce a&nbsp;webináře, žádný z&nbsp;tipů, jak dostat ze svého IT MAXimum, ani ověřené informace o&nbsp;novinkách ze světa Zabbix a&nbsp;dalších technologií.</p>
</div>
							</div>
			<div class="col right form-wrapper">
				<div class="newsletter-form">
	<form method="post" action="/wiki/kapitola/postgresql/feed/" enctype="multipart/form-data">
		<input type="hidden" name="url" value="https://www.initmax.cz/wiki/kapitola/postgresql/feed/">

		<div class="inputs">

			<label for="newsletter-form_contact_email" class="top">Vaše e-mailová adresa:</label>
			<div class="df">

				<div class="input">
					<input type="text" id="newsletter-form_contact_email" name="newsletter_email" placeholder="@" data-format="email" data-required="1">
									</div><!-- /.input -->

				<a href="#" class="btn btn--white sendBtn">Odeslat</a>

			</div>

			<div class="bottom nm">
				<label for="newsletter-form_gdpr" class="checkbox gdpr">
					<input type="checkbox" id="newsletter-form_gdpr" name="newsletter_gdpr">
					<span>Souhlasím se&nbsp;<a href="https://www.initmax.cz/ochrana-osobnich-udaju/" target="_blank">zpracováním osobních údajů</a>.</span>
				</label>
			</div>

		</div><!-- /.inputs -->
		<div class="sent hidden">
			<div class="iconOk"><h3>Děkujeme, že jste se přihlásili k&nbsp;odběru našeho newsletteru.</h3>
</div>
			<button class="sent__close" title="Zavřít" onclick="closeFormMessage(this,event)"><svg data-name="Group 3602" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path data-name="Path 3272" d="M0,0H24V24H0Z" fill="none"/><line data-name="Line 98" y2="14" transform="translate(7.05 7.05) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 99" x2="14" transform="translate(7.05 16.95) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</button>
		</div><!-- /.sent -->
	</form>
</div>			</div>
		</div>
	</div>
</section></section>



<section id="social-links-block_cf4c9a6cd726e214fa4a92ef8c870d39" data-id="social-links-block_cf4c9a6cd726e214fa4a92ef8c870d39" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>

<p>The post <a href="https://www.initmax.cz/wiki/jak-na-aktualizaci-timescaledb/">Jak na&nbsp;aktualizaci TimescaleDB</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Jak aktualizovat PostgreSQL na&#160;nejnovější verzi</title>
		<link>https://www.initmax.cz/wiki/jak-aktualizovat-postgresql-na-nejnovejsi-verzi/</link>
		
		<dc:creator><![CDATA[Tomáš Heřmánek]]></dc:creator>
		<pubDate>Fri, 23 Aug 2024 17:24:52 +0000</pubDate>
				<guid isPermaLink="false">https://www.initmax.cz/?post_type=wiki&#038;p=14933</guid>

					<description><![CDATA[<p>Tento návod vás provede krok za krokem procesem aktualizace PostgreSQL na nejnovější verzi na systémech RHEL/Rocky Linux 9. Zahrnuje zálohování databází, přidání potřebných repozitářů, ...</p>
<p>The post <a href="https://www.initmax.cz/wiki/jak-aktualizovat-postgresql-na-nejnovejsi-verzi/">Jak aktualizovat PostgreSQL na&nbsp;nejnovější verzi</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Tento návod vás provede krok za krokem procesem aktualizace PostgreSQL na&nbsp;nejnovější verzi na&nbsp;systémech RHEL/Rocky Linux&nbsp;9. Zahrnuje zálohování databází,&nbsp;přidání potřebných repozitářů, instalaci nové verze, migraci dat, optimalizaci výkonu&nbsp;a&nbsp;závěrečný úklid. Návod je určen pro administrátory, kteří potřebují provést bezpečný&nbsp;a&nbsp;efektivní upgrade databázového systému PostgreSQL,&nbsp;a&nbsp;obsahuje doporučení pro specifické&nbsp;případy, jako je použití rozšíření TimescaleDB nebo PostGIS. Po&nbsp;dokončení tohoto průvodce bude vaše databáze PostgreSQL&nbsp;připravena na&nbsp;další nasazení s&nbsp;optimalizovaným výkonem&nbsp;a&nbsp;plně aktualizovaným prostředím.</p>



<h2 class="wp-block-heading">Záloha stávající databáze</h2>



<p>Před zahájením aktualizace databáze existují dvě možnosti zálohování. Vyberte si tu, která vám více vyhovuje:</p>



<ul class="wp-block-list">
<li><strong>Snapshot virtuálního stroje (VM):</strong>&nbsp;</li>
</ul>



<p>Pokud používáte PostgreSQL na&nbsp;VM, vytvoření snapshotu celé VM je rychlý a&nbsp;bezpečný způsob zálohy. Tato varianta je zvláště vhodná, pokud používáte různé rozšíření, jako je například TimescaleDB, kde je proces zálohování složitější a&nbsp;není součástí tohoto návodu. Snapshot vám umožní rychle obnovit celý systém do&nbsp;původního stavu, což může být výhodné v&nbsp;případě komplikací během upgradu.</p>



<ul class="wp-block-list">
<li><strong>Klasická záloha databáze pomocí&nbsp;<code>pg_dumpall</code>:</strong></li>
</ul>



<p>Tato metoda vytvoří textovou zálohu všech databází na&nbsp;serveru.</p>


<section id="block-code-block_e709ac85d893318e5315fecf2a8c49f8" data-id="block-code-block_e709ac85d893318e5315fecf2a8c49f8" class="gt-block block-code">
    <pre><code>sudo -u postgres pg_dumpall &gt; /cesta/k/zaloze/zaloha.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Důležité:</strong>&nbsp;Zkontrolujte, že cesta, kam zálohu ukládáte, má dostatek volného místa. Zálohu je vhodné uložit mimo databázový server (například na&nbsp;síťový disk nebo jiný externí úložiště), aby byla chráněna v&nbsp;případě selhání serveru.</p>



<p>Obě varianty mají své výhody, proto si vyberte tu, která lépe vyhovuje vašim potřebám a&nbsp;prostředí.</p>



<h2 class="wp-block-heading">Přidání PostgreSQL repozitáře</h2>



<p>Pro instalaci nejnovější verze PostgreSQL na&nbsp;RHEL/Rocky Linux 9 je potřeba přidat oficiální PostgreSQL repozitář. Tento krok zajistí, že budete mít přístup k&nbsp;nejnovějším balíčkům PostgreSQL.</p>



<p><strong>Stáhněte a&nbsp;nainstalujte PostgreSQL repozitář RPM balíček:</strong></p>


<section id="block-code-block_8c545747453bdf68b8c9a563e5a5434b" data-id="block-code-block_8c545747453bdf68b8c9a563e5a5434b" class="gt-block block-code">
    <pre><code>sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento balíček přidá do&nbsp;systému oficiální PostgreSQL repozitář.</p>



<p><strong>Zakázání výchozího PostgreSQL modulu:</strong></p>



<p>Distribuce RHEL a&nbsp;Rocky Linux mohou mít ve výchozím nastavení povolený modul PostgreSQL, který může obsahovat starší verze. Abyste zajistili, že se nainstaluje novější verze PostgreSQL z&nbsp;přidaného repozitáře, je třeba zakázat tento výchozí modul:</p>


<section id="block-code-block_b1bbb02099a249063764d45014a699f1" data-id="block-code-block_b1bbb02099a249063764d45014a699f1" class="gt-block block-code">
    <pre><code>sudo dnf -qy module disable postgresql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tímto příkazem zakážete starší moduly PostgreSQL, čímž zajistíte, že se při&nbsp;instalaci použije balíček z&nbsp;přidaného repozitáře.</p>



<p>Po přidání repozitáře a&nbsp;zakázání staršího modulu jste připraveni k&nbsp;instalaci nejnovější verze PostgreSQL.</p>



<h2 class="wp-block-heading">Instalace nové verze PostgreSQL</h2>



<p>Po přidání repozitáře je čas nainstalovat novou verzi PostgreSQL.</p>



<p><strong>Aktualizace seznamu balíčků:</strong></p>



<p>Nejprve aktualizujte seznam balíčků, aby systém získal informace o&nbsp;nejnovějších verzích dostupných v&nbsp;nově přidaném repozitáři PostgreSQL:</p>


<section id="block-code-block_3a09cdcd976178babacc332fb4d2050c" data-id="block-code-block_3a09cdcd976178babacc332fb4d2050c" class="gt-block block-code">
    <pre><code>sudo dnf update</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Instalace nové verze PostgreSQL:</strong></p>



<p>Nainstalujte konkrétní verzi PostgreSQL, kterou chcete používat. Například, pokud instalujete PostgreSQL 18:</p>


<section id="block-code-block_8789048b4d3eae790c43fd648ce1d503" data-id="block-code-block_8789048b4d3eae790c43fd648ce1d503" class="gt-block block-code">
    <pre><code>dnf install -y postgresql18-server postgresql18-contrib</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento příkaz nainstaluje potřebné balíčky PostgreSQL serveru, včetně nástrojů pro správu a&nbsp;inicializaci databází.</p>



<p><strong>Inicializace databáze:</strong></p>



<p>Po úspěšné instalaci nové verze PostgreSQL je nutné inicializovat databázový cluster, což vytvoří potřebnou adresářovou strukturu a&nbsp;inicializační soubory. Použijte příkaz pro inicializaci:</p>


<section id="block-code-block_73d23355581dfd2175a5a8ab2886fefa" data-id="block-code-block_73d23355581dfd2175a5a8ab2886fefa" class="gt-block block-code">
    <pre><code>sudo /usr/pgsql-18/bin/postgresql-18-setup initdb</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nahraďte verzi &#8222;18&#8220; odpovídajícím číslem, pokud instalujete jinou verzi PostgreSQL. Tento krok je důležitý, protože připraví prostředí pro migraci dat ze staré verze.</p>



<p><strong>Poznámka:</strong>&nbsp;<strong>Je velmi důležité, aby nově inicializovaná databáze měla stejné nastavení jako původní databáze.</strong>&nbsp;To znamená, že pokud na&nbsp;staré verzi nebyly povoleny například kontrolní součty datových bloků (checksums), nemůžete je zapnout při&nbsp;inicializaci nové verze. Pokud by nastavení nového clusteru bylo odlišné, mohl by&nbsp;<code>pg_upgrade</code>&nbsp;selhat nebo způsobit problémy při&nbsp;migraci dat.</p>



<p><strong><strong>Důležité</strong>:</strong>&nbsp;V&nbsp;tomto kroku&nbsp;<strong>nespouštějte novou verzi PostgreSQL</strong>&nbsp;ihned po&nbsp;instalaci a&nbsp;inicializaci. Pokud byste novou verzi nyní spustili, mohlo by dojít ke kolizi portů, protože stará verze PostgreSQL stále běží na&nbsp;stejném portu (standardně port 5432). Nová verze musí zůstat vypnutá, dokud nedokončíte migraci dat a&nbsp;neprovedete případné úpravy portů nebo nakonfigurujete službu tak, aby běžela vedle stávající instance.</p>



<h2 class="wp-block-heading">Kontrola dostupného místa na&nbsp;disku</h2>



<p>Před provedením upgradu PostgreSQL je důležité zkontrolovat, zda máte dostatek volného místa na&nbsp;disku. Migrace dat může vyžadovat významné množství prostoru, zejména pokud máte velké databáze.</p>



<p><strong>Zkontrolujte volné místo na&nbsp;disku pomocí příkazu:</strong></p>


<section id="block-code-block_ef5b561a148c0fd635802dd6d8b7c301" data-id="block-code-block_ef5b561a148c0fd635802dd6d8b7c301" class="gt-block block-code">
    <pre><code>df -h </code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento příkaz zobrazí přehled o&nbsp;využití diskového prostoru na&nbsp;jednotlivých oddílech. Zvláštní pozornost věnujte oddílům, kde jsou umístěny databázové soubory a&nbsp;konfigurační soubory PostgreSQL, například&nbsp;<code>/var/lib/pgsql</code> nebo jiný specifický adresář, kde máte uložené databáze.</p>



<p><strong>Odhad potřebného místa:</strong></p>



<p>Upgrady a&nbsp;migrace mohou dočasně vyžadovat dvojnásobek místa než je aktuální velikost databází, protože se během procesu mohou vytvářet dočasné kopie a&nbsp;zálohy dat. Pokud tedy vaše databáze zabírá 50 GB, měli byste mít k&nbsp;dispozici alespoň dalších 50 GB volného místa.</p>



<p><strong>Výjimka:</strong> Pokud při&nbsp;migraci použijete parametr&nbsp;<code>-k</code>&nbsp;s&nbsp;nástrojem&nbsp;<code>pg_upgrade</code>, nebudou se vytvářet kopie datových souborů, ale místo toho se použijí hardlinky. To znamená, že nebudete potřebovat tolik volného místa na&nbsp;disku a&nbsp;migrace bude rychlejší. Na&nbsp;druhou stranu, data budou sdílena mezi starým a&nbsp;novým clusterem, což znemožní bezpečné spuštění staré verze PostgreSQL po&nbsp;migraci. Stará data tedy nebudou automaticky zálohována.</p>



<p><strong>Uvolnění místa (volitelně):</strong></p>



<p>Pokud zjistíte, že na&nbsp;disku není dostatek místa, můžete zvážit následující kroky:</p>



<ul class="wp-block-list">
<li>Odstranění nepotřebných souborů a&nbsp;starých záloh.</li>



<li>Přesun dat na&nbsp;externí úložiště.</li>



<li>Zvýšení kapacity disku, pokud je to možné.</li>
</ul>



<p>Dostatečné volné místo na&nbsp;disku je klíčové pro úspěšný upgrade bez přerušení služby nebo ztráty dat.</p>



<h2 class="wp-block-heading">Instalace rozšíření a&nbsp;přenos konfigurace</h2>



<p>Před samotnou migrací dat je klíčové připravit prostředí nové verze PostgreSQL. Tento krok zahrnuje instalaci potřebných rozšíření (extensions) a&nbsp;přenos konfigurace ze staré verze. Správná instalace a&nbsp;konfigurace zajišťují, že po&nbsp;migraci bude databáze fungovat stejně jako předtím, včetně všech specifických nastavení a&nbsp;funkcí.</p>



<h3 class="wp-block-heading">Instalace rozšíření</h3>



<p>Pokud používáte rozšíření v&nbsp;PostgreSQL, například&nbsp;<strong>TimescaleDB</strong>&nbsp;nebo&nbsp;<strong>PostGIS</strong>, je důležité nainstalovat stejné verze těchto rozšíření i&nbsp;v&nbsp;nové verzi PostgreSQL. Použití nesprávné nebo nekompatibilní verze rozšíření může způsobit chyby a&nbsp;nestabilitu systému.</p>



<h4 class="wp-block-heading">Zjištění dostupných rozšíření:</h4>



<p>Namísto příkazu&nbsp;<code>\dx</code>&nbsp;použijte SQL dotaz, který vypíše všechna dostupná rozšíření v&nbsp;systému, včetně těch, která ještě nejsou aktivována:</p>


<section id="block-code-block_de8e14316908e3bc4c1235fd870bfea2" data-id="block-code-block_de8e14316908e3bc4c1235fd870bfea2" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -c &quot;SELECT * FROM pg_available_extensions;&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento příkaz zobrazí seznam všech dostupných rozšíření, včetně jejich verze a&nbsp;stavu instalace. Například u&nbsp;TimescaleDB byste měli vidět něco podobného:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="3064" height="348" src="https://www.initmax.cz/wp-content/uploads/2024/08/pg_available_extensions.png" alt="" class="wp-image-14980" srcset="https://www.initmax.cz/wp-content/uploads/2024/08/pg_available_extensions.png 3064w, https://www.initmax.cz/wp-content/uploads/2024/08/pg_available_extensions-300x34.png 300w, https://www.initmax.cz/wp-content/uploads/2024/08/pg_available_extensions-1024x116.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/08/pg_available_extensions-768x87.png 768w, https://www.initmax.cz/wp-content/uploads/2024/08/pg_available_extensions-1536x174.png 1536w, https://www.initmax.cz/wp-content/uploads/2024/08/pg_available_extensions-2048x233.png 2048w" sizes="auto, (max-width: 3064px) 100vw, 3064px" /></figure>
</div>


<p><strong>Instalace stejné verze TimescaleDB do&nbsp;nové verze PostgreSQL:</strong></p>



<p>Po instalaci nové verze PostgreSQL je nutné nainstalovat stejnou verzi TimescaleDB, jakou jste používali dříve. Zajistěte, aby verze TimescaleDB byla kompatibilní s&nbsp;novou verzí PostgreSQL a&nbsp;aby byla stejná jako v&nbsp;původní instalaci.</p>



<p>Příklad instalace konkrétní verze TimescaleDB:</p>


<section id="block-code-block_bd4fffc58ea9470437e00e4b8aeeaf49" data-id="block-code-block_bd4fffc58ea9470437e00e4b8aeeaf49" class="gt-block block-code">
    <pre><code>sudo dnf install timescaledb-2-postgresql-&lt;verze&gt;-&lt;konkrétní_verze&gt; timescaledb-2-loader-postgresql-&lt;verze&gt;-&lt;konkrétní_verze&gt;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Důležité:</strong>&nbsp;Ověřte, že instalovaná verze TimescaleDB odpovídá verzi, kterou jste používali před upgradem, aby nedošlo k&nbsp;nekompatibilitám a&nbsp;problémům při&nbsp;migraci dat.</p>



<p><strong>Instalace PostGIS do&nbsp;nové verze PostgreSQL:</strong></p>



<p>Pokud používáte PostGIS, nainstalujte ho do&nbsp;nové verze PostgreSQL stejným způsobem jako ostatní rozšíření:</p>


<section id="block-code-block_0ad91dd318b4c08d2db891f80ad7b1d1" data-id="block-code-block_0ad91dd318b4c08d2db891f80ad7b1d1" class="gt-block block-code">
    <pre><code>sudo dnf install postgresql-&lt;verze&gt;-postgis</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Zajistěte, že verze PostGIS je kompatibilní s&nbsp;novou verzí PostgreSQL.</p>



<h3 class="wp-block-heading">Přenos konfigurace</h3>



<p>Po instalaci rozšíření je dalším krokem přenést konfiguraci ze staré verze PostgreSQL do&nbsp;nové. Tím zajistíte, že všechna vlastní nastavení zůstávají zachována.</p>



<p><strong>Přeneste obsah souboru&nbsp;<code>postgresql.conf</code>:</strong></p>



<p>Tento soubor obsahuje nastavení serveru, jako je paměť, připojení, logování, a&nbsp;další. Před upgradem si uložte kopii tohoto souboru a&nbsp;po&nbsp;instalaci nové verze PostgreSQL přeneste potřebná nastavení. Zohledněte však nové změny a&nbsp;funkce, které mohou v&nbsp;nové verzi PostgreSQL přinést optimalizaci.Příklad přenosu nastavení:</p>


<section id="block-code-block_7d37b28a0dd7d079bc9ad2b86f89e304" data-id="block-code-block_7d37b28a0dd7d079bc9ad2b86f89e304" class="gt-block block-code">
    <pre><code>sudo cp /var/lib/pgsql/&lt;stará_verze&gt;/data/postgresql.conf /var/lib/pgsql/&lt;nová_verze&gt;/data/</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Po přenosu soubor zkontrolujte a&nbsp;upravte podle aktuální potřeby a&nbsp;možností nové verze.</p>



<p><strong>Přeneste pravidla z&nbsp;<code>pg_hba.conf</code>:</strong></p>



<p>Tento soubor definuje pravidla pro připojení k&nbsp;databázi a&nbsp;ověřování uživatelů. Přeneste vlastní pravidla do&nbsp;nové verze PostgreSQL:</p>


<section id="block-code-block_149bc0f43a87356113189d26f4186064" data-id="block-code-block_149bc0f43a87356113189d26f4186064" class="gt-block block-code">
    <pre><code>sudo cp /var/lib/pgsql/&lt;stará_verze&gt;/data/pg_hba.conf /var/lib/pgsql/&lt;nová_verze&gt;/data/</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Opět, po&nbsp;přenosu soubor zkontrolujte a&nbsp;ověřte, že pravidla odpovídají vašim bezpečnostním potřebám.</p>



<p><strong>Přeneste další konfigurační soubory (pokud je máte):</strong></p>



<p>Pokud používáte další vlastní konfigurační soubory nebo úpravy, nezapomeňte je přenést a&nbsp;aktualizovat v&nbsp;nové verzi.</p>



<h3 class="wp-block-heading">Ověření připravenosti prostředí</h3>



<p>Po instalaci rozšíření a&nbsp;přenosu konfigurace ověřte, že nové prostředí je připravené pro migraci dat. Zkontrolujte, zda jsou všechna rozšíření správně nainstalována a&nbsp;aktivována a&nbsp;zda je konfigurace správně načtena.</p>



<p>Nyní jste připraveni na&nbsp;migraci dat do&nbsp;nové verze PostgreSQL.</p>



<h2 class="wp-block-heading">Migrace dat / Upgrade</h2>



<p>Nyní, když je nová verze PostgreSQL nainstalována a&nbsp;připravena, je čas provést migraci dat ze staré verze do&nbsp;nové. Tento proces zahrnuje přesun datových souborů z&nbsp;původního datového adresáře do&nbsp;nového a&nbsp;zajištění, že všechna data a&nbsp;konfigurace jsou správně přenesena.</p>



<h3 class="wp-block-heading"><strong>Zastavení staré verze PostgreSQL</strong></h3>



<p>Než začnete s&nbsp;migrací, je důležité zastavit běžící instanci staré verze PostgreSQL. Tento krok zajistí, že během migrace nebudou do&nbsp;databáze zapisována žádná nová data.</p>


<section id="block-code-block_ff2fc5fe95c7d17b85afd5e6718cc839" data-id="block-code-block_ff2fc5fe95c7d17b85afd5e6718cc839" class="gt-block block-code">
    <pre><code>sudo systemctl stop postgresql-&lt;stará_verze&gt;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nahraďte&nbsp;&lt;stará_verze&gt;&nbsp;číslem verze, kterou aktuálně používáte (např.&nbsp;postgresql-13).</p>



<h3 class="wp-block-heading">Kontrola před migrací pomocí&nbsp;<code>pg_upgrade --check</code></h3>



<p>Před samotnou migrací dat je velmi užitečné spustit&nbsp;<code>pg_upgrade</code>&nbsp;s&nbsp;parametrem&nbsp;<code>--check</code>. Tento parametr provede kontrolu kompatibility mezi starým a&nbsp;novým databázovým clusterem, aniž by skutečně prováděl migraci dat. Pomůže vám identifikovat problémy, které by mohly způsobit selhání migrace, a&nbsp;upozorní na&nbsp;nastavení, která je třeba opravit.</p>


<section id="block-code-block_d25eeaeb82afbada3a6c3b9df788a8df" data-id="block-code-block_d25eeaeb82afbada3a6c3b9df788a8df" class="gt-block block-code">
    <pre><code>sudo -u postgres /usr/pgsql-&lt;nová_verze&gt;/bin/pg_upgrade -k -b /usr/pgsql-&lt;stará_verze&gt;/bin -B /usr/pgsql-&lt;nová_verze&gt;/bin -d /var/lib/pgsql/&lt;stará_verze&gt;/data -D /var/lib/pgsql/&lt;nová_verze&gt;/data --check</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Vysvětlení parametrů:</p>



<ul class="wp-block-list">
<li><code>-k</code>: Použití stávajících dat pomocí hardlinků, což urychluje migraci a&nbsp;šetří místo.</li>



<li>-b: Cesta k&nbsp;binárním souborům staré verze PostgreSQL.</li>



<li>-B: Cesta k&nbsp;binárním souborům nové verze PostgreSQL.</li>



<li>-d: Cesta k&nbsp;datovému adresáři staré verze PostgreSQL.</li>



<li>-D: Cesta k&nbsp;datovému adresáři nové verze PostgreSQL.</li>



<li><code><code>--check</code></code>: Provádí kontrolu kompatibility mezi starým a&nbsp;novým clusterem bez provedení migrace, upozorní na&nbsp;případné problémy, které je třeba opravit před migrací.</li>
</ul>



<p><strong>Kontrola kompatibility:</strong></p>



<ul class="wp-block-list">
<li>Tento příkaz zkontroluje, zda jsou stará a&nbsp;nová verze PostgreSQL kompatibilní pro migraci. Pokud zjistí problémy, jako jsou nekompatibilní rozšíření, různé nastavení checksumů nebo jiná konfliktní nastavení, oznámí vám to.</li>
</ul>



<p><strong>Bezpečné ověření:</strong></p>



<ul class="wp-block-list">
<li>Protože&nbsp;<code>--check</code>&nbsp;neprovádí žádné změny, můžete ho bezpečně spustit, abyste se ujistili, že migrace proběhne hladce. Pokud se objeví nějaké problémy, můžete je opravit před skutečnou migrací.</li>
</ul>



<p><strong>Identifikace nastavení:</strong></p>



<ul class="wp-block-list">
<li>Parametr&nbsp;<code>--check</code>&nbsp;vám také pomůže identifikovat, zda jsou klíčová nastavení, jako například checksumy, nastavena stejně ve starém i&nbsp;novém clusteru. Tím předejdete problémům, které by mohly způsobit selhání migrace.</li>
</ul>



<h3 class="wp-block-heading">Doporučení:</h3>



<p>Před tím, než spustíte skutečnou migraci pomocí&nbsp;<code>pg_upgrade</code>, vždy spusťte&nbsp;<code>pg_upgrade --check</code>, abyste odhalili případné problémy předem a&nbsp;mohli je vyřešit. Tento krok vám může ušetřit čas a&nbsp;minimalizovat riziko komplikací během migrace.</p>



<h3 class="wp-block-heading"><strong>Použití pg_upgrade</strong></h3>



<p>Nástroj <code>pg_upgrade</code> je určen pro bezpečný a&nbsp;efektivní přesun dat ze staré verze PostgreSQL do&nbsp;nové. Přidáním volby <code>-k</code> dojde k&nbsp;vytvoření hardlinků mezi starými a&nbsp;novými datovými soubory, což znamená, že data nejsou fyzicky kopírována ani použita jako záloha. Tento postup výrazně urychluje migraci a&nbsp;umožňuje nové databázi okamžitě používat tato data. Pokud byste se pokusili spustit starý cluster po&nbsp;migraci, PostgreSQL zjistí, že data již používá nová verze, a&nbsp;odmítne starý cluster spustit, čímž zabrání potenciálním konfliktům a&nbsp;poškození dat.</p>



<p>Příklad příkazu&nbsp;pg_upgrade:</p>


<section id="block-code-block_edf33f2799b9220b33a5c2236ae9d296" data-id="block-code-block_edf33f2799b9220b33a5c2236ae9d296" class="gt-block block-code">
    <pre><code>sudo -u postgres /usr/pgsql-&lt;nová_verze&gt;/bin/pg_upgrade -k -b /usr/pgsql-&lt;stará_verze&gt;/bin -B /usr/pgsql-&lt;nová_verze&gt;/bin -d /var/lib/pgsql/&lt;stará_verze&gt;/data -D /var/lib/pgsql/&lt;nová_verze&gt;/data</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Vysvětlení parametrů:</p>



<ul class="wp-block-list">
<li><code>-k</code>: Použití stávajících dat pomocí hardlinků, což urychluje migraci a&nbsp;šetří místo.</li>



<li>-b: Cesta k&nbsp;binárním souborům staré verze PostgreSQL.</li>



<li>-B: Cesta k&nbsp;binárním souborům nové verze PostgreSQL.</li>



<li>-d: Cesta k&nbsp;datovému adresáři staré verze PostgreSQL.</li>



<li>-D: Cesta k&nbsp;datovému adresáři nové verze PostgreSQL.</li>
</ul>



<p>Nahraďte&nbsp;&lt;stará_verze&gt;&nbsp;a&nbsp;&lt;nová_verze&gt;&nbsp;čísly verzí, které používáte. Tento příkaz provede migraci dat z&nbsp;původního datového adresáře do&nbsp;nového, přičemž zachová strukturu databáze a&nbsp;data.</p>



<p>Při použití nástroje&nbsp;<code>pg_upgrade</code>&nbsp;(i&nbsp;s&nbsp;parametrem&nbsp;<code>-k</code>) nedochází k&nbsp;přesunu dat ze starého datového adresáře do&nbsp;nového. Místo toho se data kopírují nebo hardlinkují (v&nbsp;závislosti na&nbsp;použití parametrů a&nbsp;systému souborů), a&nbsp;nová verze PostgreSQL používá svůj vlastní datový adresář.</p>



<h4 class="wp-block-heading"><strong>Jak to funguje:</strong></h4>



<ul class="wp-block-list">
<li><strong>Bez parametru&nbsp;<code>-k</code>:</strong> Pokud nepoužijete parametr&nbsp;<code>-k</code>,&nbsp;<code>pg_upgrade</code>&nbsp;zkopíruje data ze starého adresáře (např.&nbsp;<code>/var/lib/pgsql/12/</code>) do&nbsp;nového adresáře (např.&nbsp;<code>/var/lib/pgsql/18/</code>). To znamená, že data jsou přenesena do&nbsp;nového adresáře a&nbsp;starý adresář s&nbsp;daty může být po&nbsp;migraci odstraněn.</li>



<li><strong>S parametrem&nbsp;<code>-k</code>:</strong>&nbsp;Při&nbsp;použití parametru&nbsp;<code>-k</code>&nbsp;s&nbsp;nástrojem&nbsp;<code>pg_upgrade</code>&nbsp;jsou data sdílena mezi starým a&nbsp;novým clusterem pomocí hardlinků. To znamená, že stará data nejsou fyzicky kopírována, ale oba clustery odkazují na&nbsp;stejné datové bloky. Při&nbsp;pokusu o&nbsp;spuštění staré verze PostgreSQL automaticky detekuje, že data již byla použita jinou verzí, a&nbsp;starý cluster odmítne naběhnout. Nová verze PostgreSQL však bude fungovat normálně. Tento parametr tedy šetří místo a&nbsp;urychluje migraci, ale nelze ho použít jako záložní mechanismus pro starou verzi, protože starý cluster nebude možné znovu spustit.</li>
</ul>



<h4 class="wp-block-heading"><strong>Základní podmínky pro parametr -k:</strong></h4>



<ul class="wp-block-list">
<li><strong>Souborový systém musí podporovat hardlinky:</strong> Parametr&nbsp;<code>-k</code>&nbsp;lze použít pouze v&nbsp;případě, že používáte souborový systém, který podporuje hardlinky (např.&nbsp;ext4, XFS apod.). Hardlinky umožňují, aby nový datový adresář odkazoval na&nbsp;stejné fyzické datové bloky jako starý datový adresář, což znamená, že data nejsou kopírována, ale sdílena mezi verzemi.</li>



<li><strong>Jednotný souborový systém:</strong> Oba datové adresáře (starý i&nbsp;nový) musí být na&nbsp;stejném souborovém systému. Hardlinky totiž nemohou odkazovat na&nbsp;soubory na&nbsp;různých souborových systémech.</li>
</ul>



<p><strong>Výhody použití parametru&nbsp;<code>-k</code>:</strong></p>



<ul class="wp-block-list">
<li><strong>Výrazně rychlejší migrace:</strong> Protože při&nbsp;použití hardlinků nedochází k&nbsp;fyzickému kopírování dat, migrace pomocí&nbsp;<code>pg_upgrade</code>&nbsp;s&nbsp;parametrem&nbsp;<code>-k</code>&nbsp;je výrazně rychlejší než standardní migrace. Data nejsou znovu zapisována na&nbsp;disk, což zkracuje dobu trvání procesu.</li>



<li><strong>Nižší nároky na&nbsp;volné místo:</strong> Protože hardlinky odkazují na&nbsp;stejná data, nepotřebujete tolik volného místa na&nbsp;disku jako při&nbsp;plném kopírování dat. To vám umožní provést migraci i&nbsp;v&nbsp;prostředích s&nbsp;omezeným volným prostorem.</li>
</ul>



<h4 class="wp-block-heading">Nevýhody a&nbsp;na&nbsp;co si dát pozor při&nbsp;<strong>použití parametru&nbsp;<code>-k</code></strong></h4>



<ul class="wp-block-list">
<li><strong>Sdílení dat mezi starým a&nbsp;novým clusterem:</strong> Když použijete parametr <code>-k</code>, dojde k&nbsp;hardlinkování dat mezi starým a&nbsp;novým datovým adresářem. To znamená, že i&nbsp;když jsou data dostupná ve dvou různých adresářích (např.&nbsp;<code>/var/lib/pgsql/12/</code> a&nbsp;<code>/var/lib/pgsql/18/</code>), jedná se o&nbsp;stejná fyzická data na&nbsp;disku. Po&nbsp;migraci však PostgreSQL automaticky detekuje, že data již byla použita jinou verzí, a&nbsp;starý cluster se vůbec nespustí. Tím se zabrání možným problémům, které by mohly nastat, pokud by oba clustery pracovaly nad stejnými daty.</li>



<li><strong>Starý PostgreSQL cluster nelze znovu spustit:</strong>&nbsp;Po&nbsp;použití parametru&nbsp;<code>-k</code>&nbsp;není možné znovu spustit starý PostgreSQL cluster (např.&nbsp;PostgreSQL 12). Při&nbsp;pokusu o&nbsp;spuštění staré verze PostgreSQL automaticky detekuje, že data již byla použita jinou verzí, a&nbsp;starý cluster odmítne naběhnout.</li>
</ul>



<p><strong>Po úspěšné migraci dat můžete novou verzi PostgreSQL spustit.</strong>&nbsp;To můžete provést příkazem:</p>


<section id="block-code-block_374bb785a85d0d76962f943f0a3fd0d6" data-id="block-code-block_374bb785a85d0d76962f943f0a3fd0d6" class="gt-block block-code">
    <pre><code>sudo systemctl start postgresql-&lt;nová_verze&gt;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tím aktivujete novou verzi PostgreSQL, která nyní běží s&nbsp;migrovanými daty. Nezapomeňte také povolit automatické spuštění při&nbsp;startu systému, pokud jste tak ještě neučinili:</p>


<section id="block-code-block_e70df1c62390373186237b0ff375eebf" data-id="block-code-block_e70df1c62390373186237b0ff375eebf" class="gt-block block-code">
    <pre><code>sudo systemctl enable postgresql-&lt;nová_verze&gt;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nyní je vaše nová databáze připravena k&nbsp;plnému provozu.</p>



<h2 class="wp-block-heading"><strong>Analýza a&nbsp;údržba databáze po&nbsp;migraci</strong></h2>



<p>Po úspěšné migraci dat je vhodné provést analýzu a&nbsp;optimalizaci databáze. Tento krok zajistí, že statistiky databáze jsou aktualizované a&nbsp;že je dosaženo optimálního výkonu.</p>



<p><strong>Analýza a&nbsp;údržba databáze po&nbsp;migraci</strong></p>



<p>Po migraci spusťte příkaz&nbsp;vacuumdb, který provede analýzu a&nbsp;údržbu všech databází v&nbsp;několika fázích. Tento příkaz pomůže zlepšit výkon databáze tím, že optimalizuje interní struktury po&nbsp;migraci:</p>


<section id="block-code-block_98cfc36a78d45bbee071d31f6d5fde63" data-id="block-code-block_98cfc36a78d45bbee071d31f6d5fde63" class="gt-block block-code">
    <pre><code>sudo -u postgres /usr/pgsql-&lt;verze&gt;/bin/vacuumdb --all --analyze-in-stages</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento příkaz provede analýzu databází v&nbsp;několika fázích, což je méně náročné na&nbsp;systémové prostředky než kompletní jednorázová analýza.</p>



<p><strong>Výhody použití&nbsp;vacuumdb &#8211;analyze-in-stages</strong></p>



<p>Tato možnost provádí analýzu v&nbsp;několika fázích, což umožňuje rychlejší přístup k&nbsp;validním statistikám a&nbsp;zároveň minimalizuje zatížení systému. Tento krok je obzvláště užitečný po&nbsp;migraci, kdy je potřeba aktualizovat statistiky pro optimalizaci výkonu.</p>



<h2 class="wp-block-heading">Reindexace po&nbsp;migraci</h2>



<p>Při migraci mezi verzemi PostgreSQL, zejména z&nbsp;verzí 13 &#8211; 18, je důležité provést reindexaci databáze. Reindexace je klíčová z&nbsp;důvodu změn ve struktuře B-tree indexů, které byly postupně optimalizovány. Tento krok zajistí, že vaše indexy budou plně aktualizovány a&nbsp;optimalizovány pro novou verzi PostgreSQL, což může významně zlepšit výkon.</p>



<h3 class="wp-block-heading">Proč reindexovat?</h3>



<ul class="wp-block-list">
<li><strong>PostgreSQL 13</strong>: Tato verze přinesla zlepšení v&nbsp;algoritmech B-tree indexů, včetně de-duplication, což znamená, že po&nbsp;migraci z&nbsp;této verze a&nbsp;novějších je reindexace doporučena. Hlavními benefity těchto vylepšení jsou úspora místa na&nbsp;disku a&nbsp;lepší využití RAM, což přispívá k&nbsp;celkovému zlepšení výkonu databáze.</li>



<li><strong>PostgreSQL 14</strong>: V&nbsp;této verzi došlo k&nbsp;dalším vylepšením algoritmů indexace, optimalizaci správy volného prostoru v&nbsp;indexech a&nbsp;efektivnějšímu využití operační paměti. Reindexace po&nbsp;migraci zajistí lepší konzistenci výkonu a&nbsp;snížení zbytečného zatížení databázového systému.</li>



<li><strong>PostgreSQL 15</strong>: Tato verze přinesla významná vylepšení v&nbsp;paralelní reindexaci a&nbsp;snížení režie při&nbsp;aktualizacích indexů. Díky tomu dochází k&nbsp;výraznému zrychlení operací s&nbsp;indexy, což se přímo projeví v&nbsp;celkově lepší odezvě databáze. Doporučená reindexace po&nbsp;migraci pomůže tyto výhody plně využít.</li>



<li><strong>PostgreSQL 16</strong>: Verze 16 přinesla vylepšení ve vacuumování indexů a&nbsp;snížení vzájemného blokování, což dále zvyšuje výkon indexů a&nbsp;souběžnost operací v&nbsp;databázi. Reindexace po&nbsp;migraci zajistí plné využití těchto optimalizací a&nbsp;plynulejší provoz databáze.</li>



<li><strong>PostgreSQL 17</strong>: Verze 17 dále optimalizovala mechanismy indexace, včetně pokročilého řízení fragmentace indexů a&nbsp;dynamického přizpůsobení indexů aktuálním pracovním zátěžím. Reindexace po&nbsp;přechodu na&nbsp;tuto verzi zajistí maximální využití nových funkcí, sníží fragmentaci a&nbsp;povede k&nbsp;významným úsporám výkonu a&nbsp;zdrojů.</li>



<li><strong>PostgreSQL 18</strong>: Po&nbsp;upgradu je <strong>cíleně doporučeno</strong> reindexovat <strong>indexy používané full‑textovým vyhledáváním a&nbsp;rozšířením pg_trgm</strong>, pokud má cluster jako výchozí poskytovatele kolací <strong>ICU/builtin (tj.&nbsp;ne libc)</strong>; změny v&nbsp;práci s&nbsp;kolacemi mohou ovlivnit výsledky a&nbsp;reindexace zajistí konzistentní chování. Současně tato verze přináší <strong>„skip scan“ pro vícesloupcové B‑tree indexy</strong>, což je optimalizace plánovače využitelná i&nbsp;se stávajícími indexy (kvůli ní <strong>reindexace není nutná</strong>). </li>
</ul>



<h3 class="wp-block-heading">Jak provést reindexaci:</h3>



<p>Po úspěšné migraci doporučujeme spustit reindexaci celé databáze:</p>


<section id="block-code-block_391cf4aaa6555409c195a434386d5f49" data-id="block-code-block_391cf4aaa6555409c195a434386d5f49" class="gt-block block-code">
    <pre><code>sudo -u postgres reindexdb --all</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h4 class="wp-block-heading">Kdy je reindexace nutná:</h4>



<ul class="wp-block-list">
<li><strong>Migrace z&nbsp;PostgreSQL 13 a&nbsp;novější:</strong>&nbsp;Změny ve struktuře B-tree indexů znamenají, že reindexace po&nbsp;migraci z&nbsp;těchto verzí je důležitá pro dosažení optimálního výkonu.</li>
</ul>



<p>Tímto krokem zajistíte, že vaše indexy jsou plně optimalizovány a&nbsp;že budete schopni plně využít výkonových vylepšení, která přinášejí nové verze PostgreSQL.</p>



<h2 class="wp-block-heading"><strong>Optimalizace výkonu (Performance Tuning)</strong></h2>



<p>Po upgradu databáze je vhodné znovu přezkoumat a&nbsp;optimalizovat parametry pro dosažení co nejlepšího výkonu. To je zvláště důležité, pokud došlo ke zlepšení hardwarové konfigurace nebo pokud jsou v&nbsp;nové verzi PostgreSQL k&nbsp;dispozici nové funkce, které mohou výkon ovlivnit.</p>



<p><strong>Paměťové nastavení</strong></p>



<p>Nastavení paměťových parametrů je zásadní pro optimalizaci výkonu PostgreSQL:</p>



<ul class="wp-block-list">
<li><strong>shared_buffers:</strong>&nbsp;Tento parametr určuje množství paměti, kterou PostgreSQL používá pro sdílené datové bloky. Doporučuje se nastavit tento parametr na&nbsp;hodnotu odpovídající přibližně 25&nbsp;% dostupné RAM.</li>



<li><strong>work_mem:</strong>&nbsp;Tento parametr ovlivňuje množství paměti přidělené jednotlivým operacím třídění a&nbsp;hašování. Pro složitější dotazy nebo více souběžných uživatelů může být nutné tento parametr zvýšit.</li>



<li><strong>maintenance_work_mem:</strong>&nbsp;Tento parametr určuje množství paměti přidělené údržbovým operacím, jako je například indexování a&nbsp;autovacuum. Zvýšení této hodnoty může urychlit tyto operace, zejména u&nbsp;větších databází.</li>
</ul>



<p><strong>Změny v&nbsp;kompresi:</strong></p>



<ul class="wp-block-list">
<li><strong>WAL komprese (PostgreSQL 14 a&nbsp;novější):</strong> PostgreSQL 14 přidává podporu pro kompresi WAL souborů pomocí algoritmů Zstandard (ZSTD) a&nbsp;LZ4. To umožňuje výrazně snížit velikost WAL logů, což vede k&nbsp;úspoře místa na&nbsp;disku a&nbsp;potenciálně i&nbsp;ke zlepšení výkonu při&nbsp;přenosu logů přes síť.</li>



<li><strong>TOAST komprese (PostgreSQL 15):</strong> PostgreSQL 15 zavádí podporu komprese dat v&nbsp;TOAST tabulkách pomocí algoritmu LZ4. TOAST (The Oversized-Attribute Storage Technique) se používá pro ukládání velkých hodnot, jako jsou velké textové řetězce nebo binární data. Komprese LZ4 je rychlá a&nbsp;účinná, což může vést ke snížení velikosti uložených dat a&nbsp;zlepšení výkonu při&nbsp;jejich čtení a&nbsp;zápisu.</li>



<li><strong>Rozšířená podpora komprese (PostgreSQL 16)</strong>:&nbsp;Verze 16 přináší další optimalizace komprese dat, včetně vylepšeného řízení komprese TOAST dat a&nbsp;flexibilnějších možností komprese u&nbsp;partitionovaných tabulek. To vede k&nbsp;dalším úsporám místa a&nbsp;rychlejšímu zpracování dat.</li>



<li><strong>Adaptivní komprese (PostgreSQL 17)</strong>:&nbsp;PostgreSQL 17 zavádí adaptivní kompresi, která dynamicky vybírá nejvhodnější kompresní algoritmus podle typu a&nbsp;povahy dat. Tato funkce automaticky maximalizuje účinnost komprese, snižuje nároky na&nbsp;prostor na&nbsp;disku a&nbsp;optimalizuje rychlost přístupu k&nbsp;datům.</li>



<li><strong>Ověřování komprimovaných záloh pg_verifybackup <strong>(PostgreSQL 18)</strong>:</strong> Nástroj pg_verifybackup nově umí přímo ověřit zálohy vytvořené v <strong>tar</strong> formátu <strong>včetně komprimovaných archivů</strong> (gzip/lz4/zstd) bez nutnosti je nejdřív rozbalit. Ověření WALu zatím zůstává jen pro „plain“ zálohy, u&nbsp;tar archivů je proto vhodné přidat &#8211;no-parse-wal. To zrychluje a&nbsp;zjednodušuje kontrolu záloh, pokud používáš kompresi na&nbsp;úrovni pg_basebackup.</li>
</ul>



<p><strong>Autovacuum</strong></p>



<p>Autovacuum&nbsp;je důležitý proces, který zajišťuje údržbu databáze tím, že automaticky provádí operace, jako je odstraňování mrtvých řádků a&nbsp;aktualizace statistik. Po&nbsp;upgradu databáze byste měli zkontrolovat nastavení autovacuum a&nbsp;případně je upravit tak, aby odpovídala novým požadavkům na&nbsp;výkon.</p>



<ul class="wp-block-list">
<li><strong>Frekvence a&nbsp;prahové hodnoty:</strong>&nbsp;Pokud databáze často provádí velké množství změn, zvažte snížení prahových hodnot pro spuštění autovacuum, aby se častěji spouštělo.</li>



<li><strong>Paralelní běh:</strong>&nbsp;Zvyšte počet paralelních autovacuum procesů, pokud je to možné, což může zlepšit výkon při&nbsp;údržbě databáze s&nbsp;mnoha tabulkami.</li>
</ul>



<p><strong>Logování</strong></p>



<p>Pokud potřebujete sledovat výkon nebo ladit problémy, upravte nastavení logování. To vám umožní sledovat dotazy, které zpomalují databázi, nebo identifikovat další problémy:</p>



<ul class="wp-block-list">
<li><strong>log_min_duration_statement:</strong>&nbsp;Nastavte tento parametr na&nbsp;dobu, po&nbsp;kterou by měl být dotaz logován, pokud trvá déle než zadaná hodnota. Může vám to pomoci identifikovat pomalé dotazy.</li>



<li><strong>log_checkpoints,&nbsp;log_autovacuum_min_duration:</strong>&nbsp;Tyto parametry mohou pomoci sledovat činnosti, které mohou ovlivňovat výkon, jako jsou checkpointy nebo dlouhé autovacuum operace.</li>
</ul>



<p><strong>Použití TimescaleDB Tuneru</strong></p>



<p>Pokud používáte&nbsp;<strong>TimescaleDB</strong>, můžete využít jejich nástroj&nbsp;<strong>TimescaleDB Tuner</strong>&nbsp;pro automatickou optimalizaci nastavení výkonu. Tento nástroj analyzuje vaši konfiguraci a&nbsp;doporučí optimální nastavení pro parametry, jako jsou&nbsp;shared_buffers,&nbsp;work_mem,&nbsp;maintenance_work_mem&nbsp;a&nbsp;další.</p>



<p>Nástroj TimescaleDB Tuner můžete spustit pomocí následujícího příkazu:</p>


<section id="block-code-block_6bc0a82cbe08760051d89d1bc095ae11" data-id="block-code-block_6bc0a82cbe08760051d89d1bc095ae11" class="gt-block block-code">
    <pre><code>timescaledb-tune</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento nástroj projde vaši aktuální konfiguraci a&nbsp;poskytne doporučení pro úpravu nastavení. Kromě základních doporučení umožňuje tuner také nastavit volitelné parametry, které mohou dále optimalizovat výkon databáze. Doporučujeme projít tyto parametry a&nbsp;přizpůsobit je podle specifických potřeb vašeho systému a&nbsp;hardwarového prostředí.</p>



<p>Použitím těchto parametrů můžete dosáhnout optimálního nastavení databáze po&nbsp;upgradu a&nbsp;zajistit, že bude fungovat efektivně i&nbsp;při&nbsp;vyšším zatížení.</p>



<h2 class="wp-block-heading"><strong>Ověření</strong> funkčnosti</h2>



<p>Po provedení všech úprav a&nbsp;migrací je důležité ověřit, že nová verze PostgreSQL běží správně a&nbsp;že jsou všechna data dostupná. Tento krok zajistí, že migrace proběhla úspěšně a&nbsp;že databáze funguje podle očekávání.</p>



<p><strong>Ověření verze PostgreSQL</strong></p>



<p>Zkontrolujte, že nová verze PostgreSQL je správně nainstalována a&nbsp;spuštěna. K&nbsp;tomu můžete použít příkaz:</p>


<section id="block-code-block_afce098eac848cb796df5ba3b4f00ae1" data-id="block-code-block_afce098eac848cb796df5ba3b4f00ae1" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -c &quot;SELECT version();&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Ujistěte se, že zobrazená verze odpovídá verzi, na&nbsp;kterou jste aktualizovali.</p>



<p><strong>Ověření přístupu k&nbsp;databázi</strong></p>



<p>Připojte se k&nbsp;databázi a&nbsp;zkontrolujte, že je dostupná. Ověřte, že se můžete připojit k&nbsp;databázi, procházet tabulky a&nbsp;provádět základní dotazy.</p>



<p><strong>Kontrola dat</strong></p>



<p>Prověřte, zda jsou všechna data správně migrována. Ověřte integritu dat a&nbsp;správnost konfigurace. Můžete zkontrolovat klíčové tabulky a&nbsp;data, která jsou pro vaše aplikace nejdůležitější.</p>



<p><strong>Ověření rozšíření a&nbsp;funkcionalit</strong></p>



<p>Ujistěte se, že všechna používaná rozšíření (např.&nbsp;TimescaleDB, PostGIS) jsou správně nainstalována a&nbsp;funkční. Zkontrolujte také, zda konfigurace zůstala konzistentní s&nbsp;vašimi požadavky.</p>



<p><strong>Testování výkonu</strong></p>



<p>Pokud jste provedli úpravy nastavení výkonu, zkontrolujte, zda se tyto změny projevily pozitivně na&nbsp;výkonu databáze. Spusťte několik testů, abyste zjistili, že systém běží hladce a&nbsp;bez problémů.</p>



<p><strong>Kontrola logů</strong></p>



<p>Projděte logovací soubory PostgreSQL, abyste ověřili, že během migrace ani po&nbsp;spuštění nové verze nedošlo k&nbsp;žádným chybám. Logy můžete najít v&nbsp;adresáři, který je specifikován v&nbsp;nastavení&nbsp;postgresql.conf&nbsp;(typicky&nbsp;<strong>/var/lib/pgsql/&lt;verze&gt;/data/log</strong>&nbsp;nebo podobné umístění). Zaměřte se na&nbsp;jakákoliv varování nebo chyby, které by mohly naznačovat problémy s&nbsp;migrací nebo výkonem.</p>


<section id="block-code-block_07694c0d37fc2e23d457292fb91a7fce" data-id="block-code-block_07694c0d37fc2e23d457292fb91a7fce" class="gt-block block-code">
    <pre><code>sudo tail -f /var/lib/pgsql/&lt;verze&gt;/data/log/*.log</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Sledujte logy a&nbsp;zkontrolujte, zda neobsahují žádné závažné chyby nebo varování.</strong></p>



<h2 class="wp-block-heading"><strong>Úklid po&nbsp;migraci</strong> a&nbsp;důležité poznámky</h2>



<p>Po úspěšné migraci a&nbsp;ověření správné funkčnosti nové verze PostgreSQL je důležité provést úklid, aby se uvolnilo místo na&nbsp;disku a&nbsp;odstranily se staré, již nepotřebné soubory a&nbsp;verze PostgreSQL.</p>



<p><strong>Odstranění starých datových souborů</strong></p>



<p>Pokud jste použili&nbsp;<code>pg_upgrade</code>, může být vygenerován skript pro odstranění starých datových souborů. Tento skript můžete spustit následujícím příkazem:</p>


<section id="block-code-block_fb01035c5731b6f736967ec08ebefc39" data-id="block-code-block_fb01035c5731b6f736967ec08ebefc39" class="gt-block block-code">
    <pre><code>./delete_old_cluster.sh</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Poznámka:</strong>&nbsp;Tento příkaz&nbsp;<strong>trvale</strong>&nbsp;odstraní staré datové soubory, takže se ujistěte, že migrace proběhla úspěšně a&nbsp;že již nepotřebujete přístup k&nbsp;původním datům.</p>



<p><strong>Odebrání staré verze PostgreSQL</strong></p>



<p>Pokud již starou verzi PostgreSQL nepotřebujete a&nbsp;neplánujete ji používat v&nbsp;budoucnu, můžete ji odebrat ze systému:</p>


<section id="block-code-block_21e75cf5f40d44a41ce215d2df8a0470" data-id="block-code-block_21e75cf5f40d44a41ce215d2df8a0470" class="gt-block block-code">
    <pre><code> dnf remove postgresql&lt;stará_verze&gt;-server</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tímto příkazem se odstraní stará verze PostgreSQL a&nbsp;její balíčky.</p>



<p><strong>Poznámka:</strong> Při&nbsp;odstraňování staré verze PostgreSQL je vhodné odstranit i&nbsp;všechny balíčky rozšíření (extenzí), které jsou s&nbsp;touto verzí spojené, pokud existují. Tím zajistíte, že na&nbsp;systému nezůstanou nepotřebné balíčky, které již nebudete používat.</p>



<p><strong>Revize systémových služeb</strong></p>



<p>Ujistěte se, že stará verze PostgreSQL není zaregistrovaná jako systémová služba, která by se mohla nechtěně spustit. Můžete to ověřit příkazem:</p>


<section id="block-code-block_75425c3df4aca1d4849469f2eddf089b" data-id="block-code-block_75425c3df4aca1d4849469f2eddf089b" class="gt-block block-code">
    <pre><code>sudo systemctl list-unit-files | grep postgresql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Pokud vidíte služby staré verze, deaktivujte je:</strong></p>


<section id="block-code-block_bb46cc0e58b63af091325cce3acd01a2" data-id="block-code-block_bb46cc0e58b63af091325cce3acd01a2" class="gt-block block-code">
    <pre><code>sudo systemctl disable postgresql-&lt;stará_verze&gt;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Aktualizace dokumentace a&nbsp;skriptů</strong></p>



<p>Pokud máte skripty nebo dokumentaci, které odkazují na&nbsp;starou verzi PostgreSQL, nezapomeňte je aktualizovat, aby odkazovaly na&nbsp;novou verzi. To zahrnuje zálohovací skripty, monitorovací nástroje, a&nbsp;další související konfigurace. Zvláštní pozornost věnujte následujícím oblastem:</p>



<ul class="wp-block-list">
<li><strong>Zálohovací skripty:</strong>&nbsp;Ujistěte se, že všechny zálohovací skripty odkazují na&nbsp;správnou verzi PostgreSQL a&nbsp;že jsou přizpůsobeny novým funkcím nebo změnám, které mohou mít vliv na&nbsp;proces zálohování (např.&nbsp;změny v&nbsp;podporovaných příkazech nebo optimalizace zálohování).</li>



<li><strong>Monitorovací nástroje:</strong>&nbsp;Aktualizujte jakýkoli software nebo nástroje, které monitorují výkon databáze, aby byly kompatibilní s&nbsp;novou verzí PostgreSQL. Zkontrolujte, zda všechny monitorovací metriky a&nbsp;výstrahy odpovídají nové verzi a&nbsp;jejím parametrům.</li>



<li><strong>Automatizační skripty:</strong>&nbsp;Pokud používáte skripty pro automatizaci správy databáze (např.&nbsp;skripty pro správu replikace, údržbu databáze nebo nasazování nových funkcí), aktualizujte je, aby byly plně kompatibilní s&nbsp;novou verzí PostgreSQL.</li>
</ul>



<h3 class="wp-block-heading">Seznámení se s&nbsp;novinkami a&nbsp;změnami</h3>



<p>Před provedením migrace je vždy vhodné seznámit se s&nbsp;novinkami, změnami a&nbsp;očekávaným chováním nové verze PostgreSQL. Doporučujeme:</p>



<ul class="wp-block-list">
<li><strong>Číst changelog:</strong>&nbsp;Přečtěte si oficiální changelog PostgreSQL pro danou verzi, aby vás žádné změny nepřekvapily a&nbsp;abyste byli připraveni na&nbsp;nové funkce, změny v&nbsp;chování, nebo odstraněné funkce.</li>



<li><strong><a href="https://www.initmax.cz/webinare/?tag=postgresql">Zúčastnit se našich webinářů</a>:</strong>&nbsp;Pravidelně pořádáme zdarma webináře, kde vás informujeme o&nbsp;novinkách v&nbsp;PostgreSQL a&nbsp;co očekávat po&nbsp;migraci. Je to skvělá příležitost, jak se seznámit s&nbsp;novými funkcemi a&nbsp;získat odpovědi na&nbsp;své otázky od odborníků.</li>
</ul>



<p>Tento návod by měl být komplexní a&nbsp;pokrývat všechny důležité aspekty upgradu PostgreSQL na&nbsp;RHEL/Rocky Linux 9. Můžete jej přizpůsobit konkrétním potřebám a&nbsp;prostředí vaší organizace.</p>


<section id="block-newsletter-block_de1d9c7cf5622806500cacf3a843852d" data-id="block-newsletter-block_de1d9c7cf5622806500cacf3a843852d" class="gt-block block-newsletter">
    <section id="newsletter" class="newsletter">
	<div class="gradient basic">
		<div class="newsletter__inner width width--general">
			<div class="col left">
									<h2 class="newsletter__title">Buďte v&nbsp;obraze s&nbsp;naším newsletterem</h2>
													<div class="newsletter__content"><p>Díky initMAX newsletteru Vám neunikne žádná z&nbsp;pozvánek na&nbsp;akce a&nbsp;webináře, žádný z&nbsp;tipů, jak dostat ze svého IT MAXimum, ani ověřené informace o&nbsp;novinkách ze světa Zabbix a&nbsp;dalších technologií.</p>
</div>
							</div>
			<div class="col right form-wrapper">
				<div class="newsletter-form">
	<form method="post" action="/wiki/kapitola/postgresql/feed/" enctype="multipart/form-data">
		<input type="hidden" name="url" value="https://www.initmax.cz/wiki/kapitola/postgresql/feed/">

		<div class="inputs">

			<label for="newsletter-form_contact_email" class="top">Vaše e-mailová adresa:</label>
			<div class="df">

				<div class="input">
					<input type="text" id="newsletter-form_contact_email" name="newsletter_email" placeholder="@" data-format="email" data-required="1">
									</div><!-- /.input -->

				<a href="#" class="btn btn--white sendBtn">Odeslat</a>

			</div>

			<div class="bottom nm">
				<label for="newsletter-form_gdpr" class="checkbox gdpr">
					<input type="checkbox" id="newsletter-form_gdpr" name="newsletter_gdpr">
					<span>Souhlasím se&nbsp;<a href="https://www.initmax.cz/ochrana-osobnich-udaju/" target="_blank">zpracováním osobních údajů</a>.</span>
				</label>
			</div>

		</div><!-- /.inputs -->
		<div class="sent hidden">
			<div class="iconOk"><h3>Děkujeme, že jste se přihlásili k&nbsp;odběru našeho newsletteru.</h3>
</div>
			<button class="sent__close" title="Zavřít" onclick="closeFormMessage(this,event)"><svg data-name="Group 3602" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path data-name="Path 3272" d="M0,0H24V24H0Z" fill="none"/><line data-name="Line 98" y2="14" transform="translate(7.05 7.05) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 99" x2="14" transform="translate(7.05 16.95) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</button>
		</div><!-- /.sent -->
	</form>
</div>			</div>
		</div>
	</div>
</section></section>



<section id="social-links-block_7b9125e7fdd24e123367dd8237d92440" data-id="social-links-block_7b9125e7fdd24e123367dd8237d92440" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>

<p>The post <a href="https://www.initmax.cz/wiki/jak-aktualizovat-postgresql-na-nejnovejsi-verzi/">Jak aktualizovat PostgreSQL na&nbsp;nejnovější verzi</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Implementace TimescaleDB v&#160;Zabbixu: Výhody, Klíčové Tabulky a&#160;Instalace</title>
		<link>https://www.initmax.cz/wiki/implementace-timescaledb-v-zabbixu/</link>
		
		<dc:creator><![CDATA[Tomáš Heřmánek]]></dc:creator>
		<pubDate>Wed, 31 Jul 2024 19:44:21 +0000</pubDate>
				<guid isPermaLink="false">https://www.initmax.cz/?post_type=wiki&#038;p=14718</guid>

					<description><![CDATA[<p>Zabbix je robustní open-source řešení pro monitorování IT infrastruktury, které umožňuje sledování a analýzu výkonu sítě, serverů, aplikací a dalších komponent. S narůstajícím ...</p>
<p>The post <a href="https://www.initmax.cz/wiki/implementace-timescaledb-v-zabbixu/">Implementace TimescaleDB v&nbsp;Zabbixu: Výhody, Klíčové Tabulky a&nbsp;Instalace</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Zabbix je robustní open-source řešení pro monitorování IT infrastruktury, které umožňuje sledování a&nbsp;analýzu výkonu sítě, serverů, aplikací a&nbsp;dalších komponent. S&nbsp;narůstajícím množstvím dat se stává klíčovým faktorem efektivní správa časových dat. Proto Zabbix od verze 5.0 začal podporovat TimescaleDB, což je rozšíření PostgreSQL optimalizované pro časové série. Tento článek se zaměřuje na&nbsp;výhody použití TimescaleDB v&nbsp;Zabbixu, klíčové tabulky a&nbsp;postup instalace.</p>



<p><strong>POZOR</strong>: Současná verze TimescaleDB <strong>NEFUNGUJE </strong>s nejnovější verzí PostgreSQL (18)</p>


<section id="social-links-block_e0d756d575c4fa026aaf04e7ac88466f" data-id="social-links-block_e0d756d575c4fa026aaf04e7ac88466f" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>




<h2 class="wp-block-heading">Výhody TimescaleDB v&nbsp;Zabbixu</h2>



<p>TimescaleDB přináší do&nbsp;Zabbixu několik zásadních výhod, které zvyšují výkon a&nbsp;efektivitu při&nbsp;práci s&nbsp;velkými objemy časových dat:</p>



<ul class="wp-block-list">
<li><strong>Škálovatelnost a&nbsp;Výkon</strong>: TimescaleDB je navrženo tak, aby efektivně spravovalo velké množství časových dat. Díky architektuře&nbsp;<em>hypertables</em>&nbsp;umožňuje rychlé zápisy a&nbsp;čtení dat, což je klíčové pro systémy monitorování, jako je Zabbix, které generují obrovské množství metrik.</li>



<li><strong>Komprese dat</strong>: TimescaleDB nabízí schopnost komprese historických dat, což snižuje nároky na&nbsp;úložiště a&nbsp;může vést až k&nbsp;90% úspoře místa na&nbsp;disku. Komprese však znemožňuje změnu již zkomprimovaných dat; pro případnou úpravu je nutné data nejprve dekomprimovat, provést změnu a&nbsp;poté opět komprimovat.</li>



<li><strong>Snadná správa</strong>: TimescaleDB je plně kompatibilní s&nbsp;PostgreSQL, což znamená, že správci, kteří jsou obeznámeni s&nbsp;PostgreSQL, se snadno zorientují i&nbsp;v&nbsp;TimescaleDB. Implementace je jednoduchá a&nbsp;přidává jen minimální režijní náklady na&nbsp;správu databáze. Dále je možné některá nastavení TimescaleDB upravovat přímo v&nbsp;administraci Zabbixu, konkrétně v&nbsp;sekci&nbsp;<strong>Administration &gt; Housekeeping</strong>.</li>
</ul>



<h2 class="wp-block-heading">Tabulky v&nbsp;Zabbixu využívající TimescaleDB</h2>



<p>Zabbix používá TimescaleDB k&nbsp;ukládání velkého množství časových dat, která jsou rozdělena do&nbsp;několika klíčových tabulek. Aby byl tento proces efektivní a&nbsp;dobře spravovaný, využívá se speciální struktura zvaná&nbsp;<em>hypertable</em>, která je navržena pro práci s&nbsp;časovými daty v&nbsp;TimescaleDB. Pro usnadnění konverze existujících tabulek na&nbsp;<em>hypertables</em>&nbsp;a&nbsp;optimalizaci správy těchto dat obsahuje soubor&nbsp;<code>/usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql</code>&nbsp;skript s&nbsp;potřebnými příkazy. Tento skript automatizuje převod klíčových tabulek Zabbixu na&nbsp;<em>hypertables</em>, což zajišťuje efektivní práci s&nbsp;velkými objemy dat.</p>



<p><strong>Poznámka</strong>: Od verze <strong>Zabbixu 7.2</strong> se skript&nbsp;<code>schema.sql</code>&nbsp;pro TimescaleDB nachází v&nbsp;následující cestě:<br><code>/usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql</code>.</p>



<p>Každý příkaz ve skriptu využívá funkci&nbsp;<code>create_hypertable</code>, která je klíčová pro převod běžných tabulek PostgreSQL na&nbsp;<em>hypertables</em>.&nbsp;<em>Hypertable</em>&nbsp;funguje tak, že data automaticky spravuje v&nbsp;menších podtabulkách, zvaných&nbsp;<em>chunky</em>. Toto dělení umožňuje efektivní dotazování a&nbsp;ukládání dat, což je nezbytné pro rychlý přístup k&nbsp;velkým množstvím časových sérií. Proces konverze tabulek na&nbsp;<em>hypertables</em>&nbsp;zahrnuje několik důležitých parametrů:</p>



<ul class="wp-block-list">
<li><strong>Název tabulky</strong>&nbsp;(např.&nbsp;<code>'history_text'</code>): Určuje, která konkrétní tabulka bude převedena na&nbsp;<em>hypertable</em>. V&nbsp;případě tabulky&nbsp;<code>history_text</code>&nbsp;se jedná o&nbsp;textová data, jako jsou zprávy a&nbsp;logy, která jsou v&nbsp;Zabbixu monitorována.</li>



<li><strong>Časový sloupec</strong>&nbsp;(např.&nbsp;<code>'clock'</code>): Tento parametr definuje sloupec obsahující časové značky (timestamp), které jsou klíčové pro rozdělení dat do&nbsp;jednotlivých&nbsp;<em>chunků</em>. Sloupec&nbsp;<code>'clock'</code>&nbsp;specifikuje čas, kdy byla data zaznamenána, což umožňuje jejich správné rozdělení a&nbsp;třídění.</li>



<li><strong><code>chunk_time_interval</code></strong>&nbsp;(např.&nbsp;<code>86400</code>): Tento parametr určuje časový interval v&nbsp;sekundách pro jednotlivé&nbsp;<em>chunky</em>. Hodnota&nbsp;<code>86400</code>&nbsp;sekund odpovídá jednomu dni. To znamená, že veškerá data shromážděná během jednoho dne budou uložena v&nbsp;jednom&nbsp;<em>chunku</em>. Tento interval lze přizpůsobit podle požadavků na&nbsp;výkon a&nbsp;množství dat, které je třeba zpracovat.</li>



<li><strong><code>migrate_data</code></strong>&nbsp;(např.&nbsp;<code>true</code>): Když je tento parametr nastaven na&nbsp;<code>true</code>, všechna existující data v&nbsp;tabulce jsou automaticky migrována do&nbsp;nové struktury&nbsp;<em>chunků</em>. Tato funkce je důležitá při&nbsp;konverzi již existujících tabulek na&nbsp;<em>hypertables</em>, aby nedošlo ke ztrátě dat.</li>



<li><strong><code>if_not_exists</code></strong>&nbsp;(např.&nbsp;<code>true</code>): Tento parametr zajišťuje, že pokud&nbsp;<em>hypertable</em>&nbsp;již existuje, příkaz ji nebude znovu vytvářet, což zabraňuje možným chybám a&nbsp;ztrátám dat. Pokud&nbsp;<em>hypertable</em>&nbsp;ještě neexistuje, bude nově vytvořena.</li>
</ul>



<p>Použitím těchto nastavení TimescaleDB zajišťuje efektivní správu a&nbsp;přístup k&nbsp;velkým objemům časových dat, což je nezbytné pro systémy jako Zabbix, které generují a&nbsp;analyzují velké množství metrik. Níže jsou uvedeny klíčové tabulky, které byly přeměněny na&nbsp;<em>hypertables</em>&nbsp;pro zajištění lepšího výkonu a&nbsp;efektivity:</p>



<ul class="wp-block-list">
<li><strong><code>history</code></strong>: Uchovává numerická data s&nbsp;plovoucí desetinnou čárkou.</li>
</ul>


<section id="block-code-block_f4252daccb3938e8a12625cd63ad499f" data-id="block-code-block_f4252daccb3938e8a12625cd63ad499f" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;history&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 86400, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>history_uint</code></strong>: Ukládá celá čísla.</li>
</ul>


<section id="block-code-block_55e95bd4611eaff6bd3fe68f493511d5" data-id="block-code-block_55e95bd4611eaff6bd3fe68f493511d5" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;history_uint&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 86400, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>history_log</code></strong>: Obsahuje logovací informace.</li>
</ul>


<section id="block-code-block_442479c1b5c2b435952f16ebdb747597" data-id="block-code-block_442479c1b5c2b435952f16ebdb747597" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;history_log&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 86400, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>history_text</code></strong>: Ukládá textová data, jako jsou zprávy a&nbsp;logy.</li>
</ul>


<section id="block-code-block_91d828d0ae177ed1b0c2ee65a2b57a7d" data-id="block-code-block_91d828d0ae177ed1b0c2ee65a2b57a7d" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;history_text&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 86400, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>history_str</code></strong>: Uchovává krátké textové řetězce.</li>
</ul>


<section id="block-code-block_7071ff657190a90e5b41ede4f2daca4f" data-id="block-code-block_7071ff657190a90e5b41ede4f2daca4f" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;history_str&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 86400, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>history_bin</code></strong>: Uchovává binární data. (Od verze 7.0.2)</li>
</ul>


<section id="block-code-block_3caf5d064be6e711f600e9b8ffabf504" data-id="block-code-block_3caf5d064be6e711f600e9b8ffabf504" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;history_bin&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 86400, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>auditlog</code></strong>: Obsahuje logovací informace o&nbsp;aktivitách uživatelů. (Od verze 7.0)</li>
</ul>


<section id="block-code-block_58400b9f177bef68d05e9a1d478babfa" data-id="block-code-block_58400b9f177bef68d05e9a1d478babfa" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;auditlog&#039;, &#039;auditid&#039;, chunk_time_interval =&gt; 604800, time_partitioning_func =&gt; &#039;cuid_timestamp&#039;, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>trends</code></strong>: Ukládá agregované historické údaje o&nbsp;metrikách.</li>
</ul>


<section id="block-code-block_3f1234f46baf8624c7ff3793bd09bb85" data-id="block-code-block_3f1234f46baf8624c7ff3793bd09bb85" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;trends&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 2592000, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<ul class="wp-block-list">
<li><strong><code>trends_uint</code></strong>: Ukládá agregovaná historická data pro metriky celých čísel.</li>
</ul>


<section id="block-code-block_75ce8e8f4faa98f341b87df79777a5b6" data-id="block-code-block_75ce8e8f4faa98f341b87df79777a5b6" class="gt-block block-code">
    <pre><code>PERFORM create_hypertable(&#039;trends_uint&#039;, &#039;clock&#039;, chunk_time_interval =&gt; 2592000, migrate_data =&gt; true, if_not_exists =&gt; true);</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">Instalace TimescaleDB v&nbsp;Zabbixu</h2>



<h4 class="wp-block-heading">Příprava na&nbsp;instalaci</h4>



<p>Před zahájením instalace TimescaleDB je nutné mít nainstalovaný PostgreSQL a&nbsp;také balíček&nbsp;<code><strong>zabbix-sql-scripts</strong></code>&nbsp;z&nbsp;oficiálního repozitáře pro konkrétní používanou verzi Zabbixu. Zatímco Zabbix jako takový nemusí být nutně nainstalován, zmíněný balíček&nbsp;<code><strong>zabbix-sql-scripts</strong></code>&nbsp;je nezbytný, protože obsahuje potřebné SQL skripty pro konfiguraci databáze. U&nbsp;PostgreSQL se doporučuje instalace z&nbsp;oficiálního repozitáře PostgreSQL, spíše než použití systémového repozitáře, aby byla zajištěna kompatibilita a&nbsp;přístup k&nbsp;nejnovějším funkcím a&nbsp;opravám zabezpečení.</p>



<p>Je důležité poznamenat, že všechny následující příkazy a&nbsp;nastavení se provádějí pouze na&nbsp;serveru PostgreSQL. Instalace TimescaleDB z&nbsp;oficiálního repozitáře TimescaleDB, který podporuje komunitní verzi licence, umožňuje přístup k&nbsp;pokročilým funkcím, jako je komprese dat. Díky komunitní licenci mají uživatelé možnost využívat kompresi, což může výrazně snížit nároky na&nbsp;úložiště a&nbsp;zlepšit výkon dotazů na&nbsp;historická data.</p>



<h4 class="wp-block-heading">Přidání oficiálního repozitáře TimescaleDB</h4>



<p>Pro instalaci TimescaleDB z&nbsp;oficiálního repozitáře je třeba přidat repozitář do&nbsp;systému. Na&nbsp;distribucích založených na&nbsp;RHEL, jako je Rocky Linux, postupujte následovně:</p>


<section id="block-code-block_891deaa333096ceb19e6ae128891e6c2" data-id="block-code-block_891deaa333096ceb19e6ae128891e6c2" class="gt-block block-code">
    <pre><code>tee /etc/yum.repos.d/timescale_timescaledb.repo &lt;&lt;EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nainstalujme TimescaleDB.</p>



<p>Nahraďte číslo verze (<code>1</code>6) odpovídající verzí PostgreSQL, kterou používáte.</p>


<section id="block-code-block_5edee2c51c1166aa04dd64e2bbd59d75" data-id="block-code-block_5edee2c51c1166aa04dd64e2bbd59d75" class="gt-block block-code">
    <pre><code>dnf install timescaledb-2-postgresql-16 timescaledb-2-loader-postgresql-16</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Spustíme utility <code>timescaledb-tune</code> a&nbsp;jako parametr jí předáme vyšší hodnotu maximálního množství připojení (<code>--max-conns</code>), které pro tyto testovací účely nastavíme na&nbsp;<code>125</code>.</p>



<p>Tato utility slouží k&nbsp;přizpůsobení výchozího nastavení PostgreSQL relativně výkonu a&nbsp;adekvátnímu nastavení parametrů PostgreSQL pro fungování s&nbsp;TimescaleDB.</p>



<p>Zároveň nám tato utility pomocí instalačního průvodce pomůže vybrat aktuální a&nbsp;platný konfigurační soubor PostgreSQL a&nbsp;nastaví i&nbsp;automatické načítání knihoven TimescaleDB.</p>



<p>Prosím, odpovídejte &#8222;ano&#8220; (y) na&nbsp;všechny otázky. Pozor, automatický tuner předpokládá, že PostgreSQL běží na&nbsp;samostatném serveru, a&nbsp;proto může být potřeba případně upravit parametry.</p>



<p>Nahraďte číslo verze (<code>1</code>6) odpovídající verzí PostgreSQL, kterou používáte.</p>


<section id="block-code-block_452f172a221610c27d1365659b2b5c1f" data-id="block-code-block_452f172a221610c27d1365659b2b5c1f" class="gt-block block-code">
    <pre><code>timescaledb-tune --pg-config /usr/pgsql-16/bin --max-conns=125</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="850" height="2244" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29.png" alt="" class="wp-image-14293" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29.png 850w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-114x300.png 114w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-388x1024.png 388w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-768x2028.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-582x1536.png 582w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-776x2048.png 776w" sizes="auto, (max-width: 850px) 100vw, 850px" /></figure>



<p>Následně restartujeme systémovou službu pro PostgreSQL:</p>



<p>Nahraďte číslo verze (<code>1</code>6) odpovídající verzí PostgreSQL, kterou používáte.</p>


<section id="block-code-block_eb613b4382bbe68965b036e388f1ee7a" data-id="block-code-block_eb613b4382bbe68965b036e388f1ee7a" class="gt-block block-code">
    <pre><code>systemctl restart postgresql-16.service</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Zbývá již jen vytvořit a&nbsp;aktivovat samotnou TimescaleDB:</p>



<p>Pozor, během vývoje došlo ke změně cesty z&nbsp;původní /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql na&nbsp;novou /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql.</p>



<p><strong>Poznámka</strong>: Od verze <strong>Zabbixu 7.2 </strong>se skript&nbsp;<code>schema.sql</code>&nbsp;pro TimescaleDB nachází v&nbsp;následující cestě:<br><code>/usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql</code>.</p>



<p><strong>Ignorování varování</strong>: Při&nbsp;spuštění skriptu&nbsp;<code>schema.sql</code>&nbsp;na&nbsp;verzi TimescaleDB 2.9.0 a&nbsp;vyšší mohou být zobrazena varování o&nbsp;nedodržení osvědčených postupů. Tato varování lze ignorovat, protože konfigurace bude úspěšně dokončena i&nbsp;přes ně.</p>



<p><strong>Dlouhá doba migrace</strong>: Migrace existujících historických dat, trendů a&nbsp;audit logů může trvat dlouho. !!! <strong>Během této doby musí být <strong>Zabbix</strong></strong> <strong>server a&nbsp;frontend vypnutý</strong> !!!, aby byla zajištěna konzistence dat.</p>



<p>Pro verzi Zabbixu 7.0 a&nbsp;starší:</p>


<section id="block-code-block_4f8c2407ef71c2a961b64e1e5c33e744" data-id="block-code-block_4f8c2407ef71c2a961b64e1e5c33e744" class="gt-block block-code">
    <pre><code>echo &quot;CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;&quot; | sudo -u postgres psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Od verze Zabbixu 7.2:</p>


<section id="block-code-block_bd160439d3fb236c02874d2f79795717" data-id="block-code-block_bd160439d3fb236c02874d2f79795717" class="gt-block block-code">
    <pre><code>echo &quot;CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;&quot; | sudo -u postgres psql zabbix
cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2844" height="1510" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17.png" alt="" class="wp-image-14291" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17.png 2844w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-300x159.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-1024x544.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-768x408.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-1536x816.png 1536w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-2048x1087.png 2048w" sizes="auto, (max-width: 2844px) 100vw, 2844px" /></figure>



<h2 class="wp-block-heading">Dodatečné informace</h2>



<p><strong>Nastavení parametrů čištění (Administration &gt; Housekeeping)</strong>: Skript&nbsp;<code>schema.sql</code>&nbsp;nastavuje následující parametry čištění:</p>



<ul class="wp-block-list">
<li><strong>Override item history period</strong>: Povolit přepsání období uchování historie položek.</li>



<li><strong>Override item trend period</strong>: Povolit přepsání období uchování trendů.</li>
</ul>



<p>Aby bylo možné použít partitioned housekeeping pro historii a&nbsp;trendy, musí být obě tyto možnosti povoleny. Je také možné povolit přepsání pouze pro historii nebo pouze pro trendy. Pokud bude nastavení aplikováno bude nastavení pro historii a&nbsp;trendy na&nbsp;úrovni itemu ignorovano.</p>



<p><strong>Další parametry ve skriptu&nbsp;<code>schema.sql</code></strong>: Tento skript nastavuje také dva další parametry:</p>



<ul class="wp-block-list">
<li><strong>Enable compression</strong>: Povolit kompresi.</li>



<li><strong>Compress records older than 7 days</strong>: Komprimovat záznamy starší než 7 dnů.</li>
</ul>



<p>Pro úspěšné odstranění komprimovaných dat pomoci housekeeper musí být povoleny jak možnosti&nbsp;<strong>Override item history period</strong>, tak&nbsp;<strong>Override item trend period</strong>. Pokud je přepsání deaktivováno a&nbsp;tabulky mají komprimované&nbsp;<em>chunky</em>, správce údržby nebude odstraňovat data z&nbsp;těchto tabulek a&nbsp;v&nbsp;sekcích Housekeeping a&nbsp;System information se zobrazí varování o&nbsp;nesprávné konfiguraci​</p>



<p>V případě, že uvidíte v&nbsp;Zabbix Server log souboru zprávu o&nbsp;tom, že je verze TimescaleDB příliš nová, pak to není žádný velký problém. Zabbix nedokáže dostatečně rychle reagovat na&nbsp;nejnovější verze TimescaleDB tak, aby ji ve svém kódu nastavil jako podporovanou, ovšem kompatibilita je Zabbixem zaručena a&nbsp;námi ověřena.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1740" height="74" src="https://www.initmax.cz/wp-content/uploads/2023/10/timescaledb-too-new.png" alt="" class="wp-image-13936" style="object-fit:cover" srcset="https://www.initmax.cz/wp-content/uploads/2023/10/timescaledb-too-new.png 1740w, https://www.initmax.cz/wp-content/uploads/2023/10/timescaledb-too-new-300x13.png 300w, https://www.initmax.cz/wp-content/uploads/2023/10/timescaledb-too-new-1024x44.png 1024w, https://www.initmax.cz/wp-content/uploads/2023/10/timescaledb-too-new-768x33.png 768w, https://www.initmax.cz/wp-content/uploads/2023/10/timescaledb-too-new-1536x65.png 1536w" sizes="auto, (max-width: 1740px) 100vw, 1740px" /></figure>



<p>Pokud se chceme vyhnout zprávám o&nbsp;nekompatibilitě v&nbsp;log souboru Zabbixu, pak stačí otevřít konfigurační soubor Zabbix serveru v&nbsp;cestě <code>/etc/zabbix/zabbix_server.conf</code> a&nbsp;zde upravte následující konfigurační parametr:</p>


<section id="block-code-block_b4c5df6872e2e9ce945f137bbaf79d86" data-id="block-code-block_b4c5df6872e2e9ce945f137bbaf79d86" class="gt-block block-code">
    <pre><code>AllowUnsupportedDBVersions=1</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Soubor s&nbsp;tímto nastavením uložte a&nbsp;znovu nastartujte systémovou službu Zabbix serveru.</p>


<section id="block-code-block_41a8da8e3ba176c5c150c64a202d582a" data-id="block-code-block_41a8da8e3ba176c5c150c64a202d582a" class="gt-block block-code">
    <pre><code>systemctl restart zabbix-server</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A to je vše!  Podařilo se Vám zprovoznit rozšíření pro TimescaleDB a&nbsp;máte základní databázový performance tuning. Následující kroky by měly smeřovat k&nbsp;zálohování a&nbsp;monitoringu DB.</p>


<section id="block-newsletter-block_d6bf22ec5c6928779196ea0c427e2d71" data-id="block-newsletter-block_d6bf22ec5c6928779196ea0c427e2d71" class="gt-block block-newsletter">
    <section id="newsletter" class="newsletter">
	<div class="gradient basic">
		<div class="newsletter__inner width width--general">
			<div class="col left">
									<h2 class="newsletter__title">Buďte v&nbsp;obraze s&nbsp;naším newsletterem</h2>
													<div class="newsletter__content"><p>Díky initMAX newsletteru Vám neunikne žádná z&nbsp;pozvánek na&nbsp;akce a&nbsp;webináře, žádný z&nbsp;tipů, jak dostat ze svého IT MAXimum, ani ověřené informace o&nbsp;novinkách ze světa Zabbix a&nbsp;dalších technologií.</p>
</div>
							</div>
			<div class="col right form-wrapper">
				<div class="newsletter-form">
	<form method="post" action="/wiki/kapitola/postgresql/feed/" enctype="multipart/form-data">
		<input type="hidden" name="url" value="https://www.initmax.cz/wiki/kapitola/postgresql/feed/">

		<div class="inputs">

			<label for="newsletter-form_contact_email" class="top">Vaše e-mailová adresa:</label>
			<div class="df">

				<div class="input">
					<input type="text" id="newsletter-form_contact_email" name="newsletter_email" placeholder="@" data-format="email" data-required="1">
									</div><!-- /.input -->

				<a href="#" class="btn btn--white sendBtn">Odeslat</a>

			</div>

			<div class="bottom nm">
				<label for="newsletter-form_gdpr" class="checkbox gdpr">
					<input type="checkbox" id="newsletter-form_gdpr" name="newsletter_gdpr">
					<span>Souhlasím se&nbsp;<a href="https://www.initmax.cz/ochrana-osobnich-udaju/" target="_blank">zpracováním osobních údajů</a>.</span>
				</label>
			</div>

		</div><!-- /.inputs -->
		<div class="sent hidden">
			<div class="iconOk"><h3>Děkujeme, že jste se přihlásili k&nbsp;odběru našeho newsletteru.</h3>
</div>
			<button class="sent__close" title="Zavřít" onclick="closeFormMessage(this,event)"><svg data-name="Group 3602" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path data-name="Path 3272" d="M0,0H24V24H0Z" fill="none"/><line data-name="Line 98" y2="14" transform="translate(7.05 7.05) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 99" x2="14" transform="translate(7.05 16.95) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</button>
		</div><!-- /.sent -->
	</form>
</div>			</div>
		</div>
	</div>
</section></section>



<section id="social-links-block_e0d756d575c4fa026aaf04e7ac88466f" data-id="social-links-block_e0d756d575c4fa026aaf04e7ac88466f" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>

<p>The post <a href="https://www.initmax.cz/wiki/implementace-timescaledb-v-zabbixu/">Implementace TimescaleDB v&nbsp;Zabbixu: Výhody, Klíčové Tabulky a&nbsp;Instalace</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Zabbix &#8211; Migrace z&#160;MySQL do&#160;PostgreSQL</title>
		<link>https://www.initmax.cz/wiki/zabbix-migrace-z-mysql-do-postgresql/</link>
		
		<dc:creator><![CDATA[Tomáš Heřmánek]]></dc:creator>
		<pubDate>Sun, 19 May 2024 12:35:14 +0000</pubDate>
				<guid isPermaLink="false">https://www.initmax.cz/?post_type=wiki&#038;p=13907</guid>

					<description><![CDATA[<p>V tomto návodu si ukážeme, jak pro databázi Zabbixu provést migraci z MySQL do PostgreSQL na Rocky Linux 9. Zároveň si také ukážeme, ...</p>
<p>The post <a href="https://www.initmax.cz/wiki/zabbix-migrace-z-mysql-do-postgresql/">Zabbix &#8211; Migrace z&nbsp;MySQL do&nbsp;PostgreSQL</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>V tomto návodu si ukážeme, jak pro databázi Zabbixu provést migraci z&nbsp;MySQL do&nbsp;PostgreSQL na&nbsp;Rocky Linux 9. <br>Zároveň si také ukážeme, jak zapnout TimescaleDB spolu se základním performance tuningem.</p>



<p>Článek počítá s&nbsp;tím, že pokud jsou k&nbsp;dispozici volitelné patche (<a href="https://www.zabbix.com/documentation/5.0/en/manual/installation/upgrade_notes_500?hl=double#enabling-extended-range-of-numeric-float-values" rel="nofollow">float</a> a&nbsp;<a href="https://www.zabbix.com/documentation/6.0/en/manual/appendix/install/db_primary_keys" rel="nofollow">primární klíče</a>), pak byly do&nbsp;DB již aplikovány.<br>Pokud si nejste jisti, pak informace o&nbsp;tomto stavu se zobrazuje zároveň i&nbsp;ve frontendu v&nbsp;sekci <code>System information</code>, např.&nbsp;políčko: &#8222;Database history tables upgraded: No&#8220;.</p>



<p><strong>Dopředu upozorňujeme, že migraci děláte pouze na&nbsp;vlastní nebezpečí a&nbsp;neneseme žádnou odpovědnost za případné škody způsobené neodborným zásahem. </strong></p>



<p>Každá verze Zabbixu i&nbsp;databáze má svá konkrétní specifika, která je nutné brát v&nbsp;potaz už při&nbsp;návrhu migračního plánu a&nbsp;jednotlivých činností. Dle našich zkušeností se velká část problémů po&nbsp;migraci (například s&nbsp;promazáváním) může projevit až později. <strong>Doporučujeme tedy, abyste nás před zásahem do&nbsp;produkčního prostředí raději kontaktovali pro případnou konzultaci. Rádi vám s&nbsp;celým procesem bezchybné migrace a&nbsp;následnými kroky pomůžeme. </strong></p>


<section id="block-webinar-block_134a9b649ed807ab663fe757a1a9b170" data-id="block-webinar-block_134a9b649ed807ab663fe757a1a9b170" class="gt-block block-webinar">
    <div class="connected-webinars__grid">
        <a href="https://www.initmax.cz/webinar/migrace-zabbix-databaze-z-mysql-do-postgresql-krok-za-krokem/" class="grid-item">
	<article class="webinar-promotion">
		<div class="webinar-promotion__thumbnail-wrap">
			<figure class="webinar-promotion__thumbnail">
					<img decoding="async" src="https://www.initmax.cz/wp-content/uploads/2024/08/ilustrace_webinare_zabbix_7.0_06_thumbnail_web-copy-2.png"
				 width="400"
		 height="250"
		 class=""
		 alt="Migrace Zabbix databáze z&nbsp;MySQL do&nbsp;PostgreSQL krok za krokem"
		 loading="lazy"	>
									<div class="webinar-promotion__tags">
						<span class="tag tag--small" style="color:#ffffff;background-color:#336791;">PostgreSQL</span><span class="tag tag--small" style="color:#ffffff;background-color:#d40000;">Zabbix</span>					</div>
							</figure>
		</div>
		<div class="webinar-promotion__text">
			<div>
									<time datetime="2024-11-21">21.&nbsp;11.&nbsp;2024</time>
							</div>
			<h3 class="webinar-promotion__title">Migrace Zabbix databáze z&nbsp;MySQL do&nbsp;PostgreSQL krok za krokem</h3>
			<div class="icon-link">
				<figure class="icon-wrap icon-wrap--primary"><svg data-name="Group 3411" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path data-name="Path 455" d="M0,0H24V24H0Z" fill="none"/><path data-name="Path 456" d="M15,10l4.553-2.276A1,1,0,0,1,21,8.618v6.764a1,1,0,0,1-1.447.894L15,14V10Z" transform="translate(0 0)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><rect data-name="Rectangle 1286" width="12" height="12" rx="2" transform="translate(3.112 6)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</figure>
				<span>Zhlédnout záznam</span>
			</div>
		</div>
	</article>
</a>    </div>
</section>


<section id="social-links-block_2294b5c81a0b70e3af1dfb4b7a42e22e" data-id="social-links-block_2294b5c81a0b70e3af1dfb4b7a42e22e" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>




<h2 class="wp-block-heading">Kontrola verzí</h2>



<p>Jako vůbec první krok před samotnou migrací je třeba vědět konkrétní aktuálně <strong>BĚŽÍCÍ</strong> verzi Zabbix serveru. Tedy nikoliv to, co nám zobrazuje patička ve webovém frontendu.</p>



<p>Toto nejbezpečněji zjistíme v&nbsp;logu samotného Zabbix serveru při&nbsp;jeho startu:</p>


<section id="block-code-block_38359b4cc0242ed6915996a88453531d" data-id="block-code-block_38359b4cc0242ed6915996a88453531d" class="gt-block block-code">
    <pre><code>cat /var/log/zabbix/zabbix_server.log | grep &quot;Starting Zabbix Server. Zabbix&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Výstup tohoto příkazu v&nbsp;našem případě vypadá následovně:</p>


<section id="block-code-block_c0d276ca0ee4f27bf47982851f165ad5" data-id="block-code-block_c0d276ca0ee4f27bf47982851f165ad5" class="gt-block block-code">
    <pre><code>1933256:20240510:164211.482 Starting Zabbix Server. Zabbix 7.0.0 (revision 9bc845eca94)</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Jako další možnost je zjištění verze instalačních balíčků podpůrných knihoven Zabbixu pro MySQL, což je ilustrováno příkazem níže.</p>



<p>Toto ale nemusí být skutečná, aktuálně běžící verze!</p>


<section id="block-code-block_1cf68575ed47149cb8294ba0544f513e" data-id="block-code-block_1cf68575ed47149cb8294ba0544f513e" class="gt-block block-code">
    <pre><code>rpm -qa | grep zabbix-server-mysql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Výstup tohoto příkazu vypadá takto:</p>


<section id="block-code-block_6381f6d47a1fe1245929ebfc83911119" data-id="block-code-block_6381f6d47a1fe1245929ebfc83911119" class="gt-block block-code">
    <pre><code>zabbix-server-mysql-7.0.0.release1.el9.x86_64</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Dalším způsobem zjištění verze Zabbix serveru je pak kontrola verze samotným spouštěcím souborem. Ovšem i&nbsp;tato informace může být za jistých okolností zavádějící a&nbsp;nemusí to být verze aktuálně spuštěná.</p>


<section id="block-code-block_4b44c08c6be447bed528eda895d77235" data-id="block-code-block_4b44c08c6be447bed528eda895d77235" class="gt-block block-code">
    <pre><code>zabbix_server -V</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Výstup pak vypadá následovně:</p>


<section id="block-code-block_9092da4d416f2524bbfe219d646f4797" data-id="block-code-block_9092da4d416f2524bbfe219d646f4797" class="gt-block block-code">
    <pre><code>zabbix_server (Zabbix) 7.0.0
Revision 9bc845eca94 30 January 2024, compilation time: Jan 30 2024 00:00:00</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">Přípravné kroky</h2>



<h3 class="wp-block-heading">MySQL triggery</h3>



<p><strong>Zabbix od verze 6.0.11 obsahuje databázové triggery</strong> a&nbsp;s&nbsp;těmi se musí při&nbsp;migraci počítat. Následující sadou příkazů tedy zjistíme, jestli se to naší databázové instance bude také týkat.</p>



<p>Přihlásíme se do&nbsp;mysql konzole:</p>


<section id="block-code-block_93bb84a81e3a4cec20632bcd7489fe8a" data-id="block-code-block_93bb84a81e3a4cec20632bcd7489fe8a" class="gt-block block-code">
    <pre><code>mysql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Přepneme se do&nbsp;databáze &#8218;zabbix&#8216;:</p>


<section id="block-code-block_6102cc174a2eb7173c0eb4f348a558c0" data-id="block-code-block_6102cc174a2eb7173c0eb4f348a558c0" class="gt-block block-code">
    <pre><code>use zabbix;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p> Následně zavoláme příkaz <code>SHOW TRIGGERS</code>, který nám případně zobrazí použité databázové triggery:</p>


<section id="block-code-block_7768e84b2781595db9e0f728a4bf3442" data-id="block-code-block_7768e84b2781595db9e0f728a4bf3442" class="gt-block block-code">
    <pre><code>SHOW TRIGGERS\G
</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p><strong>Pokud je výstup tohoto příkazu následující, pak část s&nbsp;instalací triggerů níže v&nbsp;návodu můžete s&nbsp;klidem vynechat.</strong></p>


<section id="block-code-block_5e69284f83e487951a1173417bd6e0e3" data-id="block-code-block_5e69284f83e487951a1173417bd6e0e3" class="gt-block block-code">
    <pre><code>Empty set (0.00 sec)</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Ukázku z&nbsp;výstupu tohoto příkazu v&nbsp;Zabbixu verze 6.0.11 vidíte zde. V&nbsp;tuto chvíli už se níže zmíněné kapitole o&nbsp;migraci triggerů nevyhnete.</p>


<section id="block-code-block_25e9833debe400a92b1d02afbd78b1eb" data-id="block-code-block_25e9833debe400a92b1d02afbd78b1eb" class="gt-block block-code">
    <pre><code>*************************** 1. row ***************************
             Trigger: hosts_name_upper_insert
               Event: INSERT
               Table: hosts
           Statement: set new.name_upper=upper(new.name)
              Timing: BEFORE
             Created: 2024-02-27 09:59:58.09
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: zabbix@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_bin
*************************** 2. row ***************************
             Trigger: hosts_name_upper_update
               Event: UPDATE
               Table: hosts
           Statement: begin
if new.name&lt;&gt;old.name
then
set new.name_upper=upper(new.name);
end if;
end
              Timing: BEFORE
             Created: 2024-02-27 09:59:58.10
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: zabbix@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_bin
*************************** 3. row ***************************
             Trigger: items_name_upper_insert
               Event: INSERT
               Table: items
           Statement: set new.name_upper=upper(new.name)
              Timing: BEFORE
             Created: 2024-02-27 10:00:00.76
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: zabbix@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_bin
*************************** 4. row ***************************
             Trigger: items_name_upper_update
               Event: UPDATE
               Table: items
           Statement: begin
if new.name&lt;&gt;old.name
then
set new.name_upper=upper(new.name);
end if;
end
              Timing: BEFORE
             Created: 2024-02-27 10:00:00.77
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: zabbix@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_bin
4 rows in set (0.01 sec)</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h3 class="wp-block-heading">Instalace závislostí</h3>



<p>Nejprve přidáme oficiální repozitář PostgreSQL, který pro instalaci doporučujeme. Instalační balíčky z&nbsp;repozitářů od RedHat se podstatně liší.</p>



<p>To provedeme následujícím příkazem:</p>


<section id="block-code-block_c813127ebf2cef5e167f75a3a99bf550" data-id="block-code-block_c813127ebf2cef5e167f75a3a99bf550" class="gt-block block-code">
    <pre><code>yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nainstalujeme PostgreSQL v&nbsp;Zabbixem podporované verzi, kterou zjistíme v&nbsp;matici kompatiblity na&nbsp;stránkách <a href="https://www.zabbix.com/documentation/7.0/en/manual/installation/requirements">Zabbixu</a>:</p>


<section id="block-code-block_d43be6d9380ad9b9fff69e91e0e8737c" data-id="block-code-block_d43be6d9380ad9b9fff69e91e0e8737c" class="gt-block block-code">
    <pre><code>yum install postgresql18-server</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Inicializujeme databázový server PostgreSQL následujícím příkazem:</p>


<section id="block-code-block_32822271ef31ee16290604bc291a2e4b" data-id="block-code-block_32822271ef31ee16290604bc291a2e4b" class="gt-block block-code">
    <pre><code>/usr/pgsql-18/bin/postgresql-18-setup initdb</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Spustíme službu PostgreSQL a&nbsp;nastavíme její spouštění po&nbsp;startu:</p>


<section id="block-code-block_de3df1708157e134bc7587ffc98eb9dd" data-id="block-code-block_de3df1708157e134bc7587ffc98eb9dd" class="gt-block block-code">
    <pre><code>systemctl enable postgresql-18
systemctl start postgresql-18</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nainstalujeme utilitu <code>pgloader</code>, kterou použijeme k&nbsp;samotné migraci dat:</p>


<section id="block-code-block_04f6a220c9cfe150e5692160b3d7f067" data-id="block-code-block_04f6a220c9cfe150e5692160b3d7f067" class="gt-block block-code">
    <pre><code>yum install pgloader</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Pomocí následujícího příkazu zkontrolujeme verzi <code>pgloaderu</code>:</p>


<section id="block-code-block_229d8bad1680a0e16f5b2aea868c1ca7" data-id="block-code-block_229d8bad1680a0e16f5b2aea868c1ca7" class="gt-block block-code">
    <pre><code>pgloader -V</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Výstup bude pak vypadat následovně:</p>


<section id="block-code-block_4befec030e03f05a494324d7bb87ce87" data-id="block-code-block_4befec030e03f05a494324d7bb87ce87" class="gt-block block-code">
    <pre><code>pgloader version &quot;3.6.7&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h3 class="wp-block-heading">Příprava na&nbsp;migraci</h3>



<p>Nyní vytvoříme dočasnou složku, která nám bude sloužit k&nbsp;uchování konfiguračních souborů použitých při&nbsp;následné migraci a&nbsp;otevřeme ji:</p>


<section id="block-code-block_fbb5154c570b2049d9457b289896789e" data-id="block-code-block_fbb5154c570b2049d9457b289896789e" class="gt-block block-code">
    <pre><code>mkdir /tmp/zabbix-db-migration/ &amp;&amp; cd $_</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h3 class="wp-block-heading">Parsování schématu</h3>



<p>Pro samotnou migraci dat budeme potřebovat soubor s&nbsp;databázovým schématem, tento nalezneme v&nbsp;oficiálních zdrojových kódech Zabbixu <strong>pro vaši konkrétní verzi</strong>.</p>



<p><strong>Tento příkaz je nezbytně nutné přizpůsobit přímo vaší verzi Zabbix!</strong></p>



<p>Stále se nacházíme v&nbsp;naší dočasné složce, vytvořené pro migraci a&nbsp;zdrojový kód pro naši verzi 7.0.0 tedy stáhneme sem, a&nbsp;to následujícím příkazem:</p>


<section id="block-code-block_5fa067029dbcc6fdc5fe26e57fabdace" data-id="block-code-block_5fa067029dbcc6fdc5fe26e57fabdace" class="gt-block block-code">
    <pre><code>wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.0.tar.gz</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Stáhnutý archiv se zdrojovým kódem Zabbixu rozbalíme:</p>


<section id="block-code-block_ef5074095d919c17acdce052f3f797a6" data-id="block-code-block_ef5074095d919c17acdce052f3f797a6" class="gt-block block-code">
    <pre><code>tar -zxvf zabbix-7.0.0.tar.gz</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Otevřeme si složku v&nbsp;následující cestě, kde nalezneme databázová schémata:</p>


<section id="block-code-block_529d9df76918399cd7e6fc663f6d2766" data-id="block-code-block_529d9df76918399cd7e6fc663f6d2766" class="gt-block block-code">
    <pre><code>cd /tmp/zabbix-db-migration/zabbix-7.0.0/database/postgresql/</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Z jednotného souboru schématu vybereme pouze operace vytvářející tabulky a&nbsp;triggery, a&nbsp;uložíme je do&nbsp;separátního souboru:</p>


<section id="block-code-block_1987e946d7723b1778f1d498e3b9898f" data-id="block-code-block_1987e946d7723b1778f1d498e3b9898f" class="gt-block block-code">
    <pre><code>grep -v &#039;ALTER TABLE ONLY&#039; schema.sql | grep -v INSERT | grep -v &#039;CREATE INDEX&#039; | grep -v &#039;CREATE UNIQUE INDEX&#039; &gt; /tmp/zabbix-db-migration/create_tables.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento soubor nyní obsahuje nejen CREATE TABLE operace, ale i&nbsp;operace a&nbsp;funkce pro triggery, které řešíme individuálně. Část, která triggery vytváří tedy z&nbsp;tohoto souboru odebereme:</p>


<section id="block-code-block_cc8ca8f63568589ee9fd683e55c47dff" data-id="block-code-block_cc8ca8f63568589ee9fd683e55c47dff" class="gt-block block-code">
    <pre><code>sed -i &#039;/create\ or\ replace\ function/,$d&#039; /tmp/zabbix-db-migration/create_tables.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A z&nbsp;tohoto jednotného schématu pak právě vybereme pouze operace související s&nbsp;triggery:</p>


<section id="block-code-block_e24f643a05238d54e95487eb864f9921" data-id="block-code-block_e24f643a05238d54e95487eb864f9921" class="gt-block block-code">
    <pre><code>awk &#039;/INSERT INTO dbversion/{p=1;next} /ALTER TABLE/{p=0} p&#039; schema.sql &gt; /tmp/zabbix-db-migration/triggers.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A nyní můžeme postoupit dále. Ze stejného souboru s&nbsp;databázovým schématem vybreme pouze operace pro vytváření indexů a&nbsp;uložíme je v&nbsp;separátním souboru:</p>


<section id="block-code-block_ef6c26d8fc59c46426db650574aeb3d5" data-id="block-code-block_ef6c26d8fc59c46426db650574aeb3d5" class="gt-block block-code">
    <pre><code>grep -E &#039;CREATE INDEX|CREATE UNIQUE INDEX&#039; schema.sql &gt; /tmp/zabbix-db-migration/create_index.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Opět z&nbsp;tohoto jednotného souboru se schématem vybereme pouze ALTER operace a&nbsp;uložíme je do&nbsp;separátního souboru:</p>


<section id="block-code-block_5c034b01f2c1686c6e14f45a8e8fa413" data-id="block-code-block_5c034b01f2c1686c6e14f45a8e8fa413" class="gt-block block-code">
    <pre><code>grep &#039;ALTER TABLE ONLY&#039; schema.sql &gt; /tmp/zabbix-db-migration/alter_table.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h3 class="wp-block-heading">Příprava PostgreSQL</h3>



<p>Následně vytvoříme databázového uživatele pro Zabbix, budeme vyzváni k&nbsp;zadání hesla:</p>


<section id="block-code-block_82a96bc5e8d236a5412f4664c5fb26c8" data-id="block-code-block_82a96bc5e8d236a5412f4664c5fb26c8" class="gt-block block-code">
    <pre><code>sudo -u postgres createuser --pwprompt zabbix</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Vytvoříme zabbix databázi:</p>


<section id="block-code-block_f96c9f47b0fbf8ac2053fa677409dc12" data-id="block-code-block_f96c9f47b0fbf8ac2053fa677409dc12" class="gt-block block-code">
    <pre><code>sudo -u postgres createdb -O zabbix zabbix</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Vytvoříme zabbix schéma:</p>


<section id="block-code-block_3b3db1f002fdfa617313218196e8b704" data-id="block-code-block_3b3db1f002fdfa617313218196e8b704" class="gt-block block-code">
    <pre><code>sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/create_tables.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Kvůli kompatibilitě s&nbsp;utilitou <code>pgloader</code> dočasně nastavíme encryption hash na&nbsp;&#8218;md5&#8216; a&nbsp;změníme heslo vytvořenému databázovému uživateli tak, aby se v&nbsp;daném hash algorytmu přegenerovalo. Pro jednoduchost <strong>použijte ideálně stejné heslo</strong>, jako jsme zadávali při&nbsp;vytváření tohoto uživatele.</p>


<section id="block-code-block_b00ae9cb1481d9d3da3bac92093042f6" data-id="block-code-block_b00ae9cb1481d9d3da3bac92093042f6" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -c &quot;SET password_encryption=&#039;md5&#039;;&quot;
sudo -u postgres psql -c &quot;ALTER ROLE zabbix WITH PASSWORD &#039;***********&#039;;&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h3 class="wp-block-heading">Příprava MySQL</h3>



<p>V případě, že naše MySQL používá již změněný formát přihlašování, pak je stejně jako u&nbsp;PostgreSQL pro potřeby <code>pg</code>loader třeba změnit způsob přihlašování databázového uživatele pro Zabbix a&nbsp;zároveň mu přegenerovat heslo. To uděláme následujícím způsobem.</p>



<p>Nejprve otevřeme konfigurační soubor MySQL serveru. Pokud používáte jinou verzi, např.&nbsp;MariaDB nebo Percona, pak se umístění může lišit.</p>


<section id="block-code-block_02284674d09e7cf559c8ca86b840476c" data-id="block-code-block_02284674d09e7cf559c8ca86b840476c" class="gt-block block-code">
    <pre><code>nano /etc/my.cnf.d/mysql-server.cnf</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A zde dočasně upravíme v&nbsp;sekci <code>[mysqld]</code> následující direktivu:</p>


<section id="block-code-block_d8d3fb80f26df5bcce0c4ee1f43e4d97" data-id="block-code-block_d8d3fb80f26df5bcce0c4ee1f43e4d97" class="gt-block block-code">
    <pre><code>[mysqld]
...
default-authentication-plugin=mysql_native_password</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nyní musíme zrestartovat MySQL:</p>


<section id="block-code-block_66dc2ffa945fe712083589b8525987d4" data-id="block-code-block_66dc2ffa945fe712083589b8525987d4" class="gt-block block-code">
    <pre><code>systemctl restart mysqld</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A nyní můžeme změnit způsob přihlašování uživatele pro Zabbix a&nbsp;přegenerovat mu heslo. Nezapomeňte v&nbsp;příkazu níže změnit heslo na&nbsp;své vlastní!</p>


<section id="block-code-block_e3b24e8a0225dd3da63c1104e02030e3" data-id="block-code-block_e3b24e8a0225dd3da63c1104e02030e3" class="gt-block block-code">
    <pre><code>mysql -e &quot;ALTER USER &#039;zabbix&#039;@&#039;localhost&#039; IDENTIFIED WITH mysql_native_password BY &#039;*********&#039;;&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Připravíme konfiguraci &#8211; SQL skript pro <code>pgloader</code>, tudíž tento soubor vytvořte:</p>


<section id="block-code-block_3c1dcb46ae6bb38406b668ed77aa7758" data-id="block-code-block_3c1dcb46ae6bb38406b668ed77aa7758" class="gt-block block-code">
    <pre><code>nano /tmp/zabbix-db-migration/pgloader.conf</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A tento soubor vyplňte následujícím obsahem. Nezapomeňte si v&nbsp;tomto skriptu změnit hesla (označená pomocí hvězdiček) na&nbsp;vaše vlastní, validní hesla do&nbsp;obou databází:</p>


<section id="block-code-block_71b77f65a7378a21e71cf4eebae7c092" data-id="block-code-block_71b77f65a7378a21e71cf4eebae7c092" class="gt-block block-code">
    <pre><code>LOAD DATABASE
FROM mysql://zabbix:**********@127.0.0.1/zabbix
INTO postgresql://zabbix:**********@127.0.0.1/zabbix
WITH include no drop,
truncate,
create no tables,
create no indexes,
no foreign keys,
reset sequences,
data only,
prefetch rows = 100,
batch rows = 1000,
batch concurrency = 1
ALTER SCHEMA &#039;zabbix&#039; RENAME TO &#039;public&#039;;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">Migrace</h2>



<p>Nyní se můžeme pustit do&nbsp;samotné migrace. V&nbsp;tuto chvíli doporučujeme udělat si zálohu zdrojové MySQL databáze a&nbsp;přesvědčte se, že máte dostatečné volné místo na&nbsp;disku.</p>



<p>Nejprve zastavíme službu Zabbix serveru a&nbsp;Apache web serveru pro Zabbix frontend:</p>


<section id="block-code-block_37cbe46c76c87a22c1ed4df44b02f5c3" data-id="block-code-block_37cbe46c76c87a22c1ed4df44b02f5c3" class="gt-block block-code">
    <pre><code>systemctl stop zabbix-server httpd</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Vytvoříme v&nbsp;naší dočasné složce složku pro migrovaná data z&nbsp;MySQL:</p>


<section id="block-code-block_0251b9c6e8a78b0325fbce3da34948ef" data-id="block-code-block_0251b9c6e8a78b0325fbce3da34948ef" class="gt-block block-code">
    <pre><code>mkdir /tmp/zabbix-db-migration/data</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A následně spustíme pgloader s&nbsp;námi vytvořeným konfiguračním souborem:</p>


<section id="block-code-block_9f4a3dfa3bf18b0e0114805a5b5b7858" data-id="block-code-block_9f4a3dfa3bf18b0e0114805a5b5b7858" class="gt-block block-code">
    <pre><code>pgloader --root-dir=/tmp/zabbix-db-migration/data /tmp/zabbix-db-migration/pgloader.conf</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Pokud <code>pgloader</code> při&nbsp;běhu zahlásí nějaké výstražné zprávy (Warning), pak je můžete směle ignorovat &#8211; ničemu nevadí. Naopak problémy, které jsou závažnější, a&nbsp;se kterými se ale také můžete setkat jsou např.: malý objem dostupného místa na&nbsp;disku, časové prodlevy mezi databázemi (timeouts), příliš nízká rychlost zápisu na&nbsp;disk (nízké iops). I&nbsp;tyto problémy lze vyřešit, ovšem vyžadují další analýzu a&nbsp;následný tuning přímo na&nbsp;míru.</p>



<p>Příklad výstupu tohoto příkazu naleznete zde:</p>


<section id="block-code-block_98c7b67d354fabc59c454018c2ed4857" data-id="block-code-block_98c7b67d354fabc59c454018c2ed4857" class="gt-block block-code">
    <pre><code>2024-05-10T16:55:38.010000+01:00 LOG pgloader version &quot;3.6.7~devel&quot;
2024-05-10T16:55:38.174002+01:00 LOG Migrating from #&lt;MYSQL-CONNECTION mysql://zabbix@127.0.0.1:3306/zabbix {100685C583}&gt;
2024-05-10T16:55:38.175002+01:00 LOG Migrating into #&lt;PGSQL-CONNECTION pgsql://zabbix@127.0.0.1:5432/zabbix {100685C713}&gt;
2024-05-10T16:55:38.684006+01:00 WARNING Source column &quot;public&quot;.&quot;history_uint&quot;.&quot;value&quot; is casted to type &quot;bigint&quot; which is not the same as &quot;numeric&quot;, the type of current target database column &quot;public&quot;.&quot;history_uint&quot;.&quot;value&quot;.
2024-05-10T16:55:38.685006+01:00 WARNING Source column &quot;public&quot;.&quot;item_rtdata&quot;.&quot;lastlogsize&quot; is casted to type &quot;bigint&quot; which is not the same as &quot;numeric&quot;, the type of current target database column &quot;public&quot;.&quot;item_rtdata&quot;.&quot;lastlogsize&quot;.
2024-05-10T16:55:38.686006+01:00 WARNING Source column &quot;public&quot;.&quot;proxy_history&quot;.&quot;lastlogsize&quot; is casted to type &quot;bigint&quot; which is not the same as &quot;numeric&quot;, the type of current target database column &quot;public&quot;.&quot;proxy_history&quot;.&quot;lastlogsize&quot;.
2024-05-10T16:55:38.686006+01:00 WARNING Source column &quot;public&quot;.&quot;trends_uint&quot;.&quot;value_min&quot; is casted to type &quot;bigint&quot; which is not the same as &quot;numeric&quot;, the type of current target database column &quot;public&quot;.&quot;trends_uint&quot;.&quot;value_min&quot;.
2024-05-10T16:55:38.687006+01:00 WARNING Source column &quot;public&quot;.&quot;trends_uint&quot;.&quot;value_avg&quot; is casted to type &quot;bigint&quot; which is not the same as &quot;numeric&quot;, the type of current target database column &quot;public&quot;.&quot;trends_uint&quot;.&quot;value_avg&quot;.
2024-05-10T16:55:38.687006+01:00 WARNING Source column &quot;public&quot;.&quot;trends_uint&quot;.&quot;value_max&quot; is casted to type &quot;bigint&quot; which is not the same as &quot;numeric&quot;, the type of current target database column &quot;public&quot;.&quot;trends_uint&quot;.&quot;value_max&quot;.
2024-05-10T16:56:28.778334+01:00 ERROR Database error 23505: duplicate key value violates unique constraint &quot;changelog_pkey&quot;
DETAIL: Key (changelogid)=(16809) already exists.
CONTEXT: COPY changelog, line 1
2024-05-10T16:56:30.691348+01:00 LOG report summary reset
                       table name     errors       rows      bytes      total time
---------------------------------  ---------  ---------  ---------  --------------
                  fetch meta data          0        198                     0.121s
                         Truncate          0        198                     0.338s
---------------------------------  ---------  ---------  ---------  --------------
                   public.history          0    3899811   133.2 MB         39.021s
              public.history_uint          0    2167293    66.0 MB         26.330s
                    public.trends          0     502182    27.5 MB          8.498s
                     public.items          0      12784     4.4 MB          1.488s
                 public.event_tag          0      13012   326.9 kB          0.942s
               public.trigger_tag          0       7365   198.8 kB          1.411s
                  public.triggers          0       5546     1.4 MB          2.027s
              public.graphs_items          0       4186   138.6 kB          2.082s
               public.history_str          0       2923   233.3 kB          2.316s
            public.item_condition          0       2445   123.0 kB          2.524s
              public.widget_field          0       1875   103.9 kB          2.777s
                    public.graphs          0       1428   154.7 kB          3.150s
               public.item_rtdata          0        957    16.0 kB          3.248s
                  public.host_tag          0        635    17.4 kB          3.486s
                    public.widget          0        467    14.2 kB          3.773s
                public.host_hgset          0        307     2.5 kB          3.991s
                  public.profiles          0        265    13.2 kB          4.305s
            public.dashboard_page          0        158     1.9 kB          4.515s
                 public.dashboard          0        154    10.5 kB          4.839s
                    public.images          0        187     1.9 MB          5.049s
            public.task_check_now          0          0                     5.063s
   public.lld_override_opdiscover          0         98     0.7 kB          5.114s
     public.lld_override_opstatus          0         98     0.7 kB          5.217s
         public.trigger_discovery          0         82     2.0 kB          5.339s
              public.users_groups          0         64     0.5 kB          5.407s
                public.user_ugset          0         61     0.3 kB          5.525s
           public.graph_discovery          0         47     1.1 kB          5.643s
           public.hosts_templates          0         31     0.5 kB          5.809s
                   public.problem          0         34     3.4 kB          6.004s
                    public.hstgrp          0         26     1.5 kB          6.212s
                    public.module          0         27     0.9 kB          6.343s
                     public.hgset          0         19     1.3 kB          6.497s
               public.host_rtdata          0         13     0.1 kB          6.690s
               public.expressions          0         10     0.5 kB          6.691s
               public.escalations          0         15     0.7 kB          6.847s
                public.permission          0          7     0.0 kB          6.810s
                public.conditions          0          6     0.1 kB          6.961s
                    public.usrgrp          0          6     0.2 kB          6.958s
                   public.regexps          0          5     0.2 kB          7.101s
               public.graph_theme          0          4     0.9 kB          7.071s
             public.opmessage_grp          0          4     0.0 kB          7.248s
              public.httpstepitem          0          3     0.0 kB          7.275s
                   public.scripts          0          3     0.3 kB          7.423s
             public.sysmaps_links          0          3     0.4 kB          7.411s
              public.acknowledges          0          1     0.0 kB          7.573s
            public.interface_snmp          0          2     0.1 kB          7.510s
                     public.proxy          0          2     0.1 kB          7.738s
                     public.ugset          0          2     0.1 kB          7.531s
                   public.dchecks          0          1     0.0 kB          7.727s
              public.autoreg_host          0          0                     7.722s
        public.config_autoreg_tls          0          1     0.0 kB          7.899s
             public.connector_tag          0          0                     7.852s
      public.corr_condition_group          0          0                     7.925s
    public.corr_condition_tagpair          0          0                     8.054s
            public.corr_operation          0          0                     8.049s
            public.dashboard_user          0          0                     8.200s
                    public.dhosts          0          1     0.0 kB          8.190s
                 public.dservices          0          1     0.2 kB          8.298s
               public.globalmacro          0          1     0.0 kB          8.291s
           public.group_discovery          0          0                     8.472s
               public.history_log          0          0                     8.467s
                  public.httpstep          0          1     0.1 kB          8.693s
                  public.httptest          0          1     0.1 kB          8.688s
              public.httptest_tag          0          0                     8.849s
              public.icon_mapping          0          0                     8.821s
    public.lld_override_ophistory          0          0                     9.102s
     public.lld_override_opperiod          0          0                     8.981s
        public.lld_override_optag          0          0                     9.132s
     public.lld_override_optrends          0          0                     9.350s
              public.maintenances          0          1     0.0 kB          9.347s
        public.maintenances_hosts          0          1     0.0 kB          9.557s
                 public.opcommand          0          0                     9.548s
             public.opcommand_hst          0          0                     9.736s
                   public.opgroup          0          1     0.0 kB          9.738s
             public.opmessage_usr          0          0                     9.954s
                public.optemplate          0          1     0.0 kB          9.950s
            public.proxy_dhistory          0          0                    10.057s
                    public.report          0          0                    10.101s
               public.report_user          0          0                    10.120s
                public.scim_group          0          0                    10.198s
            public.service_alarms          0          0                    10.219s
       public.service_problem_tag          0          0                    10.271s
               public.service_tag          0          0                    10.329s
            public.services_links          0          0                    10.363s
     public.sla_excluded_downtime          0          0                    10.401s
           public.sla_service_tag          0          0                    10.487s
        public.sysmap_element_url          0          0                    10.484s
                public.sysmap_url          0          0                    10.618s
             public.sysmap_usrgrp          0          0                    10.537s
     public.sysmaps_link_triggers          0          0                    10.622s
                      public.task          0          0                    10.677s
        public.task_close_problem          0          0                    10.752s
       public.task_remote_command          0          0                    10.763s
               public.task_result          0          0                    10.812s
                     public.token          0          0                    10.864s
           public.user_scim_group          0          0                    10.940s
    public.userdirectory_idpgroup          0          0                    10.955s
       public.userdirectory_media          0          0                    11.072s
      public.userdirectory_usrgrp          0          0                    11.029s
          public.valuemap_mapping          0      30621   861.6 kB         11.359s
               public.trends_uint          0     345750    11.3 MB          3.151s
                  public.item_tag          0      19823   598.5 kB          0.772s
              public.item_preproc          0      11373   603.2 kB          0.888s
                 public.functions          0       9445   268.0 kB          1.304s
            public.item_discovery          0       5629   129.7 kB          1.377s
                 public.hostmacro          0       4612   360.1 kB          1.518s
                    public.events          0       3494   252.6 kB          1.644s
                    public.alerts          0       3083   844.7 kB          1.838s
           public.trigger_depends          0       1819    32.0 kB          2.011s
                  public.auditlog          0       5350   642.1 kB          2.329s
            public.event_recovery          0       1362    27.6 kB          2.490s
               public.item_rtname          0        917    60.6 kB          2.691s
          public.media_type_param          0        555    22.0 kB          2.867s
                     public.hosts          0        318   133.3 kB          3.229s
              public.hosts_groups          0        307     3.7 kB          3.413s
              public.history_text          0        211     3.7 MB          3.957s
        public.media_type_message          0        154    41.1 kB          4.150s
            public.event_suppress          0        143     3.5 kB          4.421s
            public.lld_macro_path          0        134     4.5 kB          4.481s
               public.problem_tag          0        150     3.6 kB          4.600s
    public.lld_override_operation          0         98     2.9 kB          4.726s
              public.lld_override          0         95     3.7 kB          4.842s
    public.lld_override_condition          0         85     3.6 kB          4.946s
                     public.users          0         63     7.8 kB          5.092s
                       public.ids          0         51     1.3 kB          5.177s
            public.item_parameter          0         43     1.7 kB          5.288s
           public.group_prototype          0         28     0.9 kB          5.371s
                 public.role_rule          0         27     0.8 kB          5.505s
                 public.interface          0         24     1.1 kB          5.670s
                public.media_type          0         31   256.8 kB          5.707s
               public.hgset_group          0         19     0.1 kB          5.649s
            public.host_discovery          0         11     0.2 kB          5.789s
                public.operations          0         10     0.2 kB          5.792s
                 public.opmessage          0          8     0.1 kB          5.806s
                    public.rights          0          7     0.1 kB          5.872s
                  public.sessions          0          6     0.5 kB          5.985s
                   public.actions          0          5     0.3 kB          5.883s
          public.sysmaps_elements          0          5     0.8 kB          5.978s
               public.housekeeper          0          4     0.1 kB          5.993s
                      public.role          0          4     0.1 kB          5.966s
              public.httptestitem          0          3     0.0 kB          6.161s
                   public.sysmaps          0          3     0.2 kB          6.102s
               public.ugset_group          0          3     0.0 kB          6.098s
          public.dashboard_usrgrp          0          2     0.0 kB          6.088s
                     public.media          0          3     0.1 kB          6.262s
              public.proxy_rtdata          0          2     0.0 kB          6.239s
                    public.config          0          1     0.7 kB          6.237s
                   public.ha_node          0          1     0.1 kB          6.223s
                 public.changelog          1          0                     6.382s
                 public.connector          0          0                     6.371s
            public.corr_condition          0          0                     6.354s
        public.corr_condition_tag          0          0                     6.365s
   public.corr_condition_tagvalue          0          0                     6.487s
               public.correlation          0          0                     6.505s
                 public.dbversion          0          1     0.0 kB          6.513s
                    public.drules          0          1     0.0 kB          6.500s
             public.event_symptom          0          0                     6.610s
                public.globalvars          0          1     0.0 kB          6.631s
               public.history_bin          0          0                     6.634s
            public.host_inventory          0          1     0.3 kB          6.640s
            public.httpstep_field          0          0                     6.735s
            public.httptest_field          0          0                     6.747s
                  public.icon_map          0          0                     6.771s
       public.interface_discovery          0          0                     6.767s
  public.lld_override_opinventory          0          0                     6.868s
   public.lld_override_opseverity          0          0                     6.883s
   public.lld_override_optemplate          0          0                     6.908s
           public.maintenance_tag          0          0                     6.906s
       public.maintenances_groups          0          0                     7.003s
      public.maintenances_windows          0          1     0.0 kB          7.016s
             public.opcommand_grp          0          0                     7.036s
              public.opconditions          0          0                     7.031s
               public.opinventory          0          0                     7.129s
                     public.optag          0          0                     7.147s
        public.proxy_autoreg_host          0          0                     7.178s
             public.proxy_history          0          0                     7.191s
              public.report_param          0          0                     7.224s
             public.report_usrgrp          0          0                     7.305s
              public.script_param          0          0                     7.244s
           public.service_problem          0          0                     7.348s
       public.service_status_rule          0          0                     7.366s
                  public.services          0          0                     7.318s
                       public.sla          0          0                     7.411s
              public.sla_schedule          0          0                     7.473s
    public.sysmap_element_trigger          0          0                     7.455s
              public.sysmap_shape          0          1     0.1 kB          7.407s
               public.sysmap_user          0          0                     7.582s
       public.sysmaps_element_tag          0          0                     7.602s
                public.tag_filter          0          0                     7.517s
          public.task_acknowledge          0          0                     7.653s
                 public.task_data          0          0                     7.574s
public.task_remote_command_result          0          0                     7.725s
               public.timeperiods          0          1     0.0 kB          7.643s
             public.trigger_queue          0          0                     7.726s
             public.userdirectory          0          0                     7.770s
        public.userdirectory_ldap          0          0                     7.744s
        public.userdirectory_saml          0          0                     7.785s
                  public.valuemap          0        944    62.8 kB          7.835s
---------------------------------  ---------  ---------  ---------  --------------
          COPY Threads Completion          0          4                    51.236s
                  Reset Sequences          0          1                     0.110s
                 Install Comments          0          0                     0.000s
---------------------------------  ---------  ---------  ---------  --------------
                Total import time          1    7071507   255.7 MB         51.346s</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Ve chvíli, kdy nám pgloader úspěšně doběhne, nastavení hashovacího algorytmu vrátíme zpět na&nbsp;bezpečnější hodnotu &#8218;SCRAM-SHA-256&#8216; a&nbsp;databázovému uživateli opět přegenerujeme heslo. Hvězdičky v&nbsp;následujícím příkazu nahraďte vámi zvoleným heslem:</p>


<section id="block-code-block_e3f746e9fabfb197acce96ecc8f40e2d" data-id="block-code-block_e3f746e9fabfb197acce96ecc8f40e2d" class="gt-block block-code">
    <pre><code>sudo -u postgres psql -c &quot;SET password_encryption=&#039;SCRAM-SHA-256&#039;;&quot;
sudo -u postgres psql -c &quot;ALTER ROLE zabbix WITH PASSWORD &#039;************&#039;;&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Následně vytvoříme schéma pro indexy:</p>


<section id="block-code-block_3300c71e304beb048ec293fbc9b8a5c1" data-id="block-code-block_3300c71e304beb048ec293fbc9b8a5c1" class="gt-block block-code">
    <pre><code>sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/create_index.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Následně pak schéma pro alter table:</p>


<section id="block-code-block_98e25e16eab6b853ab0ea560b403d732" data-id="block-code-block_98e25e16eab6b853ab0ea560b403d732" class="gt-block block-code">
    <pre><code>sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/alter_table.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A nakonec i&nbsp;schéma pro triggers:</p>


<section id="block-code-block_801cda81dfbf7e570c404fcccd9e6bf0" data-id="block-code-block_801cda81dfbf7e570c404fcccd9e6bf0" class="gt-block block-code">
    <pre><code>sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/triggers.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Po úspěšné migraci doporučujeme spustit VACUUM:</p>


<section id="block-code-block_e0b3ca4bea84c9810d165f73c0f6a036" data-id="block-code-block_e0b3ca4bea84c9810d165f73c0f6a036" class="gt-block block-code">
    <pre><code>sudo -u postgres vacuumdb --dbname=zabbix --analyze --username=postgres --jobs=$(grep -c processor /proc/cpuinfo)</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">Testování funkčnosti</h2>



<p>Nejprve odstraníme podporu MySQL pro Zabbix a&nbsp;MySQL frontend:</p>


<section id="block-code-block_e144e35afae32e53cc6894853f6554e9" data-id="block-code-block_e144e35afae32e53cc6894853f6554e9" class="gt-block block-code">
    <pre><code>yum remove zabbix-server-mysql zabbix-web-mysql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nainstalujeme závislosti potřebné pro běh Zabbix serveru s&nbsp;PostgreSQL včetně frontendu. </p>



<p><strong>Pozor:</strong> Reinstalací Zabbix serveru se ztratí konfigurace v&nbsp;souboru <code>zabbix_server.conf</code>! Doporučujeme zálohu!</p>


<section id="block-code-block_5d8c776344599c8d83f36ddd6b5452cb" data-id="block-code-block_5d8c776344599c8d83f36ddd6b5452cb" class="gt-block block-code">
    <pre><code>yum install zabbix-server-pgsql zabbix-web-pgsql zabbix-apache-conf</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Otevřeme konfigurační soubor Zabbix serveru:</p>


<section id="block-code-block_f7d94c58041ea8aff9d9edc00d42e7d0" data-id="block-code-block_f7d94c58041ea8aff9d9edc00d42e7d0" class="gt-block block-code">
    <pre><code>nano /etc/zabbix/zabbix_server.conf</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A zde upravíme direktivu pro přístup do&nbsp;databáze na&nbsp;nové přístupové údaje pro PostgreSQL. Hvězdičky nahraďte aktuálním heslem uživatele &#8218;zabbix&#8216;:</p>


<section id="block-code-block_8c3876880340d6d499db09e097bc8ab5" data-id="block-code-block_8c3876880340d6d499db09e097bc8ab5" class="gt-block block-code">
    <pre><code>DBPassword=*******</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Odebereme starý konfigurační soubor frontendu pro MySQL:</p>


<section id="block-code-block_a6de25a6ea904b2d03c2891b946234e6" data-id="block-code-block_a6de25a6ea904b2d03c2891b946234e6" class="gt-block block-code">
    <pre><code>rm /etc/zabbix/web/zabbix.conf.php</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Zrestartujeme Zabbix server a&nbsp;Apache web server:</p>


<section id="block-code-block_3034df29bf33fb9a5cf42918110f2127" data-id="block-code-block_3034df29bf33fb9a5cf42918110f2127" class="gt-block block-code">
    <pre><code>systemctl restart zabbix-server httpd</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Zkontrolujeme log Zabbixu, abychom se ujistili, že všechno naběhlo v&nbsp;pořádku a&nbsp;bez jakýchkoliv problémů.</p>


<section id="block-code-block_ba31e5325b9e2d4f2ad9fd930c192fc1" data-id="block-code-block_ba31e5325b9e2d4f2ad9fd930c192fc1" class="gt-block block-code">
    <pre><code>nano /var/log/zabbix/zabbix_server.log</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Pomocí prohlížeče se připojíme na&nbsp;URL Zabbix frontendu a&nbsp;znovu frontend nastavíme, tentokrát pro PostgreSQL.</p>



<p>Nejprve nás přivítá úvodní obrazovka s&nbsp;volbou jazyka:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1826" height="1158" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.39.png" alt="zabbix install - welcome page" class="wp-image-14306" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.39.png 1826w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.39-300x190.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.39-1024x649.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.39-768x487.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.39-1536x974.png 1536w" sizes="auto, (max-width: 1826px) 100vw, 1826px" /></figure>



<p>Následuje kontrola požadovaných verzí a&nbsp;nastavení, kde již můžeme vidět nainstalovanou podporu pro PostgreSQL:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1840" height="1164" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.55-1.png" alt="zabbix install - pre-requisites" class="wp-image-14310" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.55-1.png 1840w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.55-1-300x190.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.55-1-1024x648.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.55-1-768x486.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.24.55-1-1536x972.png 1536w" sizes="auto, (max-width: 1840px) 100vw, 1840px" /></figure>



<p>V dalším kroku nás čeká nastavení databáze, kde vyplníme přihlašovací údaje vytvořené v&nbsp;předchozích krocích:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1842" height="1188" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.21.png" alt="zabbix install - database config" class="wp-image-14289" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.21.png 1842w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.21-300x193.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.21-1024x660.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.21-768x495.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.21-1536x991.png 1536w" sizes="auto, (max-width: 1842px) 100vw, 1842px" /></figure>



<p>Vybereme název Zabbix serveru, časové pásmo a&nbsp;implicitní téma:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1838" height="1190" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.52.png" alt="zabbix install - settings" class="wp-image-14312" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.52.png 1838w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.52-300x194.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.52-1024x663.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.52-768x497.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.25.52-1536x994.png 1536w" sizes="auto, (max-width: 1838px) 100vw, 1838px" /></figure>



<p>Pak už zbývá jen zkontrolovat, že máme všechno nastavené správně a&nbsp;tyto volby potvrdit:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1818" height="1176" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.02.png" alt="zabbix install - review" class="wp-image-14314" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.02.png 1818w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.02-300x194.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.02-1024x662.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.02-768x497.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.02-1536x994.png 1536w" sizes="auto, (max-width: 1818px) 100vw, 1818px" /></figure>



<p>A nyní máme úspěšně napojený Zabbix frontend na&nbsp;PostgreSQL!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1864" height="1178" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.10.png" alt="zabbix install final step" class="wp-image-14316" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.10.png 1864w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.10-300x190.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.10-1024x647.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.10-768x485.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.26.10-1536x971.png 1536w" sizes="auto, (max-width: 1864px) 100vw, 1864px" /></figure>



<p>V tuto chvíli můžeme zastavit MySQL server:</p>


<section id="block-code-block_2d8d0990213eeef64a24a50860a498e8" data-id="block-code-block_2d8d0990213eeef64a24a50860a498e8" class="gt-block block-code">
    <pre><code>systemctl stop mysqld</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A MySQL lze nyní i&nbsp;zcela odinstalovat. Data (ve standardní cestě <code>/var/lib/mysql</code>) nebudou smazána, ale doporučujeme je např.&nbsp;po&nbsp;14 dnech funkčního provozu s&nbsp;PostgreSQL smazat.</p>


<section id="block-code-block_5fe1e08a08ac79aa47fce21d027b405b" data-id="block-code-block_5fe1e08a08ac79aa47fce21d027b405b" class="gt-block block-code">
    <pre><code>yum remove mysql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">TimescaleDB</h2>



<p>Potom, co jsme úspěšně zmigrovali z&nbsp;MySQL do&nbsp;PostgreSQL se nám zároveň nabízí možnost ještě více zvýšit výkonnost Zabbixu pomocí TimescaleDB.</p>



<p>Vzhledem k&nbsp;tomu, že už máme rozbalený soubor se zdrojovým kódem, který obsahuje i&nbsp;databázová instalační schámata, můžeme rovnou přistoupit instalaci.</p>



<p>Začneme tím, že přidáme oficiální repozitář:</p>


<section id="block-code-block_5a85d6c3a5356577c143cd4a5f53e83c" data-id="block-code-block_5a85d6c3a5356577c143cd4a5f53e83c" class="gt-block block-code">
    <pre><code>tee /etc/yum.repos.d/timescale_timescaledb.repo &lt;&lt;EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nainstalujme potřebné balíčky:</p>


<section id="block-code-block_d9a8985c05b40a7b1a85a12ef72ce65f" data-id="block-code-block_d9a8985c05b40a7b1a85a12ef72ce65f" class="gt-block block-code">
    <pre><code>yum install timescaledb-2-postgresql-18 timescaledb-2-loader-postgresql-18</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Spustíme utilitu <code>timescaledb-tune</code> a&nbsp;jako parametr jí předáme vyšší hodnotu maximálního množství připojení (<code>--max-conns</code>), které pro tyto testovací účely nastavíme na&nbsp;<code>125</code>.</p>



<p>Tato utilita slouží k&nbsp;přizpůsobení výchozího nastavení PostgreSQL směrem k&nbsp;výkonu a&nbsp;adekvátnímu nastavení parametrů PostgreSQL pro fungování s&nbsp;TimescaleDB.</p>



<p>Zároveň nám tato utilit pomocí instalačního průvodce pomůže vybrat aktuální a&nbsp;platný konfigurační soubor PostgreSQL a&nbsp;nastaví i&nbsp;automatické načítání knihoven TimescaleDB.</p>



<p>Prosím, odpovídejte &#8222;ano&#8220; (y) na&nbsp;všechny otázky. </p>


<section id="block-code-block_58f13a53501cd127a7448d7c3695ba35" data-id="block-code-block_58f13a53501cd127a7448d7c3695ba35" class="gt-block block-code">
    <pre><code>timescaledb-tune --pg-config /usr/pgsql-18/bin --max-conns=125</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="850" height="2244" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29.png" alt="timescaledb-tune" class="wp-image-14293" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29.png 850w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-114x300.png 114w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-388x1024.png 388w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-768x2028.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-582x1536.png 582w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.38.29-776x2048.png 776w" sizes="auto, (max-width: 850px) 100vw, 850px" /></figure>



<p>Následně vypneme Zabbix server a&nbsp;restartujeme systémovou službu PostgreSQL:</p>


<section id="block-code-block_dee6012a9533ee210d9e7336ac23aa6f" data-id="block-code-block_dee6012a9533ee210d9e7336ac23aa6f" class="gt-block block-code">
    <pre><code>systemctl stop zabbix-server
systemctl restart postgresql-18</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Aktivujeme TimescaleDB pro databázi Zabbixu:</p>


<section id="block-code-block_e4a29c04f2ffd32961cf4a27633707e2" data-id="block-code-block_e4a29c04f2ffd32961cf4a27633707e2" class="gt-block block-code">
    <pre><code>echo &quot;CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;&quot; | sudo -u postgres psql --dbname=zabbix</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A načíst data z&nbsp;rozbaleného souboru databázového schématu:</p>


<section id="block-code-block_483eeb773131a2e0cf06e6159c99ca5a" data-id="block-code-block_483eeb773131a2e0cf06e6159c99ca5a" class="gt-block block-code">
    <pre><code>sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/zabbix-7.0.0/database/postgresql/timescaledb/schema.sql</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2844" height="1510" src="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17.png" alt="timescaledb installation" class="wp-image-14291" srcset="https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17.png 2844w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-300x159.png 300w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-1024x544.png 1024w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-768x408.png 768w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-1536x816.png 1536w, https://www.initmax.cz/wp-content/uploads/2024/05/screenshot-2024-05-10-at-18.48.17-2048x1087.png 2048w" sizes="auto, (max-width: 2844px) 100vw, 2844px" /></figure>



<p>Nyní můžeme opětovně nastartovat službu Zabbix serveru.</p>


<section id="block-code-block_a33029cde17d7d9938f825c30f68ce82" data-id="block-code-block_a33029cde17d7d9938f825c30f68ce82" class="gt-block block-code">
    <pre><code>systemctl start zabbix-server</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>V případě, že uvidíte v&nbsp;log souboru zprávu o&nbsp;tom, že je verze TimescaleDB příliš nová, pak to není žádný velký problém. Zabbix nedokáže dostatečně rychle reagovat na&nbsp;nejnovější verze TimescaleDB tak, aby ji ve svém kódu nastavil jako podporovanou, ovšem kompatibilita je Zabbixem zaručena a&nbsp;námi ověřena.</p>



<p>Pokud se chceme vyhnout zprávám o&nbsp;nekompatibilitě v&nbsp;log souboru Zabbixu, pak stačí otevřít konfigurační soubor Zabbix serveru v&nbsp;cestě <code>/etc/zabbix/zabbix_server.conf</code> a&nbsp;zde upravte následující konfigurační parametr:</p>


<section id="block-code-block_d140bb8dba300a7a02093b36bc78880d" data-id="block-code-block_d140bb8dba300a7a02093b36bc78880d" class="gt-block block-code">
    <pre><code>AllowUnsupportedDBVersions=1</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Soubor s&nbsp;tímto nastavením uložte a&nbsp;znovu nastartujte systémovou službu Zabbix serveru.</p>


<section id="block-code-block_a33029cde17d7d9938f825c30f68ce82" data-id="block-code-block_a33029cde17d7d9938f825c30f68ce82" class="gt-block block-code">
    <pre><code>systemctl start zabbix-server</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A to je vše! Nyní jste se naučili, jak zmigrovat Zabbix databázi z&nbsp;MySQL do&nbsp;PostgreSQL, dále se vám podařilo zprovoznit výkonnou TimescaleDB a&nbsp;máte základní performance tuning. Následující kroky by měly smeřovat k&nbsp;zálohování a&nbsp;monitoringu DB.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<section id="block-newsletter-block_ddbd7e83dcd76be746e035c11ae238a5" data-id="block-newsletter-block_ddbd7e83dcd76be746e035c11ae238a5" class="gt-block block-newsletter">
    <section id="newsletter" class="newsletter">
	<div class="gradient basic">
		<div class="newsletter__inner width width--general">
			<div class="col left">
									<h2 class="newsletter__title">Buďte v&nbsp;obraze s&nbsp;naším newsletterem</h2>
													<div class="newsletter__content"><p>Díky initMAX newsletteru Vám neunikne žádná z&nbsp;pozvánek na&nbsp;akce a&nbsp;webináře, žádný z&nbsp;tipů, jak dostat ze svého IT MAXimum, ani ověřené informace o&nbsp;novinkách ze světa Zabbix a&nbsp;dalších technologií.</p>
</div>
							</div>
			<div class="col right form-wrapper">
				<div class="newsletter-form">
	<form method="post" action="/wiki/kapitola/postgresql/feed/" enctype="multipart/form-data">
		<input type="hidden" name="url" value="https://www.initmax.cz/wiki/kapitola/postgresql/feed/">

		<div class="inputs">

			<label for="newsletter-form_contact_email" class="top">Vaše e-mailová adresa:</label>
			<div class="df">

				<div class="input">
					<input type="text" id="newsletter-form_contact_email" name="newsletter_email" placeholder="@" data-format="email" data-required="1">
									</div><!-- /.input -->

				<a href="#" class="btn btn--white sendBtn">Odeslat</a>

			</div>

			<div class="bottom nm">
				<label for="newsletter-form_gdpr" class="checkbox gdpr">
					<input type="checkbox" id="newsletter-form_gdpr" name="newsletter_gdpr">
					<span>Souhlasím se&nbsp;<a href="https://www.initmax.cz/ochrana-osobnich-udaju/" target="_blank">zpracováním osobních údajů</a>.</span>
				</label>
			</div>

		</div><!-- /.inputs -->
		<div class="sent hidden">
			<div class="iconOk"><h3>Děkujeme, že jste se přihlásili k&nbsp;odběru našeho newsletteru.</h3>
</div>
			<button class="sent__close" title="Zavřít" onclick="closeFormMessage(this,event)"><svg data-name="Group 3602" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path data-name="Path 3272" d="M0,0H24V24H0Z" fill="none"/><line data-name="Line 98" y2="14" transform="translate(7.05 7.05) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 99" x2="14" transform="translate(7.05 16.95) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</button>
		</div><!-- /.sent -->
	</form>
</div>			</div>
		</div>
	</div>
</section></section>



<section id="social-links-block_2294b5c81a0b70e3af1dfb4b7a42e22e" data-id="social-links-block_2294b5c81a0b70e3af1dfb4b7a42e22e" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>

<p>The post <a href="https://www.initmax.cz/wiki/zabbix-migrace-z-mysql-do-postgresql/">Zabbix &#8211; Migrace z&nbsp;MySQL do&nbsp;PostgreSQL</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL &#8211; Řízení přístupu prostřednictvím externího autentizačního providera</title>
		<link>https://www.initmax.cz/wiki/rizeni-pristupu-do-postgresql-prostrednictvim-externiho-autentizacniho-providera/</link>
		
		<dc:creator><![CDATA[Tomáš Heřmánek]]></dc:creator>
		<pubDate>Tue, 08 Aug 2023 10:57:38 +0000</pubDate>
				<guid isPermaLink="false">https://www.initmax.cz/?post_type=wiki&#038;p=12807</guid>

					<description><![CDATA[<p>PostgreSQL nabízí několik různých metod ověřování klientů a tentokrát si ukážeme, jak nastavit ověřování pomocí metody GSSAPI, která se obvykle používá ...</p>
<p>The post <a href="https://www.initmax.cz/wiki/rizeni-pristupu-do-postgresql-prostrednictvim-externiho-autentizacniho-providera/">PostgreSQL &#8211; Řízení přístupu prostřednictvím externího autentizačního providera</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>PostgreSQL nabízí několik různých metod ověřování klientů a&nbsp;tentokrát si ukážeme, jak nastavit ověřování pomocí metody GSSAPI, která se obvykle používá pro přístup k&nbsp;Microsoft Active Directory nebo FreeIPA.</p>


<section id="block-webinar-block_8a842ba98368cccbcc7240133f1c8f95" data-id="block-webinar-block_8a842ba98368cccbcc7240133f1c8f95" class="gt-block block-webinar">
    <div class="connected-webinars__grid">
        <a href="https://www.initmax.cz/webinar/rizeni-pristupu-do-postgresql-prostrednictvim-externiho-autentizacniho-providera/" class="grid-item">
	<article class="webinar-promotion">
		<div class="webinar-promotion__thumbnail-wrap">
			<figure class="webinar-promotion__thumbnail">
					<img decoding="async" src="https://www.initmax.cz/wp-content/uploads/2023/01/ilustrace_postgresql_02_thumbnail_web.png"
				 width="400"
		 height="250"
		 class=""
		 alt="Řízení přístupu do&nbsp;PostgreSQL prostřednictvím externího autentizačního providera"
		 loading="lazy"	>
									<div class="webinar-promotion__tags">
						<span class="tag tag--small" style="color:#ffffff;background-color:#4caf50;">Nový</span><span class="tag tag--small" style="color:#ffffff;background-color:#336791;">PostgreSQL</span>					</div>
							</figure>
		</div>
		<div class="webinar-promotion__text">
			<div>
									<time datetime="2023-03-15">15.&nbsp;3.&nbsp;2023</time>
							</div>
			<h3 class="webinar-promotion__title">Řízení přístupu do&nbsp;PostgreSQL prostřednictvím externího autentizačního providera</h3>
			<div class="icon-link">
				<figure class="icon-wrap icon-wrap--primary"><svg data-name="Group 3411" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path data-name="Path 455" d="M0,0H24V24H0Z" fill="none"/><path data-name="Path 456" d="M15,10l4.553-2.276A1,1,0,0,1,21,8.618v6.764a1,1,0,0,1-1.447.894L15,14V10Z" transform="translate(0 0)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><rect data-name="Rectangle 1286" width="12" height="12" rx="2" transform="translate(3.112 6)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</figure>
				<span>Zhlédnout záznam</span>
			</div>
		</div>
	</article>
</a>    </div>
</section>


<section id="social-links-block_80d736dcb037ccdfe325170cbd99b00c" data-id="social-links-block_80d736dcb037ccdfe325170cbd99b00c" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>




<h2 class="wp-block-heading">Základní požadavky</h2>



<p>Zde je výčet základních požadavků pro funkční nastavení ověřování uživatelů z&nbsp;Active Directory v&nbsp;PostgreSQL pomocí Kerberos (GSS):</p>



<ol class="wp-block-list">
<li>nainstalovaný server PostgreSQL</li>



<li>nainstalovou podporu a&nbsp;nastavení pro Kerberos na&nbsp;DB serveru</li>



<li>uživatelský účet v&nbsp;Active Directory pro PostgreSQL</li>



<li>vytvořený Kerberos keytab pro uživatele v&nbsp;Active Directory</li>



<li>nastavený PostgreSQL pro Kerberos a&nbsp;GSSAPI</li>



<li>uživatelský účet v&nbsp;PostgreSQL totožný s&nbsp;účtem v&nbsp;Active Directory (nebo ldap2pg)</li>



<li>ověřovací Kerberos ticket pro DB uživatele v&nbsp;Active Directory</li>
</ol>



<h2 class="wp-block-heading">Instalace a&nbsp;konfigurace Kerberos</h2>



<p>Nejprve na&nbsp;databázovém serveru nainstalujeme základní balíčky, které obsahují knihovny, a&nbsp;binární i&nbsp;konfigurační soubory pro podporu Kerberos.</p>


<section id="block-code-block_733157bfeb040998adca461711ed55ed" data-id="block-code-block_733157bfeb040998adca461711ed55ed" class="gt-block block-code">
    <pre><code>dnf install krb5-server krb5-workstation</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>V případě, že chceme používat k&nbsp;autentizaci Kerberos i&nbsp;na&nbsp;samotném klientu (potažmo serveru), je potřeba mít zde i&nbsp;správně nastavený Kerberos. </p>



<p>Ovšem PostgreSQL samotný toto nastavení pro funkční ověřování uživatelů nepotřebuje. </p>



<p>Kerberos se na&nbsp;úrovni OS nastavuje v&nbsp;konfiguračním souboru <code>/etc/krb5.conf</code> a&nbsp;tento soubor může upravovat pouze privilegovaný uživatel <code>root</code>. </p>



<p>Vzorová konfigurace může kupříkladu vypadat následovně:</p>


<section id="block-code-block_adc4cdbafa0593e680442054c177953d" data-id="block-code-block_adc4cdbafa0593e680442054c177953d" class="gt-block block-code">
    <pre><code>[logging]
default = /var/log/krb5libs.log
kdc = /var/log/krb5kdc.log
admin_server = /var/log/kadmind.log

[libdefaults]
default_realm = DEMO.INITMAX.CZ
dns_lookup_realm = false
# ticket_lifetime = 24h
# renew_lifetime = 7d
forwardable = true
udp_preference_limit = 1
default_ccache_name = KEYRING:persistent:%{uid}

[realms]
DEMO.INITMAX.CZ = {
kdc = demo.initmax.cz
admin_server = demo.initmax.cz
}

[domain_realm]
.demo.initmax.cz = DEMO.INITMAX.CZ
demo.initmax.cz = DEMO.INITMAX.CZ</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">Uživatelský účet v&nbsp;Active Directory</h2>



<p>Na úrovni Active Directory běžným způsobem vytvoříme servisní účet, který v&nbsp;našem případě nazveme <code>pg_db_srv01</code>.</p>



<p>A následně vytvoříme níže zobrazeným příkazem tzv.&nbsp;Kerberos keytab, který k&nbsp;tomuto servisnímu účtu přiřadíme.</p>


<section id="block-code-block_210bb34cbd23db2f9976908afaa5b725" data-id="block-code-block_210bb34cbd23db2f9976908afaa5b725" class="gt-block block-code">
    <pre><code>ktpass –princ POSTGRES/pgsql.demo.initmax.cz@DEMO.INITMAX.CZ -pass %heslo% -mapuser pg_db_srv01 -crypto ALL -ptype KRB5_NT_Principal -out pgsql.demo.initmax.cz.keytab</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Takto vzniklý Kerberos keytab si zkopírujeme a&nbsp;přesuneme ho na&nbsp;klienta, v&nbsp;našem případě tedy na&nbsp;databázový server, například do&nbsp;složky <code>/etc</code>.</p>



<p>Přímo na&nbsp;databázovém serveru si pak můžeme ověřit, že vytvořený keytab skutečně funguje, a&nbsp;to následujícím příkazem:</p>


<section id="block-code-block_947b899a201499620d714d941753940e" data-id="block-code-block_947b899a201499620d714d941753940e" class="gt-block block-code">
    <pre><code>kinit -k -t /etc/pgsql.demo.initmax.cz.keytab POSTGRES/pgsql.demo.initmax.cz@DEMO.INITMAX.CZ -V</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Pokud nám příkaz <code>kinit</code> na&nbsp;konci svého běhu ve výstupu zobrazí hlášku <code>Authenticated to Kerberos</code>, pak je keytab funkční a&nbsp;my můžeme překročit ke konfiguraci samotného PostgreSQL.</p>



<p>Vzorový výstup výše zmíněného příkazu <code>kinit</code> s&nbsp;funkčním souborem keytab můžete vidět zde:</p>


<section id="block-code-block_07e9f81db4a30cfcb056123d2eb84fbd" data-id="block-code-block_07e9f81db4a30cfcb056123d2eb84fbd" class="gt-block block-code">
    <pre><code>Using existing cache: 0
Using principal: POSTGRES/pgsql.demo.initmax.cz@DEMO.INITMAX.CZ
Using keytab: /etc/pgsql.demo.initmax.cz.keytab
Authenticated to Kerberos v5</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<h2 class="wp-block-heading">Konfigurace PostgreSQL</h2>



<p>Nejprve upravíme konfigurační soubor PostgreSQL (<code>postgresql.conf</code>) tak, aby věděl, kde mu leží náš Kerberos keytab a&nbsp;tudíž ho korektně načetl a&nbsp;použil.</p>



<p>K tomu slouží následující konfigurační direktiva <code>krb_server_keyfile</code>, jejíž hodnotu naplníme absolutní cestou ke Kerberos keytabu. </p>



<p>V našem případě tedy <code>/etc/pgsql.demo.initmax.cz.keytab</code>.</p>


<section id="block-code-block_c04a6eb2dd22889ba59dc2e106149617" data-id="block-code-block_c04a6eb2dd22889ba59dc2e106149617" class="gt-block block-code">
    <pre><code>krb_server_keyfile=/etc/pgsql.demo.initmax.cz.keytab</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Následně v&nbsp;konfiguračním souboru nastavujícím přístupy, tedy <code>pg_hba.conf</code> povolíme lokální i&nbsp;vzdálené ověřování pomocí metody GSSAPI se správně nastaveným Kerberos realm.</p>


<section id="block-code-block_6b0a6c172c4655b4ec19939f51f167b2" data-id="block-code-block_6b0a6c172c4655b4ec19939f51f167b2" class="gt-block block-code">
    <pre><code># IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 0.0.0.0/0 gss include_realm=0 krb_realm=DEMO.INITMAX.CZ</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Poté se připojíme k&nbsp;serveru pomocí <code>psql</code> a&nbsp;vytvoříme uživatele na&nbsp;úrovní samotného PostgreSQL a&nbsp;nastavíme mu požadováná oprávnění.</p>



<p><strong>Pozor!</strong> Tento uživatel musí odpovídat skutečnému uživatli v&nbsp;Active Directory!</p>


<section id="block-code-block_353b9569da0a34cfa39275e61319e58b" data-id="block-code-block_353b9569da0a34cfa39275e61319e58b" class="gt-block block-code">
    <pre><code>create user &quot;ad_user&quot; superuser;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Jako další krok můžeme konzoli psql opustit a&nbsp;příkazem <code>kinit</code> získáme (po&nbsp;zadání správného hesla) ověřovací ticket pro našeho uživatele z&nbsp;Active Directory serveru:</p>


<section id="block-code-block_b4f2e72007b584f1d6f43ece8177bd64" data-id="block-code-block_b4f2e72007b584f1d6f43ece8177bd64" class="gt-block block-code">
    <pre><code>kinit ad_user</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>A v&nbsp;tuto chvíli se již pod tímto uživatelem můžeme přihlásit přímo do&nbsp;PostgreSQL bez nutnosti zadání hesla, jelikož se pro ověření použije ticket, získaný výše.</p>


<section id="block-code-block_156ec1a92e4a0458dc332f9d712bb879" data-id="block-code-block_156ec1a92e4a0458dc332f9d712bb879" class="gt-block block-code">
    <pre><code>psql -U &quot;ad_user&quot; -h csas-pgsql.win.initmax.cz postgres</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Nespornou nevýhodou tohoto nativního řešení pak (v&nbsp;závislosti na&nbsp;velikosti prostředí) zůstává nutnost uživatele ručně vytvářet na&nbsp;úrovni PostgreSQL.</p>



<p>Tyto činnosti je však možné zautomatizovat, a&nbsp;to pomocí <code>ldap2pg</code>, na&nbsp;což se podíváme v&nbsp;následující kapitole.</p>



<h2 class="wp-block-heading">ldap2pg</h2>



<p>Toto je nástroj, který na&nbsp;základě předem nastavených parametrů automatizuje vytváření, aktualizaci i&nbsp;odebírání rolí na&nbsp;PostgreSQL podle nastavení v&nbsp;LDAP.</p>



<p>ldap2pg je skript napsaný v&nbsp;jazyku Python, a&nbsp;pro svůj běh vyžaduje kromě Pythonu samotného (v2.6+ nebo v3.4+) i&nbsp;další závislé balíčky.</p>



<p>Konkrétně to jsou <code>Pyyaml</code>, <code>python-ldap</code> a&nbsp;<code>python-psycopg2</code>. </p>



<h3 class="wp-block-heading">Instalace</h3>



<p>Doporučovaná metoda instalace je v&nbsp;případě RHEL přímo z&nbsp;oficiálního repozitáře PostgreSQL (PGDG) a&nbsp;v&nbsp;případě Debian pak pomocí <code>pip</code>.</p>



<p>Pokud chceme balíčky co nejaktuálnější, pak využijeme přímo repozitář Dalibo labs.</p>



<p>V našem případě používáme Rocky Linux 9 a&nbsp;tudíž si oficiální repozitář Dalibo labs přidáme následujícím příkazem a&nbsp;následně obnovíme <code>dnf</code> cache.</p>


<section id="block-code-block_d95d9e59d3c9d9cb864d32e3838ae302" data-id="block-code-block_d95d9e59d3c9d9cb864d32e3838ae302" class="gt-block block-code">
    <pre><code>dnf install -y https://yum.dalibo.org/labs/dalibo-labs-4-1.noarch.rpm
dnf makecache fast</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Další možností je vytvoření repozitáře ručně. To uděláme tak, že vytvoříme nový soubor /etc/yum.repos.d/dalibolabs.repo a&nbsp;ten naplníme následujícím obsahem:</p>


<section id="block-code-block_618bf32e2438292f542090c3e806b511" data-id="block-code-block_618bf32e2438292f542090c3e806b511" class="gt-block block-code">
    <pre><code>[dalibolabs]
name = Dalibo Labs - RHEL/CentOS/Rockylinux $releasever - $basearch
baseurl = https://yum.dalibo.org/labs/RHEL$releasever-$basearch
gpgcheck = 1
enabled = 1</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Soubor uložíme a&nbsp;zaktualizujeme <code>dnf</code> cache:</p>


<section id="block-code-block_a5863358f2693448db60a983d8e9d7b6" data-id="block-code-block_a5863358f2693448db60a983d8e9d7b6" class="gt-block block-code">
    <pre><code>dnf makecache fast</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Potom, co máme přidaný repozitář, můžeme přejít k&nbsp;samotné instalaci ldap2pg a&nbsp;všech jeho závislostí:</p>


<section id="block-code-block_eb935a1ccba52d7bdf98da9216cd2ee9" data-id="block-code-block_eb935a1ccba52d7bdf98da9216cd2ee9" class="gt-block block-code">
    <pre><code>dnf install ldap2pg</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Jakmile máme ldap2pg úspěšně nainstalován, tak můžeme překročit k&nbsp;jeho konfiguraci.</p>



<h3 class="wp-block-heading">Nastavení</h3>



<p>ldap2pg standardně vyhledává svůj konfigurační soubor v&nbsp;těchto cestách: </p>



<ul class="wp-block-list">
<li><strong>ldap2pg.yml</strong> v&nbsp;aktuálním pracovním adresáři</li>



<li><strong>~/.config/ldap2pg.yml</strong></li>



<li><strong>/etc/ldap2pg.yml</strong></li>
</ul>



<p>Lze však nastavit i&nbsp;cestu vlastní a&nbsp;to spuštění ldap2pg s&nbsp;parametrem <code>--config</code>, toto lze využít například pro spuštění několika instancí <code>ldap2pg</code> s&nbsp;různými konfiguračními soubory.</p>



<p>Zde můžete pro ukázku vidět příklad takové konfigurace:</p>


<section id="block-code-block_b707fc1555abe24444ae8dee9c335431" data-id="block-code-block_b707fc1555abe24444ae8dee9c335431" class="gt-block block-code">
    <pre><code>postgres:
  dsn: postgres://alfa@csas-pgsql.win.initmax.cz:5432/postgres
  roles_blacklist_query:
  - postgres
  - &quot;pg_*&quot;
  - &quot;rds_*&quot;

ldap:
  uri: ldap://dc1.win.initmax.cz
  binddn: CN=Test User Alfa,OU=Users,OU=testAcounts,DC=win,DC=initmax,DC=cz
  password: &quot;%heslo%&quot;

sync_map:
- role:
  name: alfa
  options: LOGIN SUPERUSER
  names:
  - ad_roles
  comment: &quot;LDAP role managed by ldap2pg.&quot;

- ldapsearch:
    base: CN=pg_DBA_users,OU=Groups,OU=testAcounts,DC=win,DC=initmax,DC=cz
  role:
    name: &#039;dba_{member.samaccountname}&#039;
    options: LOGIN SUPERUSER
    parent: ad_roles
    comment: &quot;Synced from AD: {dn}&quot;

- ldapsearch:
    base: CN=pg_RO_users,OU=Groups,OU=testAcounts,DC=win,DC=initmax,DC=cz
  role:
    name: &#039;{member.samaccountname}&#039;
    options: LOGIN
    parent: ad_roles
    comment: &quot;Synced from AD: {dn}&quot;</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>Tento ukázkový konfigurační soubor obsahuje několik částí. </p>



<p>V části <code>postgres:</code> definujeme připojení k&nbsp;databázovému serveru a&nbsp;k&nbsp;databázi, včetně přihlašovacích údajů. Z&nbsp;bezpečnostních důvodů doporučujeme přihlašovací heslo v&nbsp;konfiguračním souboru nepoužívat, ale namísto toho uživatele ověřovat přes Kerberos ticket, jak je ukázáno právě v&nbsp;tomto návodu. Součástí této sekce je i&nbsp;direktiva <code>roles_blacklist_query:</code> nám určuje seznam lokálních rolí v&nbsp;PostgreSQL, které bude ldap2pg ignorovat. Povšimněte si možnosti využití zástupných znaků. </p>



<p>V části <code>ldap:</code> definujeme připojení k&nbsp;Active Directory, nebo jinému LDAP serveru. Tato sekce je v&nbsp;tomto konfiguračním souboru volitelná a&nbsp;informace o&nbsp;nastavení LDAP si nástroj <code>ldap2pg</code> umí načíst i&nbsp;z&nbsp;jakéhokoliv standardního umístění těchto systémových konfiguračních souborů (např.&nbsp;<code>/etc/ldap.conf</code>), kde je záhodno mít případně uloženo i&nbsp;heslo pro bind uživatel v&nbsp;LDAP.</p>



<p>Poslední sekci <code>sync_map:</code> pak používáme k&nbsp;mapování uživatelů a&nbsp;rolí. Na&nbsp;jejím začátku definujeme příklad lokální, statické role pro admin uživatele &#8222;alfa&#8220; s&nbsp;právém přihlásit se a&nbsp;rolí <code>SUPER USER</code>. Zároveň v&nbsp;této sekci vytváříme uživatelskou roli <code>ad_roles</code>, do&nbsp;které následně přiřazujeme další, automaticky vytvořené uživatele pomocí ldap2pg (a&nbsp;této roli je vytvořen i&nbsp;takto formulovaný komentář). V&nbsp;podsekcích <code>ldapsearch:</code> pak definujeme jednotlivá <code>BaseDN</code>, tedy cesty ve struktuře LDAP, kde má <code>ldap2pg</code> uživatele hledat. Vzorově zde vytváříme databázové administrátory (ze skupiny <code>pg_DBA_users</code>) a&nbsp;uživatele pro čtení (ze skupiny <code>pg_RO_users</code>) s&nbsp;jejich příslušnými oprávěními a&nbsp;komentáři. Jako nadřazenou roli mají <code>ad_roles</code>, kterou jsme si definovali v&nbsp;předchozí podsekci.</p>



<h3 class="wp-block-heading">Testování a&nbsp;spuštění</h3>



<p>Nespornou výhodou nástoje <code>ldap2pg</code> je rovněž možnost si vytvořené nastavení nanečisto otestovat (tzv.&nbsp;dry run), a&nbsp;to pomocí spouštěcího parametru <code>--dry</code>, jehož výstup s&nbsp;naší vzorovou konfigurací můžete vidět zde:</p>


<section id="block-code-block_9c9fe1c972e733f2923451401e4f6f53" data-id="block-code-block_9c9fe1c972e733f2923451401e4f6f53" class="gt-block block-code">
    <pre><code>Starting ldap2pg 5.8.
Using /root/ldap2pg.yml.
Connecting to LDAP server ldap://dc1.win.initmax.cz.
Trying simple bind.
Running in dry mode. Postgres will be untouched.
Inspecting roles in Postgres cluster...
Querying LDAP CN=pg_DBA_users,OU=Group... (objectClass...
Missing &#039;member&#039; from CN=pg_DBA_users,OU=Groups,OU=testAcounts,DC=win,DC=initmax,DC=cz.
Considering it as an empty list.
Querying LDAP CN=pg_RO_users,OU=Groups... (objectClass...
Missing &#039;member&#039; from CN=pg_RO_users,OU=Groups,OU=testAcounts,DC=win,DC=initmax,DC=cz. Considering
it as an empty list.
Nothing to do.
Comparison complete.</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>V případě, že test proběhl úspěšně, pak <code>ldap2pg</code> spustíme s&nbsp;parametrem <code>--real</code>, který už námi otestovanou konfiguraci přímo projeví konkrétními změnami v&nbsp;PostgreSQL.</p>



<p>Pro tento příkaz pak stačí už jen vytvořit pravidelně spouštěnou úlohu, například pomocí <code>cron</code>.</p>


<section id="block-code-block_cc05f91a18e419c12c3976dbe675697d" data-id="block-code-block_cc05f91a18e419c12c3976dbe675697d" class="gt-block block-code">
    <pre><code>ldap2pg --real</code></pre>
    <a onclick="copyCode(this)" class="block-code__copy" title="Kopírovat"><svg data-name="Group 3002" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect data-name="Rectangle 2035" width="12" height="12" rx="2" transform="translate(8 8)" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 607" d="M16,8V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v8a2,2,0,0,0,2,2H8" fill="none" stroke="#1f65f4" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</a>
</section>




<p>V tuto chvíli tak máme funkční ověřování uživatelů do&nbsp;PostgreSQL pomocí Kerberos, včetně automatizace jejich správy z&nbsp;údajů v&nbsp;Active Directory, a&nbsp;to pomocí nástroje ldap2pg.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<section id="block-newsletter-block_3ef25ff884be261f88dafeaab0c10c88" data-id="block-newsletter-block_3ef25ff884be261f88dafeaab0c10c88" class="gt-block block-newsletter">
    <section id="newsletter" class="newsletter">
	<div class="gradient basic">
		<div class="newsletter__inner width width--general">
			<div class="col left">
									<h2 class="newsletter__title">Buďte v&nbsp;obraze s&nbsp;naším newsletterem</h2>
													<div class="newsletter__content"><p>Díky initMAX newsletteru Vám neunikne žádná z&nbsp;pozvánek na&nbsp;akce a&nbsp;webináře, žádný z&nbsp;tipů, jak dostat ze svého IT MAXimum, ani ověřené informace o&nbsp;novinkách ze světa Zabbix a&nbsp;dalších technologií.</p>
</div>
							</div>
			<div class="col right form-wrapper">
				<div class="newsletter-form">
	<form method="post" action="/wiki/kapitola/postgresql/feed/" enctype="multipart/form-data">
		<input type="hidden" name="url" value="https://www.initmax.cz/wiki/kapitola/postgresql/feed/">

		<div class="inputs">

			<label for="newsletter-form_contact_email" class="top">Vaše e-mailová adresa:</label>
			<div class="df">

				<div class="input">
					<input type="text" id="newsletter-form_contact_email" name="newsletter_email" placeholder="@" data-format="email" data-required="1">
									</div><!-- /.input -->

				<a href="#" class="btn btn--white sendBtn">Odeslat</a>

			</div>

			<div class="bottom nm">
				<label for="newsletter-form_gdpr" class="checkbox gdpr">
					<input type="checkbox" id="newsletter-form_gdpr" name="newsletter_gdpr">
					<span>Souhlasím se&nbsp;<a href="https://www.initmax.cz/ochrana-osobnich-udaju/" target="_blank">zpracováním osobních údajů</a>.</span>
				</label>
			</div>

		</div><!-- /.inputs -->
		<div class="sent hidden">
			<div class="iconOk"><h3>Děkujeme, že jste se přihlásili k&nbsp;odběru našeho newsletteru.</h3>
</div>
			<button class="sent__close" title="Zavřít" onclick="closeFormMessage(this,event)"><svg data-name="Group 3602" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path data-name="Path 3272" d="M0,0H24V24H0Z" fill="none"/><line data-name="Line 98" y2="14" transform="translate(7.05 7.05) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 99" x2="14" transform="translate(7.05 16.95) rotate(-45)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
</button>
		</div><!-- /.sent -->
	</form>
</div>			</div>
		</div>
	</div>
</section></section>



<section id="social-links-block_80d736dcb037ccdfe325170cbd99b00c" data-id="social-links-block_80d736dcb037ccdfe325170cbd99b00c" class="gt-block social-links">
			<div class="social-links__content"><p><strong>Dejte nám Like, sdílejte nás nebo nás sledujte 😍</strong><br />
Ať vám nic neunikne:</p>
</div>
		<div class="socials df df--fw-w df--ai-c df--jc-c">
					<a href="https://twitter.com/initmax" title="Odkaz na Twitter" class="social-link social-link--colored twitter-x" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 4l11.733 16h4.267l-11.733 -16z" /><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" /></svg>


</a>
							<a href="https://www.linkedin.com/company/initmax/" title="Odkaz na Linkedin" class="social-link social-link--colored linkedin" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3318" transform="translate(-4214 7797)"><g data-name="Group 2185" transform="translate(4214 -7797)"><path data-name="Path 524" d="M0,0H24V24H0Z" fill="none"/><rect data-name="Rectangle 1825" width="16" height="16" rx="2" transform="translate(4 4)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 64" y2="5" transform="translate(8 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 65" y2="0.01" transform="translate(8 8)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 66" y1="5" transform="translate(12 11)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><path data-name="Path 525" d="M16,16V13a2,2,0,0,0-4,0" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
									<a href="https://www.youtube.com/@initmax1" title="Odkaz na Youtube" class="social-link social-link--colored youtube" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-youtube" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M3 5m0 4a4 4 0 0 1 4 -4h10a4 4 0 0 1 4 4v6a4 4 0 0 1 -4 4h-10a4 4 0 0 1 -4 -4z" /><path d="M10 9l5 3l-5 3z" /></svg>


</a>
										<a href="https://github.com/initmax" title="Odkaz na GitHub" class="social-link social-link--colored github" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /></svg>


</a>
								<a href="https://www.facebook.com/initmax" title="Odkaz na Facebook" class="social-link social-link--colored facebook" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3193" transform="translate(-4286 7797)"><g data-name="Group 3189"><path data-name="Path 515" d="M0,0H24V24H0Z" transform="translate(4286 -7797)" fill="none"/><path data-name="Path 516" d="M7,10v4h3v7h4V14h3l1-4H14V8a1,1,0,0,1,1-1h3V3H15a5,5,0,0,0-5,5v2H7" transform="translate(4286 -7797)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
							<a href="https://www.instagram.com/initmax/" title="Odkaz na Instagram" class="social-link social-link--colored instagram" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g data-name="Group 3194" transform="translate(-4358 7797)"><g data-name="Group 3190"><path data-name="Path 517" d="M0,0H24V24H0Z" transform="translate(4358 -7797)" fill="none"/><rect data-name="Rectangle 1783" width="16" height="16" rx="4" transform="translate(4362 -7793)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle data-name="Ellipse 51" cx="3" cy="3" r="3" transform="translate(4367 -7788)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line data-name="Line 63" y2="0.001" transform="translate(4374.5 -7789.5)" fill="none" stroke="var(--icon-color,#1F65F4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></g></svg>
</a>
			</div>
</section>

<p>The post <a href="https://www.initmax.cz/wiki/rizeni-pristupu-do-postgresql-prostrednictvim-externiho-autentizacniho-providera/">PostgreSQL &#8211; Řízení přístupu prostřednictvím externího autentizačního providera</a> appeared first on <a href="https://www.initmax.cz">initMAX s.r.o.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
