<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD</id>
	<title>Témata diplomových prací - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;action=history"/>
	<updated>2026-05-13T18:28:03Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=1317&amp;oldid=prev</id>
		<title>PavelStehule: /* Implementace kolekcí v PL/pgSQL */</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=1317&amp;oldid=prev"/>
		<updated>2025-05-14T04:27:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Implementace kolekcí v PL/pgSQL&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;cs&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Starší verze&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Verze z 14. 5. 2025, 04:27&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l107&quot;&gt;Řádek 107:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádek 107:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ANSI SQL:2003 standard&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ANSI SQL:2003 standard&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Optimalizace práce s typem jsonb v PL/pgSQL ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;Vedoucí práce:&#039;&#039;&#039; Pavel Stěhule&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Cílem práce je podpora mutable update položky hodnoty typu jsonb. PL/pgSQL poskytuje API pro &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rychlejší provedení změny části hodnoty neatomických typů. Aktuálně jsou podporovány pole&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a kompozitní hodnoty. Autor by měl implementovat podporu pro typ jsonb.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Literatura:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://www.postgresql.org/message-id/CACxu=vJaKFNsYxooSnW1wEgsAO5u_v1XYBacfVJ14wgJV_PYeg@mail.gmail.com&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Implementace referencování a dereferencování v PostgreSQL ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Implementace referencování a dereferencování v PostgreSQL ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pgwiki2-mediawiki-:diff:1.41:old-1211:rev-1317:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PavelStehule</name></author>
	</entry>
	<entry>
		<id>http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=1211&amp;oldid=prev</id>
		<title>PavelStehule: /* Implementace příkazu MERGE v systému PostgreSQL */</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=1211&amp;oldid=prev"/>
		<updated>2025-02-05T06:05:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Implementace příkazu MERGE v systému PostgreSQL&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;cs&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Starší verze&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Verze z 5. 2. 2025, 06:05&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l107&quot;&gt;Řádek 107:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádek 107:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ANSI SQL:2003 standard&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ANSI SQL:2003 standard&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Implementace příkazu MERGE v systému PostgreSQL ==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;Vedoucí práce:&#039;&#039;&#039; Pavel Stěhule&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tento příkaz zajišťuje změnu specifikovaných dat. Pokud tato data neexistují, tak jsou do tabulky&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přidána. Příklad: inkrement materializované tabulky&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        CREATE OR REPLACE FUNCTION inc(_key integer)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        RETURNS void AS $$&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        DECLARE _v integer;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        BEGIN&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;           LOCK mattab;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;           UPDATE mattab SET v = v + 1 WHERE key = _key;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;           IF NOT FOUND THEN&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;             INSERT INTO mattab VALUES(_key, 1);&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;           END IF;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        END;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ukázková implementace je robustní nicméně vzhledem k zamknutí tabulky není &#039;příliš efektivní.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Podstatně efektivnější implementace se dosáhne implementací na úrovni indexů - souvislost s&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mechanismem jištění unikátnosti hodnot v unikátních indexech je zřejmá (podmínkou implementace je&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;unikátní index v tabulce).&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     MERGE INTO table_name USING table_name ON (condition)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     WHEN NOT MATCHED THEN INSERT column1 [, column2 ...]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                                             VALUES (value1 [, value2 ...])&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Literatura:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# ANSI SQL:2008 standard&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Implementace referencování a dereferencování v PostgreSQL ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Implementace referencování a dereferencování v PostgreSQL ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pgwiki2-mediawiki-:diff:1.41:old-1183:rev-1211:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PavelStehule</name></author>
	</entry>
	<entry>
		<id>http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=1183&amp;oldid=prev</id>
		<title>PavelStehule: /* Návrh a implementace wite once případně append only engine */</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=1183&amp;oldid=prev"/>
		<updated>2024-10-17T05:13:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Návrh a implementace wite once případně append only engine&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;cs&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Starší verze&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Verze z 17. 10. 2024, 05:13&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l283&quot;&gt;Řádek 283:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádek 283:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*http://www.antlr.org/grammar/1101743472259/mdparser.g&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*http://www.antlr.org/grammar/1101743472259/mdparser.g&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Návrh a implementace &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;wite &lt;/del&gt;once případně append only engine ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Návrh a implementace &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;write &lt;/ins&gt;once případně append only engine ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pgwiki2-mediawiki-:diff:1.41:old-431:rev-1183:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PavelStehule</name></author>
	</entry>
	<entry>
		<id>http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=431&amp;oldid=prev</id>
		<title>imported&gt;Pavel v 31. 3. 2021, 16:55</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=T%C3%A9mata_diplomov%C3%BDch_prac%C3%AD&amp;diff=431&amp;oldid=prev"/>
		<updated>2021-03-31T16:55:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Řada open source projektů má vazby na prostředí univerzit a vysokých škol. PostgreSQL není výjimkou. Tento projekt vznikl v univerzitním prostředí - pod vedením profesora Computer Science Michaela Stonebrakera vznikl nový databázový systém, který sloužil jako platforma pro experimentální rozšíření klasického konceptu relačních databází o objektové principy. V rámci disertační prace Andrewa Yu a Jolly Chena byl Postgres rozšířen o jazyk SQL a vznikl tak systém PostgreSQL. Kód PostgreSQL se stále s oblibou používá v pro výuku návrhu a realizace relačních databázových systémů, případně pro ověřování některých moderních konceptů zpracování dat (např. proudové databáze). Na PostgreSQL je stále co vylepšovat, a to je zároveň příležitost pro studenty, jak spojit příjemné s užitečným - napsat kus sw, který se bude dále široce používat a zároveň pracovat na svých diplomové, bakalářských nebo disertačních pracích. Studenti studující informatiku si mohou vybírat z následujícího seznamu témat:&lt;br /&gt;
