<?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=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek</id>
	<title>PostgreSQL 9.0 - nový začátek - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;action=history"/>
	<updated>2026-06-02T19:10:20Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=1346&amp;oldid=prev</id>
		<title>PavelStehule v 22. 7. 2025, 16:17</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=1346&amp;oldid=prev"/>
		<updated>2025-07-22T16:17:51Z</updated>

		<summary type="html">&lt;p&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 22. 7. 2025, 16:17&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-l1&quot;&gt;Řádek 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádek 1:&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;[[category:Články]]&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;[[category:Články]]&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;/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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Verze PostgreSQL]]&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;div&gt;=PostgreSQL 9.0 - nový začátek=&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;=PostgreSQL 9.0 - nový začátek=&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;Z mého pohledu byl rok spojený s pracemi na 9.0 asi nejklidnějším rokem, který pamatuji (z pohledu vývojáře): Organizace vývoje založená na commitfestech se osvědčuje. Vývojáři, kteří pracují na náročných, problematických funkcí se už smířili s tím, že se nic nedá uspěchat, a koneckonců loňský rok Všem možná připomněl, že život není jen programování. Prioritou 9.0 byla integrace podpory replikace. Po podpoře replikací uživatelé volali dlouho, a letos se konečně dočkali. Administrace 9.0 by opět měla být o něco pohodlnější, a nové funkce by mohli ocenit i aplikační vývojáři používající PostgreSQL. Kromě nových funkcí došlo k řadě úprav Planeru a optimalizátoru, takže generované plány by měly být o něco robustnější. 9.0 je také první 64bitovou verzí pro Microsoft Windows. PostgreSQL na Windows by mohlo běžet o fous lépe i díky podpoře inline funkcí pro jiné překladače než je gcc.&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;Z mého pohledu byl rok spojený s pracemi na 9.0 asi nejklidnějším rokem, který pamatuji (z pohledu vývojáře): Organizace vývoje založená na commitfestech se osvědčuje. Vývojáři, kteří pracují na náročných, problematických funkcí se už smířili s tím, že se nic nedá uspěchat, a koneckonců loňský rok Všem možná připomněl, že život není jen programování. Prioritou 9.0 byla integrace podpory replikace. Po podpoře replikací uživatelé volali dlouho, a letos se konečně dočkali. Administrace 9.0 by opět měla být o něco pohodlnější, a nové funkce by mohli ocenit i aplikační vývojáři používající PostgreSQL. Kromě nových funkcí došlo k řadě úprav Planeru a optimalizátoru, takže generované plány by měly být o něco robustnější. 9.0 je také první 64bitovou verzí pro Microsoft Windows. PostgreSQL na Windows by mohlo běžet o fous lépe i díky podpoře inline funkcí pro jiné překladače než je gcc.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pgwiki2-mediawiki-:diff:1.41:old-1345:rev-1346:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PavelStehule</name></author>
	</entry>
	<entry>
		<id>http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=1345&amp;oldid=prev</id>
		<title>PavelStehule v 22. 7. 2025, 16:17</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=1345&amp;oldid=prev"/>
		<updated>2025-07-22T16:17:45Z</updated>

		<summary type="html">&lt;p&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 22. 7. 2025, 16:17&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-l1&quot;&gt;Řádek 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádek 1:&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;[[category:Články]]&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;[[category:Články]]&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;[[Category:Verze PostgreSQL]]&lt;/del&gt;&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; &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;=PostgreSQL 9.0 - nový začátek=&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;=PostgreSQL 9.0 - nový začátek=&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;Z mého pohledu byl rok spojený s pracemi na 9.0 asi nejklidnějším rokem, který pamatuji (z pohledu vývojáře): Organizace vývoje založená na commitfestech se osvědčuje. Vývojáři, kteří pracují na náročných, problematických funkcí se už smířili s tím, že se nic nedá uspěchat, a koneckonců loňský rok Všem možná připomněl, že život není jen programování. Prioritou 9.0 byla integrace podpory replikace. Po podpoře replikací uživatelé volali dlouho, a letos se konečně dočkali. Administrace 9.0 by opět měla být o něco pohodlnější, a nové funkce by mohli ocenit i aplikační vývojáři používající PostgreSQL. Kromě nových funkcí došlo k řadě úprav Planeru a optimalizátoru, takže generované plány by měly být o něco robustnější. 9.0 je také první 64bitovou verzí pro Microsoft Windows. PostgreSQL na Windows by mohlo běžet o fous lépe i díky podpoře inline funkcí pro jiné překladače než je gcc.&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;Z mého pohledu byl rok spojený s pracemi na 9.0 asi nejklidnějším rokem, který pamatuji (z pohledu vývojáře): Organizace vývoje založená na commitfestech se osvědčuje. Vývojáři, kteří pracují na náročných, problematických funkcí se už smířili s tím, že se nic nedá uspěchat, a koneckonců loňský rok Všem možná připomněl, že život není jen programování. Prioritou 9.0 byla integrace podpory replikace. Po podpoře replikací uživatelé volali dlouho, a letos se konečně dočkali. Administrace 9.0 by opět měla být o něco pohodlnější, a nové funkce by mohli ocenit i aplikační vývojáři používající PostgreSQL. Kromě nových funkcí došlo k řadě úprav Planeru a optimalizátoru, takže generované plány by měly být o něco robustnější. 9.0 je také první 64bitovou verzí pro Microsoft Windows. PostgreSQL na Windows by mohlo běžet o fous lépe i díky podpoře inline funkcí pro jiné překladače než je gcc.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pgwiki2-mediawiki-:diff:1.41:old-616:rev-1345:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PavelStehule</name></author>
	</entry>
	<entry>
		<id>http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=616&amp;oldid=prev</id>
		<title>PavelStehule v 7. 6. 2021, 12:50</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=616&amp;oldid=prev"/>
		<updated>2021-06-07T12:50:17Z</updated>

		<summary type="html">&lt;p&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 7. 6. 2021, 12:50&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-l562&quot;&gt;Řádek 562:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Řádek 562:&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;----------&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;----------&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;Související články&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;Související články&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;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ncl&lt;/del&gt;&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Category:&lt;/del&gt;Verze PostgreSQL&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ncl&lt;/del&gt;&amp;gt;&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;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DPL&lt;/ins&gt;&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;category=&lt;/ins&gt;Verze PostgreSQL&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DPL&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PavelStehule</name></author>
	</entry>
	<entry>
		<id>http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=470&amp;oldid=prev</id>
		<title>imported&gt;Pavel v 22. 5. 2012, 04:17</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PostgreSQL_9.0_-_nov%C3%BD_za%C4%8D%C3%A1tek&amp;diff=470&amp;oldid=prev"/>
		<updated>2012-05-22T04:17:00Z</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;[[category:Články]]&lt;br /&gt;
