<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mastermind</id>
	<title>PostgreSQL wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mastermind"/>
	<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/wiki/Special:Contributions/Mastermind"/>
	<updated>2026-06-09T14:24:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Mastermind&amp;diff=42327</id>
		<title>User:Mastermind</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Mastermind&amp;diff=42327"/>
		<updated>2025-12-02T20:54:21Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;m Stefan Kaltenbrunner - you can reach me via email to stefan@kaltenbrunner.cc.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=42048</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=42048"/>
		<updated>2025-10-23T14:54:05Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: most of the sysadmin team is not active on IRC any more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Languages}}&lt;br /&gt;
= Welcome to the PostgreSQL Wiki! =&lt;br /&gt;
&lt;br /&gt;
This wiki contains user documentation, how-tos, and tips &#039;n&#039; tricks related to PostgreSQL. It also serves as a collaboration area for PostgreSQL contributors.&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
&lt;br /&gt;
==== Community Generated Articles, Guides, and Documentation ====&lt;br /&gt;
* [[Community Generated Articles, Guides, and Documentation|General articles and guides]]&lt;br /&gt;
* [[PostgreSQL Tutorials]]&lt;br /&gt;
* [[:Category:Snippets|PostgreSQL Related Code Snippets]]&lt;br /&gt;
* [[Detailed installation guides]]&lt;br /&gt;
* [[Converting from other Databases to PostgreSQL]]&lt;br /&gt;
* [[Comparison with other Database systems]]&lt;br /&gt;
* [[Database Administration and Maintenance]]&lt;br /&gt;
* [[Development Articles|Development with PostgreSQL]]&lt;br /&gt;
* [[Performance Optimization|PostgreSQL Performance Optimization]]&lt;br /&gt;
* [[PostgreSQL Related Slides and Presentations]]&lt;br /&gt;
&lt;br /&gt;
==== Documentation on the main site ====&lt;br /&gt;
* [http://www.postgresql.org/docs/manuals/ PostgreSQL Manuals] &lt;br /&gt;
* [http://www.postgresql.org/docs/books/ PostgreSQL Books]&lt;br /&gt;
&lt;br /&gt;
== Alternate Languages ==&lt;br /&gt;
&lt;br /&gt;
The following pages contain user documentation in languages other than English.&lt;br /&gt;
&lt;br /&gt;
* [[Main Page/de|deutsch]]&lt;br /&gt;
* [[Main Page/es|español]]  &lt;br /&gt;
* [[Main Page/fr|français]]&lt;br /&gt;
* [[Main Page/he|עברית]]&lt;br /&gt;
* [[Main Page/ja|日本語]]&lt;br /&gt;
* [[Main Page/pt|português]]&lt;br /&gt;
* [[Main Page/ru|русский]]&lt;br /&gt;
* [[Main Page/zh|中文]]&lt;br /&gt;
* [[Main Page/zh-hant|中文（繁體]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contributor Information ==&lt;br /&gt;
* You can find many PostgreSQL users and developers chatting in [irc://irc.libera.chat/postgresql #postgresql on Libera]. A list of IRC nick names with their respective real world names can be found [[IRC2RWNames | here]].&lt;br /&gt;
* [[Events | Upcoming Events]]&lt;br /&gt;
* [[Development information]]&lt;br /&gt;
* [[Advocacy]]&lt;br /&gt;
&lt;br /&gt;
== User Accounts ==&lt;br /&gt;
* All activity on this site should follow the [[Policies|PostgreSQL Project Policies]].  &lt;br /&gt;
* In order to edit or create documents on the site, you will need a [https://www.postgresql.org/account/login/ PostgreSQL community account]. This is the same account used when submitting news or events on [http://www.postgresql.org www.postgresql.org].&lt;br /&gt;
&#039;&#039;&#039;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges ask on the [mailto:pgsql-www@postgresql.org PostgreSQL -www Mailinglist] for help.  Please include your community account name in those requests.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=38476</id>
		<title>Infrastructure team</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=38476"/>
		<updated>2023-12-15T11:20:48Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Infrastructure Team ==&lt;br /&gt;
&lt;br /&gt;
The Infrastructure team is responsible for running all of the postgresql.org infrastructure. This includes a wide variety of public and non-public services.  PostgreSQL website development is discussed on the [http://archives.postgresql.org/pgsql-www/ pgsql-www mailing list]. Source code for the postgresql.org web site is stored in a public GIT repository, and is available on [http://git.postgresql.org/gitweb/?p=pgweb.git;a=summary]&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Team Members ==&lt;br /&gt;
&lt;br /&gt;
The following people are part of the sysadmin team running the postgresql.org infrastructure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Álvaro Herrera&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Joe Conway&lt;br /&gt;
* Christophe Pettus&lt;br /&gt;
&lt;br /&gt;
In case you want to reach out to the Infrastructure team, please contact us at sysadmins@lists.postgresql.org&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=38475</id>
		<title>Infrastructure team</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=38475"/>
		<updated>2023-12-15T11:19:48Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: add email for sysadmins@&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Infrastructure Team ==&lt;br /&gt;
&lt;br /&gt;
The Infrastructure team is responsible for running all of the postgresql.org infrastructure. This includes a wide variety of public and non-public services.  PostgreSQL website development is discussed on the [http://archives.postgresql.org/pgsql-www/ pgsql-www mailing list]. Source code for the postgresql.org web site is stored in a public GIT repository, and is available on [http://git.postgresql.org/gitweb/?p=pgweb.git;a=summary]&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Team Members ==&lt;br /&gt;
&lt;br /&gt;
The following people are part of the sysadmin team running the postgresql.org infrastructure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Álvaro Herrera&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Joe Conway&lt;br /&gt;
* Christophe Pettus&lt;br /&gt;
&lt;br /&gt;
In case you want to reach out to the Infrastructure team please contact us at sysadmins@lists.postgresql.org&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Mha&amp;diff=35093</id>
		<title>User:Mha</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Mha&amp;diff=35093"/>
		<updated>2020-07-02T20:12:21Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#blamemagnus&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Elephant.png&amp;diff=35092</id>
		<title>File:Elephant.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Elephant.png&amp;diff=35092"/>
		<updated>2020-07-02T19:35:22Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{The PostgreSQL Licence}}&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=35091</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=35091"/>
		<updated>2020-07-02T19:32:04Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: update for translation plugin changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Languages}}&lt;br /&gt;
= Welcome to the PostgreSQL Wiki! =&lt;br /&gt;
&lt;br /&gt;
This wiki contains user documentation, how-tos, and tips &#039;n&#039; tricks related to PostgreSQL. It also serves as a collaboration area for PostgreSQL contributors.&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
&lt;br /&gt;
==== Community Generated Articles, Guides, and Documentation ====&lt;br /&gt;
* [[Community Generated Articles, Guides, and Documentation|General articles and guides]]&lt;br /&gt;
* [[PostgreSQL Tutorials]]&lt;br /&gt;
* [[:Category:Snippets|PostgreSQL Related Code Snippets]]&lt;br /&gt;
* [[Detailed installation guides]]&lt;br /&gt;
* [[Converting from other Databases to PostgreSQL]]&lt;br /&gt;
* [[Comparison with other Database systems]]&lt;br /&gt;
* [[Database Administration and Maintenance]]&lt;br /&gt;
* [[Development Articles|Development with PostgreSQL]]&lt;br /&gt;
* [[Performance Optimization|PostgreSQL Performance Optimization]]&lt;br /&gt;
* [[PostgreSQL Related Slides and Presentations]]&lt;br /&gt;
&lt;br /&gt;
==== Documentation on the main site ====&lt;br /&gt;
* [http://www.postgresql.org/docs/manuals/ PostgreSQL Manuals] &lt;br /&gt;
* [http://www.postgresql.org/docs/books/ PostgreSQL Books]&lt;br /&gt;
&lt;br /&gt;
== Alternate Languages ==&lt;br /&gt;
&lt;br /&gt;
The following pages contain user documentation in languages other than English.&lt;br /&gt;
&lt;br /&gt;
* [[Main Page/de|deutsch]]&lt;br /&gt;
* [[Main Page/es|español]]  &lt;br /&gt;
* [[Main Page/fr|français]]&lt;br /&gt;
* [[Main Page/he|עברית]]&lt;br /&gt;
* [[Main Page/ja|日本語]]&lt;br /&gt;
* [[Main Page/pt|português]]&lt;br /&gt;
* [[Main Page/ru|русский]]&lt;br /&gt;
* [[Main Page/zh|中文]]&lt;br /&gt;
* [[Main Page/zh-hant|中文（繁體]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contributor Information ==&lt;br /&gt;
* You can find many PostgreSQL users and developers chatting in [irc://irc.freenode.net/postgresql #postgresql on freenode]. A list of IRC nick names with their respective real world names can be found [[IRC2RWNames | here]].&lt;br /&gt;
* [[Events | Upcoming Events]]&lt;br /&gt;
* [[Development information]]&lt;br /&gt;
* [[Advocacy]]&lt;br /&gt;
&lt;br /&gt;
== User Accounts ==&lt;br /&gt;
* All activity on this site should follow the [[Policies|PostgreSQL Project Policies]].  &lt;br /&gt;
* In order to edit or create documents on the site, you will need a [http://www.postgresql.org/community/signup PostgreSQL community account]. This is the same account used when submitting news or events on [http://www.postgresql.org www.postgresql.org].&lt;br /&gt;
&#039;&#039;&#039;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges ask on either the [mailto:pgsql-www@postgresql.org PostgreSQL -www Mailinglist] or the [irc://irc.freenode.net/postgresql PostgreSQL IRC Channel] (direct your request to &#039;pginfra&#039;, multiple individuals in the channel highlight on that string) for help.  Please include your community account name in those requests.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Template:Languages&amp;diff=35090</id>
		<title>Template:Languages</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Template:Languages&amp;diff=35090"/>
		<updated>2020-07-02T19:30:55Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Template ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Languages|PageName}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PageName&#039;&#039;&#039; (optional) - the name of the page to display language links for.  If omitted then the English version of the current page is used.  This parameter can normally be omitted, as it is only required if you want to link to a page other than the one you place the template on, which is very uncommon.  If this parameter is used on a sub-page make sure you supply the root name, not the full page name (e.g. on [[MediaWiki/fr]] you would need to use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Languages|MediaWiki}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and not &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Languages|MediaWiki/fr}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The template should only be placed on pages that exist in more than one language, and it should be placed in the same location on each translation of the page.&lt;br /&gt;
&lt;br /&gt;
The English version of a page is always the main version, with all other languages as sub-pages, named using the appropriate language code (see below). &lt;br /&gt;
&lt;br /&gt;
For example, on the Main Page you would include the text &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Languages}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, both on [[Main Page]] itself, and on each of its language sub-pages.  The template automatically creates links to any language sub-pages that exist, e.g. &amp;lt;tt&amp;gt;Main Page/ja&amp;lt;tt&amp;gt;, &amp;lt;tt&amp;gt;Main Page/fr&amp;lt;/tt&amp;gt;, and ignores non-existant languages.&lt;br /&gt;
&lt;br /&gt;
See [[Project:Language policy]] for further details about translating pages.&lt;br /&gt;
&lt;br /&gt;
== Supported languages ==&lt;br /&gt;
This shows you the name of each language&#039;s sub-page (using &#039;&#039;Main Page&#039;&#039; as an example). Other languages may be added easily as necessary.  Please use the appropriate [[meta:List of Wikipedias|prefix, as used on Wikipedia]] when adding a new language.  Please do &#039;&#039;not&#039;&#039; add languages for which no pages exist yet, as this will increase the time needed to include the template without adding any benefit (languages are only displayed to the user when the relevant page exists).&lt;br /&gt;
&lt;br /&gt;
The link on the language names goes to the Wikipedia in that language. &#039;&#039;&#039;If no Wikipedia in your language exists, do not add pages in that language to MediaWiki.org!&#039;&#039;&#039;  This wiki is not the place for language advocacy - please go through the correct channels, and once your language has a Wikipedia then please return to add content here.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Page Name || Language &lt;br /&gt;
|-&lt;br /&gt;
| Main Page || [[:en:|English]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/af&#039;&#039;&#039; || [[:af:|Afrikaans]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ar&#039;&#039;&#039; || [[:ar:|Arabic]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/az&#039;&#039;&#039; || [[:az:|Azerbaijani]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/bcc&#039;&#039;&#039; || Southern Balochi&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/bg&#039;&#039;&#039; || [[:bg:|Bulgarian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/br&#039;&#039;&#039; || [[:br:|Breton]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ca&#039;&#039;&#039; || [[:ca:|Catalan]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/cs&#039;&#039;&#039; || [[:cs:|Czech]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/da&#039;&#039;&#039; || [[:da:|Danish]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/de&#039;&#039;&#039; || [[:de:|German]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/el&#039;&#039;&#039; || [[:el:|Greek]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/es&#039;&#039;&#039; || [[:es:|Spanish]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/fa&#039;&#039;&#039; || [[:fa:|Persian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/fi&#039;&#039;&#039; || [[:fi:|Finnish]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/fr&#039;&#039;&#039; || [[:fr:|French]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/gl&#039;&#039;&#039; || [[:gl:|Galician]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/gu&#039;&#039;&#039; || [[:gu:|Gujarati]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/he&#039;&#039;&#039; || [[:he:|Hebrew]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/hu&#039;&#039;&#039; || [[:hu:|Hungarian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/id&#039;&#039;&#039; || [[:id:|Indonesian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/it&#039;&#039;&#039; || [[:it:|Italian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ja&#039;&#039;&#039; || [[:ja:|Japanese]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ko&#039;&#039;&#039; || [[:ko:|Korean]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ksh&#039;&#039;&#039; || [[:ksh:|Kölsch]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ml&#039;&#039;&#039; || [[:mr:|Malayalam]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/mr&#039;&#039;&#039; || [[:mr:|Marathi]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ms&#039;&#039;&#039; || [[:ms:|Malay]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/nl&#039;&#039;&#039; || [[:nl:|Nederlands]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/no&#039;&#039;&#039; || [[:no:|Norwegian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/oc&#039;&#039;&#039; || [[:oc:|Occitan]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/pl&#039;&#039;&#039; || [[:pl:|Polish]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/pt&#039;&#039;&#039; || [[:pt:|Portugese]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ro&#039;&#039;&#039; || [[:ro:|Romanian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ru&#039;&#039;&#039; || [[:ru:|Russian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/si&#039;&#039;&#039; || [[:si:|Sinhalese]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/sk&#039;&#039;&#039; || [[:sk:|Slovak]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/sq&#039;&#039;&#039; || [[:sq:|Albanian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/sr&#039;&#039;&#039; || [[:sr:|Serbian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/sv&#039;&#039;&#039; || [[:sv:|Swedish]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/ta&#039;&#039;&#039; || [[:ta:|Tamil]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/th&#039;&#039;&#039; || [[:th:|Thai]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/tr&#039;&#039;&#039; || [[:tr:|Turkish]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/uk&#039;&#039;&#039; || [[:uk:|Ukrainian]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/vi&#039;&#039;&#039; || [[:vi:|Vietnamese]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/yue&#039;&#039;&#039; || [[:zh-yue:|Cantonese]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/zh&#039;&#039;&#039; || [[:zh:|Chinese]]&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/zh-hans&#039;&#039;&#039; || Chinese (Simplified)&lt;br /&gt;
|-&lt;br /&gt;
| Main Page&#039;&#039;&#039;/zh-hant&#039;&#039;&#039; || Chinese (Traditional)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
Here is how the language bar looks on the [[MediaWiki]] page:&lt;br /&gt;
{{Languages|MediaWiki}}&lt;br /&gt;
[[Category:Language templates]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PGLister:_How_to_Moderate&amp;diff=34689</id>
		<title>PGLister: How to Moderate</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PGLister:_How_to_Moderate&amp;diff=34689"/>
		<updated>2020-03-02T18:35:29Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Before you moderate for this first time */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[https://lists.postgresql.org/ PGLister] is a mailing list management system designed to better [[PGLister_Announce | address the needs]] of the PostgreSQL community. PGLister is updated to work with recent improvements in email technology and spam filtering as well as provide an easy-to-use interface to manage list access.  The guide below explains how a moderator can manage lists assigned for moderation.&lt;br /&gt;
&lt;br /&gt;
== Before you moderate for this first time ==&lt;br /&gt;
&lt;br /&gt;
In order to be assigned as a moderator to lists managed by [https://lists.postgresql.org/ PGLister], you must have logged into PGLister at least once.  You can follow these steps to log in:&lt;br /&gt;
&lt;br /&gt;
# Visit [https://lists.postgresql.org/ PGLister] at [https://lists.postgresql.org/ https://lists.postgresql.org/]&lt;br /&gt;
# Click on [https://lists.postgresql.org/manage/ Manage Subscriptions].  &#039;&#039;&#039;If your community account is already authenticated, then you will be logged into PGLister and redirected to the PGLister dashboard.  You are now done.&#039;&#039;&#039;&lt;br /&gt;
# If your account is not authenticated, you will be redirect to the community login page.  Please log in with your community credentials here.&lt;br /&gt;
## If you do not have a community account, you will need to register for one.  Follow the steps to register a community account.  When you are finished with sign up, return to Step 1 of this guide.&lt;br /&gt;
# If you successfully authenticate your account, you will be redirect to the [https://lists.postgresql.org/manage/ PGLister Dashboard] where you can manage your PostgreSQL mailing list subscriptions as well as moderate lists.&lt;br /&gt;
# If this is the first time you authenticated with PGLister and/or would like to request to be added as a moderator to a mailing list, please contact [mailto:sysadmins@lists.postgresql.org sysadmins@lists.postgresql.org] with your requests details.&lt;br /&gt;
&lt;br /&gt;
== Moderating Lists ==&lt;br /&gt;
&lt;br /&gt;
If you are a moderator of any list on PGLister, you will have access to the [https://lists.postgresql.org/moderate/ moderation dashboard].  You can find the link to the moderation dashboard underneath the &amp;quot;Manage lists&amp;quot; heading on the [https://lists.postgresql.org/manage/ PGLister Dashboard].  Click &amp;quot;Moderate / Manage Lists&amp;quot; to access to the [https://lists.postgresql.org/moderate/ moderation dashboard].&lt;br /&gt;
&lt;br /&gt;
Below will break down each section in the moderation dashboard and how to moderate the mailing lists you help manage.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;quot;Moderation&amp;quot; Screen ===&lt;br /&gt;
&lt;br /&gt;
When mailing lists that you moderate have messages that require review, they will appear in the &amp;quot;Moderation&amp;quot; section of the moderation  [https://lists.postgresql.org/moderate/ moderation dashboard].  As a moderator, you will also receive an email that provides several courses of action to take on the message.  &#039;&#039;&#039;NOTE: THE EMAIL SENT TO MODERATORS REQUESTING MODERATION DOES NOT CONTAIN A MESSAGE PREVIEW.&#039;&#039;&#039;  If you would like to preview the message before setting a course of action, you must visit the [https://lists.postgresql.org/moderate/ moderation dashboard] to view the message preview. Please see below for instructions on how to do so.&lt;br /&gt;
&lt;br /&gt;
==== Moderation Metadata ====&lt;br /&gt;
&lt;br /&gt;
The metadata on a message queued for moderation contains the following information:&lt;br /&gt;
&lt;br /&gt;
* Date: When the message was sent&lt;br /&gt;
* List: Which list the message was sent to (e.g. &amp;quot;pgsql-announce&amp;quot;)&lt;br /&gt;
* Reason: The reason why the message is in the moderation queue (e.g. &amp;quot;sender is not a subscriber of any list)&lt;br /&gt;
&lt;br /&gt;
==== Moderation Message Info ====&lt;br /&gt;
&lt;br /&gt;
The data contained in the &amp;quot;Message&amp;quot; section on the moderation dashboard includes the following:&lt;br /&gt;
&lt;br /&gt;
* Sender: The email address ending the message&lt;br /&gt;
* Subject: The subject of the message.  If you click on &amp;quot;Subject,&amp;quot; a popover box appears that contains a preview of the message.  Based on the email client used to send the message, this can at times appear to be garbled text.&lt;br /&gt;
* Message ID: Contains a URL that activates a popover with the message ID&lt;br /&gt;
&lt;br /&gt;
==== Moderation Actions ====&lt;br /&gt;
&lt;br /&gt;
The actions section determines what to do with the message.  In other words, &amp;quot;Actions&amp;quot; comprises the moderator&#039;s decision with the message, such as whether or not it should be sent out to the list. Below is what each action does for a message:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Ignore&#039;&#039;&#039;: This is the default action.  Ignore is a no-op: it does not perform any action on the message.&lt;br /&gt;
* &#039;&#039;&#039;Approve&#039;&#039;&#039;: Approves the message to be sent to the list.&lt;br /&gt;
* &#039;&#039;&#039;Whitelist&#039;&#039;&#039;: Both approve the message and add the sender&#039;s email address to the whitelist of that mailing list.  &#039;&#039;&#039;NOTE: This means that a sender can ALWAYS send messages to the mailing list that are automatically approved without any moderation.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Discard&#039;&#039;&#039;: Removes the message from the moderation queue and does &#039;&#039;&#039;not&#039;&#039;&#039; send the message to the mailing list. The sender does &#039;&#039;&#039;not&#039;&#039;&#039; receive a notification that the message was not approved for sending.  This is typically used for messages that are spam.&lt;br /&gt;
* &#039;&#039;&#039;Reject&#039;&#039;&#039;: Prompts the moderator to enter a reason for rejecting the message to be delivered to the sender and removes the message from the moderation queue.  This action does &#039;&#039;&#039;not&#039;&#039;&#039; send the message to the mailing list.  The sender receives a notification that the message was not approved for sending as well as the reason why it was rejected.  &#039;&#039;Please be polite with your responses&#039;&#039;: someone sending an email to the list may not be aware of the list policy, so try to point them to the correct reference.&lt;br /&gt;
* &#039;&#039;&#039;Unsubscribe&#039;&#039;&#039;: Unsubscribes the sender from the list. This requires the sender to be identified as an active subscriber of the list.&lt;br /&gt;
* &#039;&#039;&#039;Reject unsub&#039;&#039;&#039;: The same as &#039;&#039;reject&#039;&#039;, except the reason is set to a pre-canned message with full instructions for how to use the List headers to unsubscribe from a message. This is the appropriate choice when an unsubscribe request is received from a sender who is not identified as a subscriber of the list.&lt;br /&gt;
&lt;br /&gt;
In order to finalize all the selected actions, a moderator must click &#039;&#039;&#039;Moderate&#039;&#039;&#039; at the bottom of the Moderation section.&lt;br /&gt;
&lt;br /&gt;
===== Moderation Actions for pgsql-announce =====&lt;br /&gt;
&lt;br /&gt;
Due to the large number of subscriptions to the pgsql-announce mailing list, a message sent to pgsql-announce must be approved by &#039;&#039;&#039;two&#039;&#039;&#039; moderators before it is sent through.  This is to ensure that we respect the mailboxes of everyone subscribed to pgsql-announce and that a moderator does not accidentally approve a message that would be deemed as inappropriate for that list.&lt;br /&gt;
&lt;br /&gt;
==== Explaining the Moderation email ====&lt;br /&gt;
&lt;br /&gt;
It is also possible to moderate messages from an email sent to moderators of a list.  You will probably want to see a preview of the message before applying a moderation action, but fortunately you can do this from the email.  All actions are the same as [[#Moderation Actions|moderation actions]] described above, but as soon as you click on the URL, this action is taken.  A few notes:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Preview&#039;&#039;&#039;: Brings you to a preview of the message.  This opens up a tab in your browser with the contents of the message.&lt;br /&gt;
* &#039;&#039;&#039;Reject&#039;&#039;&#039;: Reject is currently not supported from the moderation email.  If you would like to provide a rejection reason for the message, you will have to view the moderation dashboard.&lt;br /&gt;
&lt;br /&gt;
=== List Management Overview ===&lt;br /&gt;
&lt;br /&gt;
The list management overview of the moderation screen is a list of the mailing lists that you moderate.  If you click on one of the lists, you will be brought to the individual list management page.&lt;br /&gt;
&lt;br /&gt;
== List Management ==&lt;br /&gt;
&lt;br /&gt;
The list management section of PGLister enables a moderator to perform the following actions:&lt;br /&gt;
&lt;br /&gt;
* View which email addresses are subscribed to the list.  This also allows a moderator to unsubscribe email addresses from a list&lt;br /&gt;
* Subscribe new email addresses to the list&lt;br /&gt;
* Whitelist email addresses that are always allowed to post messages to the list&lt;br /&gt;
&lt;br /&gt;
=== View/Unsubscribe ===&lt;br /&gt;
&lt;br /&gt;
The view/unsubscribe portion of the list manager allows a moderator to see who is subscribed to a mailing list and have the option of unsubscribing those email addresses.&lt;br /&gt;
&lt;br /&gt;
There is a box that allows for a moderator to search for an email address.  If nothing is typed into the box, then all email addresses subscribed to that list are displayed in the next view.  From there, a moderator can view the email addresses that are subscribed to the list as well as unsubscribe these particular email addresses.&lt;br /&gt;
&lt;br /&gt;
=== Subscribe ===&lt;br /&gt;
&lt;br /&gt;
The subscribe section allows a moderator to subscribe an email address to the list.  If you are adding an email address using this method, please be sure that the owner of the email address has given you permission to do so as the email address will automatically be subscribed to the mailing list without any additional confirmation.&lt;br /&gt;
&lt;br /&gt;
=== Whitelist ===&lt;br /&gt;
&lt;br /&gt;
The whitelist section allows a moderator to manage email addresses that can always post to the particular email list without moderator approval.  A moderator can also remove email addresses from the whitelist too.  Please use this feature carefully.  If you have any questions on how the whitelist works, please send an email to [mailto:sysadmins@postgresql.org sysadmins@postgresql.org].&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=34688</id>
		<title>Infrastructure team</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=34688"/>
		<updated>2020-03-02T18:34:53Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Infrastructure Team Members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Infrastructure Team ==&lt;br /&gt;
&lt;br /&gt;
The Infrastructure team is responsible for running all of the postgresql.org infrastructure. This includes a wide variety of public and non-public services.  PostgreSQL website development is discussed on the [http://archives.postgresql.org/pgsql-www/ pgsql-www mailing list]. Source code for the postgresql.org web site is stored in a public GIT repository, and is available on [http://git.postgresql.org/gitweb/?p=pgweb.git;a=summary]&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Team Members ==&lt;br /&gt;
&lt;br /&gt;
The following people are part of the sysadmin team running the postgresql.org infrastructure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Álvaro Herrera&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Joe Conway&lt;br /&gt;
* Christophe Pettus&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Handling_Security_Issues&amp;diff=32487</id>
		<title>Handling Security Issues</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Handling_Security_Issues&amp;diff=32487"/>
		<updated>2018-09-11T19:48:31Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: update list of current security team members&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information for developers on how to deal with security issues and how to prepare a security release.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are a user who wants to report a security issue or who wants to learn about how the PostgreSQL project deals with security issues, please go to http://www.postgresql.org/support/security.  The wiki page you are looking at is aimed at developers.&lt;br /&gt;
&lt;br /&gt;
== security@postgresql.org ==&lt;br /&gt;
&lt;br /&gt;
The email address security@postgresql.org is the recommended contact point for all inquiries about security issues.  It currently points at pgsql-security@postgresql.org.&lt;br /&gt;
&lt;br /&gt;
== Security team ==&lt;br /&gt;
&lt;br /&gt;
The security team is a closed-subscription list whose purpose is to be able to discuss security issues in a controlled group.  The current members are:&lt;br /&gt;
&lt;br /&gt;
* Álvaro Herrera&lt;br /&gt;
* Andres Freund&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Greg Stark&lt;br /&gt;
* Heikki Linnakangas&lt;br /&gt;
* Tatsuo Ishii&lt;br /&gt;
* Jonathan Katz&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Michael Paquier&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Peter Eisentraut&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Tom Lane&lt;br /&gt;
&lt;br /&gt;
== Responding to security bug reports ==&lt;br /&gt;
&lt;br /&gt;
Respond to a security bug report reported via the security@ address in the same way as you would with a normal bug report on pgsql-bugs.  The only difference is that the issue should not be disclosed to anyone outside the security team and the original reporter.&lt;br /&gt;
&lt;br /&gt;
== Committing patches for security issues ==&lt;br /&gt;
&lt;br /&gt;
If the git commit log message for a commit matches&lt;br /&gt;
&lt;br /&gt;
 /^Security:/&lt;br /&gt;
&lt;br /&gt;
then the message on pgsql-committers will be held for moderation.  This facility should be applied when committing a patch for a security issue, so that details of the fix don&#039;t get broadcast to the world before the release including the fix is made.  See [http://archives.postgresql.org/pgsql-committers/2008-01/msg00100.php this example] for a commit message where this was done.  As in that example, the recommended style is something like &amp;quot;Security: CVE-number&amp;quot; or some other reference to the reason for the security marker.&lt;br /&gt;
&lt;br /&gt;
== CVE numbers ==&lt;br /&gt;
&lt;br /&gt;
A CVE number should be requested for every security issue.  This number should be included in all the commit messages, announcements, and so on.  A document describing the process can be found on developer.postgresql.org at ~petere/can-request.txt (only available with shell access, because it is not a public document).  The person who drives the process of fixing the issue and preparing the security release (often Tom Lane) is usually the one who deals with requesting the CVE numbers.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_wiki:About&amp;diff=31371</id>
		<title>PostgreSQL wiki:About</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_wiki:About&amp;diff=31371"/>
		<updated>2018-01-04T21:34:22Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki serves as a repository for user-contributed PostgreSQL documentation. The PostgreSQL project does not endorse any of the documentation on this site; it provides the wiki as a means for users to share documentation and notes developed from their own experiences with PostgreSQL.  By adding or editing any pages on this wiki, you agree to license your contributions under its [[PostgreSQL_wiki:Copyrights|copyright terms]].&lt;br /&gt;
 &lt;br /&gt;
The official PostgreSQL documentation can be found at [https://www.postgresql.org/docs https://www.postgresql.org/docs].&lt;br /&gt;
&lt;br /&gt;
If you find any inappropriate pages on this site, please contact the [mailto:pgsql-www@postgresql.org PostgreSQL Web Team]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=96releasedraft&amp;diff=28170</id>
		<title>96releasedraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=96releasedraft&amp;diff=28170"/>
		<updated>2016-09-13T18:55:28Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: http-&amp;gt;https&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=PostgreSQL 9.6 Released=&lt;br /&gt;
&lt;br /&gt;
PostgreSQL 9.6, the latest version of the world&#039;s leading open source SQL database, was released today by the PostgreSQL Global Development Group.  This release will allow users to both scale up and scale out high performance database workloads.  New features include parallel query, synchronous replication improvements, and phrase search.&lt;br /&gt;
&lt;br /&gt;
==Scale Up with Parallel Query==&lt;br /&gt;
&lt;br /&gt;
Version 9.6 adds support for parallelizing some query operations, enabling utilization of several or all of the cores on a server to return query results faster.  This release includes parallel sequential (table) scan, aggregation, and joins.  Depending on details and available cores, parallelism can speed up big data queries by as much as 32X. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;I migrated our entire genomics data platform - all 25 billion legacy MySQL rows of it - to a single Postgres database, leveraging the row compression abilities of the JSONB datatype, and the excellent GIN, BRIN, and Btree indexing modes. Now with version 9.6, I expect to harness the parallel query functionality to allow even greater scalability for queries against our rather large tables,&amp;quot; said Mike Sofen, Chief Database Architect, Synthetic Genomics.&lt;br /&gt;
&lt;br /&gt;
==Scale Out with Synchronous Replication and postgres_fdw==&lt;br /&gt;
&lt;br /&gt;
Two new options have been added to PostgreSQL&#039;s synchronous replication feature which allow it to be used to maintain consistent reads across database clusters.  First, it now allows configuring groups of synchronous replicas.  Second, the &amp;quot;remote_apply&amp;quot; mode creates a more consistent view of data across multiple nodes.  These features support using built-in replication to maintain a set of &amp;quot;identical&amp;quot; nodes for load-balancing read workloads.&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL-to-PostgreSQL data federation driver, postgres_fdw, has new capabilities to execute work on remote servers.  By &amp;quot;pushing down&amp;quot; sorts, joins, and batch data updates, users can distribute workload across multiple PostgreSQL servers.&lt;br /&gt;
&lt;br /&gt;
QUOTE ABOUT SCALING OUT ON POSTGRES HERE&lt;br /&gt;
&lt;br /&gt;
==Better Text Search with Phrases==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s full text search feature, tsearch, now supports &amp;quot;phrase search.&amp;quot; This lets users search for exact phrases, or for words within a specified proximity to each other, using fast GIN indexes.  Phrase search means that PostgreSQL continues to be an alternative to dedicated text search technologies for web search and data mining.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
* Downloads: https://www.postgresql.org/downloads&lt;br /&gt;
* Press Kit: https://www.postgresql.org/about/press/presskit96&lt;br /&gt;
* Release Notes: https://www.postgresql.org/documentation/current/static/release-9-6&lt;br /&gt;
* What&#039;s New in 9.6: https://wiki.postgresql.org/wiki/new_in_9.6&lt;br /&gt;
&lt;br /&gt;
==About PostgreSQL==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is the most advanced open source database system, with a global community of thousands of users and contributors and dozens of companies and organizations.  The PostgreSQL Project builds on over 30 years of engineering, starting at the University of California, Berkeley, and has an unmatched pace of development today. PostgreSQL&#039;s mature feature set not only matches top proprietary database systems, but exceeds them in advanced database features, extensibility, security and stability.  Learn more about PostgreSQL and participate in our community at: https://www.postgresql.org.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=WikiEditing&amp;diff=27762</id>
		<title>WikiEditing</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=WikiEditing&amp;diff=27762"/>
		<updated>2016-06-11T14:14:27Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: preset subject to help filtering&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Editing this wiki now requires &amp;quot;editor&amp;quot; privileges.&lt;br /&gt;
&lt;br /&gt;
If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges, you can ask on either the [mailto:pgsql-www@postgresql.org?subject=Wiki%20editor%20request PostgreSQL -www Mailinglist] or the [irc://irc.freenode.net/postgresql PostgreSQL IRC Channel] (direct your request to &#039;pginfra&#039;, multiple individuals in the channel highlight on that string) for &amp;quot;editor&amp;quot; privileges. Please include your community account name in those requests.&lt;br /&gt;
&lt;br /&gt;
This is due, in large part, to recent spam activity.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=WikiEditing&amp;diff=27095</id>
		<title>WikiEditing</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=WikiEditing&amp;diff=27095"/>
		<updated>2016-01-24T19:12:12Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Editing this wiki now requires &amp;quot;editor&amp;quot; privileges.&lt;br /&gt;
&lt;br /&gt;
If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges, you can ask on either the PostgreSQL -www Mailinglist or the PostgreSQL IRC Channel for &amp;quot;editor&amp;quot; privileges. Please include your community account name in those requests.&lt;br /&gt;
&lt;br /&gt;
This is due, in large part, to recent spam activity.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=MediaWiki:Sitenotice&amp;diff=27048</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=MediaWiki:Sitenotice&amp;diff=27048"/>
		<updated>2016-01-05T20:58:15Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges ask on either the [mailto://pgsql-www@postgresql.org PostgreSQL -www Mailinglist] or the [irc://irc.freenode.net/postgresql PostgreSQL IRC Channel] for help.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=MediaWiki:Loginstart&amp;diff=27047</id>
		<title>MediaWiki:Loginstart</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=MediaWiki:Loginstart&amp;diff=27047"/>
		<updated>2016-01-05T19:35:39Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Created page with &amp;quot;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used to h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges ask on either the PostgreSQL -www Mailinglist or the PostgreSQL IRC Channel for help.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=27046</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=27046"/>
		<updated>2016-01-05T18:53:03Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* User Accounts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= Welcome to the PostgreSQL Wiki! =&lt;br /&gt;
&lt;br /&gt;
This wiki contains user documentation, how-tos, and tips &#039;n&#039; tricks related to PostgreSQL. It also serves as a collaboration area for PostgreSQL contributors.&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
&lt;br /&gt;
==== Community Generated Articles, Guides, and Documentation ====&lt;br /&gt;
* [[Community Generated Articles, Guides, and Documentation|General articles and guides]]&lt;br /&gt;
* [[PostgreSQL Tutorials]]&lt;br /&gt;
* [[:Category:Snippets|PostgreSQL Related Code Snippets]]&lt;br /&gt;
* [[Detailed installation guides]]&lt;br /&gt;
* [[Converting from other Databases to PostgreSQL]]&lt;br /&gt;
* [[Comparison with other Database systems]]&lt;br /&gt;
* [[Database Administration and Maintenance]]&lt;br /&gt;
* [[Development Articles|Development with PostgreSQL]]&lt;br /&gt;
* [[Performance Optimization|PostgreSQL Performance Optimization]]&lt;br /&gt;
* [[PostgreSQL Related Slides and Presentations]]&lt;br /&gt;
&lt;br /&gt;
==== Documentation on the main site ====&lt;br /&gt;
* [http://www.postgresql.org/docs/manuals/ PostgreSQL Manuals] &lt;br /&gt;
* [http://www.postgresql.org/docs/books/ PostgreSQL Books]&lt;br /&gt;
&lt;br /&gt;
== Alternate Languages ==&lt;br /&gt;
&lt;br /&gt;
The following pages contain user documentation in languages other than English.&lt;br /&gt;
&lt;br /&gt;
* [[Chinese|中国]]&lt;br /&gt;
&lt;br /&gt;
* [[Deutsch]]&lt;br /&gt;
&lt;br /&gt;
* [[Español]]&lt;br /&gt;
&lt;br /&gt;
* [[Français]]&lt;br /&gt;
&lt;br /&gt;
* [[Japanese|日本]]&lt;br /&gt;
&lt;br /&gt;
* [[Português]]&lt;br /&gt;
&lt;br /&gt;
* [[Russian|Русский]]&lt;br /&gt;
&lt;br /&gt;
== Contributor Information ==&lt;br /&gt;
* You can find many PostgreSQL users and developers chatting in [irc://irc.freenode.net/postgresql #postgresql on freenode]. A list of IRC nick names with their respective real world names can be found [[IRC2RWNames | here]].&lt;br /&gt;
* [[Events | Upcoming Events]]&lt;br /&gt;
* [[Development information]]&lt;br /&gt;
* [[Advocacy]]&lt;br /&gt;
&lt;br /&gt;
== User Accounts ==&lt;br /&gt;
* All activity on this site should follow the [[Policies|PostgreSQL Project Policies]].  &lt;br /&gt;
* In order to edit or create documents on the site, you will need a [http://www.postgresql.org/community/signup PostgreSQL community account]. This is the same account used when submitting news or events on [http://www.postgresql.org www.postgresql.org], or adding comments to the interactive version of the [http://www.postgresql.org/docs/ official documentation].&lt;br /&gt;
&#039;&#039;&#039;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges ask on either the [mailto://pgsql-www@postgresql.org PostgreSQL -www Mailinglist] or the [irc://irc.freenode.net/postgresql PostgreSQL IRC Channel] for help.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=27045</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page&amp;diff=27045"/>
		<updated>2016-01-05T18:52:34Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* User Accounts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
= Welcome to the PostgreSQL Wiki! =&lt;br /&gt;
&lt;br /&gt;
This wiki contains user documentation, how-tos, and tips &#039;n&#039; tricks related to PostgreSQL. It also serves as a collaboration area for PostgreSQL contributors.&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
&lt;br /&gt;
==== Community Generated Articles, Guides, and Documentation ====&lt;br /&gt;
* [[Community Generated Articles, Guides, and Documentation|General articles and guides]]&lt;br /&gt;
* [[PostgreSQL Tutorials]]&lt;br /&gt;
* [[:Category:Snippets|PostgreSQL Related Code Snippets]]&lt;br /&gt;
* [[Detailed installation guides]]&lt;br /&gt;
* [[Converting from other Databases to PostgreSQL]]&lt;br /&gt;
* [[Comparison with other Database systems]]&lt;br /&gt;
* [[Database Administration and Maintenance]]&lt;br /&gt;
* [[Development Articles|Development with PostgreSQL]]&lt;br /&gt;
* [[Performance Optimization|PostgreSQL Performance Optimization]]&lt;br /&gt;
* [[PostgreSQL Related Slides and Presentations]]&lt;br /&gt;
&lt;br /&gt;
==== Documentation on the main site ====&lt;br /&gt;
* [http://www.postgresql.org/docs/manuals/ PostgreSQL Manuals] &lt;br /&gt;
* [http://www.postgresql.org/docs/books/ PostgreSQL Books]&lt;br /&gt;
&lt;br /&gt;
== Alternate Languages ==&lt;br /&gt;
&lt;br /&gt;
The following pages contain user documentation in languages other than English.&lt;br /&gt;
&lt;br /&gt;
* [[Chinese|中国]]&lt;br /&gt;
&lt;br /&gt;
* [[Deutsch]]&lt;br /&gt;
&lt;br /&gt;
* [[Español]]&lt;br /&gt;
&lt;br /&gt;
* [[Français]]&lt;br /&gt;
&lt;br /&gt;
* [[Japanese|日本]]&lt;br /&gt;
&lt;br /&gt;
* [[Português]]&lt;br /&gt;
&lt;br /&gt;
* [[Russian|Русский]]&lt;br /&gt;
&lt;br /&gt;
== Contributor Information ==&lt;br /&gt;
* You can find many PostgreSQL users and developers chatting in [irc://irc.freenode.net/postgresql #postgresql on freenode]. A list of IRC nick names with their respective real world names can be found [[IRC2RWNames | here]].&lt;br /&gt;
* [[Events | Upcoming Events]]&lt;br /&gt;
* [[Development information]]&lt;br /&gt;
* [[Advocacy]]&lt;br /&gt;
&lt;br /&gt;
== User Accounts ==&lt;br /&gt;
* All activity on this site should follow the [[Policies|PostgreSQL Project Policies]].  &lt;br /&gt;
* In order to edit or create documents on the site, you will need a [http://www.postgresql.org/community/signup PostgreSQL community account]. This is the same account used when submitting news or events on [http://www.postgresql.org www.postgresql.org], or adding comments to the interactive version of the [http://www.postgresql.org/docs/ official documentation].&lt;br /&gt;
&#039;&#039;&#039;NOTE: due to recent spam activity &amp;quot;editor&amp;quot; privileges are granted manually for the time being. If you just created a new community account or if your current account used to have &amp;quot;editor&amp;quot; privileges ask on either the [mailto://pgsql-www@postgresql.org PostgreSQL -www Mailinglist] or on the [irc://irc.freenode.net/postgresql PostgreSQL IRC Channel] for help.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=AndroidAppContest&amp;diff=25443</id>
		<title>AndroidAppContest</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=AndroidAppContest&amp;diff=25443"/>
		<updated>2015-07-10T19:03:28Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Reverted edits by Lanita1223 (talk) to last revision by Boshomi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Android Application Contest =&lt;br /&gt;
&lt;br /&gt;
We are having a contest to create an open source PostgreSQL application for the Android OS.  The prize is a brand-new Nexus One phone generously donated by Google.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
* April 25, 2010: contest announced&lt;br /&gt;
* July 6, 2010: entries due&lt;br /&gt;
* &amp;lt;strike&amp;gt;PDXPUG Day, OSCON, July 19&amp;lt;/strike&amp;gt; OSCON 2010: winners announced&lt;br /&gt;
&lt;br /&gt;
== Contestants ==&lt;br /&gt;
&lt;br /&gt;
* Stephen Denne - [http://www.datacute.co.nz/pgquilt/pgquilt.html pgQuilt] ([http://www.datacute.co.nz/pgquilt/pgQuilt.apk .apk])&lt;br /&gt;
* Magnus Hagander - [http://github.com/mhagander/mailinglistmoderator Mailing List Moderator] ([http://github.com/downloads/mhagander/mailinglistmoderator/mailinglistmoderator.apk .apk])&lt;br /&gt;
* Roland Tritsch - [http://code.google.com/p/chargefinder/ ChargeFinder] ([http://chargefinder.googlecode.com/files/CFMain-V1.1.0.apk .apk])&lt;br /&gt;
* Mark Wong - [http://github.com/markwkm/PGTop/ PGTop] ([http://github.com/downloads/markwkm/PGTop/PGTop-1.1.apk .apk])&lt;br /&gt;
* Marek Wróbel &amp;amp; Albert Łącki - [http://users.v-lo.krakow.pl/~mwrobel/bcinventory/ Barcode Inventory] ([http://users.v-lo.krakow.pl/~mwrobel/bcinventory-media/download/BarcodeInventory.apk .apk])&lt;br /&gt;
&lt;br /&gt;
== Prize ==&lt;br /&gt;
&lt;br /&gt;
Winner: Brand-new developer version (unlocked) Nexus One phone from Google.&lt;br /&gt;
&lt;br /&gt;
All participants who &#039;&#039;complete&#039;&#039; an app will get a Postgres 9 shirt.&lt;br /&gt;
&lt;br /&gt;
Also, all participants will be blogged and announced.&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
&lt;br /&gt;
# The contest participant must have done the majority of the coding work on the application.&lt;br /&gt;
# The application can be anything which is functionally dependent on or complementary to PostgreSQL.  This would include things like a simple PostgreSQL GUI or query creator, a PostGIS geo application, or similar.  &lt;br /&gt;
# Applications which do not actually use the database, but are complementary to PostgreSQL use, such as an EXPLAIN ANALYZE viewer or PostgreSQL documentation searcher, are also permitted.&lt;br /&gt;
# PostgreSQL need not (and really should not) be run on the phone.  For this reason, the application can depend on having a data connection.&lt;br /&gt;
# The source code must be distributed under an OSI-approved license, and delivered with the completed application to the contest judges. Source code will be distributed by the judges via a Git repo at git.postgresql.org.  BSD or PostgreSQL license is preferred but not required.&lt;br /&gt;
# The application must be available in an Android-standard package, but submitting it for the Marketplace is not a requirement.&lt;br /&gt;
# You must live somewhere we can affordably ship the Nexus One from the USA and reasonably expect it to arrive intact.  If in doubt, ask us.&lt;br /&gt;
# The application cannot already be available before April 15, 2010.&lt;br /&gt;
# All three judges must be able to install and try the application on their phones.  This means making the application compatible with Android version 1 (likely 1.6 is good enough).&lt;br /&gt;
&lt;br /&gt;
== Judges ==&lt;br /&gt;
&lt;br /&gt;
*Josh Berkus &#039;&#039;(testing on both G1 and Nexus One)&#039;&#039;&lt;br /&gt;
*Selena Deckelmann &#039;&#039;(testing on G1)&#039;&#039;&lt;br /&gt;
*Matthew Momjian &#039;&#039;(testing on G1)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== E-mail for Participation ==&lt;br /&gt;
&lt;br /&gt;
Please join the [http://groups.google.com/group/pgandroid pgAndroid Google Group]&lt;br /&gt;
&lt;br /&gt;
== Questions asked by participants ==&lt;br /&gt;
&lt;br /&gt;
Q: Where can I find the android SDK?&lt;br /&gt;
A: http://developer.android.com/sdk/index.html&lt;br /&gt;
&lt;br /&gt;
Q: What is the minimum SDK API level required? (i.e. is it sufficient to support android 1.6 to run on the G1 phones?)&lt;br /&gt;
A: 1.6 should be sufficient.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mobile appliction]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=HowToTranslate&amp;diff=24762</id>
		<title>HowToTranslate</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=HowToTranslate&amp;diff=24762"/>
		<updated>2015-05-30T11:23:18Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: small typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How to Translate Releases =&lt;br /&gt;
&lt;br /&gt;
This is a set of instructions for Regional Contacts (RCs) and Advocacy volunteers on how to translate major version releases and other PR materials for PostgreSQL.  It is not about translating the web site or translating PostgreSQL itself.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure &amp;amp; Timeline ===&lt;br /&gt;
&lt;br /&gt;
Generally you will have a very short time to get a release translated.  The schedule generally goes like this:&lt;br /&gt;
&lt;br /&gt;
# Day Minus 15: draft release send to Regional Contacts for questions and typo-spotting.&lt;br /&gt;
# Day Minus 12: release finalized, offered to RCs for translation&lt;br /&gt;
# Day Minus 6: draft copies of all languages checked in&lt;br /&gt;
# Day Minus 4: final versions of all languages checked in &lt;br /&gt;
&lt;br /&gt;
Yes, that does mean that you need to have your translations finalized at least 4 days before the final release (and preferably earlier).  This is because all Presskits need to be integrated into the www.postgresql.org infrastructure, checked, and corrected.&lt;br /&gt;
&lt;br /&gt;
The translation cycle generally goes like this:&lt;br /&gt;
&lt;br /&gt;
# Do draft translation&lt;br /&gt;
# Send it to your proofreader for corrections&lt;br /&gt;
# Correct mistakes&lt;br /&gt;
# Send it back to proofreader for check&lt;br /&gt;
# Send it in to Josh / check in to Git for HTML checking&lt;br /&gt;
# Correct HTML errors&lt;br /&gt;
# Finalize&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
All translations of HTML documents must be UTF8 and not any other encoding.  Our web infrastructure is UTF8 only.&lt;br /&gt;
&lt;br /&gt;
=== ProofReading ===&lt;br /&gt;
&lt;br /&gt;
All translations must be checked by someone &#039;&#039;other than the person who did the translation&#039;&#039; to look for mistakes in spelling, punctuation and grammar.  It is not humanly possible to proofread your own work.  Note that this proofreader does not need to be a PostgreSQL community member; they can just be a friend of yours who writes your language very well.&lt;br /&gt;
&lt;br /&gt;
Stupid grammar and spelling mistakes reflect badly on the whole project and make us look amateur.  Don&#039;t let them get out.&lt;br /&gt;
&lt;br /&gt;
For the groups where several RCs have the same language, of course, the RCs can check each other&#039;s work.&lt;br /&gt;
&lt;br /&gt;
=== Sharing Translation Work ===&lt;br /&gt;
&lt;br /&gt;
RCs are strongly encouraged to share work on the translations with other community members, especially other RCs. Several languages, notably Spanish and German, have several RCs who share responsibility for them.  It is up to you to figure out how to divide up the work; however, you must coordinate with each other because there will be only &#039;&#039;one&#039;&#039; Spanish presskit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning: Do not, under any circumstances, post the contents of the press release to a public mailing list, forum, or blog while you are working on it!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Using closed, private archive mailing lists (such as translators@postgresql.org) is fine, but lists like pgsql-es-ayuda would be a mess.  Don&#039;t do it.&lt;br /&gt;
&lt;br /&gt;
== Files to Translate ==&lt;br /&gt;
&lt;br /&gt;
There are &#039;&#039;two&#039;&#039; files you need to translate for a major version release.  If you do not translate &#039;&#039;both&#039;&#039; of them, you won&#039;t be included in the release process.  While the two do share text, it is formatted differently in each file and needs to be translated as a separate file.&lt;br /&gt;
&lt;br /&gt;
=== release.translate.txt ===&lt;br /&gt;
&lt;br /&gt;
This file is the text of the e-mail for Regional Contacts to send out on the day of the release.  It is pure text for that reason, and is relatively short.&lt;br /&gt;
&lt;br /&gt;
==== Customizations ====&lt;br /&gt;
&lt;br /&gt;
Each RC will be customizing this text with their own contact information, you will notice a block in the middle of the text file which looks like this:&lt;br /&gt;
&lt;br /&gt;
  YOUR NAME HERE&lt;br /&gt;
  YOUR @POSTGRESQL.ORG EMAIL HERE&lt;br /&gt;
  YOUR PHONE NUMBER HERE&lt;br /&gt;
  YOUR LOCALIZED WEB SITE HERE, IF ANY&lt;br /&gt;
&lt;br /&gt;
You needn&#039;t translate this block, as it will be filled in by the RC when they send the e-mail (hopefully!).  Also there is a dateline at the beginning of the release, like this:&lt;br /&gt;
&lt;br /&gt;
  DATE HERE: The PostgreSQL Global Development Group has released ...&lt;br /&gt;
&lt;br /&gt;
You will need to replace the &amp;quot;DATE HERE&amp;quot; words with the translated final date when the final release date is confirmed, about 5 days from the actual release.&lt;br /&gt;
&lt;br /&gt;
==== Git Users: Directories ====&lt;br /&gt;
&lt;br /&gt;
Git Users: Under press/releases/9.3/ there should be a directory with your two-letter or four-letter language code, e.g. &amp;quot;fr&amp;quot;, &amp;quot;jp&amp;quot;, &amp;quot;pt_BR&amp;quot;.  If there is not, then create one.  All of the files you translate will go in there.&lt;br /&gt;
&lt;br /&gt;
==== Release File Name ====&lt;br /&gt;
&lt;br /&gt;
When you are finished translating, you should rename this file to &amp;quot;release.XX.txt&amp;quot; where &amp;quot;XX&amp;quot; is your countries&#039;s ISO code. e.g. &amp;quot;release.br.txt&amp;quot; or &amp;quot;release.usa.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== presskit94.html ===&lt;br /&gt;
&lt;br /&gt;
This file becomes the online Press Kit for the release.  It includes the text of the e-mail release, as well as a collection of links, expanded quotes, and further information about PostgreSQL.  &lt;br /&gt;
&lt;br /&gt;
The difficulty with this file is that it&#039;s full of HTML markup which has been checked extensively by our web staff.  As such, it&#039;s critically important that you translate the text &#039;&#039;without&#039;&#039; modifying any of the HTML tags at all, except for the Customization section below.&lt;br /&gt;
&lt;br /&gt;
Save this file as &amp;quot;presskit94.html&amp;quot; in you country code directory (or just email it to Josh).  That is, do not change the name; just change the directory.&lt;br /&gt;
&lt;br /&gt;
Note: a couple of the links say &amp;quot;(English)&amp;quot;.  This is to indicate that the documents linked to will not be translated, and should contain a warning that the link goes to an English-language document.&lt;br /&gt;
&lt;br /&gt;
en/presskit94.html is supplied as an example for you to look at.&lt;br /&gt;
&lt;br /&gt;
==== Customizations ====&lt;br /&gt;
&lt;br /&gt;
In the center of the page is the Contact section.  You need to customize this section.  First, you need to add links to your language/region&#039;s PostgreSQL community page:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Web Pages&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.postgresql.org&amp;quot;&amp;gt;PostgreSQL home page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;YOUR LOCALIZED POSTGRES PAGE&amp;quot;&amp;gt;NAME OF YOUR LOCALIZED POSTGRES PAGE&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That second link needs to be customized to your local Postgres community page, like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.postgresql.org.br/&amp;quot;&amp;gt;Comunidade Brasileira de PostgreSQL&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are translating for a language which has multiple local websites (Spanish, German, Italian, etc.) then please add additional Listitems with the additional pages.  If you do not have a localized web site, simply delete that line.&lt;br /&gt;
&lt;br /&gt;
The second customization you need to make is here:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Press Inquiries&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;REGIONAL CONTACT NAME HERE&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;RC@POSTGRESQL.ORG&amp;quot;&amp;gt;REGIONAL CONTACT EMAIL HERE&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 REGIONAL CONTACT PHONE HERE&amp;lt;/p&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is where you put other contact information for the regional contacts in your language.  For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Guido Barosio&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;ar@postgresql.org&amp;quot;&amp;gt;ar@postgresql.org&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 Cell: +54911-6641-1945&amp;lt;/p&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your language covers multiple Regional Contacts, then list them all, one after the other, in the above format, ordered alphabetically by region name.  Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Argentina&amp;lt;br /&amp;gt;&lt;br /&gt;
 Guido Barosio&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;ar@postgresql.org&amp;quot;&amp;gt;ar@postgresql.org&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 Cell: +54911-6641-1945&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;Chile&amp;lt;br /&amp;gt;&lt;br /&gt;
 Álvaro Herrera&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;alvherre@postgresql.org&amp;quot;&amp;gt;alvherre@postgresql.org&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 Phone: +56-9-74990919&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 etc.&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the English version of the release for a good example of multiple contacts.&lt;br /&gt;
&lt;br /&gt;
== Translation Source Management ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to share and collaborate on editing translations: e-mail and git.  If you are part of a translation &amp;quot;team&amp;quot; (e.g. Spanish) then you will need to pick &#039;&#039;one&#039;&#039; of these ways to use.  Git is preferred for those who know how to use it, but e-mail is available if needed.&lt;br /&gt;
&lt;br /&gt;
=== Translating by E-mail ===&lt;br /&gt;
&lt;br /&gt;
Josh will send the Regional Contacts list the final copies of the translate files in an e-mailed zip archive, and later on any line-item edits you need to have if we have last-minute text fixes.  &lt;br /&gt;
&lt;br /&gt;
You then e-mail around copies of the files to your co-translators and proofreader(s), being careful to make sure each person has the most updated version.  I suggest using version numbers to ensure this.&lt;br /&gt;
&lt;br /&gt;
Then you rename the files appropriately, zip them (or bzip or gzip) into an archive, and e-mail them to Josh.  The zipping of the files is important because it prevents e-mail clients and servers from mangling the encodings, which otherwise tends to happen.&lt;br /&gt;
&lt;br /&gt;
=== Translating by CVS ===&lt;br /&gt;
&lt;br /&gt;
We are no longer supporting CVS for translations.&lt;br /&gt;
&lt;br /&gt;
=== Translating by git ===&lt;br /&gt;
&lt;br /&gt;
The releases are also available from git.postgresql.org.  Git is strongly recommended for translation teams (Spanish, German, etc.) in order to coordinate their activities.  However, Git syntax and concepts are not intuitive, so you may not want to use it if you don&#039;t have prior experience.&lt;br /&gt;
&lt;br /&gt;
In order to be able to commit your stuff from git, please follow this procedure:&lt;br /&gt;
&lt;br /&gt;
# get a PostgreSQL Community Profile, if you don&#039;t have one already.&lt;br /&gt;
# add your ssh key to your Profile.&lt;br /&gt;
# e-mail Josh about being added to the git repo&lt;br /&gt;
# clone the git repo:&lt;br /&gt;
&lt;br /&gt;
  git clone ssh://git@git.postgresql.org/press.git&lt;br /&gt;
&lt;br /&gt;
5. add your translation files, and then add them to git&lt;br /&gt;
&lt;br /&gt;
  mkdir releases/9.3/XX&lt;br /&gt;
  ... create the initial version of the files ...&lt;br /&gt;
  git add releases/9.3/XX&lt;br /&gt;
  git commit -a  # make sure you only include the interesting files!&lt;br /&gt;
&lt;br /&gt;
7. push a copy to the central repository&lt;br /&gt;
&lt;br /&gt;
  git commit -a&lt;br /&gt;
  git push origin&lt;br /&gt;
&lt;br /&gt;
If you are working with others, you will need to frequently &amp;quot;pull&amp;quot; a copy of your translations before doing work yourself:&lt;br /&gt;
&lt;br /&gt;
  git pull origin&lt;br /&gt;
&lt;br /&gt;
When you are done with your translations, notify us using the translators@ list and we&#039;ll merge the branches.&lt;br /&gt;
&lt;br /&gt;
Please also read [[Working With Git]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Advocacy]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=HowToTranslate&amp;diff=24761</id>
		<title>HowToTranslate</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=HowToTranslate&amp;diff=24761"/>
		<updated>2015-05-30T11:22:27Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How to Translate Releases =&lt;br /&gt;
&lt;br /&gt;
This is a set of instructions for Regional Contacts (RCs) and Advocacy volunteers on how to translate major version releases and other PR materials for PostgreSQL.  It is not about translating the web site or translating PostgreSQL itself.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure &amp;amp; Timeline ===&lt;br /&gt;
&lt;br /&gt;
Generally you will have a very short time to get a release translated.  The schedule generally goes like this:&lt;br /&gt;
&lt;br /&gt;
# Day Minus 15: draft release send to Regional Contacts for questions and typo-spotting.&lt;br /&gt;
# Day Minus 12: release finalized, offered to RCs for translation&lt;br /&gt;
# Day Minus 6: draft copies of all languages checked in&lt;br /&gt;
# Day Minus 4: final versions of all languages checked in &lt;br /&gt;
&lt;br /&gt;
Yes, that does mean that you need to have your translations finalized at least 4 days before the final release (and preferably earlier).  This is because all Presskits need to be integrated into the www.postgresql.org infrastructure, checked, and corrected.&lt;br /&gt;
&lt;br /&gt;
The translation cycle generally goes like this:&lt;br /&gt;
&lt;br /&gt;
# Do draft translation&lt;br /&gt;
# Send it to your proofreader for corrections&lt;br /&gt;
# Correct mistakes&lt;br /&gt;
# Send it back to proofreader for check&lt;br /&gt;
# Send it in to Josh / check in to Git for HTML checking&lt;br /&gt;
# Correct HTML errors&lt;br /&gt;
# Finalize&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
All translations of HTML documents must be UTF8 and not any other encoding.  Our web infrastructure is UTF8 only.&lt;br /&gt;
&lt;br /&gt;
=== ProofReading ===&lt;br /&gt;
&lt;br /&gt;
All translations must be checked by someone &#039;&#039;other than the person who did the translation&#039;&#039; to look for mistakes in spelling, punctuation and grammar.  It is not humanly possible to proofread your own work.  Note that this proofreader does not need to be a PostgreSQL community member; they can just be a friend of yours who writes your language very well.&lt;br /&gt;
&lt;br /&gt;
Stupid grammar and spelling mistakes reflect badly on the whole project and make us look amateur.  Don&#039;t let them get out.&lt;br /&gt;
&lt;br /&gt;
For the groups where several RCs have the same language, of course, the RCs can check each other&#039;s work.&lt;br /&gt;
&lt;br /&gt;
=== Sharing Translation Work ===&lt;br /&gt;
&lt;br /&gt;
RCs are strongly encouraged to share work on the translations with other community members, especially other RCs. Several languages, notably Spanish and German, have several RCs who share responsibility for them.  It is up to you to figure out how to divide up the work; however, you must coordinate with each other because there will be only &#039;&#039;one&#039;&#039; Spanish presskit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning: Do not, under any circumstances, post the contents of the press release to a public mailing list, forum, or blog while you are working on it!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Using closed, private archive mailing lists (such as translators@postgresql.org) is fine, but lists like pgsql-es-ayuda would be a mess.  Don&#039;t do it.&lt;br /&gt;
&lt;br /&gt;
== Files to Translate ==&lt;br /&gt;
&lt;br /&gt;
There are &#039;&#039;two&#039;&#039; files you need to translate for a major version release.  If you do not translate &#039;&#039;both&#039;&#039; of them, you won&#039;t be included in the release process.  While the two do share text, it is formatted differently in each file and needs to be translated as a separate file.&lt;br /&gt;
&lt;br /&gt;
=== release.translate.txt ===&lt;br /&gt;
&lt;br /&gt;
This file is the text of the e-mail for Regional Contacts to send out on the day of the release.  It is pure text for that reason, and is relatively short.&lt;br /&gt;
&lt;br /&gt;
==== Customizations ====&lt;br /&gt;
&lt;br /&gt;
Each RC will be customizing this text with their own contact information, you will notice a block in the middle of the text file which looks like this:&lt;br /&gt;
&lt;br /&gt;
  YOUR NAME HERE&lt;br /&gt;
  YOUR @POSTGRESQL.ORG EMAIL HERE&lt;br /&gt;
  YOUR PHONE NUMBER HERE&lt;br /&gt;
  YOUR LOCALIZED WEB SITE HERE, IF ANY&lt;br /&gt;
&lt;br /&gt;
You needn&#039;t translate this block, as it will be filled in by the RC when they send the e-mail (hopefully!).  Also there is a dateline at the beginning of the release, like this:&lt;br /&gt;
&lt;br /&gt;
  DATE HERE: The PostgreSQL Global Development Group has released ...&lt;br /&gt;
&lt;br /&gt;
You will need to replace the &amp;quot;DATE HERE&amp;quot; words with the translated final date when the final release date is confirmed, about 5 days from the actual release.&lt;br /&gt;
&lt;br /&gt;
==== Git Users: Directories ====&lt;br /&gt;
&lt;br /&gt;
Git Users: Under press/releases/9.3/ there should be a directory with your two-letter or four-letter language code, e.g. &amp;quot;fr&amp;quot;, &amp;quot;jp&amp;quot;, &amp;quot;pt_BR&amp;quot;.  If there is not, then create one.  All of the files you translate will go in there.&lt;br /&gt;
&lt;br /&gt;
==== Release File Name ====&lt;br /&gt;
&lt;br /&gt;
When you are finished translating, you should rename this file to &amp;quot;release.XX.txt&amp;quot; where &amp;quot;XX&amp;quot; is your countries&#039;s ISO code. e.g. &amp;quot;release.br.txt&amp;quot; or &amp;quot;release.usa.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== presskit94.html ===&lt;br /&gt;
&lt;br /&gt;
This file becomes the online Press Kit for the release.  It includes the text of the e-mail release, as well as a collection of links, expanded quotes, and further information about PostgreSQL.  &lt;br /&gt;
&lt;br /&gt;
The difficulty with this file is that it&#039;s full of HTML markup which has been checked extensively by our web staff.  As such, it&#039;s critically important that you translate the text &#039;&#039;without&#039;&#039; modifying any of the HTML tags at all, except for the Customization section below.&lt;br /&gt;
&lt;br /&gt;
Save this file as &amp;quot;presskit94.html&amp;quot; in you country code directory (or just email it to Josh).  That is, do not change the name; just change the directory.&lt;br /&gt;
&lt;br /&gt;
Note: a couple of the links say &amp;quot;(English)&amp;quot;.  This is to indicate that the documents linked to will not be translated, and should contain a warning that the link goes to an English-language document.&lt;br /&gt;
&lt;br /&gt;
en/presskit94.html is supplied as an example for you to look at.&lt;br /&gt;
&lt;br /&gt;
==== Customizations ====&lt;br /&gt;
&lt;br /&gt;
In the center of the page is the Contact section.  You need to customize this section.  First, you need to add links to your language/region&#039;s PostgreSQL community page:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Web Pages&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.postgresql.org&amp;quot;&amp;gt;PostgreSQL home page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;YOUR LOCALIZED POSTGRES PAGE&amp;quot;&amp;gt;NAME OF YOUR LOCALIZED POSTGRES PAGE&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That second link needs to be customized to your local Postgres community page, like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.postgresql.org.br/&amp;quot;&amp;gt;Comunidade Brasileira de PostgreSQL&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are translating for a language which has multiple local websites (Spanish, German, Italian, etc.) then please add additional Listitems with the additional pages.  If you do not have a localized web site, simply delete that line.&lt;br /&gt;
&lt;br /&gt;
The second customization you need to make is here:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Press Inquiries&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;REGIONAL CONTACT NAME HERE&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;RC@POSTGRESQL.ORG&amp;quot;&amp;gt;REGIONAL CONTACT EMAIL HERE&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 REGIONAL CONTACT PHONE HERE&amp;lt;/p&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is where you put other contact information for the regional contacts in your language.  For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Guido Barosio&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;ar@postgresql.org&amp;quot;&amp;gt;ar@postgresql.org&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 Cell: +54911-6641-1945&amp;lt;/p&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your language covers multiple Regional Contacts, then list them all, one after the other, in the above format, ordered alphabetically by region name.  Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&amp;lt;p&amp;gt;Argentina&amp;lt;br /&amp;gt;&lt;br /&gt;
 Guido Barosio&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;ar@postgresql.org&amp;quot;&amp;gt;ar@postgresql.org&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 Cell: +54911-6641-1945&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;Chile&amp;lt;br /&amp;gt;&lt;br /&gt;
 Álvaro Herrera&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;a href=&amp;quot;alvherre@postgresql.org&amp;quot;&amp;gt;alvherre@postgresql.org&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 Phone: +56-9-74990919&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 etc.&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the English version of the release for a good example of multiple contacts.&lt;br /&gt;
&lt;br /&gt;
== Translation Source Management ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to share and collaborate on editing translations: e-mail and git.  If you are part of a translation &amp;quot;team&amp;quot; (e.g. Spanish) then you will need to pick &#039;&#039;one&#039;&#039; of these ways to use.  Git is preferred for those who know how to use it, but e-mail is available if needed.&lt;br /&gt;
&lt;br /&gt;
=== Translating by E-mail ===&lt;br /&gt;
&lt;br /&gt;
Josh will send the Regional Contacts list the final copies of the translate files in an e-mailed zip archive, and later on any line-item edits you need to have if we have last-minute text fixes.  &lt;br /&gt;
&lt;br /&gt;
You then e-mail around copies of the files to your co-translators and proofreader(s), being careful to make sure each person has the most updated version.  I suggest using version numbers to ensure this.&lt;br /&gt;
&lt;br /&gt;
Then you rename the files appropriately, zip them (or bzip or gzip) into an archive, and e-mail them to Josh.  The zipping of the files is important because it prevents e-mail clients and servers from mangling the encodings, which otherwise tends to happen.&lt;br /&gt;
&lt;br /&gt;
=== Translating by CVS ===&lt;br /&gt;
&lt;br /&gt;
We are no longer supporting CVS for translations.&lt;br /&gt;
&lt;br /&gt;
=== Translating by git ===&lt;br /&gt;
&lt;br /&gt;
The releases are also available from git.postgresql.org.  Git is stongly recommended for translation teams (Spanish, German, etc.) in order to coordinate their activities.  However, Git syntax and concepts are not intuitive, so you may not want to use it if you don&#039;t have prior experience.&lt;br /&gt;
&lt;br /&gt;
In order to be able to commit your stuff from git, please follow this procedure:&lt;br /&gt;
&lt;br /&gt;
# get a PostgreSQL Community Profile, if you don&#039;t have one already.&lt;br /&gt;
# add your ssh key to your Profile.&lt;br /&gt;
# e-mail Josh about being added to the git repo&lt;br /&gt;
# clone the git repo:&lt;br /&gt;
&lt;br /&gt;
  git clone ssh://git@git.postgresql.org/press.git&lt;br /&gt;
&lt;br /&gt;
5. add your translation files, and then add them to git&lt;br /&gt;
&lt;br /&gt;
  mkdir releases/9.3/XX&lt;br /&gt;
  ... create the initial version of the files ...&lt;br /&gt;
  git add releases/9.3/XX&lt;br /&gt;
  git commit -a  # make sure you only include the interesting files!&lt;br /&gt;
&lt;br /&gt;
7. push a copy to the central repository&lt;br /&gt;
&lt;br /&gt;
  git commit -a&lt;br /&gt;
  git push origin&lt;br /&gt;
&lt;br /&gt;
If you are working with others, you will need to frequently &amp;quot;pull&amp;quot; a copy of your translations before doing work yourself:&lt;br /&gt;
&lt;br /&gt;
  git pull origin&lt;br /&gt;
&lt;br /&gt;
When you are done with your translations, notify us using the translators@ list and we&#039;ll merge the branches.&lt;br /&gt;
&lt;br /&gt;
Please also read [[Working With Git]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Advocacy]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=RPM_Packaging&amp;diff=24665</id>
		<title>RPM Packaging</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=RPM_Packaging&amp;diff=24665"/>
		<updated>2015-05-12T18:38:55Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== How are RPMs packaged? ===&lt;br /&gt;
&lt;br /&gt;
This was written by Lamar Owen and Devrim Gündüz, 2006-10-16, rewritten 2014-09 by Craig Ringer.&lt;br /&gt;
&lt;br /&gt;
A git repository is maintained at http://git.postgresql.org/gitweb/?p=pgrpms.git, which for each package contains:&lt;br /&gt;
&lt;br /&gt;
# A set of patches to make certain portions of the sources conform more closely with how Red Hat packages its own matching RPMs, better integrate into multiarch installs, etc;&lt;br /&gt;
# The initscript / systemd service file;&lt;br /&gt;
# Any other ancillary scripts and files;&lt;br /&gt;
# A README.rpm-dist document that tries to adequately document both the differences between the RPM build and the WHY of the differences, as well as useful RPM environment operations (like, using syslog, upgrading, getting postmaster to start at OS boot, etc);&lt;br /&gt;
# The spec file that throws it all together, specifying what files are in what subpackages, the version, dependencies, and a lot more.&lt;br /&gt;
&lt;br /&gt;
A given &amp;quot;package&amp;quot; like PostgreSQL will have many copies of the above, one for each distro release and PostgreSQL version. For example, the package for PostgreSQL 9.4 on Fedora 20 is in &amp;lt;tt&amp;gt;9.4/postgresql/F-20&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PGDG RPM maintainer builds the SRPM, then executes RPM builds on a variety of build worker machines and pushes the resulting RPMs and SRPMs to http://yum.postgresql.org/srpms/$version/$distro/$distro-$release-$arch/ and http://yum.postgresql.org/$version/$distro/$distro-$release-$arch/ , e.g. http://yum.postgresql.org/srpms/9.4/fedora/fedora-20-x86_64/ and http://yum.postgresql.org/9.4/fedora/fedora-20-x86_64/ .&lt;br /&gt;
&lt;br /&gt;
The Yum repository metadata is then updated so that yum can find the new packages.&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux distribution]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Error_logging_in_COPY&amp;diff=24664</id>
		<title>Error logging in COPY</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Error_logging_in_COPY&amp;diff=24664"/>
		<updated>2015-05-12T18:35:15Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Reverted edits by Phuongnh2 (talk) to last revision by Boshomi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== History ==&lt;br /&gt;
&lt;br /&gt;
Error logging in COPY was a proposed feature developed by Aster Data against the PostgreSQL 9.0 code base.  It was submitted and reviewed ([https://commitfest.postgresql.org/action/patch_view?id=173 1]) but not accepted into the core product for that or any other version so far.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The purpose of error logging in COPY is to prevent the backend from erroring out if a malformed tuple is encountered during a COPY operation. Bad tuples can either be skipped or logged into an error logging table.&lt;br /&gt;
&lt;br /&gt;
The format of the error logging table is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE error_logging_table(&lt;br /&gt;
   tupletimestamp TIMESTAMP WITH TIME ZONE,&lt;br /&gt;
   targettable    VARCHAR,&lt;br /&gt;
   dmltype        CHAR(1),&lt;br /&gt;
   errmessage     VARCHAR,&lt;br /&gt;
   sqlerrcode     CHAR(5),&lt;br /&gt;
   label          VARCHAR,&lt;br /&gt;
   key            BIGINT,&lt;br /&gt;
   rawdata        BYTEA&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The COPY command returns the number of successfully copied tuples only.&lt;br /&gt;
&lt;br /&gt;
== COPY options ==&lt;br /&gt;
&lt;br /&gt;
Error logging is set by adding options to the COPY command. Here is the list of the available options:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Variable name&lt;br /&gt;
|Description&lt;br /&gt;
|Default value&lt;br /&gt;
|-&lt;br /&gt;
|ERROR_LOGGING&lt;br /&gt;
|Enables error handling for COPY commands (when set to true).&lt;br /&gt;
|true&lt;br /&gt;
|-&lt;br /&gt;
|ERROR_LOGGING_SKIP_BAD_ROWS&lt;br /&gt;
|Enables the ability to skip malformed tuples that are encountered in COPY commands (when set to true).&lt;br /&gt;
|true&lt;br /&gt;
|-&lt;br /&gt;
|ERROR_LOGGING_MAX_ERRORS&lt;br /&gt;
|Maximum number of bad rows to log before stopping the COPY operation (0 means unlimited).&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|ERROR_LOGGING_SCHEMA_NAME&lt;br /&gt;
|Schema name of the table where malformed tuples are inserted by the error logging module&lt;br /&gt;
|&#039;public&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ERROR_LOGGING_TABLE_NAME&lt;br /&gt;
|Relation name where malformed tuples are inserted by the error logging module. The table is automatically created if it does not exist.&lt;br /&gt;
|&#039;error_table&#039;&lt;br /&gt;
|-&lt;br /&gt;
|ERROR_LOGGING_LABEL&lt;br /&gt;
|Optional label that is used to identify malformed tuples&lt;br /&gt;
|COPY command text&lt;br /&gt;
|-&lt;br /&gt;
|ERROR_LOGGING_KEY&lt;br /&gt;
|Optional key to identify malformed tuples&lt;br /&gt;
|Index of the tuple in the COPY stream&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bad tuples can be rejected for a number of reasons (extra or missing column, constraint violation, ...). The error table tries to capture as much context as possible about the error. If the table does not exist it is created automatically. The format of the error logging table is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE error_logging_table(&lt;br /&gt;
   tupletimestamp TIMESTAMP WITH TIME ZONE,&lt;br /&gt;
   targettable    VARCHAR,&lt;br /&gt;
   dmltype        CHAR(1),&lt;br /&gt;
   errmessage     VARCHAR,&lt;br /&gt;
   sqlerrcode     CHAR(5),&lt;br /&gt;
   label          VARCHAR,&lt;br /&gt;
   key            BIGINT,&lt;br /&gt;
   rawdata        BYTEA&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tupletimestamp stores the time at which the error occured. targettable describes the table in which the row was inserted when the error occured. The exact error message and sql error code are recorded in errmessage and sqlerrcode, respectively. The original data of the row can be found in rawdata.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TEMP TABLE foo (a bigint, b text);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- input_file.txt --&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 1	one&lt;br /&gt;
 2	&lt;br /&gt;
 3	three	111&lt;br /&gt;
 four    4&lt;br /&gt;
 5	five&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
-- end of input_file.txt --&lt;br /&gt;
&lt;br /&gt;
===error logging off===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 COPY foo FROM &#039;input_file.txt&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ERROR:  missing data for column &amp;quot;b&amp;quot;&lt;br /&gt;
 CONTEXT:  COPY foo, line 2: &amp;quot;2&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===skip bad rows===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 --skip bad rows&lt;br /&gt;
 COPY foo FROM &#039;input_file.txt&#039; (ERROR_LOGGING, ERROR_LOGGING_SKIP_BAD_ROWS);&lt;br /&gt;
 SELECT * from foo;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  a |  b   &lt;br /&gt;
 ---+------&lt;br /&gt;
  1 | one&lt;br /&gt;
  5 | five&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===turn error logging on (default logs in error_logging_table)===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 --turn error logging on (default logs in error_logging_table)&lt;br /&gt;
 COPY foo FROM &#039;input_file.txt&#039; (ERROR_LOGGING);&lt;br /&gt;
 SELECT * from foo;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  a |  b   &lt;br /&gt;
 ---+------&lt;br /&gt;
  1 | one&lt;br /&gt;
  5 | five&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 SELECT * FROM error_logging_table;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  key |           tupletimestamp            |              label              |  targettable  | dmltype |                errmessage                | sqlerrcode |         rawdata          &lt;br /&gt;
 -----+-------------------------------------+---------------------------------+---------------+---------+------------------------------------------+------------+--------------------------&lt;br /&gt;
    2 | Thu Sep 10 07:09:17.869521 2009 PDT | COPY foo FROM &#039;input_file.txt&#039;; | pg_temp_2.foo | C       | missing data for column &amp;quot;b&amp;quot;              | 22P04      | \x32&lt;br /&gt;
    3 | Thu Sep 10 07:09:17.86953 2009 PDT  | COPY foo FROM &#039;input_file.txt&#039;; | pg_temp_2.foo | C       | extra data after last expected column    | 22P04      | \x3309746872656509313131&lt;br /&gt;
    4 | Thu Sep 10 07:09:17.869538 2009 PDT | COPY foo FROM &#039;input_file.txt&#039;; | pg_temp_2.foo | C       | invalid input syntax for integer: &amp;quot;four&amp;quot; | 22P02      | \x666f75720934&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Redirect to another table with a specific label===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 -- Redirect to another table with a specific label&lt;br /&gt;
 COPY foo FROM &#039;input_file.txt&#039; (ERROR_LOGGING, ERROR_LOGGING_SCHEMA_NAME &#039;error&#039;, ERROR_LOGGING_TABLE_NAME &#039;table1&#039;, ERROR_LOGGING_LABEL &#039;batch1&#039;);&lt;br /&gt;
 SELECT * FROM error.table1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  key |           tupletimestamp            | label  |  targettable  | dmltype |                errmessage                | sqlerrcode |         rawdata          &lt;br /&gt;
 -----+-------------------------------------+--------+---------------+---------+------------------------------------------+------------+--------------------------&lt;br /&gt;
    2 | Thu Sep 10 07:09:17.869521 2009 PDT | batch1 | pg_temp_2.foo | C       | missing data for column &amp;quot;b&amp;quot;              | 22P04      | \x32&lt;br /&gt;
    3 | Thu Sep 10 07:09:17.86953 2009 PDT  | batch1 | pg_temp_2.foo | C       | extra data after last expected column    | 22P04      | \x3309746872656509313131&lt;br /&gt;
    4 | Thu Sep 10 07:09:17.869538 2009 PDT | batch1 | pg_temp_2.foo | C       | invalid input syntax for integer: &amp;quot;four&amp;quot; | 22P02      | \x666f75720934&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Limit to 2 bad rows: ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 -- Limit to 2 bad rows:  &lt;br /&gt;
 COPY foo FROM &#039;input_file.txt&#039; (ERROR_LOGGING, ERROR_LOGGING_MAX_ERRORS 2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ERROR:  invalid input syntax for integer: &amp;quot;four&amp;quot;&lt;br /&gt;
 CONTEXT:  COPY foo, line 4, column a: &amp;quot;four&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
 SELECT count(*) from error_logging_table;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  count &lt;br /&gt;
  -------&lt;br /&gt;
       0&lt;br /&gt;
  (1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SQL]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2015_Developer_Unconference&amp;diff=24583</id>
		<title>PgCon 2015 Developer Unconference</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2015_Developer_Unconference&amp;diff=24583"/>
		<updated>2015-04-16T19:18:15Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* RSVPs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An Unconference-style multi-track (three tracks are currently planned) event for active PostgreSQL developers will be held from the afternoon of Tuesday 16 June, 2015 through Wednesday 17 June 2015 at the University of Ottawa, as part of PGCon 2015.  This Unconference will be focused on technical PostgreSQL development discussions ranging from Clustering and replication to the infrastructure which runs postgresql.org.&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
&lt;br /&gt;
Developers are asked to propose topics which they wish to either present on or which they would like another individual to present on.  All topics should be clearly related to PostgreSQL development.  The topic should be added to the table below and any required attendees (presumably at least the presenter, and the requester if different) listed.  Other attendees of the Unconference who are interested should list themselves as Optional.  Note that non-technical topics related to PostgreSQL development will be addressed during the invite-only Developer meeting, being held in advance of the Unconference.  Further, the Developer Unconference is for developers of PostgreSQL and user-oriented topics are not appropriate for this venue.&lt;br /&gt;
&lt;br /&gt;
== Slot assignment ==&lt;br /&gt;
&lt;br /&gt;
Slots will be assigned based on the topic&#039;s interest among the attendees of the Unconference (the number of individuals who listed themselves as attendees).  Final determination on any particular topic will be made by the Unconference organizers.  Please only participate if you are confident of your attendance at the Unconference.&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
&lt;br /&gt;
These meetings will be held at the University of Ottawa.  The topics selected, the schedule and the specific room assignments will be published closer to the event and will be based on the information provided here.  Please direct any questions to Dave Page (dpage@pgadmin.org).&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
While the Unconference is open to all attendees of PGCon, formal invitations will be sent to specific PostgreSQL developers, including the Core team, Major Contributors, Committers, and other developers who have been involved in the 9.4 release.  These invitations are intended to encourage developers to attend the Unconference but we are unable to guarantee every invitee a speaking slot.&lt;br /&gt;
&lt;br /&gt;
== RSVPs ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Josh Berkus&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=Topics=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Topic&lt;br /&gt;
!Policy&lt;br /&gt;
!Taker of Notes&lt;br /&gt;
!Required Attendees&lt;br /&gt;
!Optional Attendees&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Clustering&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|pgAdmin4&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Dave Page, Stephen Frost&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Infrastructure Q&amp;amp;A&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Dave Page, Stephen Frost, Stefan Kaltenbrunner&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|WWW Team Meeting&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Dave Page, Stephen Frost, Stefan Kaltenbrunner&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Advocacy Team Meeting&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Stephen Frost&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Security Team Meeting&lt;br /&gt;
|Closed&lt;br /&gt;
|&lt;br /&gt;
|Heikki Linnakangas, Stephen Frost&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Clustering ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== pgAdmin4 ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Q&amp;amp;A ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== WWW Team Meeting ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== Advocacy Team Meeting ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== Security Team Meeting ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2015_Developer_Unconference&amp;diff=24582</id>
		<title>PgCon 2015 Developer Unconference</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2015_Developer_Unconference&amp;diff=24582"/>
		<updated>2015-04-16T19:17:59Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An Unconference-style multi-track (three tracks are currently planned) event for active PostgreSQL developers will be held from the afternoon of Tuesday 16 June, 2015 through Wednesday 17 June 2015 at the University of Ottawa, as part of PGCon 2015.  This Unconference will be focused on technical PostgreSQL development discussions ranging from Clustering and replication to the infrastructure which runs postgresql.org.&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
&lt;br /&gt;
Developers are asked to propose topics which they wish to either present on or which they would like another individual to present on.  All topics should be clearly related to PostgreSQL development.  The topic should be added to the table below and any required attendees (presumably at least the presenter, and the requester if different) listed.  Other attendees of the Unconference who are interested should list themselves as Optional.  Note that non-technical topics related to PostgreSQL development will be addressed during the invite-only Developer meeting, being held in advance of the Unconference.  Further, the Developer Unconference is for developers of PostgreSQL and user-oriented topics are not appropriate for this venue.&lt;br /&gt;
&lt;br /&gt;
== Slot assignment ==&lt;br /&gt;
&lt;br /&gt;
Slots will be assigned based on the topic&#039;s interest among the attendees of the Unconference (the number of individuals who listed themselves as attendees).  Final determination on any particular topic will be made by the Unconference organizers.  Please only participate if you are confident of your attendance at the Unconference.&lt;br /&gt;
&lt;br /&gt;
== Venue ==&lt;br /&gt;
&lt;br /&gt;
These meetings will be held at the University of Ottawa.  The topics selected, the schedule and the specific room assignments will be published closer to the event and will be based on the information provided here.  Please direct any questions to Dave Page (dpage@pgadmin.org).&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
While the Unconference is open to all attendees of PGCon, formal invitations will be sent to specific PostgreSQL developers, including the Core team, Major Contributors, Committers, and other developers who have been involved in the 9.4 release.  These invitations are intended to encourage developers to attend the Unconference but we are unable to guarantee every invitee a speaking slot.&lt;br /&gt;
&lt;br /&gt;
== RSVPs ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Josh Berkus&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Dave Page&lt;br /&gt;
&lt;br /&gt;
=Topics=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Topic&lt;br /&gt;
!Policy&lt;br /&gt;
!Taker of Notes&lt;br /&gt;
!Required Attendees&lt;br /&gt;
!Optional Attendees&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Clustering&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|pgAdmin4&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Dave Page, Stephen Frost&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Infrastructure Q&amp;amp;A&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Dave Page, Stephen Frost, Stefan Kaltenbrunner&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|WWW Team Meeting&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Dave Page, Stephen Frost, Stefan Kaltenbrunner&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Advocacy Team Meeting&lt;br /&gt;
|Open&lt;br /&gt;
|&lt;br /&gt;
|Stephen Frost&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background-color:lightgray;&amp;quot;&lt;br /&gt;
|Security Team Meeting&lt;br /&gt;
|Closed&lt;br /&gt;
|&lt;br /&gt;
|Heikki Linnakangas, Stephen Frost&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Clustering ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== pgAdmin4 ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Q&amp;amp;A ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== WWW Team Meeting ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== Advocacy Team Meeting ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
== Security Team Meeting ==&lt;br /&gt;
&lt;br /&gt;
=== Meeting Notes ===&lt;br /&gt;
* To be filled in&lt;br /&gt;
&lt;br /&gt;
=== Attendees ===&lt;br /&gt;
* To be filled in&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Mastermind&amp;diff=23688</id>
		<title>User:Mastermind</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Mastermind&amp;diff=23688"/>
		<updated>2014-11-06T18:58:50Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;m Stefan Kaltenbrunner - you can reach me in #postgresql under the nick mastermind or simply send an email to stefan@kaltenbrunner.cc.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=22487</id>
		<title>Infrastructure team</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=22487"/>
		<updated>2014-05-30T21:24:24Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: sync with reality&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Infrastructure Team ==&lt;br /&gt;
&lt;br /&gt;
The Infrastructure team is responsible for running all of the postgresql.org infrastructure. This includes a wide variety of public and non-public services.  PostgreSQL website development is discussed on the [http://archives.postgresql.org/pgsql-www/ pgsql-www mailing list]. Source code for the postgresql.org web site is stored in a public GIT repository, and is available on [http://git.postgresql.org/gitweb/?p=pgweb.git;a=summary]&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Team Members ==&lt;br /&gt;
&lt;br /&gt;
The following people are part of the sysadmin team running the postgresql.org infrastructure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Álvaro Herrera&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Joe Conway&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Talk:Main_Page&amp;diff=22486</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Talk:Main_Page&amp;diff=22486"/>
		<updated>2014-05-30T18:30:36Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Reverted edits by Empowerusauz (talk) to last revision by Mastermind&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi All,&lt;br /&gt;
&lt;br /&gt;
Does PostgreSQL run on Sun Solaris SPARC ?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
To be consistent, I suggest changing &amp;quot;日本&amp;quot; (Japan, the country) to &amp;quot;日本語&amp;quot; (Japanese, the language) in the &amp;quot;Alternate Languages&amp;quot; section. [[User:Nicolas.barbier|Nicolas.barbier]] 21:01, 22 May 2011 (UTC)&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
Hi ALL&lt;br /&gt;
&lt;br /&gt;
I have added big para on &#039;&#039;&#039;BigreSQL&#039;&#039;&#039;, But look like it is not saved hence writing once again.&lt;br /&gt;
 Bigresql = PostgreSQL engine + ProgresDB + BigData &lt;br /&gt;
&lt;br /&gt;
That is what I have visulazing and I am finding it is future for Postgres as opensource DB and it can take on any Appliance in that case and also support the Schema free Database.&lt;br /&gt;
&lt;br /&gt;
I have complete a though process on this. I am interested to development of same &lt;br /&gt;
before that I like to get community view on this,&lt;br /&gt;
&lt;br /&gt;
Depend on response I will start giving detail design here. though I have already submiited my thought to Posgres Development team also.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
Jayant Dani&lt;br /&gt;
Solution Archiect&lt;br /&gt;
Head of CoE Technology (Big Data, Mobility, Portal)&lt;br /&gt;
TCS&lt;br /&gt;
Jayant.dani@tcs.com&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Running_%26_Installing_PostgreSQL_On_Native_Windows&amp;diff=21567</id>
		<title>Running &amp; Installing PostgreSQL On Native Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Running_%26_Installing_PostgreSQL_On_Native_Windows&amp;diff=21567"/>
		<updated>2013-12-15T10:44:17Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Undo revision 21558 by Busyguru (talk) spam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Supported Platforms ==&lt;br /&gt;
=== What versions of Windows does PostgreSQL run on?===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is supported on Windows XP and above, at least as of version 9.0. It will run on 32 and 64 bit systems.&lt;br /&gt;
&lt;br /&gt;
Versions of the server are not tested on new operating system versions that are released after a newer major version of the server was released. For example, Windows 7 was released after PostgreSQL 8.4, so PostgreSQL 8.3 will not be supported on it. Similarly, when the upcoming RHEL 6 is released, only PostgreSQL 9.0.x will be supported on it. We aim to support new versions of Windows in the PostgreSQL major version following their release at the latest. &lt;br /&gt;
&lt;br /&gt;
For information about platforms supported by the One-click installer, please see the installer download page, off the main [http://www.postgresql.org/download/windows download page for windows].&lt;br /&gt;
&lt;br /&gt;
For information on non-Windows platforms see the [[FAQ|main FAQ]] and the [http://www.postgresql.org/download/ main download page].&lt;br /&gt;
&lt;br /&gt;
=== What Windows platforms are NOT supported? ===&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL installers are &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; tested or supported on:&lt;br /&gt;
&lt;br /&gt;
* Windows XP Embedded&lt;br /&gt;
* Windows 2000&lt;br /&gt;
* Windows NT 4&lt;br /&gt;
* Windows NT 3.5.x&lt;br /&gt;
* Windows 95/98/ME/3.x&lt;br /&gt;
* Windows CE&lt;br /&gt;
* Windows Mobile&lt;br /&gt;
&lt;br /&gt;
These platforms are not supported. Please do not ask the mailing list for help with any of these platforms.&lt;br /&gt;
&lt;br /&gt;
Please read the troubleshooting notes on [[Troubleshooting Installation#Installation fails on windows embedded|installation on embedded versions of windows]] for some more information about embedded windows.&lt;br /&gt;
&lt;br /&gt;
=== I heard that NT4 and Windows 2000 are supported. Is that true? ===&lt;br /&gt;
Although not officially supported, PostgreSQL may run on Windows NT4 and Windows 2000&lt;br /&gt;
with a few minor issues including:&lt;br /&gt;
* The installer may not work correctly, thus you will need to install PostgreSQL manually from the binary .zip release, or compile it yourself.&lt;br /&gt;
* PostgreSQL uses a feature in the NTFS filesystem called &#039;reparse points&#039; to implement tablespaces. Reparse points are not available in NT4, hence tablespaces cannot be used on NT4.&lt;br /&gt;
* There is no &#039;runas.exe&#039; included in Windows NT4 as standard, making it difficult to start PostgreSQL from an administrative account.&lt;br /&gt;
It should also be noted that very little testing has been done on NT4.&lt;br /&gt;
* No testing is done on Windows NT 4 or Windows 2000, so newer versions may not work on these platforms.&lt;br /&gt;
&lt;br /&gt;
Please do not ask for help with these obsolete platforms on the mailing list. Some of the [http://www.postgresql.org/support/professional_support professional support] companies may be able to assist you, though.&lt;br /&gt;
&lt;br /&gt;
=== What about Windows 95/98/ME? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL requires functionality that is not available on these&lt;br /&gt;
platforms and will not run on them. If you need to run PostgreSQL&lt;br /&gt;
on these platforms, you can look at the &lt;br /&gt;
[http://www.postgresql.org/files/documentation/faqs/text/FAQ_CYGWIN Cygwin]&lt;br /&gt;
port, which has basic support for 9x platforms.&lt;br /&gt;
&lt;br /&gt;
=== Is there a 64-bit build of PostgreSQL for Windows? ===&lt;br /&gt;
&lt;br /&gt;
Yes. A [[64bit Windows port]] was released for [[PostgreSQL 9.0]].&lt;br /&gt;
&lt;br /&gt;
32-bit builds of previous versions of PostgreSQL generally run fine on 64-bit Windows. Though they cannot practically use more than about 1GB of shared_buffers directly, they can still benefit from more than 4GB of memory because the Windows kernel will use that memory to cache disk reads.&lt;br /&gt;
&lt;br /&gt;
=== What about 64-bit ODBC drivers? ===&lt;br /&gt;
&lt;br /&gt;
At time of writing there was 64-bit support in the [http://psqlodbc.projects.postgresql.org/ psqlODBC] source code, but no official binary releases of 64-bit ODBC drivers. Check the psqlODBC website for details.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== What do I need to install PostgreSQL on Windows? ===&lt;br /&gt;
&lt;br /&gt;
See [http://www.postgresql.org/download/windows the PostgreSQL for Windows download page] for various ways to download and install PostgreSQL on Windows.&lt;br /&gt;
&lt;br /&gt;
The easiest way to install PostgreSQL on Windows is with the &lt;br /&gt;
One Click installer package maintained by EnterpriseDB, which you can get from the page linked to above. This will install PostgreSQL along with&lt;br /&gt;
pgAdmin (a graphical administration and management program), a selection of &#039;contrib&#039; modules to provide additional specialised functionality, and a choice of procedural languages. A program called StackBuilder will be installed to help you download and install any additional components, like ODBC or JDBC drivers, that you may need.&lt;br /&gt;
&lt;br /&gt;
=== What do I need to compile PostgreSQL from source code? ===&lt;br /&gt;
&lt;br /&gt;
See the [http://www.postgresql.org/docs/current/static/install-windows.html documentation]&lt;br /&gt;
for instructions on how to compile PostgreSQL for windows, including details about supported compilers and tools.&lt;br /&gt;
&lt;br /&gt;
=== Why do I need a non-administrator account to run PostgreSQL under? ===&lt;br /&gt;
&lt;br /&gt;
When a hacker gains entry to a computer using a software bug in a&lt;br /&gt;
package, she gains the permissions of the user account under which the&lt;br /&gt;
service is run. Whilst we do not know of any such bugs in PostgreSQL,&lt;br /&gt;
we enforce the use of a non-administrative service account to minimise&lt;br /&gt;
the possible damage that a hacker could do should they find and utilise&lt;br /&gt;
a bug in PostgreSQL to hack the system.&lt;br /&gt;
&lt;br /&gt;
This has long been common practice in the Unix world, and is starting to&lt;br /&gt;
become standard practice in the Windows world as well as Microsoft and&lt;br /&gt;
other vendors work to improve the security of their systems.&lt;br /&gt;
&lt;br /&gt;
Note, that with the release of PostgreSQL 8.2, it is possible to run under&lt;br /&gt;
a administrative account. PostgreSQL 8.2 and above are able to irrevocably&lt;br /&gt;
give up administrative rights at startup, thus ensuring the rest of the &lt;br /&gt;
system remains secure in the extremely unlikely event that PostgreSQL&lt;br /&gt;
becomes compromised.&lt;br /&gt;
&lt;br /&gt;
=== Can I install PostgreSQL on a FAT partition? ===&lt;br /&gt;
&lt;br /&gt;
Use of PostgreSQL on FAT32 file systems is not supported or tested, because&lt;br /&gt;
FAT32 is a terrible file system on which to run &#039;&#039;any&#039;&#039; database.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL&#039;s number one priority is the integrity of your data. FAT and&lt;br /&gt;
FAT32 filesystems simply do not offer the reliability or crash-safety required.&lt;br /&gt;
In addition, the lack of security features offered by FAT make it&lt;br /&gt;
impossible to secure the raw data files from unauthorised modification.&lt;br /&gt;
Finally, PostgreSQL utilises a feature called &#039;reparse points&#039; to&lt;br /&gt;
implement tablespaces. This feature is not available on FAT partitions.&lt;br /&gt;
&lt;br /&gt;
The NTFS file system is a journalled filesystem offering much better&lt;br /&gt;
reliability and crash recovery. In addition, it has a comprehensive&lt;br /&gt;
access control system and offers the reparse point functionality used&lt;br /&gt;
by PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
For this reason, the PostgreSQL installer package will not initialise&lt;br /&gt;
a database cluster on anything but an NTFS partition. The server and&lt;br /&gt;
utilities may be installed on any partition type.&lt;br /&gt;
&lt;br /&gt;
It is recognised however, that in rare cases FAT partitions may be the only choice.&lt;br /&gt;
In such cases, you can simply install PostgreSQL as normal, but without initialising the&lt;br /&gt;
database cluster. When the installation has finished, manually run&lt;br /&gt;
the &#039;initdb.exe&#039; program on the FAT partition. Security and&lt;br /&gt;
reliability will be compromised however, and any attempts to create&lt;br /&gt;
tablespaces will fail. &amp;lt;b&amp;gt;Do not use PostgreSQL on FAT32 in production&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The most common reason people ask this is when they have a USB key or external hard drive and they want to put a PostgreSQL database on it. Don&#039;t do it. You can format USB keys and external hard drives with NTFS, and you &amp;lt;i&amp;gt;should&amp;lt;/i&amp;gt; do so if you want to run a database on them. FAT is not crash-safe, and removing a hard drive without using &amp;quot;Safely remove...&amp;quot; in Windows counts as a crash as far as the hard drive is concerned. Corruption is extremely likely. It is &amp;lt;i&amp;gt;very important&amp;lt;/i&amp;gt; to reformat a removable drive with NTFS if it is to be used with PostgreSQL to store any data you care about.&lt;br /&gt;
&lt;br /&gt;
=== What filesystem permissions does PostgreSQL require? ===&lt;br /&gt;
The PostgreSQL service account needs &#039;&#039;read&#039;&#039; permissions on&lt;br /&gt;
all directories leading up to the service directory. It needs &#039;&#039;write&#039;&#039; permissions &#039;&#039;only&#039;&#039;&lt;br /&gt;
on the data directory. Specifically, it should &#039;&#039;not&#039;&#039; be granted anything other than &#039;&#039;read&#039;&#039;&lt;br /&gt;
permissions on the directories containing binary files. (All directories below the installation&lt;br /&gt;
directory are set by the installer, so unless you change something, there should be no problem with this).&lt;br /&gt;
&lt;br /&gt;
PostgreSQL also needs &#039;&#039;read&#039;&#039; permissions on system DLL files like kernel32.dll and user32.dll&lt;br /&gt;
(among others), which is normally granted by default, and on the CMD.EXE binary, which may in some&lt;br /&gt;
scenarios be locked down and need opening.&lt;br /&gt;
&lt;br /&gt;
If you are running PostgreSQL on a multi-user system, you should remove the permissions from all&lt;br /&gt;
non-administrative users from the PostgreSQL directories. No user &#039;&#039;ever&#039;&#039; needs permissions on the&lt;br /&gt;
PostgreSQL files - all communication is done through the libpq connection. Direct access to data files &lt;br /&gt;
can lead to information disclosure or system instability!&lt;br /&gt;
&lt;br /&gt;
=== Why can&#039;t I select Unicode as an encoding? ===&lt;br /&gt;
&lt;br /&gt;
Starting with PostgreSQL 8.1, the UTF-8 unicode encoding is fully supported on Windows. The Unicode ODBC driver supports UTF-16, and the JDBC driver also has full unicode support.&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL server does not support the 2-byte UTF-16 or 4-byte UTF-32 Unicode encodings for internal data storage or on-the-wire communication. Beause UTF-16 is the default encoding on Windows, and what people on Windows usually mean when they say &amp;quot;Unicode&amp;quot;, you might expect this to be a problem, but in practice it&#039;s fine, as the ODBC and JDBC drivers take care of this. Programs using libpq directly need to be aware of this, but not much else does.&lt;br /&gt;
&lt;br /&gt;
=== I installed in a non-english language, but all messages show up in english! ===&lt;br /&gt;
The language choice made during the installation only selects which language is used by the installer. To&lt;br /&gt;
change the language of the messages of the installed product, make sure you have installed the &#039;&#039;National language&lt;br /&gt;
support&#039;&#039; feature. Then edit your postgresql.conf file and change the value of the &#039;&#039;lc_messages&#039;&#039; parameter&lt;br /&gt;
to the language you want.&lt;br /&gt;
&lt;br /&gt;
== Common installation errors ==&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL and/or the installer crashes at startup, fails to start or hangs on start ===&lt;br /&gt;
&lt;br /&gt;
By far most common reasons for installation and runtime problems with PostgreSQL on Windows are Windows Scripting Host issues, antivirus software problems and 3rd-party (non-Microsoft) software firewalls. People also sometimes have trouble with the postgres service account password.&lt;br /&gt;
&lt;br /&gt;
The following articles cover these issues. Please read them and follow their instructions before asking for help with installer problems.&lt;br /&gt;
&lt;br /&gt;
==== Antivirus software ==== &lt;br /&gt;
&lt;br /&gt;
If you have any antivirus software installed, you &#039;&#039;&#039;must&#039;&#039;&#039; exclude the data directories that are to be used by PostgreSQL and &#039;&#039;&#039;must&#039;&#039;&#039; exclude postgresql.exe process. If that still does not help, it may be required to completely uninstall the antivirus software from the machine. &lt;br /&gt;
&lt;br /&gt;
Antivirus software can interfere with PostgreSQL&#039;s operation, because PostgreSQL requires file access commands in Windows to behave exactly as documented by Microsoft, and many antivirus programs contain errors or accidental behavior changes that cause these commands to misbehave subtly. Most programs do not care because they access files in fairly simple ways. Because PostgreSQL is continuously reading from and writing to the same set of files from multiple processes, it tends to trigger programming and design mistakes in antivirus software, particularly problems related to concurrency. Such problems can cause random and unpredictable errors, or even data corruption.&lt;br /&gt;
&lt;br /&gt;
Antivirus software is also likely to dramatically slow down PostgreSQL&#039;s operation. For that reason, you should at least exclude postgres.exe and the data directories so the scanner ignores them.&lt;br /&gt;
&lt;br /&gt;
===== What Anti-Virus software is compatible? =====&lt;br /&gt;
&lt;br /&gt;
The systems used to build the Windows installers all run either Sophos AV or AVG Free Edition, and&lt;br /&gt;
those systems pass a full set of PostgreSQL regression tests running those programs.&lt;br /&gt;
Microsoft Security Essentials is also known to work.&lt;br /&gt;
&lt;br /&gt;
Specific issues have been reported with the &#039;&#039;nod32&#039;&#039; antivirus&lt;br /&gt;
product. If you are using this product, add &amp;quot;postmaster.exe&amp;quot; to the list&lt;br /&gt;
of excluded processes (available under advanced options). This has been&lt;br /&gt;
reported to fix the problem.&lt;br /&gt;
&lt;br /&gt;
Specific issues have also been reported with McAfee and Panda anti-virus &lt;br /&gt;
software and NetLimiter network monitoring software. While some people do have &lt;br /&gt;
PostgreSQL working with these software packages, there is no specific or even &lt;br /&gt;
recommend solutions that have not worked in some cases, so the issues would appear&lt;br /&gt;
to be installation specific, sometimes even requiring uninstallation.&lt;br /&gt;
&lt;br /&gt;
==== Software firewalls ====&lt;br /&gt;
&lt;br /&gt;
If you have any 3rd-party firewall software installed on your machine, try either disabling it or uninstalling it. There&#039;s really no need for 3rd party firewalls on Windows XP and above, as the built-in firewall provided by Microsoft does an excellent job already. Some badly-written 3rd party firewalls do not uninstall correctly, so after uninstallation you might have to [http://support.microsoft.com/kb/299357 tell Windows to repair its network settings].&lt;br /&gt;
&lt;br /&gt;
If you had a 3rd-party firewall and have now uninstalled it, make sure to turn Windows Firewall back on, as many products turn it off during installation and fail to turn it back on during uninstallation.&lt;br /&gt;
&lt;br /&gt;
==== The installer exits with a runtime installation error? ====&lt;br /&gt;
&lt;br /&gt;
The installer may exit with an error like: &#039;&#039;An error occured executing the Microsoft VC++ runtime installer&#039;&#039;. This can only happen on Windows.&lt;br /&gt;
&lt;br /&gt;
There are two main reasons why this may occur:&lt;br /&gt;
&lt;br /&gt;
1) The Windows Scripting Host is unable to execute VBscripts. This can occur if the scripting host is disabled (which is unusual), or if the installation is broken. A sign of this problem is a message like &#039;&#039;CScript Error: Can&#039;t find script engine &amp;quot;VBScript&amp;quot; for script &amp;quot;C:\...&#039;&#039;. It can often be resolved by re-registering the VBscript interpreter - click &#039;&#039;Start&#039;&#039; -&amp;gt; &#039;&#039;Run&#039;&#039; and enter the following and click &#039;&#039;OK&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 regsvr32 %systemroot%\system32\vbscript.dll&lt;br /&gt;
&lt;br /&gt;
If that fails, on older versions of Windows you can try [http://www.microsoft.com/downloads/en/results.aspx?freetext=windows+script+host&amp;amp;displaylang=en&amp;amp;stype=s_basic updating the scripting host].&lt;br /&gt;
&lt;br /&gt;
Also, make sure that the registry value in HKEY_CLASSES_ROOT\.vbs\(Default) is VBSFile. [http://igordcard.blogspot.com/2012/03/unable-to-write-inside-temp-environment.html]&lt;br /&gt;
&lt;br /&gt;
2) The installer is unable to properly read and write files to the system &#039;&#039;TEMP&#039;&#039; directory. This can occur if the &#039;&#039;TEMP&#039;&#039; or &#039;&#039;TMP&#039;&#039; environment variables are set to non-standard values, and can be recognised by errors in the logfile indicating that scripts could not be executed or found. To resolve this issue, ensure the &#039;&#039;TEMP&#039;&#039; and &#039;&#039;TMP&#039;&#039; variables are set to their correct values.&lt;br /&gt;
&lt;br /&gt;
==== Trouble with passwords for the postgres user ====&lt;br /&gt;
&lt;br /&gt;
Dave Page wrote a [http://pgsnake.blogspot.com/2010/07/postgresql-passwords-and-installers.html blog post] explaining what the different passwords are used for, and how to overcome common problems such as resetting them.&lt;br /&gt;
&lt;br /&gt;
==== PATH environment variable ====&lt;br /&gt;
&lt;br /&gt;
There is also an issue if you have installed &#039;&#039;cygwin&#039;&#039;, and the cygwin\bin directory is present&lt;br /&gt;
in the system PATH variable. There are DLL files in the cygwin directory related to interpreted languages (TCL,&lt;br /&gt;
perl, python) that contain bugs that can cause the installer or the installed version of PostgreSQL to either hang&lt;br /&gt;
or crash. Remove the cygwin\bin directory from your path before running the installer!&lt;br /&gt;
&lt;br /&gt;
Problems have also been observed when the PATH environment variable contains directories containing versions of libssl and/or libintl.&lt;br /&gt;
&lt;br /&gt;
==== I&#039;m getting permissions errors when installing/running initdb ====&lt;br /&gt;
&lt;br /&gt;
Make sure the PostgreSQL service account has permissions on the directories leading up to the one&lt;br /&gt;
you have installed into. The installer will set permissions on the install directory but not on&lt;br /&gt;
parent directories of it.&lt;br /&gt;
&lt;br /&gt;
You may also see related errors show up as &amp;quot;The database Cluster initialisation failed&amp;quot; during the One Click installer.&lt;br /&gt;
&lt;br /&gt;
Check your install-postgresql log&lt;br /&gt;
but it is usually related to permission errors. The following thread may help,&lt;br /&gt;
&lt;br /&gt;
http://forums.enterprisedb.com/posts/list/2044.page#7503&lt;br /&gt;
&lt;br /&gt;
Or alternatively, you can fix up the directory permissions and then manually restart the initcluster.vbs script like this for v9,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cscript //NoLogo &amp;quot;&amp;lt;install_path&amp;gt;/installer/server/initcluster.vbs&amp;quot; &amp;quot;postgres&amp;quot; &amp;quot;postgres&amp;quot; &amp;quot;&amp;lt;password&amp;gt;&amp;quot; &amp;quot;&amp;lt;install_path&amp;gt;&amp;quot; &amp;quot;&amp;lt;data_path&amp;gt;&amp;quot; 5432 &amp;quot;DEFAULT&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Check the %COMSPEC% environment variable ====&lt;br /&gt;
&lt;br /&gt;
Some Windows installations seem to land up with an incorrect %COMSPEC% environment variable that prevents the execution of initdb.&lt;br /&gt;
&lt;br /&gt;
In a command prompt, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo %COMSPEC%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should get something like:&lt;br /&gt;
&lt;br /&gt;
    C:\Windows\system32\cmd.exe&lt;br /&gt;
&lt;br /&gt;
(Where C:\Windows is your Windows install location).&lt;br /&gt;
&lt;br /&gt;
If you see something else, check the System control panel, and in the Environment section check for COMSPEC. If its value there is wrong:&lt;br /&gt;
&lt;br /&gt;
* Make a system restore point; and&lt;br /&gt;
* Back up your computer; then&lt;br /&gt;
* Change it in the system environment settings, so it points to the correct location of cmd.exe&lt;br /&gt;
&lt;br /&gt;
You can test to make sure it&#039;s right by:&lt;br /&gt;
&lt;br /&gt;
* Opening a new cmd.exe prompt (not re-using one that was already open); and&lt;br /&gt;
* Running &amp;lt;code&amp;gt;&amp;quot;%COMSPEC%&amp;quot; /C &amp;quot;echo test ok&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should print &amp;quot;test ok&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== The installer claims the specified account is an administrator, but it isn&#039;t! ====&lt;br /&gt;
&lt;br /&gt;
Most likely, the specified account is an administrator or power user,&lt;br /&gt;
even though you aren&#039;t aware of it. The check used by the installer&lt;br /&gt;
specifically checks for membership in the Administrators or&lt;br /&gt;
Power Users group. Work your way backwards using Local Users and Groups -&lt;br /&gt;
open the Administrators group, see who&#039;s a member. Then check any&lt;br /&gt;
groups (domain or local) that are a member of the Administrators group,&lt;br /&gt;
and any groups members of that group etc. PostgreSQL checks any level&lt;br /&gt;
of nested groups.&lt;br /&gt;
&lt;br /&gt;
==== I&#039;m getting an error message that says PostgreSQL cannot be installed from a Terminal Services session ====&lt;br /&gt;
&lt;br /&gt;
This is unfortunately so. The PostgreSQL backend won&#039;t run from a TS session, and in order to do initdb the installer&lt;br /&gt;
has to start a standalone backend. Therefore, installation has to be performed from the console. Note that if you are&lt;br /&gt;
using Windows Server 2003, you can get remote access to the actual console and not just an administrative session.&lt;br /&gt;
To do this, start the Remote Desktop Connection by executing &amp;lt;I&amp;gt;mstsc /console&amp;lt;/I&amp;gt;, and then connect as usual.&lt;br /&gt;
This will lock the local console of the server and give you control over that session. In this scenario,&lt;br /&gt;
PostgreSQL should install just fine.&lt;br /&gt;
&lt;br /&gt;
==== I get the error &amp;quot;the user has not been granted the requested logon type at this computer&amp;quot; or similar ====&lt;br /&gt;
&lt;br /&gt;
Make sure the specified PostgreSQL account has the &amp;quot;Log on as a service&amp;quot;&lt;br /&gt;
and &amp;quot;Log on locally&amp;quot; rights. The &amp;quot;Log on locally&amp;quot; is only required for&lt;br /&gt;
the install part, and can be removed once the installation is completed&lt;br /&gt;
if security policies require it. (Rights are granted and revoked using&lt;br /&gt;
the &amp;quot;Local Security Policy&amp;quot; MMC snapin. &amp;quot;Log on locally&amp;quot; is default,&lt;br /&gt;
and &amp;quot;Log on as a service&amp;quot; will normally be granted automatically by&lt;br /&gt;
the installer).&lt;br /&gt;
&lt;br /&gt;
If you still have this problem, enable auditing (also using&lt;br /&gt;
the &amp;quot;Local Security Policy&amp;quot; snapin) and let us know what other rights&lt;br /&gt;
were required in your setup.&lt;br /&gt;
&lt;br /&gt;
Note that if your computer is a member of a domain, the settings of&lt;br /&gt;
the security policies may be controlled at the domain level using&lt;br /&gt;
Group Policy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== How do I delete the service account - it&#039;s not listed under users! ====&lt;br /&gt;
&lt;br /&gt;
Windows sometimes hide some accounts from the GUI tools, so they cannot be removed from there. This includes&lt;br /&gt;
the auto-created service account for PostgreSQL (that may be left over from a previous installation). To delete this&lt;br /&gt;
account, use the NET command on the commandline:&lt;br /&gt;
 NET USER &amp;lt;username&amp;gt; /DELETE&lt;br /&gt;
Where &amp;lt;username&amp;gt; is the windows login name of the user, for example &#039;&#039;postgres&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Common runtime issues ==&lt;br /&gt;
&lt;br /&gt;
=== I&#039;m getting &amp;quot;dynamic load error&amp;quot; when installing a procedural language ===&lt;br /&gt;
&lt;br /&gt;
Most commonly this means that the actual language DLL for the procedural language is missing. The PostgreSQL&lt;br /&gt;
DLLs only contains the language bindings, and require the language distribution DLLs to be present&lt;br /&gt;
in the system PATH. For a list of the current required DLLs for the different procedural languages,&lt;br /&gt;
please see [http://pginstaller.projects.postgresql.org the installation instructions].&lt;br /&gt;
&lt;br /&gt;
To find out exactly which DLL files are missing, you can use the &#039;&#039;depends&#039;&#039; tool from Microsoft.&lt;br /&gt;
It is available in the Windows Support Tools, that are on the Windows CD as a separate install. Just run&lt;br /&gt;
&#039;&#039;depends plpython.dll&#039;&#039; (for PL/python) to show which imports are missing.&lt;br /&gt;
&lt;br /&gt;
=== I&#039;m seeing a lot of postgres.exe processes even though I only started the server once ===&lt;br /&gt;
&lt;br /&gt;
This is normal. PostgreSQL uses a multi-process architecture. In an empty system you will see anything from two to&lt;br /&gt;
five processes. Once clients start to connect, the number of processes will increase.&lt;br /&gt;
&lt;br /&gt;
=== How do I set an environment variable? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL uses environment variables for several settings. To change an environment variable in most&lt;br /&gt;
Windows versions, go into Properties for My Computer, then into Advanced. Note that there are two sets of &lt;br /&gt;
environment variables - one for the system which applies to all users and one for the current user. If you &lt;br /&gt;
want an environment variable to affect the PostgreSQL service, you must change the system variable. After &lt;br /&gt;
changing a system variable, you must restart the service.&lt;br /&gt;
&lt;br /&gt;
=== I cannot run with more than about 125 connections at once, despite having capable hardware ===&lt;br /&gt;
&lt;br /&gt;
When running as a service, you may experience failures with more than approximately 125 simultaneous connections. &lt;br /&gt;
This can happen because some of the libraries that PostgreSQL is dependent on are dependent on user32.dll which allocates&lt;br /&gt;
memory from an area known as the Desktop Heap. The desktop heap is assigned to each logon session, with non-interactive&lt;br /&gt;
sessions typically being assigned 512KB. Each postgres process that runs typically consumes approximately 3.2KB of desktop&lt;br /&gt;
heap, which coupled with other overhead can exhaust the allocated heap at somewhere around 125 connections. This doesn&#039;t&lt;br /&gt;
happen when running from the command line (or more precisely, happens with much higher numbers of connections) because the &lt;br /&gt;
interactive logon session is typically allocated 3MB of Desktop Heap.&lt;br /&gt;
&lt;br /&gt;
You can increase the non-interactive Desktop Heap by modifying the third SharedSection value in the registry as described&lt;br /&gt;
in this [http://support.microsoft.com/kb/184802 Microsoft Knowledgebase article]. Note that this should be done&lt;br /&gt;
with great care as specifying a value that is excessively high may prevent your system from booting.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]] [[Category:Windows]]&lt;br /&gt;
&lt;br /&gt;
== Windows version-specific issues ==&lt;br /&gt;
&lt;br /&gt;
==== Can I install a 32-bit PostgreSQL on 64-bit Windows? ====&lt;br /&gt;
&lt;br /&gt;
Recent 32-bit versions of PostgreSQL (8.3 and newer) can be installed and used on 64-bit Windows XP and above,&lt;br /&gt;
though they retain the 32-bit limits on maximum process address space (and thus shared memory).&lt;br /&gt;
&lt;br /&gt;
You can connect to the 32-bit postgresql server from 64-bit programs on the computer the server is running on &lt;br /&gt;
or other computers if a 64-bit libpq or psqlODBC driver is installed where the program is running.&lt;br /&gt;
&lt;br /&gt;
Because 32-bit versions of the PostgreSQL server only install a 32-bit libpq and pgsqlODBC, only 32-bit programs &lt;br /&gt;
on the computer the server was installed on can use the database unless a 64-bit ODBC driver or libpq&lt;br /&gt;
is installed as an add-on.&lt;br /&gt;
&lt;br /&gt;
==== Where is the PostgreSQL ODBC driver? I&#039;m running 32-bit PostgreSQL on 64-bit Windows ====&lt;br /&gt;
&lt;br /&gt;
You need to use the 32-bit ODBC administrator to set up data sources for 32-bit&lt;br /&gt;
applications using 32-bit drivers.&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;ve also installed a [[#What about 64-bit ODBC drivers?|64-bit version]] of &lt;br /&gt;
[http://psqlodbc.projects.postgresql.org psqlODBC], a 32-bit install of PostgreSQL will&lt;br /&gt;
only have a 32-bit ODBC driver. The 32-bit ODBC driver may only be used by 32-bit programs,&lt;br /&gt;
and &#039;&#039;will not show up in the 64-bit ODBC administrator&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This gets confusing because on 64-bit windows &amp;lt;code&amp;gt;c:\windows\system32\odbcad32&amp;lt;/code&amp;gt; is the &#039;&#039;64-bit&#039;&#039;&lt;br /&gt;
ODBC driver administrator, despite the name. This is a historical artifact of Windows development. &lt;br /&gt;
Apparently many apps and installers depend on odbcad32.exe having that name and path,&lt;br /&gt;
so Microsoft landed up being stuck with it despite the now-stupid name, which made sense back&lt;br /&gt;
in the 16- to 32-bit transition but makes none now. It&#039;s the same reason the&lt;br /&gt;
&amp;quot;system32&amp;quot; directory is still called that on 64-bit Windows. PostgreSQL can&#039;t do anything about this.&lt;br /&gt;
&lt;br /&gt;
See: [http://support.microsoft.com/kb/942976 http://support.microsoft.com/kb/942976]&lt;br /&gt;
&lt;br /&gt;
You&#039;ll see in that article that the 32-bit ODBC administrator on 64-bit Windows is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%systemdrive%\Windows\SysWoW64\odbcad32.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can launch this from &amp;quot;Start-&amp;gt;Run&amp;quot; using the path above. You will see the PostgreSQL ODBC drivers in the&lt;br /&gt;
32-bit ODBC administrator.&lt;br /&gt;
&lt;br /&gt;
You &#039;can not&#039; use a 32-bit ODBC driver in a 64-bit application. That means that you&#039;ll still only be&lt;br /&gt;
able to use the PostgreSQL ODBC driver with 32-bit applications unless you install a 64-bit ODBC driver&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
==== Can I use a 64-bit ODBC program with a 32-bit PostgreSQL server? ====&lt;br /&gt;
&lt;br /&gt;
Only if you have a 64-bit [http://psqlodbc.projects.pgfoundry.org/] driver installed. See the installation section.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=YourPostgreSQLAddress&amp;diff=20630</id>
		<title>YourPostgreSQLAddress</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=YourPostgreSQLAddress&amp;diff=20630"/>
		<updated>2013-08-20T19:00:43Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please see [https://wiki.postgresql.org/wiki/HowToUseYourPostgreSQLMailAccount | postgresql.org mailaccount details] for further information&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=YourPostgreSQLAddress&amp;diff=20629</id>
		<title>YourPostgreSQLAddress</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=YourPostgreSQLAddress&amp;diff=20629"/>
		<updated>2013-08-20T18:59:12Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=HowToUseYourPostgreSQLMailAccount&amp;diff=20628</id>
		<title>HowToUseYourPostgreSQLMailAccount</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=HowToUseYourPostgreSQLMailAccount&amp;diff=20628"/>
		<updated>2013-08-20T18:58:06Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: fix the most obvious errors wrt the postgresql.org mail infrastructure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Logging In/Account Creation ==&lt;br /&gt;
&lt;br /&gt;
If you have never had an @postgresql.org account before, or for some reason&lt;br /&gt;
can&#039;t get into yours, please e-mail josh@postgresql.org for further details.&lt;br /&gt;
&lt;br /&gt;
== Your Address ==&lt;br /&gt;
&lt;br /&gt;
Your e-mail address will be the 2-letter ISO country code for your country,&lt;br /&gt;
followed by @postgresql.org.    For example, Diogo has br@postgresql.org.&lt;br /&gt;
The exceptions to this are Devrim, who has devrim@postgresql.org due to his&lt;br /&gt;
work on the website, and Tatsuo/JPUG, who prefer to use their list address.&lt;br /&gt;
&lt;br /&gt;
We will not be using people&#039;s personal addresses, because the @postgresql.org&lt;br /&gt;
addresses make possible an easy transition from one regional contact to&lt;br /&gt;
another.   It also looks more professional.&lt;br /&gt;
&lt;br /&gt;
== Appropriate Uses of Your @Postgresql.org address ==&lt;br /&gt;
&lt;br /&gt;
Your @postgresql.org address is intended strictly for use when doing volunteer&lt;br /&gt;
advocacy for PostgreSQL.org.   It is NOT intended for a general mailbox or&lt;br /&gt;
business address; remember, it may be assigned to someone else at any time&lt;br /&gt;
which you are unable to volunteer.&lt;br /&gt;
&lt;br /&gt;
This can particularly be a challenge for consultants.   My rule is, if you&#039;re&lt;br /&gt;
answering queries from @postgresql.org, you can recommend your own business&lt;br /&gt;
for consulting ... but you MUST mention other appropriate consultants in the&lt;br /&gt;
area as well.   Nor should you take referral fees for business referred&lt;br /&gt;
through your @postgresql.org address.  (Sorry if this seems pedantic, but&lt;br /&gt;
there have already been some misunderstandings.)&lt;br /&gt;
&lt;br /&gt;
I will be forwarding e-mails received from the public to your @postgresql.org&lt;br /&gt;
address from time to time.   This is much, much easier for me than keeping&lt;br /&gt;
track of personal addresses.   As such, it&#039;s important that you continue to&lt;br /&gt;
check the address (see below) for the next year, or tell me when you are&lt;br /&gt;
stopping.&lt;br /&gt;
&lt;br /&gt;
Also, please remember that you are not personally able to make decisions on&lt;br /&gt;
behalf of the whole PostgreSQL.org community.   No-one is, not even the&lt;br /&gt;
members of Core Team.   We are a democratic organization.  I have to tell&lt;br /&gt;
reporters and business people that all the time.&lt;br /&gt;
&lt;br /&gt;
== How to Access Your PostgreSQL.org Address ==&lt;br /&gt;
&lt;br /&gt;
The postgresql.org mail system is accessible through various different interfaces, depending on how you want to use it you can choose between:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Webinterface:&#039;&#039;&#039;  Go to [https://webmail.postgresql.org postgresql.org webmail system] and log in.  This gets you into&lt;br /&gt;
RoundCube, a fairly simple webmail interface.  It is even multi-lingual.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POP3/IMAP4:&#039;&#039;&#039;  You can access imap.postgresql.org via POP3 or IMAP4 using the hostname imap.postgresql.org&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SMTP:&#039;&#039;&#039; we provide an authenticated-only SMTP relay service using the hostname smtp.postgresql.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Technical Usage guidelines ===&lt;br /&gt;
&lt;br /&gt;
* use the full emailaddress (for example cl@postgresql.org) as your username&lt;br /&gt;
* we &#039;&#039;&#039;strongly&#039;&#039;&#039; recommend using transport layer security on all connections to our systems, that means please use https for the webmailinterface and enable STARTTLS for your SMTP and IMAP4 sessions&lt;br /&gt;
* the maximum size of a mail transmitted over SMTP is restricted to 20MB, there is currently no quota enforced for IMAP4/POP3 but we deserve the right to implement that if needed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FORWARDING:  If you do not often get @postgresql.org e-mail (and few people&lt;br /&gt;
other than Brazillian and Spanish speakers will) it is suggested that you&lt;br /&gt;
Forward your @postgresql.org e-mail to another account.  Do it this way:&lt;br /&gt;
&lt;br /&gt;
# log into webmail.postgresql.org&lt;br /&gt;
# click on the &amp;quot;settings&amp;quot; icon&lt;br /&gt;
# choose &amp;quot;Filters&amp;quot;&lt;br /&gt;
# click the little gear and choose &amp;quot;standard editor&amp;quot;&lt;br /&gt;
# click the + for &amp;quot;new rule&amp;quot;&lt;br /&gt;
# select &amp;quot;all messages&amp;quot;&lt;br /&gt;
# select &amp;quot;redirect to&amp;quot;&lt;br /&gt;
# type in your email address&lt;br /&gt;
# click + for add another action&lt;br /&gt;
# choose &amp;quot;Discard&amp;quot;&lt;br /&gt;
# click &amp;quot;Save&amp;quot;&lt;br /&gt;
# test the new filter by sending mail to yourself&lt;br /&gt;
&lt;br /&gt;
== Sharing Your @postgresql.org Account ==&lt;br /&gt;
&lt;br /&gt;
Several regions, such as DE and FR, have more than one person sharing an account to&lt;br /&gt;
collaborate.   There are two ways you can make this work:&lt;br /&gt;
&lt;br /&gt;
* Use webmail/IMAP4.   Which messages are replied to and what has been received will be obvious.&lt;br /&gt;
* Use forwarding rules:  set up forwarding to multiple accounts, and treat the @postgresql address like it was a mailing list. Please do not add more than 2-3 forwarding destinations, if you feel you need more please ask for further details.&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Talk:Main_Page&amp;diff=20572</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Talk:Main_Page&amp;diff=20572"/>
		<updated>2013-08-07T17:09:59Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: Reverted edits by Faseeh1218 (talk) to last revision by Dani_jayant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi All,&lt;br /&gt;
&lt;br /&gt;
Does PostgreSQL run on Sun Solaris SPARC ?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
To be consistent, I suggest changing &amp;quot;日本&amp;quot; (Japan, the country) to &amp;quot;日本語&amp;quot; (Japanese, the language) in the &amp;quot;Alternate Languages&amp;quot; section. [[User:Nicolas.barbier|Nicolas.barbier]] 21:01, 22 May 2011 (UTC)&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
Hi ALL&lt;br /&gt;
&lt;br /&gt;
I have added big para on &#039;&#039;&#039;BigreSQL&#039;&#039;&#039;, But look like it is not saved hence writing once again.&lt;br /&gt;
 Bigresql = PostgreSQL engine + ProgresDB + BigData &lt;br /&gt;
&lt;br /&gt;
That is what I have visulazing and I am finding it is future for Postgres as opensource DB and it can take on any Appliance in that case and also support the Schema free Database.&lt;br /&gt;
&lt;br /&gt;
I have complete a though process on this. I am interested to development of same &lt;br /&gt;
before that I like to get community view on this,&lt;br /&gt;
&lt;br /&gt;
Depend on response I will start giving detail design here. though I have already submiited my thought to Posgres Development team also.&lt;br /&gt;
&lt;br /&gt;
Cheers&lt;br /&gt;
Jayant Dani&lt;br /&gt;
Solution Archiect&lt;br /&gt;
Head of CoE Technology (Big Data, Mobility, Portal)&lt;br /&gt;
TCS&lt;br /&gt;
Jayant.dani@tcs.com&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=MediaWiki:Licenses&amp;diff=20211</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=MediaWiki:Licenses&amp;diff=20211"/>
		<updated>2013-06-16T16:08:20Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: add TPL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* The PostgreSQL Licence|The PostgreSQL Licence&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Todo&amp;diff=18903</id>
		<title>Todo</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Todo&amp;diff=18903"/>
		<updated>2013-01-27T19:01:07Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin: 1ex 1em; float: right;&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This list contains &#039;&#039;&#039;known PostgreSQL bugs and feature requests&#039;&#039;&#039; and we hope it is complete. If you would like to work on an item, please read the [[Developer FAQ]] first. There is also a [[Development_information|development information page]].&lt;br /&gt;
&lt;br /&gt;
* {{TodoPending}} - marks ordinary, incomplete items&lt;br /&gt;
* {{TodoEasy}} - marks items that are easier to implement&lt;br /&gt;
* {{TodoDone}} - marks changes that are done, and will appear in the PostgreSQL 9.3 release.&lt;br /&gt;
&lt;br /&gt;
For help on editing this list, please see [[Talk:Todo]]. &amp;lt;b&amp;gt;Please do not add items here without discussion on the mailing list.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;For Developers:&amp;lt;/b&amp;gt; Unfortunately this list does not contain all the information necessary for someone to start coding a feature.  Some of these items might have become unnecessary since they were added --- others might be desirable but the implementation might be unclear.  When selecting items listed below, be prepared to first discuss the value of the feature. Do not assume that you can select one, code it and then expect it to be committed. Always discuss design on Hackers list before starting to code.  The flow should be:&lt;br /&gt;
&lt;br /&gt;
     Desirability -&amp;gt; Design -&amp;gt; Implement -&amp;gt; Test -&amp;gt; Review -&amp;gt; Commit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 1ex 4em;&amp;quot;&amp;gt;&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow administrators to cancel multi-statement idle transactions&lt;br /&gt;
|This allows locks to be released, but it is complex to report the cancellation back to the client.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg01340.php &amp;lt;nowiki&amp;gt;Cancelling idle in transaction state&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg00441.php &amp;lt;nowiki&amp;gt;Re: Cancelling idle in transaction state&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Check for unreferenced table files created by transactions that were in-progress when the server terminated abruptly&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-06/msg00096.php &amp;lt;nowiki&amp;gt;Removing unreferenced files&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Set proper permissions on non-system schemas during db creation&lt;br /&gt;
|Currently all schemas are owned by the super-user because they are copied from the template1 database.  However, since all objects are inherited from the template database, it is not clear that setting schemas to the db owner is correct.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow log_min_messages to be specified on a per-module basis&lt;br /&gt;
|This would allow administrators to see more detailed information from specific sections of the backend, e.g. checkpoints, autovacuum, etc. Another idea is to allow separate configuration files for each module, or allow arbitrary SET commands to be passed to them. See also [[Logging Brainstorm]].}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Simplify creation of partitioned tables&lt;br /&gt;
|This would allow creation of partitioned tables without requiring creation of triggers or rules for INSERT/UPDATE/DELETE, and constraints for rapid partition selection.  Options could include range and hash partition selection. See also [[Table partitioning]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow custom variables to appear in pg_settings()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg00850.php &amp;lt;nowiki&amp;gt;Re: count(*) performance improvement ideas&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have custom variables be transaction-safe&lt;br /&gt;
* {{MessageLink|4B577E9F.8000505@dunslane.net|Custom GUCs still a bit broken}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement the SQL-standard mechanism whereby REVOKE ROLE revokes only the privilege granted by the invoking role, and not those granted by other roles&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-05/msg00010.php &amp;lt;nowiki&amp;gt;Re: Grantor name gets lost when grantor role dropped&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent query cancel packets from being replayed by an attacker, especially when using SSL&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-08/msg00345.php &amp;lt;nowiki&amp;gt;Replay attack of query cancel&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide a way to query the log collector subprocess to determine the name of the currently active log file&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-11/msg00418.php &amp;lt;nowiki&amp;gt;Current log files when rotating?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow simpler reporting of the unix domain socket directory and allow easier configuration of its default location&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg01555.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-10/msg01482.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow custom daemons to be automatically stopped/started along with the postmaster&lt;br /&gt;
|This allows easier administration of daemons like user job schedulers or replication-related daemons.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01701.php &amp;lt;nowiki&amp;gt;Re: scheduler in core&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve logging of prepared transactions recovered during startup&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-11/msg00092.php &amp;lt;nowiki&amp;gt;&amp;amp;quot;recovering prepared transaction&amp;amp;quot; after server restart message&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Consider using POSIX shared memory to avoid System V shared memory kernel limits&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4DFA2673.3010009@enterprisedb.com &amp;lt;nowiki&amp;gt;POSIX shared memory patch status&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration files ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Change pg_ident.conf parsing to be the same as pg_hba.conf&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg02204.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow postgresql.conf file values to be changed via an SQL API, perhaps using SET GLOBAL&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg00764.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-10/msg01509.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-11/msg00002.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider normalizing fractions in postgresql.conf, perhaps using &#039;%&#039;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-06/msg00550.php &amp;lt;nowiki&amp;gt;Fractions in GUC variables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow Kerberos to disable stripping of realms so we can check the username@realm against multiple realms&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00009.php &amp;lt;nowiki&amp;gt;krb_match_realm patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve LDAP authentication configuration options&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-04/msg01745.php &amp;lt;nowiki&amp;gt;Proposed Patch - LDAPS support for servers on port 636 w/o TLS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add external tool to auto-tune some postgresql.conf parameters&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg00000.php &amp;lt;nowiki&amp;gt;Re: Overhauling GUCS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg00033.php &amp;lt;nowiki&amp;gt;Simple postgresql.conf wizard&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add &#039;hostgss&#039; pg_hba.conf option to allow GSS link-level encryption&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg01454.php &amp;lt;nowiki&amp;gt;Re: Plans for 8.4&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Process pg_hba.conf keywords as case-insensitive&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg00432.php &amp;lt;nowiki&amp;gt;More robust pg_hba.conf parsing/error logging&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Create utility to compute accurate random_page_cost value&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-04/msg00162.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-04/msg00362.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow configuration files to be independently validated&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01831.php&lt;br /&gt;
* http://archives.postgresql.org/message-id/12666.1310774573@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow postgresql.conf settings to be accepted by backends even if some settings are invalid for those backends&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg00330.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg00375.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow all backends to receive postgresql.conf setting changes at the same time&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg00330.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg00375.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow synchronous_standby_names to be disabled after communication failure with all synchronous standby servers exceeds some timeout&lt;br /&gt;
|This also requires successful execution of a synchronous notification command.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-07/msg00409.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Tablespaces ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow a database in tablespace t1 with tables created in tablespace t2 to be used as a template for a new database created with default tablespace t2&lt;br /&gt;
|Currently all objects in the default database tablespace must have default tablespace specifications. This is because new databases are created by copying directories. If you mix default tablespace tables and tablespace-specified tables in the same directory, creating a new database from such a mixed directory would create a new database with tables that had incorrect explicit tablespaces.  To fix this would require modifying pg_class in the newly copied database, which we don&#039;t currently do.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow reporting of which objects are in which tablespaces&lt;br /&gt;
|This item is difficult because a tablespace can contain objects from multiple databases. There is a server-side function that returns the databases which use a specific tablespace, so this requires a tool that will call that function and connect to each database to find the objects in each database for that tablespace.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow WAL replay of CREATE TABLESPACE to work when the directory structure on the recovery computer is different from the original}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow per-tablespace quotas}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow tablespaces on RAM-based partitions for unlogged tables&lt;br /&gt;
* http://archives.postgresql.org/pgsql-advocacy/2011-05/msg00033.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow toast tables to be moved to a different tablespace&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-05/msg00980.php]&lt;br /&gt;
* {{messageLink|CAFEQCbH756DyyAPQ1ykh3+b+kE1-EhWRww1WO_x5v38C-uLnUg@mail.gmail.com|patch : Allow toast tables to be moved to a different tablespace}} (issues remain)&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CAFEQCbEq07OopgE5xFYv2Q3eMq45hRSJkjCBO+kvpJq9NEVhow@mail.gmail.com Allow toast tables to be moved to a different tablespace]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Statistics Collector ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow statistics last vacuum/analyze execution times to be displayed without requiring track_counts to be enabled&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-docs/2007-04/msg00028.php &amp;lt;nowiki&amp;gt;row-level stats and last analyze time&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Clear table counters on TRUNCATE&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-04/msg00169.php &amp;lt;nowiki&amp;gt;Small TRUNCATE glitch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== SSL ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow SSL authentication/encryption over unix domain sockets&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00924.php &amp;lt;nowiki&amp;gt;Re: Spoofing as the postmaster&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow SSL key file permission checks to be optionally disabled when sharing SSL keys with other applications&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-12/msg00069.php &amp;lt;nowiki&amp;gt;BUG #3809: SSL &amp;amp;quot;unsafe&amp;amp;quot; private key permissions bug&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow SSL CRL files to be re-read during configuration file reload, rather than requiring a server restart&lt;br /&gt;
|Unlike SSL CRT files, CRL (Certificate Revocation List) files are updated frequently&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-12/msg00832.php &amp;lt;nowiki&amp;gt;Automatic CRL reload&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
Alternatively or additionally supporting OCSP (online certificate security protocol) would provide real-time revocation discovery without reloading&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow automatic selection of SSL client certificates from a certificate store&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-05/msg00406.php &amp;lt;nowiki&amp;gt;Allow multiple certificates or keys in the postgresql.crt/.key files&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Send the full certificate server chain to the client&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-12/msg00145.php BUG #5245: Full Server Certificate Chain Not Sent to client]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Point-In-Time Recovery (PITR) ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Create dump tool for write-ahead logs for use in determining transaction id for point-in-time recovery&lt;br /&gt;
|This is useful for checking PITR recovery.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow archive_mode to be changed without server restart?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01655.php &amp;lt;nowiki&amp;gt;Enabling archive_mode without restart&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider avoiding WAL switching via archive_timeout if there has been no database activity&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01469.php &amp;lt;nowiki&amp;gt;archive_timeout behavior for no activity&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg00395.php &amp;lt;nowiki&amp;gt;Re: archive_timeout behavior for no activity&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow base backup from standby to continue when the standby is promoted.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2012-10/msg00239.php &amp;lt;nowiki&amp;gt;Re: Promoting a standby during base backup&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Standby server mode ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow pg_xlogfile_name() to be used in recovery mode&lt;br /&gt;
* [http://archives.postgresql.org/message-id/3f0b79eb1001190135vd9f62f1sa7868abc1ea61d12@mail.gmail.com &amp;lt;nowiki&amp;gt;Streaming replication and pg_xlogfile_name()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Prevent variables inherited from the server environment from begin used for making streaming replication connections.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01011.php &amp;lt;nowiki&amp;gt;Re: Parameter name standby_mode&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Change walsender so that it applies per-role settings&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-09/msg00642.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Restructure configuration parameters for standby mode&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-09/msg01820.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemf&lt;br /&gt;
| Allow time-delayed application of logs on the standby&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg00992.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add -X parameter to pg_basebackup to specify a different directory for px_xlog, like initdb&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add a new &amp;quot;eager&amp;quot; synchronous mode that starts out synchronous but reverts to asynchronous after a failure timeout period&lt;br /&gt;
|This would require some type of command to be executed to alert administrators of this change.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-12/msg01224.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix data types where equality comparison is not intuitive, e.g. box&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-10/msg01643.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for public SYNONYMs&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-03/msg00519.php &amp;lt;nowiki&amp;gt;Proposal for SYNONYMS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg02043.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-general/2010-12/msg00139.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for SQL-standard GENERATED/IDENTITY columns&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-07/msg00543.php &amp;lt;nowiki&amp;gt;Re: Three weeks left until feature freeze&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-08/msg00038.php &amp;lt;nowiki&amp;gt;GENERATED ... AS IDENTITY, Was: Re: Feature Freeze&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-05/msg00344.php &amp;lt;nowiki&amp;gt;Behavior of GENERATED columns per SQL2003&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-05/msg00076.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] Behavior of GENERATED columns per SQL2003&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00604.php &amp;lt;nowiki&amp;gt;IDENTITY/GENERATED patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider placing all sequences in a single table, or create a system view&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00008.php &amp;lt;nowiki&amp;gt;Re: newbie: renaming sequences task&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2012-02/msg00258.php Removing special case OID generation]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a special data type for regular expressions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg01067.php &amp;lt;nowiki&amp;gt;Why is there a tsquery data type?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce BIT data type overhead using short varlena headers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-12/msg00273.php &amp;lt;nowiki&amp;gt;storage size of &amp;amp;quot;bit&amp;amp;quot; data type..&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow renaming and deleting enumerated values from an existing enumerated data type&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support scoped IPv6 addresses in the inet type&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-05/msg00111.php &amp;lt;nowiki&amp;gt;strange problem with ip6&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Considering improving performance of computing CHAR() value lengths&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-06/msg00900.php &amp;lt;nowiki&amp;gt;char() overhead on read-only workloads not so insignifcant as the docs claim it is...&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01787.php &amp;lt;nowiki&amp;gt;Re: [PATCH] backend: compare word-at-a-time in bcTruelen&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add overlaps geometric operators that ignore point overlaps&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-03/msg00861.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Remove or improve rounding in geometric comparison operators&lt;br /&gt;
* http://archives.postgresql.org/message-id/9804.1346187849@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add IMMUTABLE column attribute&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-11/msg00623.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Domains ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow functions defined as casts to domains to be called during casting&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-05/msg00072.php &amp;lt;nowiki&amp;gt;bug? non working casts for domain&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-09/msg01681.php &amp;lt;nowiki&amp;gt;TODO: Fix CREATE CAST on DOMAINs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow values to be cast to domain types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2003-06/msg01206.php &amp;lt;nowiki&amp;gt;Domain casting still doesn&#039;t work right&amp;lt;/nowiki&amp;gt;] &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00289.php &amp;lt;nowiki&amp;gt;domain casting?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg00812.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make domains work better with polymorphic functions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4887.1228700773@sss.pgh.pa.us Polymorphic types vs. domains]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/15535.1238774571@sss.pgh.pa.us some difficulties with fixing it]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Dates and Times ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow infinite intervals just like infinite timestamps&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-11/msg00076.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Determine how to represent date/time field extraction on infinite timestamps&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CA+mi_8bda-Fnev9iXeUbnqhVaCWzbYhHkWoxPQfBca9eDPpRMw@mail.gmail.com extract(epoch from infinity) is not 0]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CADAkt-icuESH16uLOCXbR-dKpcvwtUJE4JWXnkdAjAAwP6j12g@mail.gmail.com converting between infinity timestamp and float8]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow TIMESTAMP WITH TIME ZONE to store the original timezone information, either zone name or offset from UTC&lt;br /&gt;
|If the TIMESTAMP value is stored with a time zone name, interval computations should adjust based on the time zone rules. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-10/msg00705.php &amp;lt;nowiki&amp;gt;timestamp with time zone a la sql99&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have timestamp subtraction not call justify_hours()?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-sql/2006-10/msg00059.php &amp;lt;nowiki&amp;gt;timestamp subtraction (was Re: formatting intervals with to_char)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve TIMESTAMP WITH TIME ZONE subtraction to be DST-aware&lt;br /&gt;
|Currently subtracting one date from another that crosses a daylight savings time adjustment can return &#039;1 day 1 hour&#039;, but adding that back to the first date returns a time one hour in the future.  This is caused by the adjustment of &#039;25 hours&#039; to &#039;1 day 1 hour&#039;, and &#039;1 day&#039; is the same time the next day, even if daylight savings adjustments are involved.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix interval display to support values exceeding 2^31 hours}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add overflow checking to timestamp and interval arithmetic}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add function to allow the creation of timestamps using parameters&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-06/msg00232.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Arrays ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for arrays of domains&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-05/msg00114.php &amp;lt;nowiki&amp;gt;Re: updated WIP: arrays of composites&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow single-byte header storage for array elements}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add function to detect if an array is empty&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg00475.php &amp;lt;nowiki&amp;gt;Re: array_length()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of empty arrays&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01033.php &amp;lt;nowiki&amp;gt;So what&#039;s an &amp;amp;quot;empty&amp;amp;quot; array anyway?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-general/2012-07/msg00633.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of NULLs in arrays&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-11/msg00009.php &amp;lt;nowiki&amp;gt;BUG #4509: array_cat&#039;s null behaviour is inconsistent&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg01040.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Binary Data ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve vacuum of large objects, like contrib/vacuumlo?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Auto-delete large objects when referencing row is deleted&lt;br /&gt;
|contrib/lo offers this functionality.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow read/write into TOAST values like large objects&lt;br /&gt;
|Writing might require the TOAST column to be stored EXTERNAL.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00049.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Add API for 64-bit large object access&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-09/msg00781.php &amp;lt;nowiki&amp;gt;64-bit API for large objects&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-09/msg01790.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== MONEY Data Type ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add locale-aware MONEY type, and support multiple currencies&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2005-08/msg01432.php &amp;lt;nowiki&amp;gt;A real currency type&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01181.php &amp;lt;nowiki&amp;gt;Money type todos?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|MONEY dumps in a locale-specific format making it difficult to restore to a system with a different locale}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Text Search ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow dictionaries to change the token that is passed on to later dictionaries&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-11/msg00081.php &amp;lt;nowiki&amp;gt;a tsearch2 (8.2.4) dictionary that only filters out stopwords&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a function-based API for &#039;@@&#039; searches&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00511.php &amp;lt;nowiki&amp;gt;Simplifying Text Search&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve text search error messages&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg00966.php &amp;lt;nowiki&amp;gt;Poorly designed tsearch NOTICEs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg01146.php &amp;lt;nowiki&amp;gt;Re: Poorly designed tsearch NOTICEs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider changing error to warning for strings larger than one megabyte&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-02/msg00190.php &amp;lt;nowiki&amp;gt;BUG #3975: tsearch2 index should not bomb out of 1Mb limit&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-03/msg00062.php &amp;lt;nowiki&amp;gt;Re: [BUGS] BUG #3975: tsearch2 index should not bomb out of 1Mb limit&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|tsearch and tsdicts regression tests fail in Turkish locale on glibc&lt;br /&gt;
* [http://archives.postgresql.org/message-id/49749645.5070801@gmx.net tsearch with Turkish locale]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|tsquery negator operator treated as part of lexeme&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-06/msg00346.php BUG #4887: inclusion operator (@&amp;gt;) on tsqeries behaves not conforming to documentation]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of dash and plus signs in email address user names, and perhaps improve URL parsing&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg00772.php&lt;br /&gt;
* [http://archives.postgresql.org/message-id/E1Ri8il-0008Ct-9p@wrigleys.postgresql.org tsearch does not recognize all valid emails]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve default parser, to more easily allow adding new tokens&lt;br /&gt;
* http://archives.postgresql.org/message-id/23485.1297727826@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add additional support functions&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00319.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow XML arrays to be cast to other data types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00981.php &amp;lt;nowiki&amp;gt;proposal casting from XML[] to int[], numeric[], text[]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg00231.php &amp;lt;nowiki&amp;gt;Re: proposal casting from XML[] to int[], numeric[], text[]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00471.php &amp;lt;nowiki&amp;gt;Re: proposal casting from XML[] to int[], numeric[], text[]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add XML Schema validation and xmlvalidate functions (SQL:2008)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add xmlvalidatedtd variant to support validating against a DTD?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Relax-NG validation; libxml2 supports this already}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow reliable XML operation non-UTF8 server encodings (xpath(), in particular, is known to not work)&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-01/msg00135.php &amp;lt;nowiki&amp;gt;BUG #4622: xpath only work in utf-8 server encoding&amp;lt;/nowiki&amp;gt;] &lt;br /&gt;
* http://archives.postgresql.org/message-id/4110.1238973350@sss.pgh.pa.us}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add functions from SQL:2006: XMLDOCUMENT, XMLCAST, XMLTEXT}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add XMLNAMESPACES support in XMLELEMENT and elsewhere}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move XSLT from contrib/xml2 to a more reasonable location&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg00539.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Report errors returned by the XSLT library&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg00562.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve the XSLT parameter passing API&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg00416.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|XML Canonical: Convert XML documents to canonical form to compare them. libxml2 has support for this.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add pretty-printed XML output option&lt;br /&gt;
|Parse a document and serialize it back in some indented form. libxml2 might support this.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add XMLQUERY (from the SQL/XML standard)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow XML sthredding&lt;br /&gt;
|In some cases shredding could be better option (if there is no need to keep XML docs entirely, e.g. if we have already developed tools that understand only relational data.  This would be a separate module that implements annotated schema decomposition technique, similar to DB2 and SQL Server functionality.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix Nested or repeated xpath() that apparently mess up namespaces [http://archives.postgresql.org/pgsql-bugs/2008-03/msg00097.php] [http://archives.postgresql.org/pgsql-bugs/2008-03/msg00144.php] [http://archives.postgresql.org/pgsql-general/2008-03/msg00295.php] [http://archives.postgresql.org/pgsql-bugs/2008-07/msg00054.php] [http://archives.postgresql.org/message-id/004f01c90e91$138e9d10$3aabd730$@anstett@iaas.uni-stuttgart.de]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|XPath: Adding the &amp;lt;x&amp;gt; at the root causes problems [http://archives.postgresql.org/pgsql-bugs/2008-05/msg00184.php] [http://archives.postgresql.org/pgsql-bugs/2008-07/msg00054.php] [http://archives.postgresql.org/pgsql-general/2008-07/msg00613.php]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|xpath_table needs to be implemented/implementable to get rid of contrib/xml2 [http://archives.postgresql.org/pgsql-general/2008-05/msg00823.php]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|xpath_table is pretty broken anyway [http://archives.postgresql.org/pgsql-hackers/2010-02/msg02424.php]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|better handling of XPath data types [http://archives.postgresql.org/pgsql-hackers/2008-06/msg00616.php] [http://archives.postgresql.org/message-id/004a01c90e90$4b986d90$e2c948b0$@anstett@iaas.uni-stuttgart.de]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of PIs and DTDs in xmlconcat() [http://archives.postgresql.org/message-id/200904211211.n3LCB09p008988@wwwmaster.postgresql.org]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Restructure XML and /contrib/xml2 functionality&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg02314.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg00017.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow INET subnet comparisons using non-constants to be indexed}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add an INET overlaps operator, for use by exclusion constraints &lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-03/msg00845.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Enforce typmod for function inputs, function results and parameters for spi_prepare&#039;d statements called from PLs&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-01/msg01403.php &amp;lt;nowiki&amp;gt;Re: BUG #2917: spi_prepare doesn&#039;t accept typename aliases&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-11/msg01160.php &amp;lt;nowiki&amp;gt;RFC for adding typmods to functions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix IS OF so it matches the ISO specification, and add documentation&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2003-08/msg00060.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] IS OF&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg00060.php &amp;lt;nowiki&amp;gt;ToDo: add documentation for operator IS OF&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement Boyer-Moore searching in LIKE queries&lt;br /&gt;
* {{messageLink|27645.1220635769@sss.pgh.pa.us|TODO item: Implement Boyer-Moore searching (First time hacker)}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent malicious functions from being executed with the permissions of unsuspecting users&lt;br /&gt;
|Index functions are safe, so VACUUM and ANALYZE are safe too.  Triggers, CHECK and DEFAULT expressions, and rules are still vulnerable. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00268.php &amp;lt;nowiki&amp;gt;Some notes about the index-functions security vulnerability&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce memory usage of aggregates in set returning functions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2008-01/msg00031.php &amp;lt;nowiki&amp;gt;Re: Performance of aggregates over set-returning functions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix /contrib/ltree operator&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-11/msg00044.php &amp;lt;nowiki&amp;gt;BUG #3720: wrong results at using ltree&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix /contrib/btree_gist&#039;s implementation of inet indexing&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2010-10/msg00099.php &amp;lt;nowiki&amp;gt;BUG #5705: btree_gist: Index on inet changes query result&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Fix inconsistent precedence of =, &amp;amp;gt;, and &amp;amp;lt; compared to &amp;amp;lt;&amp;amp;gt;, &amp;amp;gt;=, and &amp;amp;lt;=&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-12/msg00145.php &amp;lt;nowiki&amp;gt;BUG #3822: Nonstandard precedence for comparison operators&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix regular expression bug when using complex back-references&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-10/msg00000.php &amp;lt;nowiki&amp;gt;BUG #3645: regular expression back references seem broken&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have /contrib/dblink reuse unnamed connections&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg00895.php &amp;lt;nowiki&amp;gt;dblink un-named connection doesn&#039;t get re-used&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve formatting of pg_get_viewdef() output&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg01648.php &amp;lt;nowiki&amp;gt;pg_get_viewdef formattiing&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-08/msg01885.php &amp;lt;nowiki&amp;gt;Re: pretty print viewdefs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-12/msg00906.php reprise: pretty print viewdefs]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add function to dump pg_depend information cleanly&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg00226.php &amp;lt;nowiki&amp;gt;Elementary dependency look-up&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add function to allow easier transaction id comparisons&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-11/msg00786.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Character Formatting ===&lt;br /&gt;
&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow to_date() and to_timestamp() to accept localized month names}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add missing parameter handling in to_char()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-12/msg00948.php &amp;lt;nowiki&amp;gt;Re: to_char and i18n&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Throw an error from to_char() instead of printing a string of &amp;quot;#&amp;quot; when a number doesn&#039;t fit in the desired output format.&lt;br /&gt;
* discussed in [http://archives.postgresql.org/message-id/37ed240d0907290836w42187222n18664dfcbcb445b1@mail.gmail.com &amp;quot;to_char, support for EEEE format&amp;quot;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow to_char() on interval values to accumulate the highest unit requested&lt;br /&gt;
|2= Some special format flag would be required to request such accumulation.  Such functionality could also be added to EXTRACT. Prevent accumulation that crosses the month/day boundary because of the uneven number of days in a month.&lt;br /&gt;
* to_char(INTERVAL &#039;1 hour 5 minutes&#039;, &#039;MI&#039;) =&amp;amp;gt; 65&lt;br /&gt;
* to_char(INTERVAL &#039;43 hours 20 minutes&#039;, &#039;MI&#039; ) =&amp;amp;gt; 2600&lt;br /&gt;
* to_char(INTERVAL &#039;43 hours 20 minutes&#039;, &#039;WK:DD:HR:MI&#039;) =&amp;amp;gt; 0:1:19:20&lt;br /&gt;
* to_char(INTERVAL &#039;3 years 5 months&#039;,&#039;MM&#039;) =&amp;amp;gt; 41&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix to_number() handling for values not matching the format string&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg01447.php &amp;lt;nowiki&amp;gt;Re: numeric_to_number() function skipping some digits&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Multi-Language Support ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add NCHAR (as distinguished from ordinary varchar),}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a cares-about-collation column to pg_proc, so that unresolved-collation errors can be thrown at parse time&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-03/msg01520.php &amp;lt;nowiki&amp;gt;Open issues for collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Integrate collations with text search configurations&lt;br /&gt;
* [http://archives.postgresql.org/message-id/28887.1303579034@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;Some TODO items for collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Integrate collations with to_char() and related functions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/28887.1303579034@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;Some TODO items for collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support collation-sensitive equality and hashing functions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-06/msg00472.php &amp;lt;nowiki&amp;gt; contrib/citext versus collations&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a LOCALE option to CREATE DATABASE, as a shorthand&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00119.php &amp;lt;nowiki&amp;gt; Re: 8.4 open items list&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support multiple simultaneous character sets, per SQL:2008}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve UTF8 combined character handling?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add octet_length_server() and octet_length_client()}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make octet_length_client() the same as octet_length()?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problems with wrong runtime encoding conversion for NLS message files}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add URL to more complete multi-byte regression tests&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-07/msg00272.php &amp;lt;nowiki&amp;gt;Multi-byte and client side character encoding tests for copy command..&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix contrib/fuzzystrmatch to work with multibyte encodings&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-04/msg00047.php &amp;lt;nowiki&amp;gt; soundex function returns UTF-16 characters&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-04/msg00138.php &amp;lt;nowiki&amp;gt; dmetaphone woes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change memory allocation for multi-byte functions so memory is allocated inside conversion functions&lt;br /&gt;
|Currently we preallocate memory based on worst-case usage.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ability to use case-insensitive regular expressions on multi-byte characters&lt;br /&gt;
|Currently it works for UTF-8, but not other multi-byte encodings&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg00433.php &amp;lt;nowiki&amp;gt;Regexps vs. locale&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* {{MessageLink|20091201210024.B1393753FB7@cvs.postgresql.org|A partial solution for UTF-8}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve encoding of connection startup messages sent to the client&lt;br /&gt;
|Currently some authentication error messages are sent in the server encoding&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-12/msg00801.php &amp;lt;nowiki&amp;gt;encoding of PostgreSQL messages&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2009-01/msg00005.php &amp;lt;nowiki&amp;gt;Re: encoding of PostgreSQL messages&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|More sensible support for Unicode combining characters, normal forms&lt;br /&gt;
* http://archives.postgresql.org/message-id/200904141532.44618.peter_e@gmx.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Views / Rules ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Automatically create rules on views so they are updateable, per SQL:2008&lt;br /&gt;
|We can only auto-create rules for simple views.  For more complex cases users will still have to write rules manually.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-03/msg00586.php &amp;lt;nowiki&amp;gt;Proposal for updatable views&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-08/msg00255.php &amp;lt;nowiki&amp;gt;Updatable views&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg01746.php &amp;lt;nowiki&amp;gt;Re: [COMMITTERS] pgsql: Automatic view update rules Bernd Helmle&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://wiki.postgresql.org/wiki/Updatable_views&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-07/msg00035.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-08/msg00303.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add the functionality of the WITH CHECK OPTION clause to CREATE VIEW&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow VIEW/RULE recompilation when the underlying tables change&lt;br /&gt;
|This is both difficult and controversial.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg01723.php Re: About &amp;quot;Allow VIEW/RULE recompilation when the underlying tables change&amp;quot;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg01724.php Re: About &amp;quot;Allow VIEW/RULE recompilation when the underlying tables change2&amp;quot;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CACk%3DU9NFSzWrEba8G5dZ%3DTZLy3_hx3QXGyCcKVWT%3D4iA1FjMuA@mail.gmail.com VIEW still referring to old name of field]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make it possible to use RETURNING together with conditional DO INSTEAD rules, such as for partitioning setups&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00577.php &amp;lt;nowiki&amp;gt;RETURNING and DO INSTEAD ... Intentional or not?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add the ability to automatically create materialized views&lt;br /&gt;
|Right now materialized views require the user to create triggers on the main table to keep the summary table current.  SQL syntax should be able to manage the triggers and summary table automatically.  A more sophisticated implementation would automatically retrieve from the summary table when the main table is referenced, if possible.  See [[Materialized Views]] for implementation details&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-04/msg00479.php &amp;lt;nowiki&amp;gt;GSoC - proposal - Materialized Views in PostgreSQL&amp;lt;/nowiki&amp;gt;] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve ability to modify views via ALTER TABLE&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00691.php &amp;lt;nowiki&amp;gt;Re: idea: storing view source in system catalogs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg01410.php &amp;lt;nowiki&amp;gt;modifying views&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-08/msg00300.php &amp;lt;nowiki&amp;gt;Re: patch: Add columns via CREATE OR REPLACE VIEW&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== SQL Commands ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add CORRESPONDING BY to UNION/INTERSECT/EXCEPT&lt;br /&gt;
* [http://dissipatedheat.com/2011/11/10/how-not-to-write-a-patch-for-postgresql/ How not to write this patch.]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve type determination of unknown (NULL or quoted literal) result columns for UNION/INTERSECT/EXCEPT&lt;br /&gt;
* [http://archives.postgresql.org/message-id/9799.1302719551@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;UNION construct type cast gives poor error message&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ROLLUP, CUBE, GROUPING SETS options to GROUP BY&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00838.php &amp;lt;nowiki&amp;gt;WIP: grouping sets support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-05/msg00466.php &amp;lt;nowiki&amp;gt;Implementation of GROUPING SETS (T431: Extended grouping 	capabilities)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow prepared transactions with temporary tables created and dropped in the same transaction, and when an ON COMMIT DELETE ROWS temporary table is accessed&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00047.php &amp;lt;nowiki&amp;gt;Re: &amp;amp;quot;could not open relation 1663/16384/16584: No such file or directory&amp;amp;quot; in a specific combination of transactions with temp tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/492543D5.9050904@enterprisedb.com A suggestion on how to implement this]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a GUC variable to warn about non-standard SQL usage in queries}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add SQL-standard MERGE/REPLACE/UPSERT command&lt;br /&gt;
|MERGE is typically used to merge two tables.  REPLACE or UPSERT command does UPDATE, or on failure, INSERT. See [[SQL MERGE]] for notes on the implementation details.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add NOVICE output level for helpful messages&lt;br /&gt;
|For example, have it warn about unjoined tables.  This could also control automatic sequence/index creation messages.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow NOTIFY in rules involving conditionals}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow EXPLAIN to identify tables that were skipped because of constraint_exclusion&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Simplify dropping roles that have objects in several databases}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow the count returned by SELECT, etc to be represented as an int64 to allow a higher range of values}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for WITH RECURSIVE ... CYCLE&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00291.php &amp;lt;nowiki&amp;gt;WITH RECURSIVE ... CYCLE in vanilla SQL: issues with arrays of rows&amp;lt;/nowiki&amp;gt;]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add DEFAULT .. AS OWNER so permission checks are done as the table owner&lt;br /&gt;
|This would be useful for SERIAL nextval() calls and CHECK constraints.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow DISTINCT to work in multiple-argument aggregate calls}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add comments on system tables/columns using the information in catalogs.sgml&lt;br /&gt;
|Ideally the information would be pulled from the SGML file automatically.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent the specification of conflicting transaction read/write options&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg00684.php &amp;lt;nowiki&amp;gt;Re: SET TRANSACTION and SQL Standard&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Support LATERAL subqueries&lt;br /&gt;
|Lateral subqueries can reference columns of tables defined outside the subquery at the same level, i.e. &#039;&#039;laterally&#039;&#039;.&lt;br /&gt;
For example, a LATERAL subquery in a FROM clause could reference tables defined in the same FROM clause.&lt;br /&gt;
Currently only the columns of tables defined &#039;&#039;above&#039;&#039; subqueries are recognized.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg00292.php &amp;lt;nowiki&amp;gt;LATERAL&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-10/msg00991.php &amp;lt;nowiki&amp;gt;Re: LATERAL&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4F5AA202.9020906@gmail.com lateral function as a subquery - WIP patch]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent temporary tables created with ON COMMIT DELETE ROWS from repeatedly truncating the table on every commit if the table is already empty&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg00842.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-03/msg00392.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-04/msg00046.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow DELETE and UPDATE to be used with LIMIT and ORDER BY&lt;br /&gt;
* http://archives.postgresql.org/pgadmin-hackers/2010-04/msg00078.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg01997.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg00021.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow PREPARE of cursors}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have DISCARD PLANS discard plans cached by functions&lt;br /&gt;
|DISCARD all should do the same.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-01/msg00431.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid multiple-evaluation of BETWEEN and IN arguments containing volatile expressions&lt;br /&gt;
* http://archives.postgresql.org/message-id/4D95B605.2020709@enterprisedb.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix nested CASE-WHEN constructs&lt;br /&gt;
* http://archives.postgresql.org/message-id/4DDCEEB8.50602@enterprisedb.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CREATE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow CREATE TABLE AS to determine column lengths for complex expressions like SELECT col1 || col2}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have WITH CONSTRAINTS also create constraint indexes&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-04/msg00149.php &amp;lt;nowiki&amp;gt;Re: CREATE TABLE LIKE INCLUDING INDEXES support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move NOT NULL constraint information to pg_constraint&lt;br /&gt;
|Currently NOT NULL constraints are stored in pg_attribute without any designation of their origins, e.g. primary keys.  One manifest problem is that dropping a PRIMARY KEY constraint does not remove the NOT NULL constraint designation.  Another issue is that we should probably force NOT NULL to be propagated from parent tables to children, just as CHECK constraints are.  (But then does dropping PRIMARY KEY affect children?)&lt;br /&gt;
* http://archives.postgresql.org/message-id/19768.1238680878@sss.pgh.pa.us&lt;br /&gt;
* http://archives.postgresql.org/message-id/200909181005.n8IA5Ris061239@wwwmaster.postgresql.org&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-07/msg01223.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-07/msg00358.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent concurrent CREATE TABLE from sometimes returning a cryptic error message&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-10/msg00169.php &amp;lt;nowiki&amp;gt;BUG #3692: Conflicting create table statements throw unexpected error&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add CREATE SCHEMA ... LIKE that copies a schema}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix CREATE OR REPLACE FUNCTION to not leave objects depending on the function in inconsistent state&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-08/msg00985.php indexes on functions and create or replace function]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow temporary tables to exist as empty by default in all sessions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00006.php &amp;lt;nowiki&amp;gt;what is difference between LOCAL and GLOBAL TEMP TABLES in PostgreSQL&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg01329.php &amp;lt;nowiki&amp;gt;idea: global temp tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org//pgsql-hackers/2009-05/msg00016.php &amp;lt;nowiki&amp;gt;Re: idea: global temp tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-04/msg01098.php &amp;lt;nowiki&amp;gt;global temporary tables&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2012-04/msg01148.php Temporary tables under hot standby]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow the creation of &amp;quot;distinct&amp;quot; types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01647.php &amp;lt;nowiki&amp;gt;Distinct types&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider analyzing temporary tables when they are first used in a query&lt;br /&gt;
|Autovacuum cannot analyze or vacuum temporary tables.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-04/msg00416.php &amp;lt;nowiki&amp;gt;autovacuum and temp tables support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow an unlogged table to be changed to logged&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-01/msg00315.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg00437.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg00323.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00237.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== UPDATE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Allow UPDATE tab SET ROW (col, ...) = (SELECT...)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-07/msg01308.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] extension for sql update&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg00865.php &amp;lt;nowiki&amp;gt;UPDATE using sub selects&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-04/msg00315.php &amp;lt;nowiki&amp;gt;UPDATE using sub selects&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-03/msg00237.php &amp;lt;nowiki&amp;gt;Re: UPDATE using sub selects&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Research self-referential UPDATEs that see inconsistent row versions in read-committed mode&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-05/msg00507.php &amp;lt;nowiki&amp;gt;Concurrently updating an updatable view&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-06/msg00016.php &amp;lt;nowiki&amp;gt;Re: Do we need a TODO? (was Re: Concurrently updating anupdatable view)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve performance of EvalPlanQual mechanism that rechecks already-updated rows&lt;br /&gt;
|This is related to the previous item, which questions whether it even has the right semantics&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-09/msg00045.php &amp;lt;nowiki&amp;gt;BUG #4401: concurrent updates to a table blocks one update indefinitely&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-07/msg00302.php &amp;lt;nowiki&amp;gt;BUG #4945: Parallel update(s) gone wild&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== ALTER ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have ALTER TABLE RENAME of a SERIAL column rename the sequence&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00008.php &amp;lt;nowiki&amp;gt;Re: newbie: renaming sequences task&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CADLWmXUV4LbLhMZL8rYMhCy72aZZLB5BSARPQVgoX0BrxA0FFg@mail.gmail.com renaming implicit sequences]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have ALTER SEQUENCE RENAME rename the sequence name stored in the sequence table&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-09/msg00092.php &amp;lt;nowiki&amp;gt;BUG #3619: Renaming sequence does not update its &#039;sequence_name&#039; field&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-10/msg00007.php &amp;lt;nowiki&amp;gt;Re: BUG #3619: Renaming sequence does not update its &#039;sequence_name&#039; field&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00008.php &amp;lt;nowiki&amp;gt;Re: newbie: renaming sequences task&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ALTER DOMAIN to modify the underlying data type}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow ALTER TABLESPACE to move the tablespace to different directories}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow moving system tables to other tablespaces, where possible&lt;br /&gt;
|Currently non-global system tables must be in the default database tablespace. Global system tables can never be moved.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have ALTER INDEX update the name of a constraint using that index}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow column display reordering by recording a display, storage, and permanent id for every column?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00782.php &amp;lt;nowiki&amp;gt;Re: column ordering, was Re: [PATCHES] Enums patch v2&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg01029.php &amp;lt;nowiki&amp;gt;Column reordering in pg_dump&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/message-id/1324412114-sup-9608@alvh.no-ip.org&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow deactivating (and reactivating) indexes via ALTER TABLE&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg01191.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ALTER OPERATOR ... RENAME&lt;br /&gt;
|needs to consider effects of changing operator precedence&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1322948781.26266.9.camel@vanquo.pezone.net Missing rename support]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ALTER TABLE ... RENAME RULE&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1322948781.26266.9.camel@vanquo.pezone.net Missing rename support]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== CLUSTER ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Automatically maintain clustering on a table&lt;br /&gt;
|This might require some background daemon to maintain clustering during periods of low usage. It might also require tables to be only partially filled for easier reorganization.  Another idea would be to create a merged heap/index data file so an index lookup would automatically access the heap data too.  A third idea would be to store heap rows in hashed groups, perhaps using a user-supplied hash function.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2004-08/msg00350.php &amp;lt;nowiki&amp;gt;Equivalent praxis to CLUSTERED INDEX?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00155.php &amp;lt;nowiki&amp;gt;Re: Grouped Index Tuples&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://community.enterprisedb.com/git/&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-10/msg00346.php &amp;lt;nowiki&amp;gt;Re: maintain_cluster_order_v5.patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== COPY ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY to report error lines and continue&lt;br /&gt;
|This requires the use of a savepoint before each COPY line is processed, with ROLLBACK on COPY failure. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00572.php &amp;lt;nowiki&amp;gt;Re: VLDB Features&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY FROM to create index entries in bulk&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00811.php &amp;lt;nowiki&amp;gt;Batch update of indexes on data loading&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY in CSV mode to control whether a quoted zero-length string is treated as NULL&lt;br /&gt;
|Currently this is always treated as a zero-length string, which generates an error when loading into an integer column &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00905.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] allow CSV quote in NULL&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve COPY performance&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00954.php &amp;lt;nowiki&amp;gt;Re: 8.3 / 8.2.6 restore comparison&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg01882.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY to report errors sooner&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-04/msg01169.php &amp;lt;nowiki&amp;gt;Timely reporting of COPY errors&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow COPY to handle other number formats&lt;br /&gt;
|E.g. the German notation. Best would be something like WITH DECIMAL &#039;,&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow a stalled COPY to exit if the backend is terminated&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2009-04/msg00067.php &amp;lt;nowiki&amp;gt;Re: possible bug not in open items&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== GRANT/REVOKE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow SERIAL sequences to inherit permissions from the base table?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow dropping of a role that has connection rights&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00736.php &amp;lt;nowiki&amp;gt;DROP ROLE dependency tracking ...&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== DECLARE CURSOR ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent DROP TABLE from dropping a table referenced by its own open cursor?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide some guarantees about the behavior of cursors that invoke volatile functions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20997.1244563664@sss.pgh.pa.us Re: Cursor with hold emits the same row more than once across commits in 8.3.7]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== INSERT ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow INSERT/UPDATE of the system-generated oid value for a row}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|In rules, allow VALUES() to contain a mixture of &#039;old&#039; and &#039;new&#039; references}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== SHOW/SET ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add SET PERFORMANCE_TIPS option to suggest INDEX, VACUUM, VACUUM ANALYZE, and CLUSTER}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rationalize the discrepancy between settings that use values in bytes and SHOW that returns the object count&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-docs/2008-07/msg00007.php &amp;lt;nowiki&amp;gt;Re: [ADMIN] shared_buffers and shmmax&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== ANALYZE ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have EXPLAIN ANALYZE issue NOTICE messages when the estimated and actual row counts differ by a specified percentage}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have EXPLAIN ANALYZE report rows as floating-point numbers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-05/msg01363.php &amp;lt;nowiki&amp;gt;explain analyze rows=%.0f&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-06/msg00108.php &amp;lt;nowiki&amp;gt;Re: explain analyze rows=%.0f&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve how ANALYZE computes in-doubt tuples&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00771.php &amp;lt;nowiki&amp;gt;VACUUM/ANALYZE counting of in-doubt tuples&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Window Functions ===&lt;br /&gt;
See {{messageLink|357.1230492361@sss.pgh.pa.us|TODO items for window functions}}.&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support creation of user-defined window functions&lt;br /&gt;
|We have the ability to create new window functions written in C.  Is it&lt;br /&gt;
worth the effort to create an API that would let them be written in PL/pgsql, etc?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement full support for window framing clauses&lt;br /&gt;
|In addition to done clauses described in the [http://developer.postgresql.org/pgdocs/postgres/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS latest doc], these clauses are not implemented yet.&lt;br /&gt;
* RANGE BETWEEN ... PRECEDING/FOLLOWING&lt;br /&gt;
* EXCLUDE&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Investigate tuplestore performance issues&lt;br /&gt;
|The tuplestore_in_memory() thing is just a band-aid, we ought to try to solve it properly.  tuplestore_advance seems like a weak spot as well.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg00152.php &amp;lt;nowiki&amp;gt;tuplestore potential performance problem&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem|Do we really need so much duplicated code between Agg and WindowAgg?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Teach planner to evaluate multiple windows in the optimal order&lt;br /&gt;
|Currently windows are always evaluated in the query-specified order.&lt;br /&gt;
* http://archives.postgresql.org/message-id/3CDAD71E9D70417290FCF66F0178D1E1@amd64&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement DISTINCT clause in window aggregates&lt;br /&gt;
|Some proprietary RDBMSs have implemented it already, so it helps with porting from those.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Integrity Constraints ==&lt;br /&gt;
=== Keys ===&lt;br /&gt;
&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve deferrable unique constraints for cases with many conflicts&lt;br /&gt;
|The current implementation fires a trigger for each potentially conflicting row.  This might not scale well for an update that changes many key values at once.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Referential Integrity ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add MATCH PARTIAL referential integrity}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change foreign key constraint for array -&amp;amp;gt; element to mean element in array?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-10/msg01814.php &amp;lt;nowiki&amp;gt;foreign keys for array/period contains relationships&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problem when cascading referential triggers make changes on cascaded tables, seeing the tables in an intermediate state&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-09/msg00174.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Work-in-progress referential action trigger timing&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Are ri_KeysEqual checks in the RI enforcement triggers still necessary?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2005-10/msg00458.php &amp;lt;nowiki&amp;gt;Re: Effects of cascading references in foreign keys&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Optimize referential integrity checks involving null values&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-04/msg00744.php &amp;lt;nowiki&amp;gt;Can&#039;t ri_KeysEqual() consider two nulls as equal?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Check Constraints ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Run check constraints only when affected columns are changed&lt;br /&gt;
* http://archives.postgresql.org/message-id/1326055327.15293.13.camel@vanquo.pezone.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Server-Side Languages ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for polymorphic arguments and return types to languages other than PL/PgSQL}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for OUT and INOUT parameters to languages other than PL/PgSQL}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add more fine-grained specification of functions taking arbitrary data types&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg00367.php &amp;lt;nowiki&amp;gt;RfD: more powerful &amp;amp;quot;any&amp;amp;quot; types&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement stored procedures&lt;br /&gt;
|This might involve the control of transaction state and the return of multiple result sets&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-10/msg00454.php &amp;lt;nowiki&amp;gt;PL/pgSQL stored procedure returning multiple result sets (SELECTs)?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg01375.php &amp;lt;nowiki&amp;gt;Proposal: real procedures again (8.4)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-09/msg00542.php&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-04/msg01149.php &amp;lt;nowiki&amp;gt;Gathering specs and discussion on feature (post 9.1)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow holdable cursors in SPI}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Add SPI_gettypmod() to return a field&#039;s typemod from a TupleDesc&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2005-11/msg00250.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== SQL-Language Functions ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rethink query plan caching and timing of parse analysis within SQL-language functions&lt;br /&gt;
|They should work more like plpgsql functions do ...&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2011-05/msg00078.php &amp;lt;nowiki&amp;gt;Re: BUG #6019: invalid cached plan on inherited table&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== PL/pgSQL ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow handling of %TYPE arrays, e.g. tab.col%TYPE[]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Allow listing of record column names, and access to record columns via variables, e.g. columns := r.(*), tval2 := r.(colname)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php &amp;lt;nowiki&amp;gt;Re: PL/PGSQL: Dynamic Record Introspection&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-05/msg00302.php &amp;lt;nowiki&amp;gt;Re: PL/PGSQL: Dynamic Record Introspection&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-06/msg00031.php &amp;lt;nowiki&amp;gt;Re: PL/PGSQL: Dynamic Record Introspection&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow row and record variables to be set to NULL constants, and allow NULL tests on such variables&lt;br /&gt;
|Because a row is not scalar, do not allow assignment from NULL-valued scalars.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-10/msg00070.php &amp;lt;nowiki&amp;gt;NULL and plpgsql rows&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider keeping separate cached copies when search_path changes&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg01009.php &amp;lt;nowiki&amp;gt;pl/pgsql Plan Invalidation and search_path&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve handling of NULL row values vs. NULL rows&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-09/msg01758.php &amp;lt;nowiki&amp;gt;Null row vs. row of nulls in plpgsql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg01973.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve PERFORM handling of WITH queries or document limitation&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2011-03/msg00309.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== PL/Perl ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow regex operations in plperl using UTF8 characters in non-UTF8 encoded databases}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== PL/Python ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Develop a trusted variant of PL/Python.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Create a new restricted execution class that will allow passing function arguments in as locals.  Passing them as globals means functions cannot be called recursively.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-02/msg01468.php &amp;lt;nowiki&amp;gt;Re: pl/python do not delete function arguments&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a DB-API compliant interface on top of the SPI interface&lt;br /&gt;
* http://petereisentraut.blogspot.com/2011/11/plpydbapi-db-api-for-plpython.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|For functions returning a setof record with a composite type, cache the I/O functions for the composite type&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg02007.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix loss of information during conversion of numeric type to Python float}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== PL/Tcl ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add table function support}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Check encoding validity of values passed back to Postgres in function returns, trigger tuple changes, and SPI calls.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Clients ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a function like pg_get_indexdef() that report more detailed index information&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2007-12/msg00166.php &amp;lt;nowiki&amp;gt;BUG #3829: Wrong index reporting from pgAdmin III (v1.8.0 rev 6766-6767)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Split out pg_resetxlog output into pre- and post-sections&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg02040.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== pg_ctl ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve pg_ctl&#039;s detection of running postmasters&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00000.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-committers/2011-06/msg00001.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add additional shutdown modes, and change the default?&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-04/msg01283.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== psql ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have psql \ds show all sequences and their settings&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg00916.php &amp;lt;nowiki&amp;gt;Re: TODO item: Have psql show current values for a sequence&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg00401.php &amp;lt;nowiki&amp;gt;Quick patch: Display sequence owner&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move psql backslash database information into the backend, use mnemonic commands?&lt;br /&gt;
|This would allow non-psql clients to pull the same information out of the database as psql. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-01/msg00191.php &amp;lt;nowiki&amp;gt;Re: psql \d option list overloaded&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make psql&#039;s \d commands more consistent in their handling of schemas&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-11/msg00014.php &amp;lt;nowiki&amp;gt;Re: psql and schemas&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make psql&#039;s \d commands distinguish default privileges from no privileges&lt;br /&gt;
|ACL displays were visibly different for the two cases before we &amp;quot;improved&amp;quot; them by using array_to_string.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2011-05/msg00082.php &amp;lt;nowiki&amp;gt;BUG #6021: There is no difference between default and empty access privileges with \dp&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consistently display privilege information for all objects in psql}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|\s without arguments (display history) fails with libedit, doesn&#039;t use pager either&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2011-06/msg00114.php &amp;lt;nowiki&amp;gt; psql \s not working - OS X&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a \set variable to control whether \s displays line numbers&lt;br /&gt;
|Another option is to add \# which lists line numbers, and allows command execution.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00255.php &amp;lt;nowiki&amp;gt;Re: psql possible TODO&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Include the symbolic SQLSTATE name in verbose error reports&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-09/msg00438.php &amp;lt;nowiki&amp;gt;Re: Checking is TSearch2 query is valid&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add prompt escape to display the client and server versions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-05/msg00310.php &amp;lt;nowiki&amp;gt;WIP patch for TODO Item: Add prompt escape to display the client and server versions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add option to wrap column values at whitespace boundaries, rather than chopping them at a fixed width.&lt;br /&gt;
|Currently, &amp;amp;quot;wrapped&amp;amp;quot; format chops values into fixed widths.  Perhaps the word wrapping could use the same algorithm documented in the W3C specification. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00404.php &amp;lt;nowiki&amp;gt;Re: psql wrapped format default for backslash-d commands&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://www.w3.org/TR/CSS21/tables.html#auto-table-layout}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support the ReST table output format&lt;br /&gt;
|Details about the ReST format:  http://docutils.sourceforge.net/rst.html#reference-documentation&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-08/msg01007.php &amp;lt;nowiki&amp;gt;Proposal: new border setting in psql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg00518.php &amp;lt;nowiki&amp;gt;Re: Proposal: new border setting in psql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg00609.php &amp;lt;nowiki&amp;gt;Re: Proposal: new border setting in psql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add option to print advice for people familiar with other databases&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01845.php &amp;lt;nowiki&amp;gt;MySQL-ism help patch for psql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add ability to edit views with \ev&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg00023.php &amp;lt;nowiki&amp;gt;Adding \ev view editor?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix FETCH_COUNT to handle SELECT ... INTO and WITH queries&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-05/msg01565.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2010-05/msg00192.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent psql from sending remaining single-line multi-statement queries after reconnecting&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2010-05/msg00159.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-05/msg01283.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Add \i option to bring in the specified file as a quoted literal&lt;br /&gt;
|This would be useful for creating functions and other areas.  Details still need to be worked out.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2011-02/msg00016.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2011-02/msg00020.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider having psql -c read .psqlrc, for consistency&lt;br /&gt;
|psql -f already reads .psqlrc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow processing of multiple -f (file) options&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve line drawing characters&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg00386.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider improving the continuation prompt&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg01772.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve speed of tab completion by using LIKE&lt;br /&gt;
* http://www.postgresql.org/message-id/20121012060345.GA29214@toroid.org&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== pg_dump / pg_restore ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;Add full object name to the tag field.  eg. for operators we need &#039;=(integer, integer)&#039;, instead of just &#039;=&#039;.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add pg_dumpall custom format dumps?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2010-05/msg00509.php pg_dumpall custom format]&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid using platform-dependent locale names in pg_dumpall output&lt;br /&gt;
|Using native locale names puts roadblocks in the way of porting a dump to another platform.  One possible solution is to get&lt;br /&gt;
CREATE DATABASE to accept some agreed-on set of locale names and fix them up to meet the platform&#039;s requirements.&lt;br /&gt;
* http://archives.postgresql.org/message-id/21396.1241716688@sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow selection of individual object(s) of all types, not just tables}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|In a selective dump, allow dumping of an object and all its dependencies}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add options like pg_restore -l and -L to pg_dump}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Add support for multiple pg_restore -t options, like pg_dump}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Stop dumping CASCADE on DROP TYPE commands in clean mode}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow pg_dump --clean to drop roles that own objects or have privileges&lt;br /&gt;
|tgl says: if this is about pg_dumpall, it&#039;s done as of 8.4.  If it&#039;s really about pg_dump, what does it mean?  pg_dump has no business dropping roles.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow pg_restore to load different parts of the COPY data for a single table simultaneously}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Remove support for dumping from pre-7.3 servers&lt;br /&gt;
|In 7.3 and later, we can get accurate dependency information from the server.  pg_dump still contains a lot of crufty code&lt;br /&gt;
to try to deal with the lack of dependency info in older servers, but the usefulness of maintaining that code grows small.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Refactor handling of database attributes between pg_dump and pg_dumpall&lt;br /&gt;
|Currently only pg_dumpall emits database attributes, such as ALTER DATABASE SET commands and database-level GRANTs.&lt;br /&gt;
Many people wish that pg_dump would do that.  One proposal is to let pg_dump issue such commands if the -C switch was used,&lt;br /&gt;
but it&#039;s unclear whether that will satisfy the demand.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg01031.php &amp;lt;nowiki&amp;gt;ALTER DATABASE vs pg_dump&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2010-05/msg00010.php summary of the issues]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change pg_dump so that a comment on the dumped database is applied to the loaded database, even if the database has a different name.&lt;br /&gt;
|This will require new backend syntax, perhaps COMMENT ON CURRENT DATABASE. This is related to the previous item.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow parallel restore of tar dumps&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-02/msg01154.php &amp;lt;nowiki&amp;gt;Re: parallel restore&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Preserve sparse storage of large objects over dump/restore&lt;br /&gt;
* [http://archives.postgresql.org/message-id/18789.1349750451@sss.pgh.pa.us &amp;lt;nowiki&amp;gt;TODO item: teach pg_dump about sparsely-stored large objects&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== ecpg ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Docs&lt;br /&gt;
|Document differences between ecpg and the SQL standard and information about the Informix-compatibility module.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Solve cardinality &amp;amp;gt; 1 for input descriptors / variables?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add a semantic check level, e.g. check if a table really exists}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|fix handling of DB attributes that are arrays}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix nested C comments}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|sqlwarn[6] should be &#039;W&#039; if the PRECISION or SCALE value specified}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make SET CONNECTION thread-aware, non-standard?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow multidimensional arrays}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement COPY FROM STDIN}} &lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide a way to specify size of a bytea parameter&lt;br /&gt;
* [http://archives.postgresql.org/message-id/200906192131.n5JLVoMo044178@wwwmaster.postgresql.org &amp;lt;nowiki&amp;gt;BUG #4866: ECPG and BYTEA&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Fix small memory leaks in ecpg&lt;br /&gt;
|Memory leaks in a short running application like ecpg are not really a problem, but make debugging more complicated}} &lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow reuse of cursor name variables&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20100329113435.GA3430@feivel.credativ.lan &amp;lt;nowiki&amp;gt;Problems with variable cursorname in ecpg&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== libpq ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent PQfnumber() from lowercasing unquoted column names&lt;br /&gt;
|PQfnumber() should never have been doing lowercasing, but historically it has so we need a way to prevent it}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider disallowing multiple queries in PQexec() as an additional barrier to SQL injection attacks&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-01/msg00184.php &amp;lt;nowiki&amp;gt;Re: InitPostgres and flatfiles question&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add PQexecf() that allows complex parameter substitution&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01803.php &amp;lt;nowiki&amp;gt;Last minute mini-proposal (I know, know) for PQexecf()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add SQLSTATE and severity to errors generated within libpq itself&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-interfaces/2007-11/msg00015.php &amp;lt;nowiki&amp;gt;v8.1: Error severity on libpq PGconn*&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg01425.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add support for interface/ipaddress binding to libpq&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01811.php &amp;lt;nowiki&amp;gt;SR/libpq - outbound interface/ipaddress binding&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== HTTP===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow access to the database via HTTP&lt;br /&gt;
|See [[HTTP_API]]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Triggers ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve storage of deferred trigger queue&lt;br /&gt;
|Right now all deferred trigger information is stored in backend memory.  This could exhaust memory for very large trigger queues. This item involves dumping large queues into files, or doing some kind of join to process all the triggers, some bulk operation, or a bitmap. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00876.php &amp;lt;nowiki&amp;gt;Re: BUG #4204: COPY to table with FK has memory leak&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-10/msg00464.php &amp;lt;nowiki&amp;gt;Scaling up deferred unique checks and the after trigger queue&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-08/msg00023.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow triggers to be disabled in only the current session.&lt;br /&gt;
|This is currently possible by starting a multi-statement transaction, modifying the system tables, performing the desired SQL, restoring the system tables, and committing the transaction.  ALTER TABLE ... TRIGGER requires a table lock so it is not ideal for this usage.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|With disabled triggers, allow pg_dump to use ALTER TABLE ADD FOREIGN KEY&lt;br /&gt;
|If the dump is known to be valid, allow foreign keys to be added without revalidating the data.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow statement-level triggers to access modified rows}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|When statement-level triggers are defined on a parent table, have them fire only on the parent table, and fire child table triggers only where appropriate&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg01883.php &amp;lt;nowiki&amp;gt;Statement-level triggers and inheritance&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
|Add event triggers&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Tighten trigger permission checks&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00564.php &amp;lt;nowiki&amp;gt;Security leak with trigger functions?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow BEFORE INSERT triggers on views&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-02/msg01466.php &amp;lt;nowiki&amp;gt;Re: Why can&#039;t I put a BEFORE EACH ROW trigger on a view?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add database and transaction-level triggers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00451.php &amp;lt;nowiki&amp;gt;Proposal for db level triggers&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00620.php &amp;lt;nowiki&amp;gt;triggers on prepare, commit, rollback... ?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce locking requirements for creating a trigger&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg00635.php &amp;lt;nowiki&amp;gt;Re: Change lock requirements for adding a trigger&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid requirement for &amp;quot;AFTER&amp;quot; trigger functions to return a value&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg02384.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow creation of inline triggers&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-02/msg00708.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Inheritance ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow inherited tables to inherit indexes, UNIQUE constraints, and primary/foreign keys&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-05/msg00285.php &amp;lt;nowiki&amp;gt;Partitioning/inherited tables vs FKs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg00039.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg00305.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Honor UNIQUE INDEX on base column in INSERTs/UPDATEs on inherited table, e.g.  INSERT INTO inherit_table (unique_index_col) VALUES (dup) should fail&lt;br /&gt;
|The main difficulty with this item is the problem of creating an index that can span multiple tables.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Determine whether ALTER TABLE / SET SCHEMA should work on inheritance hierarchies (and thus support ONLY).  If yes, implement it.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|ALTER TABLE variants sometimes support recursion and sometimes not, but this is poorly/not documented, and the ONLY marker would then be silently ignored. Clarify the documentation, and reject ONLY if it is not supported.}}&lt;br /&gt;
&lt;br /&gt;
== Indexes ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent index uniqueness checks when UPDATE does not modify the column&lt;br /&gt;
|Uniqueness (index) checks are done when updating a column even if the column is not modified by the UPDATE.&lt;br /&gt;
However, HOT already short-circuits this in common cases, so more work might not be helpful.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow the creation of on-disk bitmap indexes which can be quickly combined with other bitmap indexes&lt;br /&gt;
|Such indexes could be more compact if there are only a few distinct values. Such indexes can also be compressed.  Keeping such indexes updated can be costly.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2005-07/msg00512.php &amp;lt;nowiki&amp;gt;Re: Bitmap index AM&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg01107.php &amp;lt;nowiki&amp;gt;Bitmap index thoughts&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg00265.php &amp;lt;nowiki&amp;gt;Stream bitmaps&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01214.php &amp;lt;nowiki&amp;gt;Re: Bitmapscan changes - Requesting further feedback&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-05/msg00013.php &amp;lt;nowiki&amp;gt;Updated bitmap index patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00741.php &amp;lt;nowiki&amp;gt;Reviewing new index types (was Re: [PATCHES] Updated bitmap indexpatch)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01023.php &amp;lt;nowiki&amp;gt;Bitmap Indexes: request for feedback&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/message-id/800923.27831.qm@web29010.mail.ird.yahoo.com &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow accurate statistics to be collected on indexes with more than one column or expression indexes, perhaps using per-index statistics&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2006-10/msg00222.php &amp;lt;nowiki&amp;gt;Re: Simple join optimized badly?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01131.php &amp;lt;nowiki&amp;gt;Stats for multi-column indexes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00741.php &amp;lt;nowiki&amp;gt;Cross-column statistics revisited&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-06/msg01431.php &amp;lt;nowiki&amp;gt;Multi-Dimensional Histograms&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg00913.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg02179.php &lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-01/msg00459.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg02054.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg01731.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg00894.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-09/msg00679.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider having a larger statistics target for indexed columns and expression indexes. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider smaller indexes that record a range of values per heap page, rather than having one index entry for every heap row&lt;br /&gt;
|This is useful if the heap is clustered by the indexed values. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00341.php &amp;lt;nowiki&amp;gt;Grouped Index Tuples&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg01264.php &amp;lt;nowiki&amp;gt;Grouped Index Tuples&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg00465.php &amp;lt;nowiki&amp;gt;Grouped Index Tuples / Clustered Indexes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-03/msg00163.php &amp;lt;nowiki&amp;gt;Bitmapscan changes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00014.php &amp;lt;nowiki&amp;gt;Re: GIT patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00487.php &amp;lt;nowiki&amp;gt;Re: Index Tuple Compression Approach?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-04/msg01589.php &amp;lt;nowiki&amp;gt;Re: Index AM change proposals, redux&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add REINDEX CONCURRENTLY, like CREATE INDEX CONCURRENTLY&lt;br /&gt;
|This is difficult because you must upgrade to an exclusive table lock to replace the existing index file.  CREATE INDEX CONCURRENTLY does not have this complication.  This would allow index compaction without downtime. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2007-08/msg00289.php &amp;lt;nowiki&amp;gt;Re: When/if to Reindex&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-09/msg00911.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-10/msg00128.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow multiple indexes to be created concurrently, ideally via a single heap scan&lt;br /&gt;
|pg_restore allows parallel index builds, but it is done via subprocesses, and there is no SQL interface for this.&lt;br /&gt;
Cluster could definitely benefit from this.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-04/msg00093.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider sorting entries before inserting into btree index&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-01/msg01010.php &amp;lt;nowiki&amp;gt;Re: ATTN: Clodaldo was Performance problem. Could it be related to 8.3-beta4?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow creation of an index that can do comparisons to test if a value is between two column values&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00757.php &amp;lt;nowiki&amp;gt;Proposal: temporal extension &amp;amp;quot;period&amp;amp;quot; data type&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider using &amp;quot;effective_io_concurrency&amp;quot; for index scans&lt;br /&gt;
* Currently only bitmap scans use this, which might be fine because most multi-row index scans use bitmap scans.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problem with btree page splits during checkpoints&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg00052.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-09/msg00184.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|[http://archives.postgresql.org/pgsql-hackers/2012-05/msg00669.php Support amgettuple() in GIN (useful for exclusion constraints)]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow &amp;quot;loose&amp;quot; or &amp;quot;skip&amp;quot; scans on btree indexes in which the first column has low cardinality&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2012-08/msg00159.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GIST ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add more GIST index support for geometric data types}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow GIST indexes to create certain complex index types, like digital trees (see Aoki)}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix performance issues in contrib/seg and contrib/cube GiST support&lt;br /&gt;
* [http://archives.postgresql.org/message-id/alpine.DEB.2.00.0904161633160.4053@aragorn.flymine.org GiST index performance]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/alpine.DEB.2.00.0904221704470.22330@aragorn.flymine.org draft patch]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-05/msg00069.php &amp;lt;nowiki&amp;gt;Re: GiST index performance&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-06/msg00068.php &amp;lt;nowiki&amp;gt;GiST index performance&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|[http://archives.postgresql.org/message-id/4DC8D284-05CF-4E3D-9670-AC9A32C37A36@justatheory.com GiST index support for arrays]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Hash ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add UNIQUE capability to hash indexes}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add hash WAL logging for crash recovery&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-09/msg00196.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow multi-column hash indexes}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Sorting ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider whether duplicate keys should be sorted by block/offset&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00558.php &amp;lt;nowiki&amp;gt;Remove hacks for old bad qsort() implementations?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider being smarter about memory and external files used during sorts&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg01101.php &amp;lt;nowiki&amp;gt;Sorting Improvements for 8.4&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00045.php &amp;lt;nowiki&amp;gt;Re: Sorting Improvements for 8.4&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider detoasting keys before sorting}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow sorts to use more available memory&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2007-11/msg01026.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-09/msg01123.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg01957.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Fsync ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Determine optimal fdatasync/fsync, O_SYNC/O_DSYNC options and whether fsync does anything&lt;br /&gt;
|Ideally this requires a separate test program like /contrib/pg_test_fsync that can be run at initdb time or optionally later.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider sorting writes during checkpoint&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-06/msg00541.php &amp;lt;nowiki&amp;gt;Sorted writes in checkpoint&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-07/msg00050.php &amp;lt;nowiki&amp;gt;Re: Sorting writes during checkpoint&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg02012.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg00278.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-01/msg00493.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Cache Usage ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide a way to calculate an &amp;amp;quot;estimated COUNT(*)&amp;amp;quot;&lt;br /&gt;
|Perhaps by using the optimizer&#039;s cardinality estimates or random sampling.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-11/msg00943.php &amp;lt;nowiki&amp;gt;Re: Improving count(*)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://wiki.postgresql.org/wiki/Slow_Counting&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider automatic caching of statements at various levels:&lt;br /&gt;
* Parsed query tree&lt;br /&gt;
* Query execute plan&lt;br /&gt;
* Query results &lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-04/msg00823.php &amp;lt;nowiki&amp;gt;Cached Query Plans (was: global prepared statements)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider increasing internal areas (NUM_CLOG_BUFFERS) when shared buffers is increased&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-10/msg01419.php &amp;lt;nowiki&amp;gt;Re: slru.c race condition (was Re: TRAP: FailedAssertion(&amp;amp;quot;!((itemid)-&amp;amp;gt;lp_flags &amp;amp;amp; 0x01)&amp;amp;quot;,)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00030.php &amp;lt;nowiki&amp;gt;clog_buffers to 64 in 8.3?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2007-08/msg00024.php &amp;lt;nowiki&amp;gt;CLOG Patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider decreasing the amount of memory used by PrivateRefCount&lt;br /&gt;
|&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-11/msg00797.php &amp;lt;nowiki&amp;gt;PrivateRefCount (for 8.3)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-01/msg00752.php &amp;lt;nowiki&amp;gt;Re: PrivateRefCount (for 8.3)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider allowing higher priority queries to have referenced buffer cache pages stay in memory longer&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00562.php &amp;lt;nowiki&amp;gt;Re: How to keep a table in memory?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve cache lookup speed for sessions accessing many relations&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-11/msg00356.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Vacuum ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Auto-fill the free space map by scanning the buffer cache or by checking pages written by the background writer&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-02/msg01125.php &amp;lt;nowiki&amp;gt;Dead Space Map&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-03/msg00011.php &amp;lt;nowiki&amp;gt;Re: Automatic free space map filling&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow concurrent inserts to use recently created pages rather than creating new ones&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-05/msg00853.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider having single-page pruning update the visibility map&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;https://commitfest.postgresql.org/action/patch_view?id=75&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg02344.php &amp;lt;nowiki&amp;gt;Re: visibility maps and heap_prune&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve tracking of total relation tuple counts now that vacuum doesn&#039;t always scan the whole heap&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-06/msg00531.php Partial vacuum versus pg_class.reltuples]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Bias FSM towards returning free space near the beginning of the heap file, in hopes that empty pages at the end can be truncated by VACUUM&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-09/msg01124.php &amp;lt;nowiki&amp;gt;FSM search modes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a more compact data representation for dead tuple locations within VACUUM&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-05/msg00143.php &amp;lt;nowiki&amp;gt;Re: Have vacuum emit a warning when it runs out of maintenance_work_mem&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide more information in order to improve user-side estimates of dead space bloat in relations&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2009-05/msg01039.php &amp;lt;nowiki&amp;gt;Re: Bloated Table&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve locking behaviour of vacuum during trailing page truncation&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2011-03/msg00319.php&lt;br /&gt;
* http://archives.postgresql.org/message-id/4D8DF88E.7080205@Yahoo.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce the number of table scans performed by vacuum&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg01119.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00605.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-07/msg00624.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Vacuum Gin indexes in physically order rather than logical order&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-04/msg00443.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid creation of the free space map for small tables&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-11/msg01751.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-08/msg00552.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-08/msg00615.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Auto-vacuum ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Issue log message to suggest VACUUM FULL if a table is nearly empty?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent long-lived temporary tables from causing frozen-xid advancement starvation&lt;br /&gt;
|The problem is that autovacuum cannot vacuum them to set frozen xids; only the session that created them can do that. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-06/msg01645.php &amp;lt;nowiki&amp;gt;Re: AutoVacuum Behaviour Question&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Prevent autovacuum from running if an old transaction is still running from the last vacuum&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00899.php &amp;lt;nowiki&amp;gt;Re: Autovacuum and OldestXmin&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have autoanalyze of parent tables occur when child tables are modified&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-06/msg00137.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-10/msg00271.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow visibility map all-visible bits to be set even when an auto-ANALYZE is running&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-01/msg00356.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow parallel cores to be used by vacuumdb&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4F10A728.7090403@agliodbs.com vacuumdb -j]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve autovacuum tuning&lt;br /&gt;
* http://www.postgresql.org/message-id/5078AD6B.8060802@agliodbs.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix priority ordering of read and write light-weight locks&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-11/msg00893.php &amp;lt;nowiki&amp;gt;lwlocks and starvation&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-11/msg00905.php &amp;lt;nowiki&amp;gt;Re: lwlocks and starvation&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problem when multiple subtransactions of the same outer transaction hold different types of locks, and one subtransaction aborts&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-11/msg01011.php &amp;lt;nowiki&amp;gt;FOR SHARE vs FOR UPDATE locks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg00001.php &amp;lt;nowiki&amp;gt;Re: FOR SHARE vs FOR UPDATE locks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg00435.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] [pgsql-patches] Phantom Command IDs, updated patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-05/msg00773.php &amp;lt;nowiki&amp;gt;Re: savepoints and upgrading locks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow UPDATEs on only non-referential integrity columns not to conflict with referential integrity locks&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg00073.php &amp;lt;nowiki&amp;gt;Referential Integrity and SHARE locks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add idle_in_transaction_timeout GUC so locks are not held for long periods of time}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve deadlock detection when a page cleaning lock conflicts with a shared buffer that is pinned&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-01/msg00138.php &amp;lt;nowiki&amp;gt;BUG #3883: Autovacuum deadlock with truncate?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00873.php &amp;lt;nowiki&amp;gt;Thoughts about bug #3883&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-committers/2008-01/msg00365.php &amp;lt;nowiki&amp;gt;Re: pgsql: Add checks to TRUNCATE, CLUSTER, and REINDEX to prevent&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Detect deadlocks involving LockBufferForCleanup()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00873.php &amp;lt;nowiki&amp;gt;Thoughts about bug #3883&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow finer control over who is cancelled in a deadlock&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01727.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a lock timeout parameter&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-05/msg00485.php &amp;lt;nowiki&amp;gt;SELECT ... FOR UPDATE [WAIT integer | NOWAIT] for 8.5&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Startup Time Improvements ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Experiment with multi-threaded backend for backend creation&lt;br /&gt;
|This would prevent the overhead associated with process creation. Most operating systems have trivial process creation time compared to database startup overhead, but a few operating systems (Win32, Solaris) might benefit from threading.  Also explore the idea of a single session using multiple threads to execute a statement faster.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow backends to change their database without restart&lt;br /&gt;
|This allows for faster server startup.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg00843.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-12/msg00336.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Write-Ahead Log ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Eliminate need to write full pages to WAL before page modification&lt;br /&gt;
|Currently, to protect against partial disk page writes, we write full page images to WAL before they are modified so we can correct any partial page writes during recovery.  These pages can also be eliminated from point-in-time archive files. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2002-06/msg00655.php &amp;lt;nowiki&amp;gt;Re: Index Scans become Seq Scans after VACUUM ANALYSE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-05/msg01191.php&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20120105061916.GB21048@fetter.org WIP double writes]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4EFC449F02000025000441CD@gw.wicourts.gov double writes]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20120110214344.GB21106@fetter.org Double-write with Fast Checksums]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1962493974.656458.1327703514780.JavaMail.root@zimbra-prod-mbox-4.vmware.com double writes using &amp;quot;double-write buffer&amp;quot; approach]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-10/msg01463.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|When full page writes are off, write CRC to WAL and check file system blocks on recovery&lt;br /&gt;
|If CRC check fails during recovery, remember the page in case a later CRC for that page properly matches.  The difficulty is that hint bits are not WAL logged, meaning a valid page might not match the earlier CRC.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Write full pages during file system write and not when the page is modified in the buffer cache&lt;br /&gt;
|This allows most full page writes to happen in the background writer.  It might cause problems for applying WAL on recovery into a partially-written page, but later the full page will be replaced from WAL.&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CAGvK12UST-tPhyLrSLuSpwFxZbAO79yYrhV2xaLmS2MkUxNUVQ@mail.gmail.com Page Checksums + Double Writes]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce WAL traffic so only modified values are written rather than entire rows&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg01589.php &amp;lt;nowiki&amp;gt;Reduction in WAL for UPDATEs&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow WAL information to recover corrupted pg_controldata&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-06/msg00025.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] pg_resetxlog -r flag&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Find a way to reduce rotational delay when repeatedly writing last WAL page&lt;br /&gt;
|Currently fsync of WAL requires the disk platter to perform a full rotation to fsync again. One idea is to write the WAL to different offsets that might reduce the rotational delay. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2002-11/msg00483.php &amp;lt;nowiki&amp;gt;500 tpsQL + WAL log implementation&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Speed WAL recovery by allowing more than one page to be prefetched&lt;br /&gt;
|This should be done utilizing the same infrastructure used for prefetching in general to avoid introducing complex error-prone code in WAL replay. &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-12/msg00683.php &amp;lt;nowiki&amp;gt;Slow PITR restore&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00497.php &amp;lt;nowiki&amp;gt;Re: [GENERAL] Slow PITR restore&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg01279.php &amp;lt;nowiki&amp;gt;Read-ahead and parallelism in redo recovery&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve WAL concurrency by increasing lock granularity&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00556.php &amp;lt;nowiki&amp;gt;Reworking WAL locking&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Be more aggressive about creating WAL files&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg01325.php &amp;lt;nowiki&amp;gt;Re: PANIC caused by open_sync on Linux&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-07/msg01075.php &amp;lt;nowiki&amp;gt;PreallocXlogFiles&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2005-04/msg00556.php &amp;lt;nowiki&amp;gt;WAL/PITR additional items&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have resource managers report the duration of their status changes&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg01468.php &amp;lt;nowiki&amp;gt;Recovery of Multi-stage WAL actions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move pgfoundry&#039;s xlogdump to /contrib and have it rely more closely on the WAL backend code&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-11/msg00035.php &amp;lt;nowiki&amp;gt;xlogdump&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Close deleted WAL files held open in *nix by long-lived read-only backends&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-11/msg01754.php &amp;lt;nowiki&amp;gt;Deleted WAL files held open by backends in Linux&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg00060.php &amp;lt;nowiki&amp;gt;Re: Deleted WAL files held open by backends in Linux&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Optimizer / Executor ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve selectivity functions for geometric operators}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider increasing the default values of from_collapse_limit, join_collapse_limit, and/or geqo_threshold&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4136ffa0905210551u22eeb31bn5655dbe7c9a3aed5@mail.gmail.com from_collapse_limit vs. geqo_threshold]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve ability to display optimizer analysis using OPTIMIZER_DEBUG&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-08/msg00597.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Log statements where the optimizer row estimates were dramatically different from the number of rows actually found?}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider compressed annealing to search for query plans&lt;br /&gt;
|This might replace GEQO.&lt;br /&gt;
* http://archives.postgresql.org/message-id/15658.1241278636%40sss.pgh.pa.us&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve use of expression indexes for ORDER BY &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-08/msg01553.php &amp;lt;nowiki&amp;gt;Resjunk sort columns, Heikki&#039;s index-only quals patch, and bug #5000&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Modify the planner to better estimate caching effects&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2010-11/msg00117.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow shared buffer cache contents to affect index cost computations&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg01140.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow the CTE (Common Table Expression) optimization fence to be optionally disabled&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-09/msg00700.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2012-11/msg00161.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Hashing ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider using a hash for joining to a large IN (VALUES ...) list&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-05/msg00450.php &amp;lt;nowiki&amp;gt;Planning large IN lists&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow single batch hash joins to preserve outer pathkeys&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-09/msg00806.php Re: Potential Join Performance Issue]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|&amp;quot;lazy&amp;quot; hash tables - look up only the tuples that are actually requested&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid building the same hash table more than once during the same query&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid hashing for distinct and then re-hashing for hash join&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4136ffa0902191346g62081081v8607f0b92c206f0a@mail.gmail.com Re: Fixing Grittner&#039;s planner issues]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-04/msg00153.php a few crazy ideas about hash joins]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Background Writer ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider having the background writer update the transaction status hint bits before writing out the page&lt;br /&gt;
|Implementing this requires the background writer to have access to system catalogs and the transaction status log.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider adding buffers the background writer finds reusable to the free list &lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-04/msg00781.php &amp;lt;nowiki&amp;gt;Background LRU Writer/free list&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CA+U5nMKtvyDcV4zTr7bq7t6cA2nBfLxCJ8tQgVBnc5ddRPO+Bg@mail.gmail.com our buffer replacement strategy is kind of lame]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Automatically tune bgwriter_delay based on activity rather then using a fixed interval&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-04/msg00781.php &amp;lt;nowiki&amp;gt;Background LRU Writer/free list&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CA+U5nMKtvyDcV4zTr7bq7t6cA2nBfLxCJ8tQgVBnc5ddRPO+Bg@mail.gmail.com our buffer replacement strategy is kind of lame]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider whether increasing BM_MAX_USAGE_COUNT improves performance&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-06/msg01007.php &amp;lt;nowiki&amp;gt;Bgwriter LRU cleaning: we&#039;ve been going at this all wrong&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Test to see if calling PreallocXlogFiles() from the background writer will help with WAL segment creation latency&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-06/msg00340.php &amp;lt;nowiki&amp;gt;Re: Load Distributed Checkpoints, final patch&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Concurrent Use of Resources ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Do async I/O for faster random read-ahead of data&lt;br /&gt;
|Async I/O allows multiple I/O requests to be sent to the disk with results coming back asynchronously.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-10/msg00820.php &amp;lt;nowiki&amp;gt;Asynchronous I/O Support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2007-09/msg00255.php &amp;lt;nowiki&amp;gt;Re: random_page_costs - are defaults of 4.0 realistic for SCSI RAID 1&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00027.php &amp;lt;nowiki&amp;gt;There&#039;s random access and then there&#039;s random access&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-01/msg00170.php &amp;lt;nowiki&amp;gt;Bitmap index scan preread using posix_fadvise (Was: There&#039;s random access and then there&#039;s random access)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
The above patch is already applied as of 8.4, but it still remains to figure out how to handle plain indexscans effectively.&lt;br /&gt;
* [http://archives.postgresql.org//pgsql-hackers/2009-01/msg00806.php Problems with the patch submitted for posix_fadvise in index scans]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Experiment with multi-threaded backend for better I/O utilization&lt;br /&gt;
|This would allow a single query to make use of multiple I/O channels simultaneously.  One idea is to create a background reader that can pre-fetch sequential and index scan pages needed by other backends. This could be expanded to allow concurrent reads from multiple devices in a partitioned table.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-performance/2011-02/msg00123.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-10/msg01139.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Experiment with multi-threaded backend for better CPU utilization&lt;br /&gt;
|This would allow several CPUs to be used for a single query, such as for sorting or query execution.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00945.php &amp;lt;nowiki&amp;gt;Multi CPU Queries - Feedback and/or suggestions wanted!&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|SMP scalability improvements&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00439.php &amp;lt;nowiki&amp;gt;Straightforward changes for increased SMP scalability&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00206.php &amp;lt;nowiki&amp;gt;Re: Reducing Transaction Start/End Contention&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00361.php &amp;lt;nowiki&amp;gt;Re: Reducing Transaction Start/End Contention&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== TOAST ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow user configuration of TOAST thresholds&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-02/msg00213.php &amp;lt;nowiki&amp;gt;Re: Proposed adjustments in MaxTupleSize and toastthresholds&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00082.php &amp;lt;nowiki&amp;gt;pg_lzcompress strategy parameters&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce unnecessary cases of deTOASTing&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-09/msg00895.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Eliminate more detoast copies for packed varlenas&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce costs of repeat de-TOASTing of values&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-06/msg01096.php &amp;lt;nowiki&amp;gt;WIP patch: reducing overhead for repeat de-TOASTing&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Monitoring ==&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Expand pg_stat_activity for easier integration with monitoring tools&lt;br /&gt;
|* http://archives.postgresql.org/message-id/4DFA13A5.2060200@2ndQuadrant.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add column to pg_stat_activity that shows the progress of long-running commands like CREATE INDEX and VACUUM&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-04/msg00203.php &amp;lt;nowiki&amp;gt;EXPLAIN progress info&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* The CLUSTER/VACUUM FULL implementation would also be useful to track this way&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Have pg_stat_activity display query strings in the correct client encoding&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-01/msg00131.php &amp;lt;nowiki&amp;gt;pg_stats queries versus per-database encodings&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Expose pg_controldata via an SQL interface&lt;br /&gt;
|Helpful for monitoring replicated databases&lt;br /&gt;
* http://archives.postgresql.org/message-id/4B901D73.8030003@agliodbs.com&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4B959D7A.6010907@joeconway.com initial patch]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add entry creation timestamp column to pg_stat_replication&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-08/msg00694.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Allow reporting of stalls due to wal_buffer wrap-around&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-02/msg00826.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Restructure pg_stat_database columns tup_returned and tup_fetched to return meaningful values&lt;br /&gt;
* http://www.postgresql.org/message-id/20121012060345.GA29214@toroid.org&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Performance ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Use mmap() rather than SYSV for shared buffers?&lt;br /&gt;
|This would remove the requirement for SYSV SHM but would introduce portability issues. Anonymous mmap (or mmap to /dev/zero) is required to prevent I/O overhead. We could also consider mmap() for writing WAL.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg00750.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg00756.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rather than consider mmap()-ing in 8k pages, consider mmap()&#039;ing entire files into a backend?&lt;br /&gt;
|Doing I/O to large tables would consume a lot of address space or require frequent mapping/unmapping.  Extending the file also causes mapping problems that might require mapping only individual pages, leading to thousands of mappings.  Another problem is that there is no way to _prevent_ I/O to disk from the dirty shared buffers so changes could hit disk before WAL is written.&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01239.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider ways of storing rows more compactly on disk:&lt;br /&gt;
* Reduce the row header size?&lt;br /&gt;
* Consider reducing on-disk varlena length from four bytes to two because a heap row cannot be more than 64k in length}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider transaction start/end performance improvements&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00948.php &amp;lt;nowiki&amp;gt;Reducing Transaction Start/End Contention&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00361.php &amp;lt;nowiki&amp;gt;Re: Reducing Transaction Start/End Contention&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow configuration of backend priorities via the operating system&lt;br /&gt;
|Though backend priorities make priority inversion during lock waits possible, research shows that this is not a huge problem.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2007-02/msg00493.php &amp;lt;nowiki&amp;gt;Priorities for users or queries?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider increasing the minimum allowed number of shared buffers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2008-02/msg00157.php &amp;lt;nowiki&amp;gt;Re: [PATCH] Don&#039;t bail with legitimate -N/-B options&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider if CommandCounterIncrement() can avoid its AcceptInvalidationMessages() call&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-committers/2007-11/msg00585.php &amp;lt;nowiki&amp;gt;pgsql: Avoid incrementing the CommandCounter when&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider Cartesian joins when both relations are needed to form an indexscan qualification for a third relation&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2007-12/msg00090.php &amp;lt;nowiki&amp;gt;Re: TB-sized databases&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider not storing a NULL bitmap on disk if all the NULLs are trailing&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-12/msg00624.php &amp;lt;nowiki&amp;gt;Proposal for Null Bitmap Optimization(for Trailing NULLs)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-12/msg00109.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] Proposal for Null Bitmap Optimization(for TrailingNULLs)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Sort large UPDATE/DELETEs so it is done in heap order&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg01119.php &amp;lt;nowiki&amp;gt;Possible future performance improvement: sort updates/deletes by ctid&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider decreasing the I/O caused by updating tuple hint bits&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-05/msg00847.php &amp;lt;nowiki&amp;gt;Hint Bits and Write I/O&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-07/msg00199.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] Hint Bits and Write I/O&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-10/msg00695.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg00792.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-01/msg01063.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01408.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg01453.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid the requirement of freezing pages that are infrequently modified &lt;br /&gt;
|If all rows on a page are visible, it is possible to set a bit in the visibility map (once the visibility map is 100% reliable) and not need to freeze the page, avoiding a page rewrite&lt;br /&gt;
*  http://archives.postgresql.org/message-id/4BF701CF.2090205@agliodbs.com&lt;br /&gt;
*  http://archives.postgresql.org/pgsql-hackers/2010-06/msg00082.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Avoid reading in b-tree pages when replaying vacuum records in hot standby mode&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1272571938.4161.14739.camel@ebony &amp;lt;nowiki&amp;gt;Hot Standby tuning for btree_xlog_vacuum()&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Restructure truncation logic to be more resistant to failure&lt;br /&gt;
|This also involves not writing dirty buffers for a truncated or dropped relation&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-08/msg01032.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider adding logic to increase large tables by more than 8k&lt;br /&gt;
|This would reduce file system fragmentation&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2011-03/msg00337.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Other ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Deal with encoding issues for filenames in the server filesystem&lt;br /&gt;
* {{MessageLink|20090413184335.39BE.52131E4D@oss.ntt.co.jp|a proposed patch here}}&lt;br /&gt;
* {{MessageLink|8484.1244655656@sss.pgh.pa.us|some issues about it here}}&lt;br /&gt;
* {{MessageLink|20100107103740.97A5.52131E4D@oss.ntt.co.jp|Windows-specific patch here}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Deal with encoding issues in the output of localeconv()&lt;br /&gt;
* [http://archives.postgresql.org/message-id/40c6d9160904210658y590377cfw6dbbecb53d2b8be0@mail.gmail.com bug report]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/49EF8DA0.90008@tpf.co.jp draft patch]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/21710.1243620986@sss.pgh.pa.us review of patch]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide schema name and other fields available from SQL GET DIAGNOSTICS in error reports&lt;br /&gt;
* [http://archives.postgresql.org/message-id/dcc563d10810211907n3c59a920ia9eb7cd2a6d5ea58@mail.gmail.com &amp;lt;nowiki&amp;gt;How to get schema name which violates fk constraint&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-11/msg00846.php &amp;lt;nowiki&amp;gt;patch - Report the schema along table name in a referential failure 	error message&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* {{MessageLink|3191.1263306359@sss.pgh.pa.us|Re: NOT NULL violation and error-message}}&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-08/msg00213.php &amp;lt;nowiki&amp;gt;the case for machine-readable error fields&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItemDone&lt;br /&gt;
| Provide [http://developer.postgresql.org/pgdocs/postgres/libpq-connect.html#LIBPQ-CONNECT-FALLBACK-APPLICATION-NAME fallback_application_name] in contrib/pgbench, oid2name, and dblink.&lt;br /&gt;
* {{MessageLink|w2g9837222c1004070216u3bc46b3ahbddfdffdbfb46212@mail.gmail.com|fallback_application_name and pgbench}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add 64-bit support to /contrib/pgbench&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-07/msg00153.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg00705.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy&lt;br /&gt;
|Remove warnings created by -Wcast-align}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Move platform-specific ps status display info from ps_status.c to ports}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add optional CRC checksum to heap and index pages&lt;br /&gt;
|One difficulty is how to prevent hint bit changes from affecting the computed CRC checksum.&lt;br /&gt;
* http://archives.postgresql.org/message-id/19934.1226601952%40sss.pgh.pa.us&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00002.php &amp;lt;nowiki&amp;gt;Re: Block-level CRC checks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01028.php &amp;lt;nowiki&amp;gt;double-buffering page writes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg00524.php &amp;lt;nowiki&amp;gt;Re: Block-level CRC checks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg01101.php &amp;lt;nowiki&amp;gt;Re: Block-level CRC checks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-12/msg00011.php &amp;lt;nowiki&amp;gt;Re: Block-level CRC checks&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-11/msg00249.php&lt;br /&gt;
* http://archives.postgresql.org/message-id/20111221215913.GA4536@fetter.org&lt;br /&gt;
* http://archives.postgresql.org/message-id/CA+U5nMJzQyxcObkpNAf1SYTX-gO_Mom3O9JXHnGpxRo1kXJ7ww@mail.gmail.com&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-01/msg00128.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-01/msg00113.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-02/msg00172.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-03/msg00001.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-03/msg00188.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a faster CRC32 algorithm&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2010-05/msg01112.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow cross-compiling by generating the zic database on the target system}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve NLS maintenance of libpgport messages linked onto applications}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Use UTF8 encoding for NLS messages so all server encodings can read them properly}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow creation of universal binaries for Darwin&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg00884.php &amp;lt;nowiki&amp;gt;Getting to universal binaries for Darwin&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider GnuTLS if OpenSSL license becomes a problem&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-02/msg00892.php&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2006-05/msg00040.php &amp;lt;nowiki&amp;gt;[PATCH] Add support for GnuTLS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-12/msg01213.php &amp;lt;nowiki&amp;gt;TODO: GNU TLS&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider making NAMEDATALEN more configurable in future releases}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Research use of signals and sleep wake ups&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-07/msg00003.php &amp;lt;nowiki&amp;gt;Restartable signals &#039;n all that&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow C++ code to more easily access backend code&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg00302.php &amp;lt;nowiki&amp;gt;Mostly Harmless: Welcoming our C++ friends&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider simplifying how memory context resets handle child contexts&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2007-08/msg00067.php &amp;lt;nowiki&amp;gt;Re: Memory leak in nodeAgg&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Create three versions of libpgport to simplify client code&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-10/msg00154.php &amp;lt;nowiki&amp;gt;8.4 TODO item: make src/port support libpq and ecpg directly&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve detection of shared memory segments being used by others by checking the SysV shared memory field &#039;nattch&#039;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00656.php &amp;lt;nowiki&amp;gt;postgresql in FreeBSD jails: proposal&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00673.php &amp;lt;nowiki&amp;gt;Re: postgresql in FreeBSD jails: proposal&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Implement the non-threaded Avahi service discovery protocol&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00939.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-02/msg00097.php &amp;lt;nowiki&amp;gt;Re: Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg01211.php &amp;lt;nowiki&amp;gt;Re: [PATCHES] Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-04/msg00001.php &amp;lt;nowiki&amp;gt;Re: [HACKERS] Avahi support for Postgresql&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce data row alignment requirements on some 64-bit systems&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg00369.php &amp;lt;nowiki&amp;gt;[WIP] Reduce alignment requirements on 64-bit systems.&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Restructure TOAST internal storage format for greater flexibility&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-11/msg00049.php &amp;lt;nowiki&amp;gt;Re: PG_PAGE_LAYOUT_VERSION 5 - time for change&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Add regression tests for pg_dump/restore&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01967.php &amp;lt;nowiki&amp;gt;&amp;quot;make install-check-pg_dump&amp;quot; target in src/regress]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Research different memory allocation methods for lists&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-04/msg01467.php &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Consider removing the attribute options cache&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-03/msg00039.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Restructure /contrib section&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2011-06/msg00705.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
| Consider adding explicit huge page support&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-07/msg00123.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== /contrib/pg_upgrade ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Handle large object comments&lt;br /&gt;
|This is difficult to do because the large object doesn&#039;t exist when --schema-only is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider using pg_depend for checking object usage in version.c&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|If reindex is necessary, allow it to be done in parallel with pg_dump custom format&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Migrate pg_statistic by dumping it out as a flat file, so analyze is not necessary&lt;br /&gt;
|pg_class.oid is not preserved so schema.tablename must be used.&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CAAZKuFaWdLkK8eozSAooZBets9y_mfo2HS6urPAKXEPbd-JLCA@mail.gmail.com pg_upgrade and statistics]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve testing, perhaps using the buildfarm&lt;br /&gt;
|The buildfarm has access to multiple versions of PostgreSQL.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Create machine-readable output of pg_controldata&lt;br /&gt;
|This would avoid parsing its output.  The problem is we need pg_controldata output from both the old and new clusters so we would need to support both formats.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Find cleaner way to start/stop dedicated servers for upgrades&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-08/msg00275.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider a way to run pg_upgrade on standby servers&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-07/msg00453.php&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-09/msg00056.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Remove configure.in check for link failure when cause is found}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Remove readdir() errno patch when runtime/mingwex/dirent.c rev 1.4 is released}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow psql to use readline once non-US code pages work with backslashes}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix problem with shared memory on the Win32 Terminal Server}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve signal handling&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2005-06/msg00027.php &amp;lt;nowiki&amp;gt;Simplify Win32 Signaling code&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Convert MSVC build system to remove most batch files&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-08/msg00961.php &amp;lt;nowiki&amp;gt;MSVC build system&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Support pgxs when using MSVC}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix MSVC NLS support, like for to_char()&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-02/msg00485.php &amp;lt;nowiki&amp;gt;NLS on MSVC  strikes back!&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-patches/2008-02/msg00038.php &amp;lt;nowiki&amp;gt;Fix for 8.3 MSVC locale (Was  [HACKERS] NLS on MSVC strikes back!)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Find a correct rint() substitute on Windows&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00808.php &amp;lt;nowiki&amp;gt;Minor bug in src/port/rint.c&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix global namespace issues when using multiple terminal server sessions&lt;br /&gt;
* [http://archives.postgresql.org/message-id/48F3BFCC.8030107@dunslane.net problems with Windows global namespace]}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change from the current autoconf/gmake build system to cmake&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-12/msg01869.php &amp;lt;nowiki&amp;gt;About CMake (was Re: [COMMITTERS] pgsql: Append major version number and for libraries soname major)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Improve consistency of path separator usage&lt;br /&gt;
* http://archives.postgresql.org/message-id/49C0BDC5.4010002@hagander.net&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Fix cross-compiling on Windows&lt;br /&gt;
* http://archives.postgresql.org/pgsql-bugs/2010-10/msg00110.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Reduce file statistics overhead on directory reads&lt;br /&gt;
* http://www.postgresql.org/message-id/1338325561.82125.YahooMailNeo@web39304.mail.mud.yahoo.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
=== Wire Protocol Changes ===&lt;br /&gt;
{{TodoSubsection}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow dynamic character set handling}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add decoded type, length, precision}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Mark result columns as known-not-null when possible&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-11/msg01029.php &amp;lt;nowiki&amp;gt;Adding nullable indicator to Describe&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide more control over planner treatment of statements being prepared}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Use compression&lt;br /&gt;
|If SSL is used, hopefully avoid the overhead of key negotiation and encryption&lt;br /&gt;
* http://archives.postgresql.org/pgsql-hackers/2012-06/msg00793.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Update clients to use data types, typmod, schema.table.column names of result sets using new statement protocol}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Set protocol for wire format negotiation&lt;br /&gt;
* [http://archives.postgresql.org/message-id/CACMqXCKkGrGXxQhjHCKCe0B8hn6sTt-1sdgHZOSGQMxrusOsQA@mail.gmail.com GUC_REPORT for protocol tunables]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Make sure upgrading to a 4.1 protocol version will actually work smoothly&lt;br /&gt;
* [http://archives.postgresql.org/message-id/28307.1318255008@sss.pgh.pa.us Re: libpq, PQdescribePrepared -&amp;gt; PQftype, PQfmod, no PQnullable]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoEndSubsection}}&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItemEasy &lt;br /&gt;
| Add contrib functions to the index&lt;br /&gt;
* Add the functions and GUCs in the contrib modules to [http://www.postgresql.org/docs/current/static/sql-createindex.html the documentation index]: [http://archives.postgresql.org/message-id/50A2E173.6030404@2ndQuadrant.com per list discussion]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Convert single quotes to apostrophes in the PDF documentation&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-docs/2007-12/msg00059.php &amp;lt;nowiki&amp;gt;SGML docs and pdf single-quotes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Provide a manpage for postgresql.conf&lt;br /&gt;
* {{messageLink|20080819194311.GH4428@alvh.no-ip.org|A smaller default postgresql.conf}}&lt;br /&gt;
* {{messageLink|200808211910.37524.peter_e@gmx.net|A smaller default postgresql.conf}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Change the manpage-generating toolchain to use the new XML-based docbook2x tools&lt;br /&gt;
* {{messageLink|200808211910.37524.peter_e@gmx.net|A smaller default postgresql.conf}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider changing documentation format from SGML to XML&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-docs/2006-12/msg00152.php &amp;lt;nowiki&amp;gt;Re: Authoring Tools WAS: Switching to XML&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* http://archives.postgresql.org/pgsql-docs/2011-04/msg00020.php&lt;br /&gt;
* http://wiki.postgresql.org/wiki/Switching_PostgreSQL_documentation_from_SGML_to_XML&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Document support for N&amp;lt;nowiki&amp;gt;&#039; &#039;&amp;lt;/nowiki&amp;gt; national character string literals, if it matches the SQL standard&lt;br /&gt;
* http://archives.postgresql.org/message-id/1275895438.1849.1.camel@fsopti579.F-Secure.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add diagrams to the documentation&lt;br /&gt;
* http://archives.postgresql.org/pgsql-docs/2010-07/msg00001.php&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Exotic Features ==&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add pre-parsing phase that converts non-ISO syntax to supported syntax&lt;br /&gt;
|This could allow SQL written for other databases to run without modification.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Allow plug-in modules to emulate features from other databases}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add features of Oracle-style packages&lt;br /&gt;
|A package would be a schema with session-local variables, public/private functions, and initialization functions.  It is also possible to implement these capabilities in any schema and not use a separate &amp;amp;quot;packages&amp;amp;quot; syntax at all.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-08/msg00384.php &amp;lt;nowiki&amp;gt;proposal for PL packages for 8.3.&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Consider allowing control of upper/lower case folding of unquoted identifiers&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2004-04/msg00818.php &amp;lt;nowiki&amp;gt;Bringing PostgreSQL torwards the standard regarding case folding&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2006-10/msg01527.php &amp;lt;nowiki&amp;gt;Re: [SQL] Case Preservation disregarding case sensitivity?&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-03/msg00849.php &amp;lt;nowiki&amp;gt;TODO Item: Consider allowing control of upper/lower case folding of unquoted,  identifiers&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg00415.php &amp;lt;nowiki&amp;gt;Identifier case folding notes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-07/msg00415.php &amp;lt;nowiki&amp;gt;Identifier case folding notes&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Add autonomous transactions&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00893.php &amp;lt;nowiki&amp;gt;autonomous transactions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Give query progress indication&lt;br /&gt;
* [[Query progress indication]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Rethink our type system&lt;br /&gt;
* [[Rethinking datatypes]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Features We Do &#039;&#039;Not&#039;&#039; Want ==&lt;br /&gt;
&lt;br /&gt;
The following features have been discussed ad nauseum on the PostgreSQL mailing lists and the consensus has been that the project is not interested in them.  As such, if you are going to bring them up as potential features, you will want to be familiar with all of the arguments against these features which have been previously made over the years.  If you decide to work on such features anyway, you should be aware that you face a higher-than-normal barrier to get the Project to accept them.&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|All backends running as threads in a single process (not wanted)&lt;br /&gt;
|This eliminates the process protection we get from the current setup. Thread creation is usually the same overhead as process creation on modern systems, so it seems unwise to use a pure threaded model, and MySQL and DB2 have demonstrated that threads introduce as many issues as they solve.  Threading specific operations such as I/O, seq scans, and connection management has been discussed and will probably be implemented to enable specific performance features.  Moving to a threaded engine would also require halting all other work on PostgreSQL for one to two years.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|&amp;quot;Oracle-style&amp;quot; optimizer hints (not wanted)&lt;br /&gt;
|Optimizer hints, as implemented in Oracle and other RDBMSes, are used to work around problems in the optimizer and introduce upgrade and maintenance issues.  We would rather have such problems reported and fixed.  We have discussed a more sophisticated system of per-class cost adjustment instead, but a specification remains to be developed. See [[OptimizerHintsDiscussion|Optimizer Hints Discussion]] for further information.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Embedded server (not wanted)&lt;br /&gt;
|While PostgreSQL clients runs fine in limited-resource environments, the server requires multiple processes and a stable pool of resources to run reliably and efficiently. Stripping down the PostgreSQL server to run in the same process address space as the client application would add too much complexity and failure cases. Besides, there are several very mature embedded SQL databases already available.}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Obfuscated function source code (not wanted)&lt;br /&gt;
|Obfuscating function source code has minimal protective benefits because anyone with super-user access can find a way to view the code. At the same time, it would greatly complicate backups and other administrative tasks. To prevent non-super-users from viewing function source code, remove SELECT permission on pg_proc.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2008-09/msg00668.php &amp;lt;nowiki&amp;gt;Obfuscated stored procedures (was Re: Oracle and Postgresql)&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TodoItem&lt;br /&gt;
|Indeterminate behavior for the GROUP BY clause (not wanted)&lt;br /&gt;
|At least one other database product allows specification of a subset of the result columns which GROUP BY would need to be able to provide predictable results; the server is free to return any value from the group.  This is not viewed as a desirable feature.  PostgreSQL 9.1 allows result columns that are not referenced by GROUP BY if a primary key for the same table is referenced in GROUP BY.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-03/msg00297.php &amp;lt;nowiki&amp;gt;Re: SQL compatibility reminder: MySQL vs PostgreSQL&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Todo]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PGDay_FOSDEM_2013&amp;diff=18818</id>
		<title>PGDay FOSDEM 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PGDay_FOSDEM_2013&amp;diff=18818"/>
		<updated>2013-01-07T19:21:47Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Dinner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PGDay FOSDEM 2013 =&lt;br /&gt;
&lt;br /&gt;
This is the first PgDay we hold in Belgium. FOSDEM PGDay 2013 will be held on Feb 1st in Brussels, Belgium, at the Radisson Blu Royal hotel. As an extension to the regular PostgreSQL devroom at FOSDEM, it will cover topics for PostgreSQL users, developers and contributors, and anybody else interested in PostgreSQL&lt;br /&gt;
&lt;br /&gt;
== Details ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Date:&#039;&#039;&#039; Feb 01st, 2013 9am-5pm&lt;br /&gt;
* &#039;&#039;&#039;Venue:&#039;&#039;&#039;: Radisson Blu Royal Hotel&lt;br /&gt;
* &#039;&#039;&#039;Coordinator:&#039;&#039;&#039;: PostgreSQL Europe [mailto:contact@pgconf.eu contact@pgconf.eu]&lt;br /&gt;
* &#039;&#039;&#039;Website:&#039;&#039;&#039;: http://fosdem2013.pgconf.eu/&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
Free attendance, web registration required: http://fosdem2013.pgconf.eu/registration/ (limited seats)&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
Schedule is be published at:  http://fosdem2013.pgconf.eu/schedule/&lt;br /&gt;
&lt;br /&gt;
== Location and Venue ==&lt;br /&gt;
&lt;br /&gt;
http://fosdem2013.pgconf.eu/venue/&lt;br /&gt;
&lt;br /&gt;
Address: &lt;br /&gt;
&lt;br /&gt;
http://www.radissonblu.com/royalhotel-brussels/location&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dinner ==&lt;br /&gt;
&lt;br /&gt;
We are organizing a dinner after the event on Friday 1st, 2013 at Hard Rock Cafe Brussels. We have limited (30) number of seats, so please add your name to this list before going there.&lt;br /&gt;
&lt;br /&gt;
If you are bringing someone to the event, make sure you enter your name *twice* (or more) on the list, so the attendee count matches!&lt;br /&gt;
&lt;br /&gt;
Attendees:&lt;br /&gt;
&lt;br /&gt;
# Devrim Gündüz&lt;br /&gt;
# Devrim Gündüz +1&lt;br /&gt;
# Magnus Hagander&lt;br /&gt;
# Andreas Scherbaum&lt;br /&gt;
# Andreas Scherbaum +1&lt;br /&gt;
# Jean-Paul Argudo&lt;br /&gt;
# Patryk Kordylewski&lt;br /&gt;
# Patryk Kordylewski +1&lt;br /&gt;
# Dimitri Fontaine&lt;br /&gt;
# Julien Rouhaud&lt;br /&gt;
# Dave Page&lt;br /&gt;
# Marc Cousin&lt;br /&gt;
# Stéphane Schildknecht&lt;br /&gt;
# Stéphane Schildknecht +1&lt;br /&gt;
# Jehan-Guillaume de Rorthais&lt;br /&gt;
# Guillaume Lelarge&lt;br /&gt;
# Markus Winand&lt;br /&gt;
# Marc Balmer&lt;br /&gt;
# Marc Balmer +1&lt;br /&gt;
# Stefan Kaltenbrunner&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=18787</id>
		<title>Infrastructure team</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=18787"/>
		<updated>2013-01-02T18:01:05Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: add sfrost&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Infrastructure Team ==&lt;br /&gt;
&lt;br /&gt;
The Infrastructure team is responsible for running all of the postgresql.org infrastructure. This includes a wide variety of public and non-public services.  PostgreSQL website development is discussed on the [http://archives.postgresql.org/pgsql-www/ pgsql-www mailing list]. Source code for the postgresql.org web site is stored in a public GIT repository, and is available on [http://git.postgresql.org/gitweb/?p=pgweb.git;a=summary]&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Team Members ==&lt;br /&gt;
&lt;br /&gt;
The following people are part of the sysadmin team running the postgresql.org infrastructure. Note that not all of those people do have root-level access on all servers.&lt;br /&gt;
&lt;br /&gt;
* Joshua Drake&lt;br /&gt;
* Marc Fournier&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Álvaro Herrera&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Greg Sabino Mullane&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Robert Treat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=18032</id>
		<title>Infrastructure team</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Infrastructure_team&amp;diff=18032"/>
		<updated>2012-08-18T19:39:07Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: we have been on GIT for ages now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Infrastructure Team ==&lt;br /&gt;
&lt;br /&gt;
The Infrastructure team is responsible for running all of the postgresql.org infrastructure. This includes a wide variety of public and non-public services.  PostgreSQL website development is discussed on the [http://archives.postgresql.org/pgsql-www/ pgsql-www mailing list]. Source code for the postgresql.org web site is stored in a public GIT repository, and is available on [http://git.postgresql.org/gitweb/?p=pgweb.git;a=summary]&lt;br /&gt;
&lt;br /&gt;
== Infrastructure Team Members ==&lt;br /&gt;
&lt;br /&gt;
The following people are part of the sysadmin team running the postgresql.org infrastructure. Note that not all of those people do have root-level access on all servers.&lt;br /&gt;
&lt;br /&gt;
* Joshua Drake&lt;br /&gt;
* Marc Fournier&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Álvaro Herrera&lt;br /&gt;
* Stefan Kaltenbrunner&lt;br /&gt;
* Greg Sabino Mullane&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Robert Treat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15902</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15902"/>
		<updated>2011-12-06T18:43:11Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: correct url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15901</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15901"/>
		<updated>2011-12-06T18:41:51Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Welche Replikationslösungen gibt es? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15900</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15900"/>
		<updated>2011-12-06T18:41:26Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html| Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15899</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15899"/>
		<updated>2011-12-06T18:41:05Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html| COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html| Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15898</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15898"/>
		<updated>2011-12-06T18:40:28Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: /* Hat PostgreSQL eine grafische Benutzerschnittstelle? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm| Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html| COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html| Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15897</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15897"/>
		<updated>2011-12-06T18:40:07Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: more markup fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools| Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm| Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html| COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html| Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15896</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15896"/>
		<updated>2011-12-06T18:38:43Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: another markup fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr|PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr|PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
       &lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools| Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm| Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html| COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html| Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15895</id>
		<title>FAQ/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FAQ/de&amp;diff=15895"/>
		<updated>2011-12-06T18:37:44Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: correct markup to make the links working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Was ist PostgreSQL? Wie wird es ausgesprochen? ===&lt;br /&gt;
  &lt;br /&gt;
Die (englische) Aussprache ist &amp;quot;Post-Gres-Q-L&amp;quot;. Im allgemeinen&lt;br /&gt;
Sprachgebrauch hat sich die Kurzform &amp;quot;Postgres&amp;quot; auch durchgesetzt.&lt;br /&gt;
(Für diejenigen, die es interessiert: eine MP3-Datei mit der&lt;br /&gt;
amerikanischen Aussprache befindet sich hier:&lt;br /&gt;
http://www.postgresql.org/files/postgresql.mp3&lt;br /&gt;
&lt;br /&gt;
PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge&lt;br /&gt;
von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen&lt;br /&gt;
kombiniert. PostgreSQL ist freie Software und dessen kompletter&lt;br /&gt;
Quellcode ist öffentlich verfügbar.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen&lt;br /&gt;
Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung&lt;br /&gt;
von PostgreSQL verantwortlich. Es handelt sich um ein&lt;br /&gt;
Gemeinschaftsprojekt, das nicht von einer bestimmten Firma&lt;br /&gt;
kontrolliert wird. Lesen Sie die Entwickler-FAQ:&lt;br /&gt;
http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer&lt;br /&gt;
Mitarbeit interessiert sind.&lt;br /&gt;
&lt;br /&gt;
=== Wer kontrolliert PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem&lt;br /&gt;
allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas&lt;br /&gt;
existiert gar nicht. Es gibt zwar das &amp;quot;Core Committee&amp;quot; sowie&lt;br /&gt;
Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese&lt;br /&gt;
Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die&lt;br /&gt;
Community gesteuert, die aus den Entwicklern sowie natürlich auch den&lt;br /&gt;
Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die&lt;br /&gt;
Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn&lt;br /&gt;
Sie an der PostgreSQL-Entwicklung teilnehmen möchten).&lt;br /&gt;
&lt;br /&gt;
=== Welchem Copyright unterliegt PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im&lt;br /&gt;
Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code&lt;br /&gt;
umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode&lt;br /&gt;
ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL&lt;br /&gt;
auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem&lt;br /&gt;
muß der Copyright- Text in allen Kopien der Software enthalten sein.&lt;br /&gt;
Dies ist der Originaltext der BSD-Lizenz:&lt;br /&gt;
 &lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-6 Regents of the University of California&lt;br /&gt;
 &lt;br /&gt;
 Permission to use, copy, modify, and distribute this software and its&lt;br /&gt;
 documentation for any purpose, without fee, and without a written&lt;br /&gt;
 agreement is hereby granted, provided that the above copyright notice&lt;br /&gt;
 and this paragraph and the following two paragraphs appear in all&lt;br /&gt;
 copies.&lt;br /&gt;
 &lt;br /&gt;
 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY&lt;br /&gt;
 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,&lt;br /&gt;
 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND&lt;br /&gt;
 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN&lt;br /&gt;
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 &lt;br /&gt;
 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,&lt;br /&gt;
 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF&lt;br /&gt;
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE&lt;br /&gt;
 PROVIDED HEREUNDER IS ON AN &amp;quot;AS IS&amp;quot; BASIS, AND THE UNIVERSITY OF&lt;br /&gt;
 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,&lt;br /&gt;
 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.&lt;br /&gt;
&lt;br /&gt;
Es gilt die Copyright-Klausel im Original!&lt;br /&gt;
&lt;br /&gt;
=== Auf welchen Plattformen läuft PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen&lt;br /&gt;
Plattform eingesetzt werden. Diejenigen Plattformen, die bei der&lt;br /&gt;
jeweiligen Versionsfreigabe getestet wurden, sind in den&lt;br /&gt;
Installationsanleitungen aufgelistet.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie&lt;br /&gt;
Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes&lt;br /&gt;
Installationspaket kann von http://pgfoundry.org/projects/pginstaller&lt;br /&gt;
heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98,&lt;br /&gt;
WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen.&lt;br /&gt;
&lt;br /&gt;
=== Woher bekomme ich PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier:&lt;br /&gt;
ftp://ftp.postgresql.org/pub/.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die neueste Version von PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die neueste Version von PostgreSQL kann auf der [http://www.postgresql.org/ Website] eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere Korrekturversionen alle paar Monaten. Die kleineren Updates werden &amp;quot;Minor&amp;quot;-Updates, die großen jährlich erscheinenden &amp;quot;Major&amp;quot;-Updates genannt. &amp;quot;Minor&amp;quot;-Update erscheinen in der Regel gleichzeitig für alle unterstützten &amp;quot;Major&amp;quot;-Versionen. [http://www.postgresql.org/support/versioning| Falls Sie dieses Thema interessiert sollten Sie hier weiterlesen.]&lt;br /&gt;
&lt;br /&gt;
=== Wo bekomme ich Support für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die&lt;br /&gt;
Web-Seite http://www.postgresql.org/community/lists/ bietet einen&lt;br /&gt;
Überblick. Die Listen general und bugs bieten einen guten Einstieg.&lt;br /&gt;
&lt;br /&gt;
Eine deutschsprachige Mailing-Liste gibt es hier:&lt;br /&gt;
http://archives.postgresql.org/pgsql-de-allgemein/.&lt;br /&gt;
&lt;br /&gt;
Der wichtigsten IRC-Channel ist #postgresql auf Freenode&lt;br /&gt;
(irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c&lt;br /&gt;
&#039;#postgresql&#039; &amp;quot;$USER&amp;quot; irc.freenode.net. daran teilnehmen. Auf Freenode&lt;br /&gt;
gibt es folgende Channels:&lt;br /&gt;
* #postgresql-es (spanisch)&lt;br /&gt;
* #postgresqlfr (französischen)&lt;br /&gt;
* #postgresql-br (brasilianischen) &lt;br /&gt;
&lt;br /&gt;
Es gibt außerdem einen PostgreSQL-Channel bei EFNet.&lt;br /&gt;
&lt;br /&gt;
Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller Basis leisten, kann unter http://www.postgresql.org/support/professional_support eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich einen Fehlerbericht abgeben? ===&lt;br /&gt;
  &lt;br /&gt;
Nutzen Sie das Formular unter&lt;br /&gt;
http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher&lt;br /&gt;
unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine&lt;br /&gt;
neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.&lt;br /&gt;
&lt;br /&gt;
Bugs, die über das Formular bzw. eine der Mailing-Listen&lt;br /&gt;
bekanntgegeben wurden, erhalten typischerweise einer der folgenden&lt;br /&gt;
Reaktionen:&lt;br /&gt;
&lt;br /&gt;
* es ist kein Bug, der Grund wird benannt&lt;br /&gt;
* es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste aufgenommen wurde&lt;br /&gt;
* der Bug wurde in der aktuellen Version behoben&lt;br /&gt;
* der Bug wurde bereits behoben, befindet sich aber noch nicht in einer offiziell veröffentlichten Version&lt;br /&gt;
* es wird um eingehendere Informationen gebeten, z.B.:&lt;br /&gt;
** Betriebssystem&lt;br /&gt;
** PostgreSQL-Version&lt;br /&gt;
** reproduzierbares Fallbeispiel&lt;br /&gt;
** Debugging-Information&lt;br /&gt;
** Debugger-Backtrace-Ausgabe&lt;br /&gt;
* der Bug ist neu. Folgendes könnte passieren:&lt;br /&gt;
** ein Patch wird erstellt und in der nächsten Version eingebaut&lt;br /&gt;
** der Bug kann nicht sofort behoben werden und wird auf die TODO-Liste gesetzt&lt;br /&gt;
    &lt;br /&gt;
=== Wie erfahre ich von bekannten Bugs oder fehlenden Features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe&lt;br /&gt;
unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html&lt;br /&gt;
für eine Auflistung der bekannten Bugs, fehlenden Features und&lt;br /&gt;
zukünftigen Pläne.&lt;br /&gt;
&lt;br /&gt;
Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der&lt;br /&gt;
folgenden Antworten:&lt;br /&gt;
&lt;br /&gt;
* das Feature ist bereits auf der TODO-Liste&lt;br /&gt;
* das Feature ist nicht wünschenswert, weil:&lt;br /&gt;
** es vorhandene Funktionalität dupliziert, welche bereits dem SQL-Standard folgt&lt;br /&gt;
** es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte Vorteile zu bringen&lt;br /&gt;
** es wäre unsicher bzw. unzuverlässig&lt;br /&gt;
* das neue Feature wird der TODO-Liste hinzugefügt&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch die Release-Notes listen nicht jede Änderung in der Software auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Dokumentation ist für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes&lt;br /&gt;
Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc-&lt;br /&gt;
Verzeichnis. Ausserdem sind alle Handbücher online unter&lt;br /&gt;
http://www.postgresql.org/docs/ verfügbar.&lt;br /&gt;
&lt;br /&gt;
Zwei Bücher zu PostgreSQL sind online verfügbar unter&lt;br /&gt;
http://www.postgresql.org/docs/books/awbook.html und&lt;br /&gt;
http://www.commandprompt.com/ppbook/ .&lt;br /&gt;
&lt;br /&gt;
Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter&lt;br /&gt;
http://www.postgresql.org/docs/books Diverse technische Artikel&lt;br /&gt;
befinden sich unter http://www.postgresql.org/docs/techdocs .&lt;br /&gt;
&lt;br /&gt;
psql hat einige nützliche \d-Befehle, um Informationen über Typen,&lt;br /&gt;
Operatoren, Funktionen, Aggregate, usw. zu zeigen.&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Website enthält noch mehr Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich SQL lernen? ===&lt;br /&gt;
  &lt;br /&gt;
Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten&lt;br /&gt;
Einstieg. Viele PostgreSQL-Anwender mögen &amp;quot;The Practical SQL Handbook&amp;quot;&lt;br /&gt;
(Bowman et al., Addison Wesley). Andere dagegen mögen &amp;quot;The Complete&lt;br /&gt;
Reference SQL&amp;quot; (Groff et al., McGraw-Hill).&lt;br /&gt;
&lt;br /&gt;
Es gibt ausserdem einige nützliche Online-Tutorials:&lt;br /&gt;
&lt;br /&gt;
* http://www.intermedia.net/support/sql/sqltut.shtm&lt;br /&gt;
* http://sqlcourse.com&lt;br /&gt;
* http://www.w3schools.com/sql/default.asp&lt;br /&gt;
* http://mysite.verizon.net/Graeme_Birchall/id1.html&lt;br /&gt;
    &lt;br /&gt;
=== Wie kann ich im Entwicklerteam mitarbeiten? ===&lt;br /&gt;
  &lt;br /&gt;
Lesen Sie in der Entwickler-FAQ unter&lt;br /&gt;
[[Developer_FAQ | Developer FAQ]] nach.&lt;br /&gt;
&lt;br /&gt;
=== Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt verschiedene Methoden, Software zu messen: Eigenschaften,&lt;br /&gt;
Performanz, Zuverlässigkeit, Support und Preis.&lt;br /&gt;
&lt;br /&gt;
==== Eigenschaften ====&lt;br /&gt;
&lt;br /&gt;
       PostgreSQL besitzt die meisten Eigenschaften - wie&lt;br /&gt;
       Transaktionen, Unterabfragen (Subqueries), Trigger, Views,&lt;br /&gt;
       referenzielle Integrität bei Fremdschlüsseln und verfeinertes&lt;br /&gt;
       Locking - die bei großen kommerziellen DBMS vorhanden sind. Es&lt;br /&gt;
       bietet außerdem einige anderen Eigenschaften, die diese nicht&lt;br /&gt;
       immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln,&lt;br /&gt;
       und die Multi-Versionen-Steuerung zum Verringern&lt;br /&gt;
       konkurrierender Locks.&lt;br /&gt;
       &lt;br /&gt;
==== Performanz ====&lt;br /&gt;
       Die Performanz von PostgreSQL ist mit der von kommerziellen und&lt;br /&gt;
       anderen Open-Source-Datenbanken vergleichbar. In manchen&lt;br /&gt;
       Bereichen ist es schneller, in anderen langsamer. In der Regel&lt;br /&gt;
       beträgt der Unterschied +/-10%.&lt;br /&gt;
       &lt;br /&gt;
==== Zuverlässigkeit ====&lt;br /&gt;
       Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht&lt;br /&gt;
       zuverlässig arbeitet. Daher bemühen wir uns, nur streng&lt;br /&gt;
       geprüften und beständigen Code freizugeben, der nur ein Minimum&lt;br /&gt;
       an Programmfehlern aufweist. Jede Freigabe hat mindestens einen&lt;br /&gt;
       Monat Betatest-Phase hinter sich, und unsere Freigabehistorie&lt;br /&gt;
       beweist, dass wir stabile und solide Versionen freigeben, die&lt;br /&gt;
       im Produktionsbetrieb genutzt werden können. Wir glauben, dass&lt;br /&gt;
       wir im Vergleich mit anderer Datenbanksoftware vorteilhaft&lt;br /&gt;
       dastehen.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
       Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit&lt;br /&gt;
       einer großen Gruppe von Entwicklern und Benutzern mögliche&lt;br /&gt;
       Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung&lt;br /&gt;
       garantieren, kommerzielle DBMS tun dies aber auch nicht. Der&lt;br /&gt;
       direkte Kontakt zur Entwickler- und Benutzergemeinschaft und&lt;br /&gt;
       der Zugriff auf die Handbücher und den Quellcode ermöglicht&lt;br /&gt;
       einen im Vergleich zu anderen DBMS höherwertigeren Support. Es&lt;br /&gt;
       gibt jedoch auch Anbieter von kommerziellen Support-Leistungen&lt;br /&gt;
       (siehe FAQ-Punkt 1.7).&lt;br /&gt;
       &lt;br /&gt;
==== Preis ====&lt;br /&gt;
       PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie&lt;br /&gt;
       auch für die nicht-kommerzielle Nutzung. Sie können den&lt;br /&gt;
       PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in&lt;br /&gt;
       der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr&lt;br /&gt;
       Produkt integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Kann PostgreSQL eingebettet (embedded) werden? ===&lt;br /&gt;
PostgreSQL basiert auf einer Server/Client-Architektur, diese benötigt separate Prozesse für jeden Klient und Server, hinzukommen auch noch weitere &amp;quot;Helfer-Prozesse&amp;quot; (z. B. für autovacuum und stats-collector). Zwar können einige &amp;quot;embedded-Architekturen&amp;quot; diese Anforderungen erfüllen, aber wenn der Datenbank-Prozess innerhalb des Applikations-Prozesses laufen muss, kann PostgreSQL nicht verwendet werden. Dazu sollte man leichtere Datenbanken nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mich von einer Maillingliste abmelden? Wie verhindere ich es, dass ich doppelte E-Mails bekomme? ===&lt;br /&gt;
Majordomo ermöglicht es sich von allen Maillinglisten an- und abzumelden, ggf. müssen Sie sich zuerst ihr Majordomo-Passwort zuschicken lassen.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr|PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
&lt;br /&gt;
Die PostgreSQL-Maillinglisten sind so konfiguriert, dass Antworten an den ursprünglichen Autor und an die Maillingliste verschickt werden. Somit soll erreicht werden dass Benutzer immer schnellstmöglichst eine Antwort erhalten können. Diese Einstellungen können Sie auch über die Konfiguration von Majordomo ändern, ändern Sie dafür die Einstellung für &#039;&#039;eliminatecc&#039;&#039;. Sie können auch einstellen dass Sie selbst keine Antwort auf Ihre eigenen E-Mails bekommen, ändern sie dafür die Einstellung für &#039;&#039;selfcopy&#039;&#039;.&lt;br /&gt;
[http://mail.postgresql.org/mj/mj_wwwusr|PostgreSQLs Majordomo erreichen Sie hier.]&lt;br /&gt;
       &lt;br /&gt;
== Fragen zu Benutzerprogrammen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Welche Schnittstellen gibt es für PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
Die PostgreSQL-Installation stellt nur Schnittstellen für C und&lt;br /&gt;
Embedded C bereit. Alle weitere Schnittstellen sind unabhängige&lt;br /&gt;
Projekte, die einzeln heruntergeladen werden werden müssen. Diese&lt;br /&gt;
Trennung ermöglicht individuelle Entwickler-Teams und&lt;br /&gt;
Entwicklungszyklen für die jeweiligen Projekte.&lt;br /&gt;
&lt;br /&gt;
Einige Programmiersprachen wie PHP haben eine PostgreSQL-&lt;br /&gt;
Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl,&lt;br /&gt;
TCL, Python und viele anderen sind unter http://gborg.postgresql.org&lt;br /&gt;
im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann man PostgreSQL in einer Website nutzen? ===&lt;br /&gt;
  &lt;br /&gt;
Eine nette Einführung zu datenbank-gestützten Webseiten kann unter&lt;br /&gt;
http://www.webreview.com (engl.) eingesehen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP&lt;br /&gt;
gibt es bei http://www.php.net&lt;br /&gt;
&lt;br /&gt;
Desweiteren bietet sich die Perl-Schnittstelle mit CGI.pm&lt;br /&gt;
oder mod_perl auch an.&lt;br /&gt;
&lt;br /&gt;
=== Hat PostgreSQL eine grafische Benutzerschnittstelle? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl&lt;br /&gt;
kommerziell als auch Open-Source. [http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools| Eine englische Liste befindet sich hier.]&lt;br /&gt;
&lt;br /&gt;
== Administrative Fragen ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis angeben.&lt;br /&gt;
&lt;br /&gt;
=== Wie regle ich Zugriffe von anderen Rechnern? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom&lt;br /&gt;
lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind.&lt;br /&gt;
Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn&lt;br /&gt;
Sie in der Datei postgresql.conf die Einstellung listen_addresses&lt;br /&gt;
anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte&lt;br /&gt;
Authentifizierung einschalten und den Server neu starten.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine bessere Performanz erreichen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt&lt;br /&gt;
werden können:&lt;br /&gt;
&lt;br /&gt;
==== Abfrageoptimierung ====&lt;br /&gt;
Die Modifizierung von Abfragen kann eine bessere Performanz erzielen:&lt;br /&gt;
       &lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/indexes.html Erstellung von Indexen, einschliesslich partieller Indexe sowie Expressionsindexe]&lt;br /&gt;
* Einsatz von COPY anstelle multipler INSERT-Anweisungen&lt;br /&gt;
* Gruppierung von mehreren Abfragen innerhalb einer Transaktion, um Aufwand beim Abschluss von Transaktionen    einzusparen&lt;br /&gt;
* Einsatz von CLUSTER beim Holen von einer großen Anzahl von Datenreihen aus einem Index&lt;br /&gt;
* Einsatz von LIMIT, um eine Untermenge der Abfragenergebnisse zurückzuliefern&lt;br /&gt;
* [http://www.postgresql.org/docs/current/interactive/sql-prepare.html Einsatz von vorbereiteten Befehlen (prepared queries)]&lt;br /&gt;
* Einsatz von ANALYZE, um die Datenbankstatistik für den Abfragenplaner aktuell zu halten&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/routine-vacuuming.html Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum (autovacuum ist seit Version 8.3 standardmäßig aktiviert)]&lt;br /&gt;
* Bei großen Datenveränderungen die Löschung von Indexen&lt;br /&gt;
&lt;br /&gt;
==== Server-Konfiguration ====&lt;br /&gt;
Einige Einstellungen in der Datei postgresql.conf wirken sich auf die Performanz aus. Das Handbuch enthält unter      http://www.postgresql.org/docs/current/static/runtime-config.html eine komplette Auflistung. &lt;br /&gt;
&lt;br /&gt;
Kommentare zu den jeweiligen Einstellungen gibt es unter http://www.varlena.com/varlena/GeneralBits/Tidbitsannotated_conf_e.html und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.&lt;br /&gt;
       &lt;br /&gt;
==== Hardware-Auswahl ====&lt;br /&gt;
Die Auswirkung von Hardware auf Performanz wird unter http://momjian.us/main/writings/pgsql/hw_performance/index.html und http://www.powerpostgresql.com/PerfList/ erläutert.&lt;br /&gt;
       &lt;br /&gt;
=== Welche Debugging-Funktionen sind für PostgreSQL verfügbar? ===&lt;br /&gt;
  &lt;br /&gt;
Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche&lt;br /&gt;
log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken&lt;br /&gt;
ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests&lt;br /&gt;
sehr nützlich sein.&lt;br /&gt;
&lt;br /&gt;
=== Ich bekomme die Meldung &amp;quot;Sorry, too many clients&amp;quot;, wenn ich eine Verbindung aufzubauen versuche. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen&lt;br /&gt;
erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der&lt;br /&gt;
gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in&lt;br /&gt;
postgresql.conf den Wert max_connections ändern und den Server&lt;br /&gt;
neustarten.&lt;br /&gt;
&lt;br /&gt;
=== Wie wird PostgreSQL aktualisiert? ===&lt;br /&gt;
  &lt;br /&gt;
Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf&lt;br /&gt;
der Seite http://www.postgresql.org/support/versioning. Detaillierte&lt;br /&gt;
technische Informationen gibt es auf der Seite&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
&lt;br /&gt;
=== Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar? ===&lt;br /&gt;
  &lt;br /&gt;
Für die Berücksichtigung der Sommerzeit verwendet PostgreSQL Seit dem Release 8.0 die weiterverbreitete tzdata-Datenbank (auch bekannt als &amp;quot;zoneinfo database&amp;quot; oder &amp;quot;[http://www.twinsun.com/tz/tz-link.htm| Olzen timezone database]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Jedes Update von PostgreSQL beinhaltet die aktuellen tzdata Dateien, daher sollte es reichen die Minor-Updates der eingesetzten Major Version im Auge zu behalten.&lt;br /&gt;
&lt;br /&gt;
Unter der Vorraussetzung dass das Betriebssystem diese Dateien schon in einer stets aktuellen Version vorbehält, ist es üblich, dass man diese Dateien verwendet. PostgreSQL bietet dazu eine compile-option an.&lt;br /&gt;
&lt;br /&gt;
=== Welche Hardware eignet sich für den Betrieb mit PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich&lt;br /&gt;
gibt es allerdings sehr große Abweichungen in der Qualität. Für einen&lt;br /&gt;
Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend&lt;br /&gt;
sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die&lt;br /&gt;
Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI,&lt;br /&gt;
Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie&lt;br /&gt;
unsere Mailing-Listen, um Hardware-Optionen zu diskutieren.&lt;br /&gt;
&lt;br /&gt;
== Fragen zum Betrieb ==&lt;br /&gt;
                                   &lt;br /&gt;
=== Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine beliebige Zeile in einer Abfrage aus? ===&lt;br /&gt;
  &lt;br /&gt;
Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden&lt;br /&gt;
Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung&lt;br /&gt;
mit einem Index verwendet wird, ist es möglich, dass die gesamte&lt;br /&gt;
Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der&lt;br /&gt;
anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und&lt;br /&gt;
FETCH.&lt;br /&gt;
&lt;br /&gt;
Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():&lt;br /&gt;
    SELECT spalte&lt;br /&gt;
      FROM tabelle&lt;br /&gt;
  ORDER BY random()&lt;br /&gt;
     LIMIT 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen? ===&lt;br /&gt;
  &lt;br /&gt;
In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere&lt;br /&gt;
psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei&lt;br /&gt;
pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie&lt;br /&gt;
enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen.&lt;br /&gt;
Sie können psql auch mit der -E Option starten. Danach gibt psql die&lt;br /&gt;
Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem&lt;br /&gt;
biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das&lt;br /&gt;
Metainformation über die Datenbank zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
Mit psql -l können Sie alle Datenbanken anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele&lt;br /&gt;
SELECT- Abfragen, mit deren Hilfe man Information über die&lt;br /&gt;
Systemtabellen erhalten kann.&lt;br /&gt;
&lt;br /&gt;
=== Wie ändere ich den Datentyp einer Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER&lt;br /&gt;
COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des&lt;br /&gt;
alten Datentype aufnehmen kann.&lt;br /&gt;
&lt;br /&gt;
Bei früheren Versionen gehen Sie wie folgt vor:&lt;br /&gt;
    BEGIN;&lt;br /&gt;
    ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;&lt;br /&gt;
    UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);&lt;br /&gt;
    ALTER TABLE tabelle DROP COLUMN alte_spalte;&lt;br /&gt;
    COMMIT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um den Speicherplatz freizugeben, der von der gelöschten Spalte&lt;br /&gt;
verwendet wurde, führen Sie VACUUM FULL aus.&lt;br /&gt;
&lt;br /&gt;
=== Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? ===&lt;br /&gt;
  &lt;br /&gt;
Es bestehen folgende Obergrenzen:&lt;br /&gt;
 Maximale Größe eine Datenbank?           unbeschränkt (es existieren&lt;br /&gt;
                                            Datenbanken mit 32 TB)&lt;br /&gt;
 Maximale Größe einer Tabelle?            32 TB&lt;br /&gt;
 Maximale Größe einer Zeile?              400 GB&lt;br /&gt;
 Maximale Größe einer Spalte?             1 GB&lt;br /&gt;
 Maximale Anzahl von Zeilen in einer Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
 Maximale Anzahl von Spalten in einer Tabelle?&lt;br /&gt;
                                          250-1600 je nach Spaltentyp&lt;br /&gt;
 Maximale Anzahl von Indexen für eine Tabelle?&lt;br /&gt;
                                          unbeschränkt&lt;br /&gt;
&lt;br /&gt;
Selbstverständlich sind dies theoretische Werte, die oft durch die&lt;br /&gt;
verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme&lt;br /&gt;
Größen können zu Leistungseinbußen führen.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße von 32 TB benötigt keine&lt;br /&gt;
Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in&lt;br /&gt;
Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige&lt;br /&gt;
dateisystem-bedingte Beschränkungen nicht relevant sind.&lt;br /&gt;
&lt;br /&gt;
Die maximale Tabellengröße und die maximale Anzahl von Spalten können&lt;br /&gt;
vervierfacht werden, indem man die Default-Blockgröße auf 32 KB&lt;br /&gt;
heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung&lt;br /&gt;
vergrößert werden.&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden&lt;br /&gt;
können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten&lt;br /&gt;
eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen&lt;br /&gt;
Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit&lt;br /&gt;
Text belegten Spalte suchen zu können, verwenden Sie einen&lt;br /&gt;
Volltext-Index.&lt;br /&gt;
&lt;br /&gt;
=== Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen Textdatei abzuspeichern? ===&lt;br /&gt;
  &lt;br /&gt;
Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen&lt;br /&gt;
Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe&lt;br /&gt;
der Datei beanspruchen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und&lt;br /&gt;
einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die&lt;br /&gt;
durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die&lt;br /&gt;
einfache Datei würde 2,8 MB groß sein. Die Größe der&lt;br /&gt;
PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei&lt;br /&gt;
5,2 MB:&lt;br /&gt;
 24 Bytes: jeder Zeilenkopf (ungefähr)&lt;br /&gt;
+24 Bytes: ein Integer-Feld und ein Textfeld&lt;br /&gt;
+ 4 Bytes: Zeiger auf der Datenseite auf den Tupel&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
 52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB),&lt;br /&gt;
also:&lt;br /&gt;
8192 Bytes pro Seite&lt;br /&gt;
---------------------   =  146 Zeilen pro Seite (abgerundet)&lt;br /&gt;
  52 Bytes pro Zeile&lt;br /&gt;
&lt;br /&gt;
100.000 Datenzeilen&lt;br /&gt;
------------------------  =  685 Datenbankseiten (aufgerundet)&lt;br /&gt;
    158 Zeilen pro Seite&lt;br /&gt;
&lt;br /&gt;
633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten&lt;br /&gt;
beinhalten, die sie indizieren, können auch sie sehr groß werden.&lt;br /&gt;
&lt;br /&gt;
NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig&lt;br /&gt;
Platz in Anspruch nehmen.&lt;br /&gt;
&lt;br /&gt;
=== Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? ===&lt;br /&gt;
  &lt;br /&gt;
Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe&lt;br /&gt;
werden nur dann verwendet, wenn die abzufragende Tabelle eine&lt;br /&gt;
bestimmte Größe übersteigt, und die Abfrage nur eine kleine&lt;br /&gt;
Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der,&lt;br /&gt;
dass die durch einen Index verursachten Festplattenzugriffe manchmal&lt;br /&gt;
länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen&lt;br /&gt;
(sequentieller Scan).&lt;br /&gt;
&lt;br /&gt;
Um festzustellen, ob ein Index verwendet werden soll, braucht&lt;br /&gt;
PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden&lt;br /&gt;
durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand&lt;br /&gt;
der Statistiken kennt der Abfragenoptimierer die Anzahl der&lt;br /&gt;
Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden&lt;br /&gt;
sollen. Statistiken sind auch bei der Ermittlung der optimalen&lt;br /&gt;
JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese&lt;br /&gt;
regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja&lt;br /&gt;
auch verändert.&lt;br /&gt;
&lt;br /&gt;
Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs&lt;br /&gt;
verwendet. Ein sequentieller Scan mit anschließendem explizitem&lt;br /&gt;
Sortiervorgang ist normalerweise schneller als ein Index-Scan einer&lt;br /&gt;
großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen&lt;br /&gt;
mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein&lt;br /&gt;
kleiner Abschnitt der Tabelle zurückgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
Sollte es danach aussehen, also ob der Optimierer irrtümlich einen&lt;br /&gt;
sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO &#039;off&#039;&lt;br /&gt;
aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist.&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe&lt;br /&gt;
nur unter bestimmten Umständen verwendet werden:&lt;br /&gt;
&lt;br /&gt;
* Das Suchmuster muss sich an Anfang des Strings befinden, d.h.:&lt;br /&gt;
** LIKE-Suchmuster dürfen nicht mit % anfangen;&lt;br /&gt;
** ~ (reguläre Ausdrücke) müssen mit ^ anfangen.&lt;br /&gt;
* Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) beginnen.&lt;br /&gt;
* Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.&lt;br /&gt;
* Die Standard-Locale &amp;quot;C&amp;quot; muss während der Datenbank-Initialisierung mit initdb verwendet worden sein, da andere locales den nächstgrößten Wert nicht ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index für solche Fälle zu erstellen.&lt;br /&gt;
    &lt;br /&gt;
In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die&lt;br /&gt;
jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders&lt;br /&gt;
für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC&lt;br /&gt;
&lt;br /&gt;
=== Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine Abfrage auswertet? ===&lt;br /&gt;
  &lt;br /&gt;
Eine ausführliche Erklärung zu diesem Thema findet sich in der [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
=== Wie änder ich das Sortierverhalten von textähnlichen Daten? ===&lt;br /&gt;
PostgreSQL sortiert Daten anhand dem bei initdb gesetzten Locale. (Ab 8.4 wird es es möglich sein pro Datenbank ein eigenes Locale zu definieren)&lt;br /&gt;
&lt;br /&gt;
Entspricht das Sortierverhalten nicht dem gewünschten muss man die Locale ändern. Die meisten Locales, außer &amp;quot;C&amp;quot;, sortieren anhand der Reihenfolge des entsprechenden Wörterbuches. Das Locale &amp;quot;C&amp;quot; ignoriert jegliche Punktuation und Zwischenraum.&lt;br /&gt;
&lt;br /&gt;
=== Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende ich einen Index bei solchen Suchabfragen? ===&lt;br /&gt;
  &lt;br /&gt;
Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn&lt;br /&gt;
an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet&lt;br /&gt;
LIKE die Groß- und Kleinschreibung, und ILIKE nicht.&lt;br /&gt;
&lt;br /&gt;
Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren,&lt;br /&gt;
werden in der Regel so ausgedruckt:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle&lt;br /&gt;
    WHERE LOWER(spalte) = &#039;abc&#039;&lt;br /&gt;
&lt;br /&gt;
Hier wird kein normaler Index benutzt. Legt man hingegen einen&lt;br /&gt;
funktionalen Index an, so wird er auf jeden Fall verwendet:&lt;br /&gt;
   CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))&lt;br /&gt;
&lt;br /&gt;
Falls der obige Index als einen UNIQUE-Index angelegt wird, können&lt;br /&gt;
keine Werte in die Spalte eingefügt werden, die sich nur durch ihre&lt;br /&gt;
Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß&lt;br /&gt;
ein CHECK-Constraint oder ein Trigger eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der NULL-Belegung sortiert werden? ===&lt;br /&gt;
  &lt;br /&gt;
Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   WHERE &lt;br /&gt;
      spalte IS NULL&lt;br /&gt;
&lt;br /&gt;
Beim konkatenieren mit einen NULL-Wert wir das Ergebnis auch NULL. Um dies zu verhindern verwenden Sie am besten [http://www.postgresql.org/docs/current/static/functions-conditional.html| COALESCE()]&lt;br /&gt;
   SELECT &lt;br /&gt;
      COALESCE(col1, &#039;&#039;) || COALESCE(col2, &#039;&#039;)&lt;br /&gt;
   FROM tab;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die NULL-Spalten zuerst gelistet werden:&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tabelle&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      (spalte IS NOT NULL)&lt;br /&gt;
&lt;br /&gt;
Ab PostreSQL 8.3 und höher, ist es möglich das standardisierte NULLS FIRST/NULLS LAST zu verwenden um die Position der NULL-Werte im Ergebnis zu bestimmen. (bei FIRST stehen diese zu erst, bei LAST am Ende)&lt;br /&gt;
   SELECT &lt;br /&gt;
      *&lt;br /&gt;
   FROM &lt;br /&gt;
      tab&lt;br /&gt;
   ORDER BY &lt;br /&gt;
      col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Typ&lt;br /&gt;
!interner Name&lt;br /&gt;
!Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|die Größe legt die Maximallänge fest; kein Auffüllen mit Leerzeichen&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|mit Leerzeichen gefüllt bis zur angegebenen Länge&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|keine obere Grenze für die Länge&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|Bytearray mit variabler Länge (auch für &#039;\0&#039;-Bytes geeignet)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|ein Zeichen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der interne Name kommt vor allem in den Systemkatalogen und in manchen&lt;br /&gt;
Fehlermeldungen vor.&lt;br /&gt;
&lt;br /&gt;
Die ersten vier Typen sind &amp;quot;varlena&amp;quot;-Typen (d.h. die ersten vier Bytes&lt;br /&gt;
geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich&lt;br /&gt;
belegte Platz immer etwas mehr als die deklarierte Feldgröße.&lt;br /&gt;
Allerdings wird unter Umständen auf diese Datentypen Datenkompression&lt;br /&gt;
durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte&lt;br /&gt;
Platz auch geringer als erwartet ausfallen kann.&lt;br /&gt;
&lt;br /&gt;
Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich&lt;br /&gt;
VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der&lt;br /&gt;
Tabellendefinition festgelegt. TEXT setzt keine Längengrenze,&lt;br /&gt;
allerdings gibt es eine systembedingte Obergrenze von 1 GB.&lt;br /&gt;
&lt;br /&gt;
CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle&lt;br /&gt;
die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch&lt;br /&gt;
Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt,&lt;br /&gt;
während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette&lt;br /&gt;
gespeichert wird.&lt;br /&gt;
&lt;br /&gt;
BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.&lt;br /&gt;
&lt;br /&gt;
Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften&lt;br /&gt;
auf.&lt;br /&gt;
&lt;br /&gt;
=== Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wert? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL bietet einen SERIAL-Datentyp. Dies ist zwar kein richtiger Datentyp. Es ist die Kurzform für das Erstellen einer Spalte vom Typ Integer, die von einer Sequenz befüllt wird. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel:&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
       id   SERIAL,&lt;br /&gt;
       name TEXT&lt;br /&gt;
   )&lt;br /&gt;
&lt;br /&gt;
wird automatisch in:&lt;br /&gt;
   CREATE SEQUENCE person_id_seq;&lt;br /&gt;
   CREATE TABLE person (&lt;br /&gt;
     id   INT4 NOT NULL DEFAULT nextval(&#039;person_id_seq&#039;),&lt;br /&gt;
     name TEXT&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
umgewandelt.&lt;br /&gt;
&lt;br /&gt;
Die automatisch generierte Sequenz besitzt immer folgenden Namen:&lt;br /&gt;
&#039;&#039;tabellederspalte&#039;&#039;-&#039;&#039;namederspalte&#039;&#039;_seq&lt;br /&gt;
&lt;br /&gt;
Die Man-Page zu CREATE SEQUENCE beinhaltet mehr Informationen zu Sequenzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einen Typ BIGSERIAL, dieser unterscheidet sich aber nur darin dass die Spalte den Typ BIGINTEGER bekommt. BIGSERIAL sollte verwendet werden wenn es zu erwarten ist, dass mehr als 2 Milliarden Sequenz-Werte verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Wie bekomme ich den Wert einer SERIAL-Sequenz? ===&lt;br /&gt;
  &lt;br /&gt;
Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:&lt;br /&gt;
&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT nextval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Danach stünde der neue Wert in der Variablen new_id für die Verwendung in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur Tabelle &#039;person&#039;). Bitte beachten Sie, dass der Name des automatisch erstellten SEQUENCE-Objektes folgenden Name hat: «table»_«serialcolumn»_seq wobei &#039;table&#039; und &#039;serialcolumn&#039; die Namen&lt;br /&gt;
der jeweils betreffenden Tabelle / Spalte darstellen.&lt;br /&gt;
&lt;br /&gt;
Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben lassen:&lt;br /&gt;
&lt;br /&gt;
 execute(&amp;quot;INSERT INTO person (id, name) VALUES (new_id, &#039;Blaise Pascal&#039;)&amp;quot;);&lt;br /&gt;
 new_id = output of execute(&amp;quot;SELECT currval(&#039;person_id_seq&#039;)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist es RETURNING zu verwenden. Ein einfaches Beispiel sähe so aus:&lt;br /&gt;
INSERT INTO person (name) VALUES (&#039;Blaise Pascal&#039;) RETURNING id;&lt;br /&gt;
&lt;br /&gt;
=== Führt currval() zu einer Race-Condition mit anderen Nutzern? ===&lt;br /&gt;
  &lt;br /&gt;
Nein. currval() liefert einen Wert zurück, der von Ihrer&lt;br /&gt;
Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur&lt;br /&gt;
Verfügung steht.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner Sequenz-/SERIAL-Spalte? ===&lt;br /&gt;
  &lt;br /&gt;
Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern,&lt;br /&gt;
werden Sequenzen gerade nicht für andere Transaktionen gesperrt,&lt;br /&gt;
sondern die Sequenznummern werden den laufenden Transaktionen sofort&lt;br /&gt;
zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene&lt;br /&gt;
Transaktionen verursacht.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein OID? ===&lt;br /&gt;
  &lt;br /&gt;
Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um&lt;br /&gt;
seine interne Systemtabellen zu verbinden.&lt;br /&gt;
&lt;br /&gt;
Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings empfohlen, statt OIDs Werte zu verwenden, die von SERIAL-Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können 8-Byte-Sequenzwerte mit BIGSERIAL (SERIAL8) erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
=== Was ist ein CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block und Offset Werte zu identifizieren. CTIDs verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen.&lt;br /&gt;
&lt;br /&gt;
=== Wieso bekomme ich einen Fehler: &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System&lt;br /&gt;
oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen.&lt;br /&gt;
Probieren Sie vor dem Start von postmaster folgendes:&lt;br /&gt;
   ulimit -d 262144&lt;br /&gt;
   limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich&lt;br /&gt;
ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments&lt;br /&gt;
für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung&lt;br /&gt;
der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-Client&lt;br /&gt;
haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie&lt;br /&gt;
dies vor dem Start des SQL-Clients.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? ===&lt;br /&gt;
  &lt;br /&gt;
Geben Sie in psql SELECT VERSION(); ein.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich eine Spalte erstellen, deren Default-Wert immer die aktuelle Uhrzeit enthalten soll? ===&lt;br /&gt;
  &lt;br /&gt;
Dazu verwenden Sie CURRENT_TIMESTAMP:&lt;br /&gt;
   CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== Wie führe ich eine OUTER JOIN durch? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier&lt;br /&gt;
zwei Beispiele:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)&lt;br /&gt;
&lt;br /&gt;
bzw.:&lt;br /&gt;
   SELECT *&lt;br /&gt;
     FROM tabelle_1 t1&lt;br /&gt;
          LEFT OUTER JOIN tabelle_2 t2 USING (spalte)&lt;br /&gt;
&lt;br /&gt;
Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die&lt;br /&gt;
Spalte &#039;spalte&#039; und geben außerdem alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben)&lt;br /&gt;
zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in&lt;br /&gt;
tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen&lt;br /&gt;
sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen&lt;br /&gt;
zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in&lt;br /&gt;
LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale&lt;br /&gt;
Verknüpfungen sind INNER JOINs.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? ===&lt;br /&gt;
  &lt;br /&gt;
Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine&lt;br /&gt;
Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische&lt;br /&gt;
Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht&lt;br /&gt;
möglich.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink ist eine Erweiterung, die datenbankübergreifende&lt;br /&gt;
Abfragen über Funktionsaufrufe ermöglicht.&lt;br /&gt;
&lt;br /&gt;
=== Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben lassen? ===&lt;br /&gt;
  &lt;br /&gt;
Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.:&lt;br /&gt;
http://www.postgresql.org/docs/techdocs.17.&lt;br /&gt;
&lt;br /&gt;
=== Warum bekomme ich eine Fehlermeldung wie &amp;quot;relation with OID ##### does not exist&amp;quot; wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in&lt;br /&gt;
einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn&lt;br /&gt;
eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese&lt;br /&gt;
Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion&lt;br /&gt;
fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte&lt;br /&gt;
temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin,&lt;br /&gt;
in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen&lt;br /&gt;
zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende&lt;br /&gt;
Abfrage neu geparst wird.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht&lt;br /&gt;
mehr auf.&lt;br /&gt;
&lt;br /&gt;
=== Welche Replikationslösungen gibt es? ===&lt;br /&gt;
  &lt;br /&gt;
Der Begriff &amp;quot;replikation&amp;quot; umfasst mehrere verschiedene Technologien,&lt;br /&gt;
jede mit eigenen Vor- und Nachteilen. [http://www.postgresql.org/docs/8.3/static/high-availability.html| Die Dokumentation enthält eine gute Einführung in das Thema Replikation]&lt;br /&gt;
&lt;br /&gt;
Mit &amp;quot;Master/slave&amp;quot;-Replikation werden Änderungen in einer&lt;br /&gt;
Hauptdatenbank durchgeführt und an &amp;quot;Sklaven&amp;quot; verteilt, die im&lt;br /&gt;
Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist&lt;br /&gt;
Slony-I.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Multi-master replication&amp;quot; ermöglicht sowohl lesende als auch&lt;br /&gt;
schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings&lt;br /&gt;
hat diese Art von Replikation eine negative Auswirkung auf die&lt;br /&gt;
Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu&lt;br /&gt;
synchronisieren. Pgcluster ist die populärste freie Lösung für&lt;br /&gt;
PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige kommerzielle und hardware-basierte&lt;br /&gt;
Replikationslösungen für verschiedene Arten der Replikation.&lt;br /&gt;
&lt;br /&gt;
=== Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt? ===&lt;br /&gt;
  &lt;br /&gt;
Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der&lt;br /&gt;
Anlegung von Tabellen, z.B.:&lt;br /&gt;
    CREATE TABLE &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
                (&amp;quot;SPALTE1&amp;quot; INT)&lt;br /&gt;
&lt;br /&gt;
Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in&lt;br /&gt;
genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu&lt;br /&gt;
führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im&lt;br /&gt;
obigen Beispiel muss man also immer etwa SELECT * FROM &amp;quot;Tabelle&amp;quot;&lt;br /&gt;
verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der&lt;br /&gt;
folgenden Punkte beachten:&lt;br /&gt;
&lt;br /&gt;
* bei der Tabellenanlegung keine Gänsefüßchen verwenden;&lt;br /&gt;
* in Identifikatoren nur Kleinschreibung verwenden;&lt;br /&gt;
* immer Identifikatoren mit Gänsefüßchen versehen&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen des Übersetzers ==&lt;br /&gt;
  &lt;br /&gt;
Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher&lt;br /&gt;
liegt die Übersetzung nicht immer auf dem aktuellsten Stand.&lt;br /&gt;
&lt;br /&gt;
Die aktuellste Version der deutschen Übersetzung befindet sich immer&lt;br /&gt;
unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese&lt;br /&gt;
&amp;quot;Arbeitsversion&amp;quot; enthält eventuell Änderungen, die noch nicht auf der&lt;br /&gt;
PostgreSQL-Website eingebunden worden sind.&lt;br /&gt;
&lt;br /&gt;
Über Verbesserungshinweise und Korrekturvorschläge sowie&lt;br /&gt;
Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch&lt;br /&gt;
allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf&lt;br /&gt;
die Mailing-Listen als schnelle und zuverlässige Anlaufstellen.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2011&amp;diff=15610</id>
		<title>PostgreSQL Conference Europe Talks 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2011&amp;diff=15610"/>
		<updated>2011-10-19T16:18:35Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: add datacenter slide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2011 Talks =&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 18th October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
* [[Media:Mohan_PGCon_Keynote_10-19-2011.pdf|Ram Mohan Keynote: Afilias Winning Bet on Open Source]]&lt;br /&gt;
* [http://www.oslandia.com/files/1646fd60f9b0a4558d1e256cf3264572/pgconfeu2011_vincent_picavet_postgis.pdf Vincent Picavet - Geo in your database : Postgis]&lt;br /&gt;
* [http://pgeu-plv8.herokuapp.com Will Leinweber: heralding the death of nosql]&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
* [http://ora2pg.darold.net/ora2pg-best-practices.pdf Gilles Darold: Best practices with Ora2Pg]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Ciolli-window-2011.pdf|Gianni Ciolli, Look Out The Window Functions (and free your SQL)]]&lt;br /&gt;
plus four 2D heat diffusion movies, with different starting scenarios: [[http://vimeo.com/30797130 a hot point]],&lt;br /&gt;
[[http://vimeo.com/30797509 a hot segment]],&lt;br /&gt;
[[http://vimeo.com/30797715 a hot square]] and&lt;br /&gt;
[[http://vimeo.com/30797797 a cold square]].&lt;br /&gt;
* [[Media:Smartgrid_for_the_datacenter_web.pdf|Stefan Kaltenbrunner, A smartgrid for the datacenter]]&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday 19th October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday 20th October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Smartgrid_for_the_datacenter_web.pdf&amp;diff=15609</id>
		<title>File:Smartgrid for the datacenter web.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Smartgrid_for_the_datacenter_web.pdf&amp;diff=15609"/>
		<updated>2011-10-19T16:16:45Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: A smartgrid for the datacenter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A smartgrid for the datacenter&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Release_Support_Policy&amp;diff=15506</id>
		<title>PostgreSQL Release Support Policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Release_Support_Policy&amp;diff=15506"/>
		<updated>2011-10-01T19:39:09Z</updated>

		<summary type="html">&lt;p&gt;Mastermind: mark the whole rows in italics for EOL&amp;#039;d releases to make the table a bit more readable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PostgreSQL project aims to fully support a major release for &#039;&#039;&#039;five years&#039;&#039;&#039;, under the terms of the [http://www.postgresql.org/support/versioning Versioning policy]&lt;br /&gt;
&lt;br /&gt;
After a release falls out of full support, we may (at our committers&#039; discretion) continue to apply further critical fixes to the source code, on a best-effort basis.  No formal releases or binary packages will be produced by the project, but the updated source code will be available from our source code control system.&lt;br /&gt;
&lt;br /&gt;
This policy will be followed on a best-effort basis. In extreme cases it may not be possible to support a release for the planned lifetime; for example if a serious bug is found that cannot be resolved in a given major version without significant risk to the stability of the code or loss of application compatibility. In such cases, early retirement of a major version may be required.&lt;br /&gt;
&lt;br /&gt;
The first version update released after the EOL date will normally be the final one for that version.  Note that this can extend support shortly past the listed date.  For example, [http://www.postgresql.org/docs/7.4/static/release.html 7.4.30] and [http://www.postgresql.org/docs/8.0/static/release.html 8.0.26] were the EOL releases for those two versions.  They were originally targeted for EOL as of July 2010, but those final versions were not actually released until October 2010.&lt;br /&gt;
&lt;br /&gt;
=== End Of Life (EOL) dates ===&lt;br /&gt;
&lt;br /&gt;
Releases which have already reached an EOL release are italicized:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Version&lt;br /&gt;
!EOL Date&lt;br /&gt;
!Release Date&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;PostgreSQL 7.4&#039;&#039;&lt;br /&gt;
|&#039;&#039;October 2010 (extended)&#039;&#039;&lt;br /&gt;
|&#039;&#039;November 2003&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;PostgreSQL 8.0&#039;&#039;&lt;br /&gt;
|&#039;&#039;October 2010 (extended)&#039;&#039;&lt;br /&gt;
|&#039;&#039;January 2005&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;PostgreSQL 8.1&#039;&#039;&lt;br /&gt;
|&#039;&#039;November 2010&#039;&#039;&lt;br /&gt;
|&#039;&#039;November 2005&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.2&lt;br /&gt;
|December 2011&lt;br /&gt;
|December 2006&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.3&lt;br /&gt;
|February 2013&lt;br /&gt;
|February 2008&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 8.4&lt;br /&gt;
|July 2014&lt;br /&gt;
|July 2009&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 9.0&lt;br /&gt;
|September 2015&lt;br /&gt;
|September 2010&lt;br /&gt;
|-&lt;br /&gt;
|PostgreSQL 9.1&lt;br /&gt;
|September 2016&lt;br /&gt;
|September 2011&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mastermind</name></author>
	</entry>
</feed>