&lt;br /&gt;
== Implementace blokového zpracování dotazů v databázovém systému PostgreSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Exekuční plán v databázovém systému PostgreSQL je v současnosti vykonáván iteracemi po řádcích,&lt;br /&gt;
t.j. pro každý záznam, který má být součástí výsledku dotazu je vykonán celý exekuční plán. Cílem&lt;br /&gt;
práce je implementace procedur pro vykonávání dotazu tak, aby se dotaz vykonával iteracemi po&lt;br /&gt;
blocích a porovnání vlastností a efektivnosti nové implementace se stávající.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002&lt;br /&gt;
&lt;br /&gt;
== Procedurální rozšíření jazyka SQL v systému PostgreSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce&amp;#039;&amp;#039;&amp;#039;: Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Cílem práce je rozšířit funkčnost SQL o procedurální konstrukce a funkce definované v SQL/PSM:&lt;br /&gt;
proměnné, cykly, větvení, a to tak, aby tyto konstrukce bylo možné používat i mimo kontext SQL&lt;br /&gt;
procedur a funkcí. Volně tyto konstrukce můžeme např. používat v T-SQL. V tomto pojetí je význam&lt;br /&gt;
procedur pouze v tom, že umožňují parametrizaci (proti např. PL/SQL, kde procedurální konstrukce&lt;br /&gt;
jsou dostupné pouze v proceduře nebo funkci).&lt;br /&gt;
&lt;br /&gt;
        DECLARE a integer;&lt;br /&gt;
        SELECT INTO a x1&lt;br /&gt;
            FROM Foo;&lt;br /&gt;
nebo&lt;br /&gt;
        FOR SELECT sequence_name FROM information_schema&lt;br /&gt;
        DO&lt;br /&gt;
                DECLARE min integer;&lt;br /&gt;
                EXECUTE &amp;#039;SELECT min_value FROM &amp;#039; || sequence_name &amp;#039; INTO min&amp;#039;;&lt;br /&gt;
                EXECUTE &amp;#039;ALTER SEQUENCE &amp;#039; || sequence_name&lt;br /&gt;
                       || &amp;#039; RESTART WITH &amp;#039; || min;&lt;br /&gt;
        END FOR;&lt;br /&gt;