[[Category:Verze PostgreSQL]]&lt;br /&gt;
=PostgreSQL 9.0 - nový začátek=&lt;br /&gt;
Z mého pohledu byl rok spojený s pracemi na 9.0 asi nejklidnějším rokem, který pamatuji (z pohledu vývojáře): Organizace vývoje založená na commitfestech se osvědčuje. Vývojáři, kteří pracují na náročných, problematických funkcí se už smířili s tím, že se nic nedá uspěchat, a koneckonců loňský rok Všem možná připomněl, že život není jen programování. Prioritou 9.0 byla integrace podpory replikace. Po podpoře replikací uživatelé volali dlouho, a letos se konečně dočkali. Administrace 9.0 by opět měla být o něco pohodlnější, a nové funkce by mohli ocenit i aplikační vývojáři používající PostgreSQL. Kromě nových funkcí došlo k řadě úprav Planeru a optimalizátoru, takže generované plány by měly být o něco robustnější. 9.0 je také první 64bitovou verzí pro Microsoft Windows. PostgreSQL na Windows by mohlo běžet o fous lépe i díky podpoře inline funkcí pro jiné překladače než je gcc.&lt;br /&gt;
&amp;lt;p&amp;gt;Pokud nedojde k nečekaným problémům, tak začátkem dubna by mohla být venku beta a někdy začátkem léta ostrá verze.&lt;br /&gt;
&lt;br /&gt;
==Co je nového pro aplikační vývojáře (změny v SQL)?==&lt;br /&gt;
Asi největší změny se týkají triggerů, constraintů. Pokud používáte &amp;lt;i&amp;gt;ecpg&amp;lt;/i&amp;gt;, měli byste si všimnou razantního pokroku (nově podpora dynamických kurzorů, SQLDA, příkazu &amp;lt;tt&amp;gt;DESCRIBE&amp;lt;/tt&amp;gt;, podpora out-of-scope kurzorů). Nově podporovaná funkcionalita je výsledkem portu většího projektu z informixu Zoltána Boszormenyie.&lt;br /&gt;
&lt;br /&gt;
===Sloupcové a podmíněné triggery===&lt;br /&gt;
V některých případech chceme volat trigger pouze v případě, že došlo ke změně konkrétního sloupce či sloupců. Tento požadavek nyní můžeme vyjádřit zápisem (čímž může dojít k snížení počtu volání triggeru):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TRIGGER before_upd_a_stmt_trig BEFORE UPDATE OF a ON main_table&lt;br /&gt;
   FOR EACH STATEMENT &lt;br /&gt;
   EXECUTE PROCEDURE trigger_func();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dále máme možnost zápisem omezit volání triggeru splněním zadaných podmínek:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TRIGGER modified_any &lt;br /&gt;
   BEFORE UPDATE OF a &lt;br /&gt;
   ON main_table&lt;br /&gt;
   FOR EACH ROW &lt;br /&gt;
   WHEN (OLD.* IS DISTINCT FROM NEW.*) &lt;br /&gt;
   EXECUTE PROCEDURE trigger_func();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Odložitelná omezení jednoznačnosti (Deferrable unique constraints)===&lt;br /&gt;
V postgresu dosud nebylo možné použít odložená omezení jednoznačnosti (To odložení znamená, že se omezení kontroluje těsně před potvrzením transakce, nikoliv ihned po provedení příkazu. Dočasně tak mohou být v db duplicitní hodnoty.). To způsobovalo problémy např. při přečíslování primárních klíčů. Nyní lze použít volbu &amp;lt;i&amp;gt;DEFERRABLE&amp;lt;/i&amp;gt; i pro omezení &amp;lt;i&amp;gt;UNIQUE&amp;lt;/i&amp;gt;. Jako každý odložený test vyžaduje určitou paměť navíc - takže doporučuji to s odloženými omezeními nepřehánět.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pavel@postgres:5432=# CREATE TABLE test(a int UNIQUE DEFERRABLE, b int UNIQUE);&lt;br /&gt;
NOTICE:  CREATE TABLE / UNIQUE will create implicit index &amp;quot;test_a_key&amp;quot; for table &amp;quot;test&amp;quot;&lt;br /&gt;
NOTICE:  CREATE TABLE / UNIQUE will create implicit index &amp;quot;test_b_key&amp;quot; for table &amp;quot;test&amp;quot;&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
Time: 42,845 ms&lt;br /&gt;
pavel@postgres:5432=# INSERT INTO test SELECT generate_series(1,4),generate_series(1,4);&lt;br /&gt;
INSERT 0 4&lt;br /&gt;
Time: 3,157 ms&lt;br /&gt;
pavel@postgres:5432=# SELECT * FROM test;&lt;br /&gt;
 a | b &lt;br /&gt;
---+---&lt;br /&gt;
 1 | 1&lt;br /&gt;
 2 | 2&lt;br /&gt;
 3 | 3&lt;br /&gt;
 4 | 4&lt;br /&gt;
(4 rows)&lt;br /&gt;
&lt;br /&gt;
Time: 1,342 ms&lt;br /&gt;
pavel@postgres:5432=# UPDATE test SET a = a + 1;&lt;br /&gt;
UPDATE 4&lt;br /&gt;
Time: 428,162 ms&lt;br /&gt;
pavel@postgres:5432=# SELECT * FROM test;&lt;br /&gt;
 a | b &lt;br /&gt;
---+---&lt;br /&gt;
 2 | 1&lt;br /&gt;
 3 | 2&lt;br /&gt;
 4 | 3&lt;br /&gt;
 5 | 4&lt;br /&gt;