&lt;br /&gt;
* podpora session proměnných:&lt;br /&gt;
* rozšíření příkazů DECLARE a SET&lt;br /&gt;
* možnost používat proměnné v SQL příkazech&lt;br /&gt;
* podpora řídících konstrukcí: cykly, větvení&lt;br /&gt;
* podpora příkazů IF, CASE&lt;br /&gt;
* podpora cyklů LOOP, WHILE, REPEAT&lt;br /&gt;
* podpora cyklu FOR&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# Jim Melton: Understanding SQL Stored Procedures: A Complete Guide to SQL/PSM, Morgan Kaufmann 1998&lt;br /&gt;
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002&lt;br /&gt;
# ANSI SQL:2003 standard&lt;br /&gt;
&lt;br /&gt;
== Podpora SQL/PSM modulů v systému PostgreSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Cílem práce je implementace modulů dle SQL/PSM v PostgreSQL. Moduly (jak je patrno z názvu)&lt;br /&gt;
slouží k modularizaci kódu uložených procedur. Moduly umožňují zapouzdření procedur, tabulek,&lt;br /&gt;
dočasných tabulek, proměnných. Zásadní rozdíl mezi modulem a schématem je možnost opakovaného&lt;br /&gt;
použití modulů v různých databázích (tak jako se používají knihovny).&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# Jim Melton: Understanding SQL Stored Procedures: A Complete Guide to SQL/PSM, Morgan Kaufmann 1998&lt;br /&gt;
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002&lt;br /&gt;
# ANSI SQL:2003 standard&lt;br /&gt;
&lt;br /&gt;
== Implementace cache na úrovni výsledků dotazů ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Cílem je navrhnout a implementovat řešení uložení výsledků SQL dotazů do cache, s cílem eliminovat&lt;br /&gt;
vyhodnocení pokud se vstupní data (data v tabulkách) nezměnila. To v případě systémů ve kterých&lt;br /&gt;
výrazně převažuje čtení (jako jsou např. webové aplikace apod.) výrazně přispívá ke zvýšení výkonu.&lt;br /&gt;
&lt;br /&gt;
Obdobnou funkčnost má implementovánu např. MySQL pod názvem Query Result Cache.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# MySQL Reference Manual / Query Result Cache, http://dev.mysql.com/doc/refman/5.1/en/query-cache.html&lt;br /&gt;
&lt;br /&gt;
== Implementace cache na úrovni výsledků funkcí ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Cílem je navrhnout a implementovat řešení uložení výsledků funkcí do cache, s cílem eliminovat opakované&lt;br /&gt;
vyhodnocení funkce pokud se vstupní data (data ve čtených tabulkách a parametry funkce) nezměnily. To v&lt;br /&gt;
případě systémů ve kterých výrazně převažuje čtení (jako jsou např. webové aplikace apod.) výrazně přispívá&lt;br /&gt;
ke zvýšení výkonu.&lt;br /&gt;
&lt;br /&gt;
Obdobnou funkčnost má implementovánu např. Oracle pod názvem Function Result Cache.&lt;br /&gt;
&lt;br /&gt;
         CREATE OR REPLACE FUNCTION custfce(integer)&lt;br /&gt;
         RETURNS SETOF integer AS $$&lt;br /&gt;
            #option memcache($1) expiration 5min&lt;br /&gt;
         BEGIN&lt;br /&gt;
            RETURN QUERY SELECT a FROM foo WHERE a = $1;&lt;br /&gt;
            END;&lt;br /&gt;
         $$ LANGUAGE plpgsql;&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# Oracle Function Result Cache, http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#BABFHACJ&lt;br /&gt;
&lt;br /&gt;
== Implementace kolekcí v PL/pgSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Cílem je implementace nového datového typu (slovníku) a jeho podpora v PL/pgSQL. Tento nový&lt;br /&gt;
datový typ by měl být použitelný i v ostatních PL jazycích PostgreSQL. Podpora kolekcí v PL/pgSQL&lt;br /&gt;
by měla být kompatibilní s podporou kolekcí v PL/SQL.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# ANSI SQL:2003 standard&lt;br /&gt;
&lt;br /&gt;
== Implementace příkazu MERGE v systému PostgreSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Tento příkaz zajišťuje změnu specifikovaných dat. Pokud tato data neexistují, tak jsou do tabulky&lt;br /&gt;
přidána. Příklad: inkrement materializované tabulky&lt;br /&gt;
&lt;br /&gt;
        CREATE OR REPLACE FUNCTION inc(_key integer)&lt;br /&gt;
        RETURNS void AS $$&lt;br /&gt;
        DECLARE _v integer;&lt;br /&gt;
        BEGIN&lt;br /&gt;
           LOCK mattab;&lt;br /&gt;
           UPDATE mattab SET v = v + 1 WHERE key = _key;&lt;br /&gt;
           IF NOT FOUND THEN&lt;br /&gt;
             INSERT INTO mattab VALUES(_key, 1);&lt;br /&gt;
           END IF;&lt;br /&gt;
        END;&lt;br /&gt;
&lt;br /&gt;
Ukázková implementace je robustní nicméně vzhledem k zamknutí tabulky není &amp;#039;příliš efektivní.&lt;br /&gt;
Podstatně efektivnější implementace se dosáhne implementací na úrovni indexů - souvislost s&lt;br /&gt;
mechanismem jištění unikátnosti hodnot v unikátních indexech je zřejmá (podmínkou implementace je&lt;br /&gt;
unikátní index v tabulce).&lt;br /&gt;
&lt;br /&gt;
     MERGE INTO table_name USING table_name ON (condition)&lt;br /&gt;
     WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...]&lt;br /&gt;
     WHEN NOT MATCHED THEN INSERT column1 [, column2 ...]&lt;br /&gt;
                                             VALUES (value1 [, value2 ...])&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# ANSI SQL:2008 standard&lt;br /&gt;
&lt;br /&gt;
== Implementace referencování a dereferencování v PostgreSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
SQL99 obsahuje koncept podporující OOP aplikace na úrovni SQL. Tento koncept narušuje zažité&lt;br /&gt;
zvyklosti a vzory pro základní operace s daty a skrývá jistou složitost SQL před uživateli (o totéž se&lt;br /&gt;
snaží ORM).&lt;br /&gt;
&lt;br /&gt;
        CREATE TABLE Deti (&lt;br /&gt;
                id serial PRIMARY KEY,&lt;br /&gt;
                rodic REF (Rodice) SCOPE Rodice,&lt;br /&gt;
                jmeno varchar(30),&lt;br /&gt;
                     ...&lt;br /&gt;
        SELECT jmeno, prijmeni, rodic-&amp;gt;jmeno, rodic-&amp;gt;prijmeni&lt;br /&gt;
            FROM Deti; -- system provede automaticky pripojeni tab. Rodice&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002&lt;br /&gt;
# ANSI SQL:2003 standard&lt;br /&gt;
&lt;br /&gt;
== Porovnání databázových úložišť ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; ----&lt;br /&gt;
&lt;br /&gt;
Cílem práce je porovnat jednotlivé modely ukládání dat v různých SŘBD (PostgreSQL, Firebird,&lt;br /&gt;
MySQL, Oracle ...) a popsat jejich výhody a nevýhody. Dále se zaměřit na to jak je řešena obnova po&lt;br /&gt;
výpadku systému.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002&lt;br /&gt;
# Robert Mach: Design of Integrity Check And Repair Algorithms For PostgreSQL Data File, DP FEL CVUT, 2008&lt;br /&gt;
&lt;br /&gt;
== Rozšíření transakčních vlastností ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; ----, Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Implementujte Repeatable Read Isolation Level a Autonomní transakce do PostgreSQL&lt;br /&gt;
Autonomní transakce umožňují samostatné potvrzení subtransakce. Často se používají (a zásadně&lt;br /&gt;
zjednodušují) práci s databázemi workflow aplikací. Další oblastí, kde se AT používají, je logování a&lt;br /&gt;
audit databází.&lt;br /&gt;
&lt;br /&gt;
        BEGIN AUTONOMOUS TRANSACTION;&lt;br /&gt;
        INSERT INTO log(note) VALUES(&amp;#039;Uzivatel se pokusil o ...&amp;#039;);&lt;br /&gt;
        COMMIT;&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# Gerhard Weikum, Gottfried Vossen: Transactional Information Systems,Morgan Kaufman 2002&lt;br /&gt;
&lt;br /&gt;
== Úprava embeded C pro rozhrani SPI ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
PostgreSQL nabízí tzv. embeded C, což je preprocesor C umožnující integraci SQL do C. Aktuálně je&lt;br /&gt;
podporováno pouze klientské rozhraní, tudíž tuto funkcionalitu nelze použít pro uložené procedury.&lt;br /&gt;
Cílem je upravit stávající preprocesor tak, aby se místo klientského rozhraní použilo rozhraní SPI a&lt;br /&gt;
vygeneroval kód, který lze spustit na straně serveru.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
&lt;br /&gt;
== Podpora globální dočasných tabulek ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Životnost dočasných tabulek je limitovaná session uživatele. Po uzavření session jsou všechny dočasné&lt;br /&gt;
tabulky odstraněny. Takto navržené tabulky lze poměrně jednoduše implementovat, mají však několik&lt;br /&gt;
podstatných nevýhod: a) před každým použitím je nutné tyto tabulky vytvořit znovu, což komplikuje&lt;br /&gt;
kód aplikační kód (je třeba zjistit, zda-li tabulky existují a podle toho se zařídit) zvláště vzhledem ke&lt;br /&gt;
skutečnosti, že PostgreSQL nepodporuje databázové triggery (trigger na událost přihlášení a odhlášení&lt;br /&gt;
uživatele). b) díky tomu, že se neustále vytváří a ruší, tak dochází k častým operacím update&lt;br /&gt;
v systémových tabulkách (v některých aplikacích i několik set krát během 1 sec), což si vynucuje&lt;br /&gt;
častější vacuum, což se negativně projeví na výkonu.&lt;br /&gt;
&lt;br /&gt;
Úkolem práce je navrhnout a realizovat tzv. globální dočasné tabulky, které z hlediska životního cyklu&lt;br /&gt;
se chovají stejně jako klasické tabulky, a z hlediska obsahu se chovají jako dočasné tabulky, tj. každý&lt;br /&gt;
uživatel má vlastní obsah, který po ukončení session zaniká. Je třeba preferovat výkon, takže je potřeba&lt;br /&gt;
navrhnout takové řešení, kde by nedocházelo k fyzické modifikaci systémových tabulek a zároveň&lt;br /&gt;
minimalizovat nezbytné změny v PostgreSQL (což je obvyklý požadavek).&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# Neil Conway, PostgreSQL hacking, http://neilconway.org/talks/hacking/ottawa/ottawa_slides.pdf&lt;br /&gt;
# ANSI SQL:2003 standard&lt;br /&gt;
&lt;br /&gt;
== Integrace runtime Parrot do PostgreSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Prostředí parrot vzniklo při vývoji jazyka Perl6. Parrot představuje univerzální runtime (včetne JIT) pro řadů jazyků (zejména Perl6, ale i BASIC, LUA a další). Cílem práce je napsat překladač jazyka PL/pgSQL nebo PL/pgPSM pro toto prostředí. K těmto jazykům je k dispozici parser. Výsledkem práce je překladač a posouzení rychlosti stávajícího řešení a řešení postaveného nad parrotem.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
http://www.parrotblog.org/2008/03/targeting-parrot-vm.html&lt;br /&gt;
&lt;br /&gt;
== Využití runtime jazyka Lua pro PL/pgSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Jazyk Lua obsahuje malý a výkonný runtime. Cílem diplomové práce je integrace tohoto runtime do PostgreSQL včetně jeho použití pro No SQL procedury v jazyce PL/pgSQL nebo PL/pgPSM.  K těmto jazykům je k dispozici parser. Výsledkem práce je překladač a posouzení rychlosti stávajícího řešení a řešení postaveného nad Lua VM.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# http://www.lua.org/pil/&lt;br /&gt;
# http://www.root.cz/clanky/lua-vestavitelny-minimalista/&lt;br /&gt;
# http://luajit.org/&lt;br /&gt;
# http://foja.dcs.fmph.uniba.sk/kompilatory/docs/compiler.pdf&lt;br /&gt;
# http://docs.linux.cz/misc/skolicky/skolicka2.html&lt;br /&gt;
&lt;br /&gt;
== Překladač PL/pgSQL procedur do jazyka C ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
PostgreSQL obsahuje interpret jazyka PL/pgSQL. Cílem práce je vytvoření překladače do programovacího jazyka C a demonstrace tohoto překladače pro praktické použítí. K dispozici je parser jazyka PL/pgSQL jehož výsledkem je AST (Abstract Syntax Tree). Výsledkem práce je porovnání rychlosti zpracování funkcí přeložených z C vůči stávajícímu interpretu PL/pgSQL.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# http://docs.linux.cz/misc/skolicky/skolicka2.html&lt;br /&gt;
# http://foja.dcs.fmph.uniba.sk/kompilatory/docs/compiler.pdf&lt;br /&gt;
# http://tldp.org/HOWTO/GCC-Frontend-HOWTO.html#toc3&lt;br /&gt;
# http://www.linuxjournal.com/article/7884&lt;br /&gt;
# http://gcc.gnu.org/frontends.html&lt;br /&gt;
# http://palestras.gustavobarbieri.com.br/gcc-front-end/fisl-2006/intro.pdf&lt;br /&gt;
&lt;br /&gt;
== Interpret a JIT překladač PL/pgSQL NO SQL procedur s využitím LLVM ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
[http://www.llvm.org/ProjectsWithLLVM/ LLVM] je prostředí pro tvorbu překladačů. PostgreSQL obsahuje interpret jazyka PL/pgSQL. Cílem práce je vytvoření překladače do kódu virtuálního stroje LLVM a demonstrace tohoto překladače pro praktické použítí. K dispozici je parser jazyka PL/pgSQL jehož výsledkem je AST (Abstract Syntax Tree). Výsledná práce musí obsahovat výkonnostní srovnání stávajícího stavu a řešení postaveného nad LLVM.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# http://staff.polito.it/silvano.rivoira/HowToWriteYourOwnCompiler.htm&lt;br /&gt;
&lt;br /&gt;
== Validace XML Type proti DTD, XSD, RNG ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Petr Chmelař&lt;br /&gt;
&lt;br /&gt;
Ve verzi 9 tuto možnost XML Type nemá. V práci jde o integraci těchto funkcí prostřednictvím otevřených knihoven.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
# http://www.postgresql.org/docs/9.0/static/datatype-xml.html&lt;br /&gt;
# http://www.relaxng.org/&lt;br /&gt;
&lt;br /&gt;
== Návrh a implementace Překladače a exekutoru jazyka MDX pro prostředí PostgreSQL ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Cílem práce je navrhnout a implementovat překladač jazyka MDX (MultiDimensional eXpressions) pro RDBMS PostgreSQL. Implementace by měla končit vytvořením jednoduchého serveru protokolově kompatibilního s PostgreSQL zvládajícího přijmutí MDX dotazu, jeho zpracování a překlad na SQL příkazy zpracované určeným SQL serverem, a odeslání výsledku zpět ke klientu. Server musí zvládat nativní komunikaci s PostgreSQL klientem - tak aby bylo možné se k serveru připojit z SQL konzole &amp;#039;&amp;#039;psql&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
*http://en.wikipedia.org/wiki/MultiDimensional_eXpressions&lt;br /&gt;
*http://www.mosha.com/msolap/mdx.htm&lt;br /&gt;
*http://www.databasejournal.com/article.php/1459531/&lt;br /&gt;
*http://developer.postgresql.org/pgdocs/postgres/protocol.html&lt;br /&gt;
*http://www.gnu.org/software/bison/&lt;br /&gt;
*http://www.antlr.org/grammar/1101743472259/mdparser.g&lt;br /&gt;
&lt;br /&gt;
== Návrh a implementace wite once případně append only engine ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Velké množství dat v databázi není nikdy upravováno, a ani se nepředpokládá jejich úprava - např. naměřená data. Uložení takových to dat v Postgresu v podobě normalizovaných tabulek není příliš efektivní - každý řádek totiž obsahuje 23 byte velkou signaturu, která zajišťuje podporu MVCC, kterýžto mechanismus se ovšem u takových to dat neuplatní. Cílem je upravit Postgres tak, aby umožňoval efektivní uložení vědeckých dat, přičemž tato data se nikdy nebudou upravovat - není nutné podporovat operace UPDATE a DELETE. Pokud dojde k připojení nových dat, tak se bude jednat o větší dávkovou operaci (nad desítky KB). K implementaci je možné využít i FDW interface.&lt;br /&gt;
&lt;br /&gt;
Literatura:&lt;br /&gt;
* https://bitbucket.org/adunstan/blackhole_fdw&lt;br /&gt;
&lt;br /&gt;
== Návrh a implementace loose index scanu ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vedoucí práce:&amp;#039;&amp;#039;&amp;#039; Pavel Stěhule&lt;br /&gt;
&lt;br /&gt;
Aktuálně PostgreSQL neumí využít index pro optimalizaci výrazů obsahující klauzuli DISTINCT. Cílem práce je zjistit důvody tohoto chování a navrhnout a připravit efektivní implementaci příkazu COUNT(DISTINCT) pokud je k dispozici index. Postgres umí využívat indexy pro agregační funkce -- např. pro funkce MIN, MAX - nicméně COUNT(DISTINCT) není zatím operace podporovaná indexem.&lt;br /&gt;
&lt;br /&gt;
== Další možná témata ==&lt;br /&gt;
* Použití JIT v expression executoru a SQL executoru&lt;br /&gt;
* Implementace pipelined DML dle ANSI SQL&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT oldtbl.empno FROM OLD TABLE (DELETE FROM emp WHERE deptno = 2) AS oldtbl;&lt;br /&gt;
SELECT newtbl.empno FROM NEW TABLE (UPDATE emp SET salary = 0 WHERE deptno = 2) AS newtbl;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Pavel</name></author>
	</entry>
</feed>