(4 rows)&lt;br /&gt;
&lt;br /&gt;
Time: 0,652 ms&lt;br /&gt;
pavel@postgres:5432=# UPDATE test SET b = b + 1;&lt;br /&gt;
ERROR:  duplicate key value violates unique constraint &amp;quot;test_b_key&amp;quot;&lt;br /&gt;
DETAIL:  Key (b)=(2) already exists.&lt;br /&gt;
pavel@postgres:5432=# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Zobecněná vylučující omezení===&lt;br /&gt;
V SQL databázích je běžné jedno vylučující omezení UNIQUE, které zamezuje výskytu duplicitních hodnot ve sloupci. Tento typ omezení lze zobecnit. Například můžeme chtít vložení překrývajících se polygonů nebo vložení překrývajících se intervalů. Tato funkce byla implementována v rámci podpory temporálních databází. Na příkladu je demonstrováno omezení odpovídající UNIQUE omezení - tj. nesmí se vyskytnout žádná stejná hodnota (proto operátor =). Pokud taková hodnota existuje - dohledá se pomocí indexu - dojde k vyvolání výjimky.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# CREATE TABLE omega(a integer, EXCLUDE (a with =));&lt;br /&gt;
NOTICE:  CREATE TABLE / EXCLUDE will create implicit index &amp;quot;omega_a_exclusion&amp;quot; for table &amp;quot;omega&amp;quot;&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
Time: 56,056 ms&lt;br /&gt;
postgres=# insert into omega values(10);&lt;br /&gt;
INSERT 0 1&lt;br /&gt;
Time: 1,456 ms&lt;br /&gt;
postgres=# INSERT INTO omega VALUES(10);&lt;br /&gt;
ERROR:  conflicting key value violates exclusion constraint &amp;quot;omega_a_exclusion&amp;quot;&lt;br /&gt;
DETAIL:  Key (a)=(10) conflicts with existing key (a)=(10).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Podpora ANSI SQL klauzule ORDER BY v agregační funkci===&lt;br /&gt;
U nových agregačních funkcí, jako je např. &amp;lt;i&amp;gt;xml_agg&amp;lt;/i&amp;gt; nebo &amp;lt;i&amp;gt;array_agg&amp;lt;/i&amp;gt; je důležité v jakém pořadí jsou data zpracovávaná. Klauzule &amp;lt;i&amp;gt;ORDER BY&amp;lt;/i&amp;gt; umožňuje určit pořadí:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# SELECT array_agg(distinct a ORDER BY a DESC), array_agg(a ORDER BY a) FROM foo;&lt;br /&gt;
-[ RECORD 1 ]------------------------------------------------&lt;br /&gt;
array_agg | {9652,8078,7671,7642,5048,4650,3886,2450,732,647}&lt;br /&gt;
array_agg | {647,732,2450,3886,4650,5048,7642,7671,8078,9652}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Poznámka: Nově můžete používat agregační funkci &amp;lt;i&amp;gt;string_agg&amp;lt;/i&amp;gt;, která je analogií funkcím &amp;lt;i&amp;gt;group_concat&amp;lt;/i&amp;gt; v MySQL nebo &amp;lt;i&amp;gt;listagg&amp;lt;/i&amp;gt; v Oracle.&lt;br /&gt;
===Contrib modul pro ořezání diakritiky===&lt;br /&gt;
Našince potěší volitelný doplněk &amp;quot;unaccent&amp;quot;, který, jak je zřejmé z názvu, odstraňuje diakritiku z textu (tento modul pracuje pouze s kódováním UTF):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# SELECT unaccent(&amp;#039;žluťoučký kůň&amp;#039;);&lt;br /&gt;
   unaccent    &lt;br /&gt;
───────────────&lt;br /&gt;
 zlutoucky kun&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Modul lze integrovat s fulltextem.&lt;br /&gt;
===Podpora &amp;quot;frames&amp;quot; u analytických funkcí===&lt;br /&gt;
Nově je možné analytické funkce používat s definicí rámce &amp;lt;tt&amp;gt;ROWS BETWEEN x PRECEDING AND x FOLLOWING&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# SELECT a, &lt;br /&gt;
                  array_agg(a) OVER (ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING), &lt;br /&gt;
              FROM a;&lt;br /&gt;
 a | array_agg &lt;br /&gt;
---+-----------&lt;br /&gt;
 0 | {0,0}     &lt;br /&gt;
 0 | {0,0,1}   &lt;br /&gt;
 1 | {0,1,1}   &lt;br /&gt;
 1 | {1,1,1}   &lt;br /&gt;
 1 | {1,1,2}   &lt;br /&gt;
 2 | {1,2,2}   &lt;br /&gt;
 2 | {2,2,2}   &lt;br /&gt;
 2 | {2,2,3}   &lt;br /&gt;
 3 | {2,3}     &lt;br /&gt;
(9 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===JOIN REMOVAL (Table Elimination)===&lt;br /&gt;
PostgreSQL 9.0 umí odstranit nevyužité relace z dotazu aniž by došlo ke změně výsledku dotazu. Tato funkce je užitečná zejména tehdy, když je SQL dotaz zadrátovaný do ORM systému nebo pohledu. Mějme tabulky A(id,a), B(id,b), C(id,c), platí A.id = B.id = C.id. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# CREATE TABLE a(id int primary key, a int);&lt;br /&gt;
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index &amp;quot;a_pkey&amp;quot; for table &amp;quot;a&amp;quot;&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
postgres=# CREATE TABLE b(id int primary key, b int);&lt;br /&gt;
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index &amp;quot;b_pkey&amp;quot; for table &amp;quot;b&amp;quot;&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
postgres=# CREATE TABLE c(id int primary key, c int);&lt;br /&gt;
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index &amp;quot;c_pkey&amp;quot; for table &amp;quot;c&amp;quot;&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
postgres=# CREATE VIEW v AS SELECT a,b,c FROM a LEFT JOIN b ON a.id = b.id LEFT JOIN c ON b.id = c.id;&lt;br /&gt;
CREATE VIEW&lt;br /&gt;
postgres=# EXPLAIN SELECT a FROM v; -- doslo k vypusteni C&lt;br /&gt;
                           QUERY PLAN                            &lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
 Hash Left Join  (cost=58.15..121.65 rows=2140 width=8)&lt;br /&gt;
   Hash Cond: (a.id = b.id)&lt;br /&gt;
   -&amp;gt;  Seq Scan on a  (cost=0.00..31.40 rows=2140 width=8)&lt;br /&gt;
   -&amp;gt;  Hash  (cost=31.40..31.40 rows=2140 width=4)&lt;br /&gt;
         -&amp;gt;  Seq Scan on b  (cost=0.00..31.40 rows=2140 width=4)&lt;br /&gt;
(5 rows)&lt;br /&gt;
&lt;br /&gt;
postgres=# EXPLAIN SELECT c FROM v; -- plny dotaz&lt;br /&gt;
                              QUERY PLAN                               &lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
 Hash Left Join  (cost=116.30..211.90 rows=2140 width=4)&lt;br /&gt;
   Hash Cond: (b.id = c.id)&lt;br /&gt;
   -&amp;gt;  Hash Left Join  (cost=58.15..121.65 rows=2140 width=4)&lt;br /&gt;
         Hash Cond: (a.id = b.id)&lt;br /&gt;
         -&amp;gt;  Seq Scan on a  (cost=0.00..31.40 rows=2140 width=4)&lt;br /&gt;
         -&amp;gt;  Hash  (cost=31.40..31.40 rows=2140 width=4)&lt;br /&gt;
               -&amp;gt;  Seq Scan on b  (cost=0.00..31.40 rows=2140 width=4)&lt;br /&gt;
   -&amp;gt;  Hash  (cost=31.40..31.40 rows=2140 width=8)&lt;br /&gt;
         -&amp;gt;  Seq Scan on c  (cost=0.00..31.40 rows=2140 width=8)&lt;br /&gt;
(9 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Tyto automatické úpravy dotazu nenahradí zdravý úsudek vývojáře. Očekává se zlepšení výkonu v případě použití jednodušších &amp;quot;hloupých&amp;quot; ORM systémů, případně pohledů. &lt;br /&gt;
===Parametrická notifikace===&lt;br /&gt;
Kombinace NOTIFY/LISTEN je známa všem aplikačním vývojářům PostgreSQL. Umožňuje poslat signál ve směru server-&amp;gt;přihlášení klienti, tedy v opačném směru než je obvyklé. Zásadním omezením byla nemožnost poslat zároveň s notifikací data - čímž by se klient dozvěděl, co se stalo. Dosud klient pouze zjistil, že se něco stalo. V devítce je možné přibalit k signálu až 8 KB řetězec.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION foo(a varchar)&lt;br /&gt;
RETURNS VOID AS $$&lt;br /&gt;
BEGIN&lt;br /&gt;
  PERFORM pg_notify(&amp;#039;xxx&amp;#039;, a);&lt;br /&gt;
  RETURN;&lt;br /&gt;
END;&lt;br /&gt;
$$ LANGUAGE plpgsql;&lt;br /&gt;
&lt;br /&gt;
pavel@postgres:5432=# LISTEN xxx;&lt;br /&gt;
LISTEN&lt;br /&gt;
&lt;br /&gt;
pavel@postgres:5432=# SELECT foo(&amp;#039;Hello&amp;#039;);&lt;br /&gt;
 foo&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
Asynchronous notification &amp;quot;xxx&amp;quot; with payload &amp;quot;Hello&amp;quot; received from server process with PID 4730.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Co je nového pro vývojáře uložených procedur?==&lt;br /&gt;
Dvě nejdůležitější novinky v 9.0 jsou, v podstatě, pro programátora neviditelné - přesto jsou naprosto zásadní. První malou, o to důležitější změnou, je možnost používat jazyk &amp;lt;i&amp;gt;PL/pgSQL&amp;lt;/i&amp;gt; po instalaci bez nutnosti explicitní registrace a nastavení práv. Další neviditelnou funkcí je integrace SQL parseru do parseru PL/pgSQL. Integrace &amp;quot;skutečného&amp;quot; SQL parseru umožňuje podstatně lepší a přesnější chybovou diagnostiku SQL příkazů v PL/pgSQL kódu. Mimo-jiné je nyní možné detekovat kolizi SQL identifikátorů a identifikátorů proměnných. Možná nebudu sám, pro koho je tato změna v PL/pgSQL nejdůležitější za posledních pět let. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# &lt;br /&gt;
create or replace function foo() &lt;br /&gt;
returns void as $$&lt;br /&gt;
declare a integer;                                              &lt;br /&gt;
begin              &lt;br /&gt;
  for a in select a from omega -- &amp;lt; skrytá a zákeřná chyba &amp;gt; &lt;br /&gt;
  loop                         &lt;br /&gt;
    raise notice &amp;#039;%&amp;#039;, a;&lt;br /&gt;
  end loop; &lt;br /&gt;
end; &lt;br /&gt;
$$ language plpgsql;&lt;br /&gt;
CREATE FUNCTION&lt;br /&gt;
Time: 3,501 ms&lt;br /&gt;
postgres=# select foo();&lt;br /&gt;
ERROR:  column reference &amp;quot;a&amp;quot; is ambiguous&lt;br /&gt;
LINE 1: select a from omega&lt;br /&gt;
               ^&lt;br /&gt;
DETAIL:  It could refer to either a PL/pgSQL variable or a table column.&lt;br /&gt;
QUERY:  select a from omega&lt;br /&gt;
CONTEXT:  PL/pgSQL function &amp;quot;foo&amp;quot; line 3 at FOR over SELECT rows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Podpora jmenné a kombinované notace (named and mixed notation) zápisu parametrů volání funkce===&lt;br /&gt;
Standardně většina programovacích jazyků nabízí tzv poziční notaci předávání předávání parametrů - tj. hodnoty se parametrům funkce přiřazují na základě pozice. Kromě poziční notace ještě existují notace jmenná a kombinovaná (vycházím z terminologie používané jazykem ADA). V PostgreSQL se pro pojmenované parametry používá zápis &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;hodnota&amp;lt;/i&amp;gt; AS &amp;lt;i&amp;gt;název&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE FUNCTION dfunc(a int, b int, c int = 0, d int = 0)&lt;br /&gt;
  RETURNS TABLE (a int, b int, c int, d int) as $$&lt;br /&gt;
  SELECT $1, $2, $3, $4;&lt;br /&gt;
$$ LANGUAGE sql;&lt;br /&gt;
&lt;br /&gt;
SELECT (dfunc(10,20,30)).*;&lt;br /&gt;
 a  | b  | c  | d &lt;br /&gt;
----+----+----+---&lt;br /&gt;
 10 | 20 | 30 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT (dfunc(10 AS a, 20 AS b, 30 AS c)).*;&lt;br /&gt;
 a  | b  | c  | d &lt;br /&gt;
----+----+----+---&lt;br /&gt;
 10 | 20 | 30 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
 &lt;br /&gt;
SELECT * FROM dfunc(10 AS a, 20 AS b);&lt;br /&gt;
 a  | b  | c | d &lt;br /&gt;
----+----+---+---&lt;br /&gt;
 10 | 20 | 0 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM dfunc(10 AS b, 20 AS a);&lt;br /&gt;
 a  | b  | c | d &lt;br /&gt;
----+----+---+---&lt;br /&gt;
 20 | 10 | 0 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM dfunc(1,2);&lt;br /&gt;
 a | b | c | d &lt;br /&gt;
---+---+---+---&lt;br /&gt;
 1 | 2 | 0 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM dfunc(1,2,3 AS c);&lt;br /&gt;
 a | b | c | d &lt;br /&gt;
---+---+---+---&lt;br /&gt;
 1 | 2 | 3 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===IN parametry funkce již nejsou pouze pro  čtení===&lt;br /&gt;
V PL/pgSQL by proměnné odpovídající parametrům funkce chráněné proti zápisu, stejně jako v &amp;lt;i&amp;gt;PL/SQL&amp;lt;/i&amp;gt; (Oracle) nebo v jazyce ADA. V PL/pgSQL je toto omezení poměrně umělé - z důvodu jiné syntaxe volání funkce a předávání parametrů i bezdůvodné. Takže s ohledem na uživatele došlo k vypuštění tohoto omezení (ve shodě se standardem &amp;lt;i&amp;gt;SQL/PSM&amp;lt;/i&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===PL/Python a PL/Python3, PL/Perl(u)===&lt;br /&gt;
Poměrně zásadních úprav doznala podpora uložených procedur v Pythonu. Tento jazyk je rozšířen zejména mezi uživateli PostGISu. Zásadním krokem vpřed je podpora Pythonu 3. Dvojková řada nyní podporuje Unicode. Parametry funkce typu pole jsou nyní mapovány přímo na pole Pythonu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE FUNCTION test_type_conversion_array_int4(x int4[]) &lt;br /&gt;
RETURNS int4[] AS $$&lt;br /&gt;
plpy.info(x, type(x))&lt;br /&gt;
return x&lt;br /&gt;
$$ LANGUAGE plpythonu;&lt;br /&gt;
SELECT * FROM test_type_conversion_array_int4(ARRAY[0, 100]);&lt;br /&gt;
INFO:  ([0, 100], &amp;lt;type &amp;#039;list&amp;#039;&amp;gt;)&lt;br /&gt;
CONTEXT:  PL/Python function &amp;quot;test_type_conversion_array_int4&amp;quot;&lt;br /&gt;
 test_type_conversion_array_int4 &lt;br /&gt;
---------------------------------&lt;br /&gt;
 {0,100}&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM test_type_conversion_array_int4(ARRAY[0,-100,55]);&lt;br /&gt;
INFO:  ([0, -100, 55], &amp;lt;type &amp;#039;list&amp;#039;&amp;gt;)&lt;br /&gt;
CONTEXT:  PL/Python function &amp;quot;test_type_conversion_array_int4&amp;quot;&lt;br /&gt;
 test_type_conversion_array_int4 &lt;br /&gt;
---------------------------------&lt;br /&gt;
 {0,-100,55}&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zásadních změn se dočkal kód PL/Perlu - výsledkem by měla být podrobnější diagnostika spolu s větším počtem vestavěných pseudo nativních perlovských funkcí (quote_literal, quote_nullable, quote_ident, encode_bytea, decode_bytea, looks_like_number, encode_array_literal, encode_array_constructor).&lt;br /&gt;
==Co je nového pro administrátory?==&lt;br /&gt;
===Anonymní funkční bloky - příkaz &amp;lt;tt&amp;gt;DO&amp;lt;/tt&amp;gt;===&lt;br /&gt;
&amp;lt;i&amp;gt;Anonymní funkční blok&amp;lt;/i&amp;gt; je, v podstatě, tělo funkce, které se ihned provádí (neplést s anonymními funkcemi). Výhodou anonymních funkčních bloků je možnost provádět komplexnější operace bez nutnosti definovat novou funkci:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DO $$&lt;br /&gt;
DECLARE r record;&lt;br /&gt;
BEGIN &lt;br /&gt;
  FOR r IN SELECT rtrim(roomno) AS roomno, comment FROM Room ORDER BY roomno&lt;br /&gt;
  LOOP&lt;br /&gt;
    RAISE NOTICE &amp;#039;%, %&amp;#039;, r.roomno, r.comment;&lt;br /&gt;
  END LOOP;&lt;br /&gt;
END&lt;br /&gt;
$$ LANGUAGE plpgsql;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
===ALTER DEFAULT PRIVILEGES===&lt;br /&gt;
Po vytvoření databázového objektu (tabulka, schéma, pohled) s ním může pracovat pouze jeho vlastník. Prvním krokem je většinou nastavení přístupových práv. Tato práce &amp;quot;navíc&amp;quot; svádí administrátory k jednoduchému kroku - zpřístupnění objektu všem pro všechno (&amp;lt;tt&amp;gt;GRANT ALL FOR PUBLIC&amp;lt;/tt&amp;gt;). Díky práci Petra Jelínka je možné nastavit výchozí práva, která se aplikují na všechny nově vytvořené objekty ve schématu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT SELECT ON TABLE TO regressuser1;&lt;br /&gt;
ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT INSERT ON TABLE TO regressuser1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Hromadné nastavení práv===&lt;br /&gt;
Všiml jsem si, že tuto funkci požadovali zejména bývalí uživatelé MySQL. Nyní tedy příkaz GRANT umožňuje nastavit práva všechny databázové objekty daného typu ve schématu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS IN SCHEMA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Možnost nastavení systémových proměnných na databázi a uživatele===&lt;br /&gt;
PostgreSQL již dříve umožňoval nastavení proměnných per uživatel (např. nastavení &amp;lt;tt&amp;gt;WORK_MEM&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;log_min_duration_statement&amp;lt;/tt&amp;gt;. Počínaje touto verzí můžeme upřesnit nastavení ještě pro konkrétní databáze:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER ROLE worker_bee SET maintenance_work_mem = 100000;&lt;br /&gt;
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Identifikace aplikace===&lt;br /&gt;
Název aplikace &amp;lt;tt&amp;gt;application_name&amp;lt;/tt&amp;gt; je další atribut, který (pokud je zadán) může pomoci s identifikací SQL příkazu v logu a v tabulce aktuálně prováděných SQL příkazů. Hodnotu tohoto atributu lze zadat v connection stringu nebo příkazem &amp;lt;tt&amp;gt;SET&amp;lt;/tt&amp;gt;.&lt;br /&gt;
===Automatické generování názvu indexu===&lt;br /&gt;
Nyní máme možnost vynechat název indexu v příkazu &amp;lt;tt&amp;gt;CREATE INDEX&amp;lt;/tt&amp;gt;. Systém vygeneruje jednoznačný - čitelný - název:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- nazev indexu neuveden - system pouzije concur_heap_expr_idx&lt;br /&gt;
CREATE INDEX CONCURRENTLY on concur_heap((f2||f1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Nové &amp;lt;tt&amp;gt;VACUUM FULL&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Kód příkazu &amp;lt;tt&amp;gt;VACUUM FULL&amp;lt;/tt&amp;gt; byl kompletně přepsán. Nová implementace by se měla lépe vypořádat s masivními změnami obsahu databáze, měla by být rychlejší a navíc zvládne redukovat alokovaný diskový prostor indexů (jako kdyby došlo ke sloučení příkazů VACUUM FULL a REINDEX). Pozor - vyžaduje více volného místa na disku. &lt;br /&gt;
===Nastavení parametrů tablespace (&amp;lt;i&amp;gt;seq_page_cost&amp;lt;/i&amp;gt;,&amp;lt;i&amp;gt;random_page_cost&amp;lt;/i&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER TABLESPACE testspace SET (random_page_cost = 1.0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Ochrana postmastera před OOM kilerem===&lt;br /&gt;
Možným problémem provozu PostgreSQL - při nedostatku paměti, je ukončení procesu &amp;lt;i&amp;gt;postmaster&amp;lt;/i&amp;gt;. Čím se fakticky ukončuje PostgreSQL. V typické konfiguraci má PostgreSQL alokováno atypicky hodně sdílené paměti (používá se jako cache), a tudíž je pro OOM kilera první na ráně. Nastavením &amp;lt;tt&amp;gt;/proc/self/oom_adj&amp;lt;/tt&amp;gt; se pozornost OOM kilera přesune na jiné procesy.&lt;br /&gt;
===REPLIKACE===&lt;br /&gt;
Stále je podporováno Slony I - nyní ve verzi 2.0. Slony je tu už pět let a jedná se o vyladěné a prověřené řešení. Nová verze slony vyžaduje minimálně verzi pg 8.3 - která obsahuje replikační API (hooks) (díky čemuž bylo možné zjednodušit a vyčistit kód). Nicméně zájem vývojářů i uživatelů se soustřeďuje jinam. Devítka obsahuje podporu replikace  založené na exportu transakčního logu. Fakticky se jedná o evoluci tzv. warm standby režimu z 8.4. Integrovaná podpora replikace v 9.0 stojí na dvou základních pilířích - &amp;lt;i&amp;gt;Hot Standby&amp;lt;/i&amp;gt; režimu a průběžnému exportu transakčního logu (&amp;lt;i&amp;gt;streaming replication&amp;lt;/i&amp;gt;). Hot Standby režim umožňuje provozovat pg v read only režimu - požadavky na změny obsahu a struktury dat mohou přijít pouze prostřednictvím importu transakčního logu. Za normálních okolností pg exportuje transakční log po 16MB segmentech, což je pro replikaci nepraktické. Streaming replication exportuje přírůstky v transakčním logu průběžně.&lt;br /&gt;
&lt;br /&gt;
Vytvoření repliky je poměrně triviální:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# master setting - postgres.conf&lt;br /&gt;
archive_mode = on&lt;br /&gt;
archive_command = &amp;#039;cp &amp;quot;%p&amp;quot; /tmp/wal_archive/&amp;quot;%f&amp;quot;&amp;#039;&lt;br /&gt;
max_wal_senders = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato změna konfigurace vyžaduje restart db. Vlastní klonovaní databáze může proběhnout kdykoliv později (již bez nutnosti restartu). Stačí zahájit zálohování:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT pg_start_backup(&amp;#039;copy&amp;#039;);&lt;br /&gt;
... zkopírování datového adresáře db master na server, kde poběží slave&lt;br /&gt;
SELECT pg_stop_backup();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V db, která slouží jako slave je nutné upravit zpět konfiguraci a přidat soubor &amp;lt;tt&amp;gt;recovery.conf&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# recovery.conf&lt;br /&gt;
standby_mode = &amp;#039;on&amp;#039;&lt;br /&gt;
primary_conninfo = &amp;#039;host=192.168.20.20 port=5432 user=postgres&amp;#039;&lt;br /&gt;
trigger_file = &amp;#039;/usr/local/pgsql/data-replika/finish.replication&amp;#039;&lt;br /&gt;
restore_command = &amp;#039;cp -i /tmp/wal_archive/%f &amp;quot;%p&amp;quot; &amp;lt;/dev/null&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Před startem repliky je třeba zkopírovat archivované transakční logy. Po spuštění slave db běží v read-only režimu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=&amp;gt; insert into foo values(100);&lt;br /&gt;
ERROR:  cannot execute INSERT in a read-only transaction&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak Slony, tak replikace v Hot Standby režimu mají své pro a proti. Především je Hot Standby neprověřená technologie. Na druhou stranu, pokud chcete replikovat kompletní db cluster, tak si Vás Hot Standby získá snadnou instalací, možností vytvoření repliky za běhu, možností změny režimu ze slave na master bez nutnosti restartu db a relativně snadnou administrací. Výhodou může být i fakt, že replikace nijak zvlášť neomezuje funkcionalitu master db (přestože určitou zátěž představuje (je nutné exportovat transakční logy), očekává se menší režie nežli u Slony). Nevýhodou je naopak závislost na exportu transakčního logu (pokud se již nepoužívá export transakčního logu pro zálohování). Pokud by došlo k výpadku spojení, tak na základě uloženého transakčního logu se může slave db sesynchronizovat. Zatím ovšem není dořešeno odstraňování již nepotřebných segmentů logu - to je nutné řešit externími skripty.&lt;br /&gt;
&lt;br /&gt;
===Termíny ukončení podpory jednotlivých verzí===&lt;br /&gt;
Mezi vývojáři PostgreSQL je poměrně dobrá shoda ohledně politiky podpory, která je poměrně jednoduchá. Po dobu pěti let od vydání budou vycházet opravné verze. Na této politice se vývojáři dohodli během posledních dvou let. Předtím ne že by se nikdo podporou nezabýval, ale nedošlo ke shodě. V loňském roce byly dohodnuty i termíny ukončení podpory:&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ Termíny ukončení podpory jednotlivých verzí PostgreSQL&lt;br /&gt;
|- {{Hl3}}&lt;br /&gt;
!Verze&lt;br /&gt;
!Ukončení podpory&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 7.4||červenec 2010 (prodloužená podpora)&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.0||červenec 2010 (prodloužená podpora) - v případě MS Windows již byla podpora ukončena&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.1||listopad 2010&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.2||prosinec 2011&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.3||leden 2013&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.4||červenec 2014&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
U starších verzích se podpora prodloužila, tak aby uživatelé měli dost času přejít na novější verzi.&lt;br /&gt;
&lt;br /&gt;
===Escapování psql proměnných===&lt;br /&gt;
V &amp;lt;i&amp;gt;psql&amp;lt;/i&amp;gt; je možné použít rozšířenou syntaxi pro expanzi proměnné podle účelu (jako identifikátor nebo jako řetězec). Podpora této syntaxe by měla usnadnit psaní skriptů v psql:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=#\set prom nejaky.text&lt;br /&gt;
postgres=# select :prom;&lt;br /&gt;
ERROR: missing FROM-clause entry for table &amp;quot;nejaky&amp;quot;&lt;br /&gt;
&lt;br /&gt;
postgres=# SELECT :&amp;#039;prom&amp;#039;;&lt;br /&gt;
  ?column?&lt;br /&gt;
-------------&lt;br /&gt;
 nejaky.text&lt;br /&gt;
&lt;br /&gt;
postgres=# SELECT :&amp;#039;prom&amp;#039; :&amp;quot;prom&amp;quot;;&lt;br /&gt;
 nejaky.text &lt;br /&gt;
-------------&lt;br /&gt;
 nejaky.text&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Možná rizika migrace na 9.0===&lt;br /&gt;
*bylo odstraněno automatické doplňování klauzule FROM. Toto chování bylo pozůstatkem akademické (experimentální éry). Pokud jste použili jako kvalifikátor sloupce název tabulky (např. &amp;lt;tt&amp;gt;SELECT nazev_tabulky.sloupec&amp;lt;/tt&amp;gt;), tak nebylo nutné doplňovat zapisovat klauzuli FROM. Minimálně dvě verze zpět je toto chování blokované - &amp;lt;tt&amp;gt;#add_missing_from = off&amp;lt;/tt&amp;gt; (hrozí riziko nechtěného cross-joinu), a nyní došlo k úplnému odstranění. Nové chování se projeví syntaktickou chybou a je nutné postižené SQL příkazy přepsat.&lt;br /&gt;
&lt;br /&gt;
*aktivní detekce kolizí identifikátorů v PL/pgSQL. V předchozích verzích prostředí PL/pgSQL nedokázalo identifikovat kolizi identifikátorů. Výsledkem byl povětšinou nefunkční kód, který byl opraven již během vývoje. Nicméně, narazil jsem i na několik let používaný (přestože nefunkční kód), a tak je pravděpodobné, že tato chyba se objeví i jinde. Nové chování se projeví syntaktickou chybou. Doporučuji postiženou PL/pgSQL funkci přepsat - s velkou pravděpodobností se jedná o chybu. Případně lze vrátit chování parseru (nedoporučuji) nastavením  &amp;lt;tt&amp;gt;plpgsql.variable_conflict = use_variable&amp;lt;/tt&amp;gt; v postgres.conf&lt;br /&gt;
&lt;br /&gt;
*S předchozím bodem souvisí i další možný problém. Pokud název proměnné je zároveň klíčovým slovem v SQL pravděpodobně dojde k zobrazení syntaktické chyby. V předchozích verzích se jako identifikátory proměnných nesměly použít pouze klíčová slova v PL/pgSQL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION test(text) &lt;br /&gt;
RETURNS text AS $$&lt;br /&gt;
DECLARE table text = $1; &lt;br /&gt;
BEGIN &lt;br /&gt;
  RETURN quote_ident(table); &lt;br /&gt;
END; &lt;br /&gt;
$$ LANGUAGE plpgsql;&lt;br /&gt;
&lt;br /&gt;
postgres=# SELECT test(&amp;#039;moje tab&amp;#039;); --&amp;lt; 8.4 &amp;gt;&lt;br /&gt;
    test    &lt;br /&gt;
------------&lt;br /&gt;
 &amp;quot;moje tab&amp;quot;&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
-- 9.0&lt;br /&gt;
postgres=# CREATE OR REPLACE FUNCTION test(text) &lt;br /&gt;
postgres-# RETURNS text AS $$&lt;br /&gt;
postgres$# DECLARE table text = $1; &lt;br /&gt;
postgres$# BEGIN &lt;br /&gt;
postgres$#   RETURN quote_ident(table); &lt;br /&gt;
postgres$# END; &lt;br /&gt;
postgres$# $$ LANGUAGE plpgsql;&lt;br /&gt;
ERROR:  syntax error at or near &amp;quot;table&amp;quot;&lt;br /&gt;
LINE 5:   RETURN quote_ident(table); &lt;br /&gt;
                             ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*změna výstupního formátu typu bytea. V předchozích verzích byly hodnoty typu bytea zobrazeny jako escaped string. Nyní se používá formát hexadecimálních čísel. Předchozí výstupní formát lze vrátit zpět nastavením &amp;lt;tt&amp;gt;bytea_output = escape&amp;lt;/tt&amp;gt;. Na nový formát se přešlo z důvodu výkonu.&lt;br /&gt;
&lt;br /&gt;
==Co je nového pro uživatele?==&lt;br /&gt;
Prokoukla konzole. Pokud používáte UTF terminál, můžete aktivovat zobrazení dekorací (okrajů tabulek) pomocí unicode znaků:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# \pset linestyle unicode&lt;br /&gt;
postgres=# SELECT * FROM (values(10,20,30),(40,50,60)) x(a,b,c);&lt;br /&gt;
 a  │ b  │ c  &lt;br /&gt;
────┼────┼────&lt;br /&gt;
 10 │ 20 │ 30&lt;br /&gt;
 40 │ 50 │ 60&lt;br /&gt;
(2 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===pgAdmin 1.10===&lt;br /&gt;
Nová verze pgAdmina obsahuje dvě zásadnější novinky: grafický návrhář dotazů a integrované skriptovací prostředí ne nepodobné T-SQL - &amp;lt;i&amp;gt;pgScript&amp;lt;/i&amp;gt;. Query builder je záležitost hlavně pro začátečníky - profík píše dotazy v ruce - no možná, že i profík se někdy sníží k použití QB, pravda ovšem je, že dokud jsem používal QB, tak jsem se nenaučil pořádně SQL. [http://www.pgadmin.org/docs/dev/pgscript.html pgScript] je něco, co mne naplňuje tichým smutkem. Netuším, proč bylo potřeba vytvořit klon &amp;lt;i&amp;gt;T-SQL&amp;lt;/i&amp;gt;. Přidání pgScriptu do pgAdmina je opravdu vařením pejsko-kočičího dortu - což bohužel platí pro celý pgAdmin. pgScript měl být postaven nad syntaxí PL/pgSQL nebo ještě lépe SQL/PSM. Bohužel už se stalo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECLARE @I, @J, @T, @G;&lt;br /&gt;
SET @I = 0;&lt;br /&gt;
SET @G1 = INTEGER(10, 29, 1); /* Random integer generator&lt;br /&gt;
                             Unique numbers between 10 and 29 */&lt;br /&gt;
SET @G2 = STRING(10, 20, 3); /* Random string generator&lt;br /&gt;
                             3 words between 10 and 20 characters */&lt;br /&gt;
WHILE @I &amp;lt; 20&lt;br /&gt;
BEGIN&lt;br /&gt;
    SET @T = &amp;#039;table&amp;#039; + CAST (@I AS STRING);&lt;br /&gt;
&lt;br /&gt;
    SET @J = 0;&lt;br /&gt;
    WHILE @J &amp;lt; 20&lt;br /&gt;
    BEGIN&lt;br /&gt;
        INSERT INTO @T VALUES (@G1, &amp;#039;@G2&amp;#039;);&lt;br /&gt;
        SET @J = @J + 1;&lt;br /&gt;
    END&lt;br /&gt;
&lt;br /&gt;
    SET @I = @I + 1;&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Strojově přístupný formát výpisu prováděcího plánu===&lt;br /&gt;
Vývojáře aplikací (GUI, analýzy logů), které pracují s výpisem prováděcích plánů (příkaz: &amp;lt;i&amp;gt;&amp;lt;tt&amp;gt;EXPLAIN&amp;lt;/tt&amp;gt;&amp;lt;/i&amp;gt;), potěší strojově rozpoznatelný výpis ve formátu XML, JSON, a YAML:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# EXPLAIN (FORMAT xml) SELECT 10;&lt;br /&gt;
                        QUERY PLAN                        &lt;br /&gt;
----------------------------------------------------------&lt;br /&gt;
 &amp;amp;lt;explain xmlns=&amp;quot;http://www.postgresql.org/2009/explain&amp;quot;&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;Query&amp;amp;gt;&lt;br /&gt;
     &amp;amp;lt;Plan&amp;amp;gt;&lt;br /&gt;
       &amp;amp;lt;Node-Type&amp;amp;gt;Result&amp;amp;lt;/Node-Type&amp;amp;gt;&lt;br /&gt;
       &amp;amp;lt;Startup-Cost&amp;amp;gt;0.00&amp;amp;lt;/Startup-Cost&amp;amp;gt;&lt;br /&gt;
       &amp;amp;lt;Total-Cost&amp;amp;gt;0.01&amp;amp;lt;/Total-Cost&amp;amp;gt;&lt;br /&gt;
       &amp;amp;lt;Plan-Rows&amp;amp;gt;1&amp;amp;lt;/Plan-Rows&amp;amp;gt;&lt;br /&gt;
       &amp;amp;lt;Plan-Width&amp;amp;gt;0&amp;amp;lt;/Plan-Width&amp;amp;gt;&lt;br /&gt;
     &amp;amp;lt;/Plan&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;/Query&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/explain&amp;amp;gt;&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
postgres=# EXPLAIN (FORMAT json) SELECT 10;&lt;br /&gt;
          QUERY PLAN          &lt;br /&gt;
------------------------------&lt;br /&gt;
 [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Plan&amp;quot;: {&lt;br /&gt;
       &amp;quot;Node Type&amp;quot;: &amp;quot;Result&amp;quot;,&lt;br /&gt;
       &amp;quot;Startup Cost&amp;quot;: 0.00,&lt;br /&gt;
       &amp;quot;Total Cost&amp;quot;: 0.01,&lt;br /&gt;
       &amp;quot;Plan Rows&amp;quot;: 1,&lt;br /&gt;
       &amp;quot;Plan Width&amp;quot;: 0&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Rozšířená konzole===&lt;br /&gt;
&amp;lt;i&amp;gt;Enhanced psql&amp;lt;/i&amp;gt; je externí (můj) projekt, který má za cíl rozšířit možnosti standardní PostgreSQL konzole psql. epsql je částečně experimentální platforma - nicméně některé funkce z epsql již byly portovány zpět do psql. Novinkou epsql 9.0 je možnost definování vlastních příkazů. Tato verze již obsahuje triviální makrojazyk (metapříkazy &amp;lt;tt&amp;gt;\forc&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;\ifdef&amp;lt;/tt&amp;gt;, ...):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Describe table&amp;lt;/h4&amp;gt;&lt;br /&gt;
Obdoba příkazu &amp;lt;i&amp;gt;desc&amp;lt;/i&amp;gt; MySQL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\newcommand desc&lt;br /&gt;
\ifdef 1&lt;br /&gt;
\d :1&lt;br /&gt;
\else&lt;br /&gt;
\echo &amp;#039;missing table name&amp;#039;&lt;br /&gt;
\endifdef&lt;br /&gt;
\endnewcommand&lt;br /&gt;
&lt;br /&gt;
postgres=# desc tab&lt;br /&gt;
       Table &amp;quot;public.tab&amp;quot;&lt;br /&gt;
┌────────┬─────────┬───────────┐&lt;br /&gt;
│ Column │  Type   │ Modifiers │&lt;br /&gt;
├────────┼─────────┼───────────┤&lt;br /&gt;
│ a      │ integer │           │&lt;br /&gt;
│ b      │ integer │           │&lt;br /&gt;
│ c      │ integer │           │&lt;br /&gt;
└────────┴─────────┴───────────┘&lt;br /&gt;
Indexes:&lt;br /&gt;
    &amp;quot;ff&amp;quot; btree (a)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Top Ten&amp;lt;/h4&amp;gt;&lt;br /&gt;
Zobrazí seznam tabulek řazený podle velikosti tabulky:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\newcommand \tt&lt;br /&gt;
\ifdef 1&lt;br /&gt;
select relname, relpages, reltuples from pg_class order by relpages desc limit :1;&lt;br /&gt;
\else&lt;br /&gt;
select relname, relpages, reltuples from pg_class order by relpages desc;&lt;br /&gt;
\endifdef&lt;br /&gt;
\endnewcommand&lt;br /&gt;
&lt;br /&gt;
postgres=# \tt 3&lt;br /&gt;
┌──────────────┬──────────┬───────────┐&lt;br /&gt;
│   relname    │ relpages │ reltuples │&lt;br /&gt;
├──────────────┼──────────┼───────────┤&lt;br /&gt;
│ pg_proc      │       54 │      2232 │&lt;br /&gt;
│ pg_depend    │       41 │      5557 │&lt;br /&gt;
│ pg_attribute │       36 │      1960 │&lt;br /&gt;
└──────────────┴──────────┴───────────┘&lt;br /&gt;
(3 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Založení CSPUGu==&lt;br /&gt;
Pro zastřešení aktivit kolem PostgreSQL - nyní je to zejména pořádání výroční konference a zabezpečení wiki - jsme založili CSPUG (Czech and Slovak Users Group). Stanovy sdružení jsou ke stažení na [http://www.cspug.cz/ stránkách CSPUGu]. Členové výboru jsou: Pavel Hák, Pavel Stěhule a Julius Štroffek. Stále nabíráme nové členy.&lt;br /&gt;
&lt;br /&gt;
==O čem se mluví==&lt;br /&gt;
Ohledně PostgreSQL je těžké být prorokem. Každý vývojář má své plány (viz seznam níže). Já bych si vsadil na partitioning.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Podpora old-school režimu izolace transakcí SERIALISABLE, &lt;br /&gt;
&amp;lt;li&amp;gt;Podpora automatického vytváření partitions,&lt;br /&gt;
&amp;lt;li&amp;gt;Podpora filtrů příkazu COPY,&lt;br /&gt;
&amp;lt;li&amp;gt;Index only scans,&lt;br /&gt;
&amp;lt;li&amp;gt;Podpora SQL/MED - dotazy do jiné db (náhrada za dblink).&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
----------&lt;br /&gt;
Související články&lt;br /&gt;
&amp;lt;ncl&amp;gt;Category:Verze PostgreSQL&amp;lt;/ncl&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Pavel</name></author>
	</entry>
</feed>