<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.postgresql.org/skins/common/feed.css?207"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.postgresql.org/index.php?title=Special:Contributions&amp;feed=atom&amp;target=Dfetter</id>
		<title>PostgreSQL wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.postgresql.org/index.php?title=Special:Contributions&amp;feed=atom&amp;target=Dfetter"/>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Special:Contributions/Dfetter"/>
		<updated>2013-05-26T09:36:02Z</updated>
		<subtitle>From PostgreSQL wiki</subtitle>
		<generator>MediaWiki 1.15.5-2squeeze5</generator>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Foreign_data_wrappers</id>
		<title>Foreign data wrappers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Foreign_data_wrappers"/>
				<updated>2013-05-25T22:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* NoSQL Databases Wrappers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Foreign Data Wrappers =&lt;br /&gt;
In 2003, a new extension called [[SQL/MED]] (&amp;quot;SQL Management of External Data&amp;quot;) was added to the SQL standard. It is a standardized way of handling access to remote objects in SQL databases. In 2011, PostgreSQL 9.1 was released with a great support of this standard.&lt;br /&gt;
&lt;br /&gt;
In a nutshell, you can now use various Foreign Data Wrappers (FDW) to connect a PostgreSQL Server to remote data stores. This page is an incomplete list of the Wrappers available right now. Another [http://pgxn.org/tag/fdw/ fdw list] can be found at [http://pgxn.org/  the PGXN website].&lt;br /&gt;
&lt;br /&gt;
The information about how to write a FDW can be found [http://www.postgresql.org/docs/9.2/static/fdwhandler.html here].&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that most of these wrappers are '''not officially supported by the PostgreSQL Global Development Group''' (PGDG) and that some of these projects are '''still in Beta''' version.  Use carefully!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SQL Databases Wrappers ==&lt;br /&gt;
&lt;br /&gt;
===oracle_fdw===&lt;br /&gt;
* [http://pgfoundry.org/projects/oracle-fdw/  source code]&lt;br /&gt;
* [http://pgxn.org/dist/oracle_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
===mysql_fdw===&lt;br /&gt;
This extension implements a Foreign Data Wrapper for MySQL. It is supported on PostgreSQL 9.1 and above.&lt;br /&gt;
* [http://github.com/dpage/mysql_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/mysql_fdw/  install with PGXN]&lt;br /&gt;
* [http://blogs.enterprisedb.com/2011/08/01/postgresql-9-1-meet-mysql/ example]&lt;br /&gt;
&lt;br /&gt;
===tds_fdw(not working)===&lt;br /&gt;
This project is not maintained anymore. Consider using odbc_fdw below to access Microsoft SQL Server and derived.&lt;br /&gt;
I guess you can meanwhile do the reverse, access Postgresql database within Microsoft SQL Server using Linked Servers.&lt;br /&gt;
&lt;br /&gt;
===odbc_fdw===&lt;br /&gt;
A wrapper for databases with an ODBC driver, including Oracle, DB2, Microsoft SQL Server, Sybase, Pervasive SQL, IBM Lotus Domino, MySQL, PostgreSQL and desktop database products such as FileMaker and Microsoft Access:&lt;br /&gt;
* [https://github.com/ZhengYang/odbc_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/odbc_fdw/  install with PGXN]&lt;br /&gt;
* [http://www.postgresonline.com/journal/archives/249-ODBC-Foreign-Data-wrapper-to-query-SQL-Server-on-Window---Part-2.html Using odbc_fdw on windows to query sql server (Postgres OnLine Journal March/April 2012)]&lt;br /&gt;
&lt;br /&gt;
===jdbc_fdw===&lt;br /&gt;
A wrapper for databases with a JDBC driver.&lt;br /&gt;
* [https://github.com/atris/JDBC_FDW source code]&lt;br /&gt;
&lt;br /&gt;
===informix_fdw (WIP)===&lt;br /&gt;
* [https://github.com/credativ/informix_fdw source code]&lt;br /&gt;
&lt;br /&gt;
== NoSQL Databases Wrappers ==&lt;br /&gt;
&lt;br /&gt;
===couchdb_fdw===&lt;br /&gt;
A wrapper for [http://couchdb.apache.org/ CouchDB]&lt;br /&gt;
* [https://github.com/ZhengYang/couchdb_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/couchdb_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
===mongo_fdw===&lt;br /&gt;
A wrapper for [http://www.mongodb.org/ MongoDB]&lt;br /&gt;
* [https://github.com/citusdata/mongo_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/mongo_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
===redis_fdw===&lt;br /&gt;
A wrapper for [http://redis.io/ Redis]&lt;br /&gt;
* [https://github.com/dpage/redis_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/redis_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
===Neo4j fdw===&lt;br /&gt;
A wrapper for Neo4j [http://www.neo4j.org/ Neo4j]&lt;br /&gt;
* [https://github.com/nuko-yokohama/neo4j_fdw source code]&lt;br /&gt;
&lt;br /&gt;
== File Wrappers ==&lt;br /&gt;
&lt;br /&gt;
===file_fdw===&lt;br /&gt;
A CSV files wrapper.  Delivered as an official extension of PostgreSQL 9.1 &lt;br /&gt;
* [http://www.postgresql.org/docs/9.1/static/file-fdw.html  documentation]&lt;br /&gt;
* [http://www.depesz.com/index.php/2011/03/14/waiting-for-9-1-foreign-data-wrapper/  example]&lt;br /&gt;
* [http://www.postgresonline.com/journal/archives/250-File-FDW-Family-Part-1-file_fdw.html Another example] Postgres OnLine Journal May 2012&lt;br /&gt;
&lt;br /&gt;
===file_text_array_fdw===&lt;br /&gt;
Another CSV wrapper&lt;br /&gt;
* [https://github.com/adunstan/file_text_array_fdw  source code]&lt;br /&gt;
* [http://www.postgresonline.com/journal/archives/251-File-FDW-Family-Part-2-file_textarray_fdw-Foreign-Data-Wrapper.html How to use it] Postgres OnLine Journal May 2012&lt;br /&gt;
&lt;br /&gt;
===file_fixed_length_record_fdw===&lt;br /&gt;
Fixed-width flat file wrapper&lt;br /&gt;
* [https://github.com/adunstan/file_fixed_length_record_fdw  source code]&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
===twitter_fdw===&lt;br /&gt;
A wrapper fetching text messages from Twitter over the Internet and returning a table&lt;br /&gt;
* [https://github.com/umitanuki/twitter_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/twitter_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
===ldap_fdw===&lt;br /&gt;
Allows PostgreSQL to query an LDAP server and retrieve data from some pre-configured Organizational Unit&lt;br /&gt;
* [https://github.com/guedes/ldap_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/ldap_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
===PGStrom===&lt;br /&gt;
&lt;br /&gt;
uses GPU devices to accelarate sequential scan on massive amount of records with complex qualifiers.&lt;br /&gt;
* http://wiki.postgresql.org/wiki/PGStrom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===s3_fdw===&lt;br /&gt;
Reads files located in Amazon S3 &lt;br /&gt;
* [https://github.com/umitanuki/s3_fdw  source code]&lt;br /&gt;
* [http://pgxn.org/dist/s3_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
===www_fdw===&lt;br /&gt;
Allows to query different web services:&lt;br /&gt;
* [https://github.com/cyga/www_fdw/  source code]&lt;br /&gt;
* [https://github.com/cyga/www_fdw/wiki  documentation/examples]&lt;br /&gt;
* [http://pgxn.org/dist/www_fdw/  install with PGXN]&lt;br /&gt;
&lt;br /&gt;
=Multicorn Foreign Data Wrappers=&lt;br /&gt;
&lt;br /&gt;
[http://multicorn.org/ Multicorn] is an extension that allows FDWs to be written in Python&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SQL Database Wrappers ==&lt;br /&gt;
&lt;br /&gt;
===multicorn.sqlalchemyfdw===&lt;br /&gt;
This fdw can be used to access data stored in any database supported by the sqlalchemy python toolkit.&lt;br /&gt;
* [http://multicorn.org/foreign-data-wrappers/#sqlalchemy-foreign-data-wrapper documentation]&lt;br /&gt;
&lt;br /&gt;
== File Wrappers ==&lt;br /&gt;
&lt;br /&gt;
===muticorn.fsfdw===&lt;br /&gt;
This fdw can be used to access data stored in various files, in a filesystem. The files are looked up based on a pattern, and parts of the file's path are mapped to various columns, as well as the file's content itself.&lt;br /&gt;
* [http://multicorn.org/foreign-data-wrappers/#filesystem-foreign-data-wrapper documentation]&lt;br /&gt;
&lt;br /&gt;
===multicorn.csvfdw===&lt;br /&gt;
This fdw can be used to access data stored in CSV files. Each column defined in the table will be mapped, in order, against columns in the CSV file.&lt;br /&gt;
* [http://multicorn.org/foreign-data-wrappers/#csv-foreign-data-wrapper documentation]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
===multicorn.rssfdw===&lt;br /&gt;
This fdw can be used to access items from an rss feed. &lt;br /&gt;
* [http://multicorn.org/foreign-data-wrappers/#rss-foreign-data-wrapper documentation]&lt;br /&gt;
&lt;br /&gt;
===multicorn.hivefdw===&lt;br /&gt;
Used to access Apache Hive tables.&lt;br /&gt;
* [https://github.com/youngwookim/hive-fdw-for-postgresql source code]&lt;br /&gt;
[[Category:Foreign-data wrapper|!]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgcon2013unconference</id>
		<title>Pgcon2013unconference</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgcon2013unconference"/>
				<updated>2013-05-25T19:32:30Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;Minor edits #1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= pgCon 2013 Unconference Day =&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL Community is having our first Unconference Day at pgCon 2013 in Ottawa!  This event, sponsored by Salesforce.com, extends pgCon and gives us additional opportunities to share, collaborate, and discuss about PostgreSQL development, hacking, usage, and community.&lt;br /&gt;
&lt;br /&gt;
For more about unconference days and why we're doing this, see the [[pgConUnconferenceFAQ|Unconference Day FAQ]].&lt;br /&gt;
&lt;br /&gt;
If you are interested in holding a session, or you want someone else to do a session on a particular topic on the Unconference day, please add your proposal to &amp;quot;session ideas&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
== Basic Information ==&lt;br /&gt;
&lt;br /&gt;
pgCon Unconference Day&lt;br /&gt;
&lt;br /&gt;
Saturday, May 25th&lt;br /&gt;
&lt;br /&gt;
10am to 5:30pm&lt;br /&gt;
&lt;br /&gt;
Rooms: MNT202, MNT203, MRT256&lt;br /&gt;
&lt;br /&gt;
== Unconference Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
|       &lt;br /&gt;
|11:00AM&lt;br /&gt;
|12:00 Noon&lt;br /&gt;
|2:30PM&lt;br /&gt;
|3:30PM&lt;br /&gt;
|4:30PM&lt;br /&gt;
|-  &lt;br /&gt;
| MNT202 &lt;br /&gt;
| Future of Full Text Search - Dan Scott&lt;br /&gt;
| Connection Pooling Discussion - cbbrowne&lt;br /&gt;
| [[2013UnconfFutureOfJSON|Future of JSON]] - Andrew Dunstan&lt;br /&gt;
| &lt;br /&gt;
| Pluggable Storage API -- continued&lt;br /&gt;
|-&lt;br /&gt;
| MNT203&lt;br /&gt;
| [[2013UnconfPluggableStorage|Pluggable Storage Engine]] - Galy Lee&lt;br /&gt;
| [http://wiki.postgresql.org/wiki/Pgcon2013unconference#Future_of_FDW Future of FDW] - David Fetter&lt;br /&gt;
| OpenStreetMap + Postgis - Hartmut&lt;br /&gt;
| Replication Features Wishlist&lt;br /&gt;
| Spillover Slot&lt;br /&gt;
|-&lt;br /&gt;
| MRT256&lt;br /&gt;
| Discussion on pg_upgrade - B. Momjian&lt;br /&gt;
| [[2013UnconfFakingIt|Faking it - Synthesizing data for talks/tests]] - PVH&lt;br /&gt;
| PostgreSQL Lower Layer Tuning - Susanne Ebrecht&lt;br /&gt;
| Migration methods discussion - Daichi Egawa&lt;br /&gt;
| Spillover Slot&lt;br /&gt;
|-&lt;br /&gt;
| Back of MNT203&lt;br /&gt;
| Open Hack Session&lt;br /&gt;
| Open Hack Session&lt;br /&gt;
| Open Hack Session&lt;br /&gt;
| Open Hack Session&lt;br /&gt;
| Spillover Slot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1pm to 2:30pm Lunch: PHP Discussion with Hartmut, [[PostgreSQL_testing_brainstorming:_PGCon2013_unconference_notes|Testing PostgreSQL]] with Mark Wilding&lt;br /&gt;
&lt;br /&gt;
== How Sessions are Selected ==&lt;br /&gt;
&lt;br /&gt;
No predetermined schedule is set for the Unconference Day beforehand.  Instead, participants in the Unconference bring their ideas, demands, wishlists and discussion topics, and propose sessions at 10am in MNT 202.  Anyone can lead a session.  Sessions are accepted by acclaim, and scheduled collaboratively in the first period from 10am to 11am.&lt;br /&gt;
&lt;br /&gt;
In order to get things started quickly on the Unconference Day, participants are encouraged to post session ideas on the wiki, below, before the unconference actually starts.&lt;br /&gt;
&lt;br /&gt;
For more information, see the [[pgConUnconferenceFAQ|Unconference Day FAQ]]&lt;br /&gt;
&lt;br /&gt;
== Session Ideas == &lt;br /&gt;
&lt;br /&gt;
If you wish to lead a session at the Unconference Day, or if you wish someone else would hold one on a specific topic, please propose it below.  Copy this template and add your session proposal:&lt;br /&gt;
&lt;br /&gt;
    === My Session Idea ===&lt;br /&gt;
    &lt;br /&gt;
    Proposed By: Me&lt;br /&gt;
    &lt;br /&gt;
    Session Type: Presentation/Round-table/Open Discussion/Hacking/Other&lt;br /&gt;
    &lt;br /&gt;
    Description: write a few lines of description of your session idea here&lt;br /&gt;
     &lt;br /&gt;
    Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL.org Testing Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Josh Berkus&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: the regression tests and the Buildfarm don't cover anywhere near all the kinds, or scope, of testing we want to do with Postgres, especially during the Beta Testing period.  What other kinds of testing could we be doing?  How can we increase test coverage?  How can we get new contributors involved in testing?&lt;br /&gt;
&lt;br /&gt;
*[[PostgreSQL_testing_brainstorming:_PGCon2013_unconference_notes|Notes]]&lt;br /&gt;
&lt;br /&gt;
Attendees: put your name here: &lt;br /&gt;
&lt;br /&gt;
* [[User:Hholzgra|Hartmut]]&lt;br /&gt;
* Nat Wyatt&lt;br /&gt;
* [[User:Dbs|Dan Scott]]&lt;br /&gt;
&lt;br /&gt;
=== Enhancement of PostgreSQL testing framework ===&lt;br /&gt;
    &lt;br /&gt;
Proposed By: Galy Lee&lt;br /&gt;
    &lt;br /&gt;
Session Type: Presentation/Open Discussion&lt;br /&gt;
    &lt;br /&gt;
Description: We had enhanced three parts to current PostgreSQL regression test suite, those are: new replication testing framework, kernel testing framework for index/transaction/buffer page module, enhancement of isolation testing framework with synchronization mechanism. I will introduce our works and hope to discuss with the community how to make our testing framework better.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.postgresql.org/wiki/File:Pg_testframework.pptx slides]&lt;br /&gt;
&lt;br /&gt;
Attendees:&lt;br /&gt;
&lt;br /&gt;
* Galy&lt;br /&gt;
* [[User:Hholzgra|Hartmut]]&lt;br /&gt;
&lt;br /&gt;
=== Connection Handles for SQL/MED Brainstorming ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: David Fetter&lt;br /&gt;
   &lt;br /&gt;
Session Type: Presentation/Open Discussion/Hacking&lt;br /&gt;
   &lt;br /&gt;
Description: Neither SQL/MED nor we provide a way to monitor or use the remote connection directly.  We need to figure out how to fix this.&lt;br /&gt;
    &lt;br /&gt;
Attendees: &lt;br /&gt;
&lt;br /&gt;
* David Fetter&lt;br /&gt;
&lt;br /&gt;
* Me (Susanne)&lt;br /&gt;
&lt;br /&gt;
* Bernd Helmle&lt;br /&gt;
&lt;br /&gt;
=== Trigger-Based Replication Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Christopher Browne&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: What are people liking/not liking about Slony, Londiste, Bucardo?  What features are not available that would be valuable to have?  What backend features would be useful to make implementations better/faster/more reliable?&lt;br /&gt;
&lt;br /&gt;
Attendees: cbbrowne, me (Susanne), Moshe Jacobson&lt;br /&gt;
&lt;br /&gt;
=== Connection Pooling ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Christopher Browne&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: We have a bunch of connection pooling systems (pgpool, pgbouncer, ...); all are limited in usefulness because they do not support the diverse set of connection modifications supported by Postgres (e.g. - ssl authentication, LDAP, etc).&lt;br /&gt;
&lt;br /&gt;
Java folk often implement poor home-grown solutions, but there exist maintained options (c3p0, dbcp).&lt;br /&gt;
&lt;br /&gt;
Note that Other Vendors sometimes include options in their &amp;quot;core&amp;quot;.  What would we like/need?&lt;br /&gt;
&lt;br /&gt;
Attendees: cbbrowne&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
Point of session: examine state of existing options&lt;br /&gt;
&lt;br /&gt;
* PgBouncer:&lt;br /&gt;
** pooler, round robin, limited load balancing&lt;br /&gt;
** transparent to application, ease of use for disaster recovery, moving masters&lt;br /&gt;
&lt;br /&gt;
* pgPool&lt;br /&gt;
** load balancer, pooler, round-robin&lt;br /&gt;
** can examine queries (read / write, direct appropriately to master/slave)&lt;br /&gt;
** tries to do everything, but slower and more complex?&lt;br /&gt;
&lt;br /&gt;
* HA Proxy &lt;br /&gt;
** TCP load balancer, HA&lt;br /&gt;
** not Pg-specific&lt;br /&gt;
&lt;br /&gt;
Issue: how to deal with multi-master scenarios (e.g. Postgres XC)&lt;br /&gt;
&lt;br /&gt;
Idea: integrate pooling in libpq (e.g. PgBouncer, as BSD licence)&lt;br /&gt;
*Pros:&lt;br /&gt;
** ease of configuration&lt;br /&gt;
*Cons:&lt;br /&gt;
** lack of flexibIlity,&lt;br /&gt;
** not able to separate pooler from DB server(s)&lt;br /&gt;
** configuration and operation tied to DB server&lt;br /&gt;
&lt;br /&gt;
Other possibilities:&lt;br /&gt;
* integrate pooling in language DB drivers&lt;br /&gt;
&lt;br /&gt;
General consensus (''correct if wrong''):&lt;br /&gt;
* reason for plethora of solutions is plethora of different scenarios&lt;br /&gt;
* integrating pooling in PostgreSQL (libpq) not advantageous&lt;br /&gt;
* multi-master is a tricky problem&lt;br /&gt;
&lt;br /&gt;
=== Open Hack Session ===&lt;br /&gt;
    &lt;br /&gt;
Proposed By: [[User:Qdw | Quinn Weaver]]&lt;br /&gt;
    &lt;br /&gt;
Session Type: Hacking&lt;br /&gt;
&lt;br /&gt;
Description: Bring a project or come looking to join, work in a team or solo, use IRC and sneakernet to help each other out — just hack!&lt;br /&gt;
&lt;br /&gt;
 #pgcon_hack on freenode&lt;br /&gt;
&lt;br /&gt;
Attendees: &lt;br /&gt;
&lt;br /&gt;
* [[User:Qdw | Quinn]]&lt;br /&gt;
* Satoshi&lt;br /&gt;
* [[User:Hholzgra|Hartmut]]&lt;br /&gt;
&lt;br /&gt;
==== Planned projects ====&lt;br /&gt;
&lt;br /&gt;
* Quinn: I will be giving [https://github.com/qdw/pg-version-compare pg-version-compare] some much-needed love (top priority: adding data for recent PostgreSQL releases).&lt;br /&gt;
* Satoshi: I will be hacking [https://github.com/uptimejp/pgperf-snapshot pgperf-snapshot] to catch up to the 9.3 (and add some unit tests). See [http://www.uptime.jp/pgperf-snapshot/docs_en/ docs] for more details.&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
&lt;br /&gt;
==== proposed bite-size projects ====&lt;br /&gt;
* url datatype (with functions for: username, password, hostname, path, protocol?)&lt;br /&gt;
* email datatype (with functions for username, hostname?)&lt;br /&gt;
* an interesting sample database showing many postgres features (in various sizes)&lt;br /&gt;
* suffix datatype (ask Dim)&lt;br /&gt;
* pg_graph - ascii art graphing extension for PSQL users&lt;br /&gt;
* &amp;quot;SHOW ...&amp;quot; alternatives to psql \... commands? As a mostly MySQL user i'm especially confused by the lack of a &amp;quot;SHOW CREATE TABLE ...&amp;quot; [[User:Hholzgra|Hholzgra]] 20:07, 24 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== The Future of Postgres ===&lt;br /&gt;
&lt;br /&gt;
Proposed by: Josh Berkus&lt;br /&gt;
&lt;br /&gt;
Session Type: Open discussion&lt;br /&gt;
&lt;br /&gt;
Description: where do you think PostgreSQL should go in 2 years?  5?  10?  What features do you see as essential to Postgres continuing to thrive?  Who's going to work on them?&lt;br /&gt;
&lt;br /&gt;
=== Lower Level Tuning ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
   &lt;br /&gt;
Session Type:  Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: Databases are real I/O and RAM eater. The talk gives an overview what administrators need to consider on buying new hardware, what they need to tune on Linux level and which variables they might want to change in postgresql.conf to get better performance.&lt;br /&gt;
&lt;br /&gt;
Attendees: Moshe Jacobson&lt;br /&gt;
&lt;br /&gt;
=== Why VACUUM? ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Session Type: Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: For what does PostgreSQL need VACUUM? Why should it run? When is autovacuum triggered? Why autovacuum not alwys works ...&lt;br /&gt;
&lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== InnoDB - purge_thread instead of VACUUM ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: [[Hartmut Holzgraefe]]&lt;br /&gt;
&lt;br /&gt;
Session Type: Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: PostgreSQL and InnoDB/XtraDB are both implementing MVCC in similar ways, differ at the detail level though. One of the differences is how to get rid of MVCC records that are no longer needed ... where PostgreSQL requires explicit VACUUM operation (or semi-implicit AUTOVACUUM) the InnoDB storage engine uses one or (in recent releases) more background threads to get rid of old MVCC entries (almost) completely transparantly ... I'd like to have a look at the implementation details and the advantages and disadvantages of both approaches ...&lt;br /&gt;
&lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== What more is needed for better JSON use? ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: Andrew Dunstan&lt;br /&gt;
   &lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
   &lt;br /&gt;
Description: Now we have a lot of enhanced JSON functionality in 9.3, what more is needed for more effective and useful JSON?&lt;br /&gt;
    &lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
=== Don't be afraid to give a talk on PGCon ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: How to prepare a good talk, ...&lt;br /&gt;
&lt;br /&gt;
Attendees: Moshe Jacobson&lt;br /&gt;
&lt;br /&gt;
===  Speaker wanted! Upgrading a running HA system without downtime and without lost of HA ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Description: Hot upgrading  to a new release by always minimum have running one master and minimum one slave .....&lt;br /&gt;
&lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
=== The Future of Full Text Search ===&lt;br /&gt;
&lt;br /&gt;
Proposed by: [[User:Dbs|Dan Scott]]&lt;br /&gt;
&lt;br /&gt;
Description: Full text search in PostgreSQL is already pretty awesome, but there may be a number of ways we can enhance it to provide a more competitive alternative to Solr, Elastic Search, Sphinx, and other dedicated full text search engines. Let's figure out what we are already working on and where the low-hanging fruit may be for further enhancements in PostgreSQL 9.4 and beyond, in areas like performance, flexibility (contrib examples of alternate parsers and ranking algorithms? parsers/dictionaries implemented in Python or Perl?), new operators, more language support, ...&lt;br /&gt;
&lt;br /&gt;
'''Attendees''' (''hopefully''):&lt;br /&gt;
&lt;br /&gt;
* Alexander Korotkov&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
&lt;br /&gt;
'''Attendees''' (''firm''):&lt;br /&gt;
&lt;br /&gt;
* Dan Scott&lt;br /&gt;
* [[User:3manuek|Emanuel Calvo]]&lt;br /&gt;
* and you if you're interested... add yourself to the list!&lt;br /&gt;
&lt;br /&gt;
=== Postgres-XC documentation review and status ===&lt;br /&gt;
&lt;br /&gt;
Proposed by: [[User:3manuek|Emanuel Calvo]]&lt;br /&gt;
&lt;br /&gt;
Session Type: Open discussion&lt;br /&gt;
&lt;br /&gt;
Description: Actually the documentation has some lack of details (i.e. How to add more coordinators? Which steps should I do after that? What if I need to reduce data nodes? Where do I need to create the users (actually we know we need to create them on the coordinators, but is not explicitly on the doc)? )&lt;br /&gt;
&lt;br /&gt;
Attendees:&lt;br /&gt;
&lt;br /&gt;
* [[User:Hholzgra|Hartmut]]&lt;br /&gt;
&lt;br /&gt;
=== PHP::mysqlnd features for ext/pgsql? ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: [[Hartmut Holzgraefe]]&lt;br /&gt;
   &lt;br /&gt;
Session Type: Presentation/Open Discussion&lt;br /&gt;
   &lt;br /&gt;
Description: The three MySQL extenions in PHP (mysql, mysqli, PDO driver) now can use the bundled mysqlnd library instead of the standard libmysqlclient C API. This allows for less copying in memory and better memory use tracking, and at the same time several plugin points have been added that allow for the addition of custom loadbalancing/read-write-splitting, query cache and others at the PHP engine level, transparent to the actual PHP application on top. This talk is going to describe the implementation in a bit more detail, then turning into an open discussion whether a similar reimplementation of the PostgreSQL client communication code to replace libpq would be feasible for ext/pgsql and the PostgreSQL PDO driver ...&lt;br /&gt;
    &lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Something about OpenStreetMap&amp;quot; ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: [[Hartmut Holzgraefe]]&lt;br /&gt;
   &lt;br /&gt;
Session Type: Presentation/Open Discussion/&lt;br /&gt;
   &lt;br /&gt;
Description: This could cover any of:&lt;br /&gt;
&lt;br /&gt;
* General User perspective&lt;br /&gt;
** what is OpenStreetMap to begin with?&lt;br /&gt;
** how to contribute map data?&lt;br /&gt;
&lt;br /&gt;
* Database perspective&lt;br /&gt;
** how is the master database organized?&lt;br /&gt;
** how to import full planet data or local regional data into PostGIS?&lt;br /&gt;
&lt;br /&gt;
* Toolchain perspective&lt;br /&gt;
** how to go from PostGIS (or other forms of OSM data) to rendered maps?&lt;br /&gt;
** how to create interactive web maps with OpenLayers or LeafNode?&lt;br /&gt;
&lt;br /&gt;
=== Pluggable Storage Engine ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: Galy&lt;br /&gt;
   &lt;br /&gt;
Session Type:Open Discussion&lt;br /&gt;
   &lt;br /&gt;
Description: &lt;br /&gt;
&lt;br /&gt;
As Josh had mentioned &lt;br /&gt;
&lt;br /&gt;
'we have a number of people who would like to do something interesting and substantially different with PostgreSQL storage, and will likely be forced to fork PostgreSQL to get their ideas to work.  Index-organized tables, fractal trees, JSON trees, EAV-optimized storage, non-MVCC tables, column stores, hash-distributed tables and graphs all require changes to storage which can't currently be fit into the model of index classes and blobs we offer for extensibility of data storage.  Transactional RAM and Persistent RAM in the future may urge other incompatible storage changes.&lt;br /&gt;
&lt;br /&gt;
As a community, we want to capture these innovations and make them part of mainstream Postgres, and their users part of the PostgreSQL community.  The only way to do this is to have some form of pluggable storage, just like we have pluggable function languages  and pluggable index types.'&lt;br /&gt;
&lt;br /&gt;
It will be interesting to discuss how we can achieve this.    &lt;br /&gt;
    &lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here:&lt;br /&gt;
&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Koichi&lt;br /&gt;
* Nat Wyatt&lt;br /&gt;
* Subho Chatterjee&lt;br /&gt;
&lt;br /&gt;
=== Migration methods Disscussion ===&lt;br /&gt;
Proposed By: Daichi Egawa   &lt;br /&gt;
&lt;br /&gt;
Session Type: Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: &lt;br /&gt;
&lt;br /&gt;
Migration to PostgreSQL is hot today. I will mainly talk about application porting(convert of SQL). There are various ways, methods and tools. So, I would like to discuss about their each merits.If there is enough time, I will also talk about migration of data. &lt;br /&gt;
&lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Future of FDW ===&lt;br /&gt;
&lt;br /&gt;
Proposed by : David Fetter&lt;br /&gt;
&lt;br /&gt;
Sesstion Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Minutes:&lt;br /&gt;
&lt;br /&gt;
* Connections alive/dead. Shutdown connections for the FDW.&lt;br /&gt;
* One connection handle per user/server pair.&lt;br /&gt;
* Planning queries across the nodes. Maybe specifying connection properties (latency? amount of rows). AlTER SERVER. Daemon updating the properties?&lt;br /&gt;
* Knowledge about other nodes as Postgres-XC. Is something different but we were discussing how it can work.&lt;br /&gt;
* Triggers on Foreign tables (insert, delete, truncate?)&lt;br /&gt;
* functions on foreign queries (execute locally? execute on the foreign host? mapping?)&lt;br /&gt;
* Data protection of data being pushing by the query to the foreign host? Error handling and errors prompted by the foreign host.&lt;br /&gt;
* Parallel searching across several Foreign connections? Somebody suggest to use some node execution as the aggregation's. Map reduce technique.&lt;br /&gt;
* Two-phase commit for durability on writing queries using FDW.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgcon2013unconference</id>
		<title>Pgcon2013unconference</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgcon2013unconference"/>
				<updated>2013-05-24T16:32:05Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Connection Handles for SQL/MED Brainstorming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= pgCon 2013 Unconference Day =&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL Community is having our first Unconference Day at pgCon 2013 in Ottawa!  This event, sponsored by Salesforce.com, extends pgCon and gives us additional opportunities to share, collaborate, and discuss about PostgreSQL development, hacking, usage, and community.&lt;br /&gt;
&lt;br /&gt;
For more about unconference days and why we're doing this, see the [[pgConUnconferenceFAQ|Unconference Day FAQ]].&lt;br /&gt;
&lt;br /&gt;
If you are interested in holding a session, or you want someone else to do a session on a particular topic on the Unconference day, please add your proposal to &amp;quot;session ideas&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
== Basic Information ==&lt;br /&gt;
&lt;br /&gt;
pgCon Unconference Day&lt;br /&gt;
&lt;br /&gt;
Saturday, May 25th&lt;br /&gt;
&lt;br /&gt;
10am to 5:30pm&lt;br /&gt;
&lt;br /&gt;
Rooms: MNT202, MRT221, MRT256&lt;br /&gt;
&lt;br /&gt;
== Unconference Schedule ==&lt;br /&gt;
&lt;br /&gt;
Not final, may be revised based on conference logistics.&lt;br /&gt;
&lt;br /&gt;
{|| ''Time'' || ''Event''&lt;br /&gt;
|- &lt;br /&gt;
| ''Time'' || ''Event''&lt;br /&gt;
|-&lt;br /&gt;
|10am to 11am || Introduction and selection of sessions in MRT 202&lt;br /&gt;
|-&lt;br /&gt;
|11am to 12pm || First sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|12pm to 1pm || Second sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|1pm to 2:30pm || Lunch discussion groups&lt;br /&gt;
|-&lt;br /&gt;
|2:30pm to 3:30pm || Third sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|3:30pm to 4:30pm || Fourth Sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|4:30pm to 5:30pm || Spillover Sessions (3 rooms)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How Sessions are Selected ==&lt;br /&gt;
&lt;br /&gt;
No predetermined schedule is set for the Unconference Day beforehand.  Instead, participants in the Unconference bring their ideas, demands, wishlists and discussion topics, and propose sessions at 10am in MRT 202.  Anyone can lead a session.  Sessions are accepted by acclaim, and scheduled collaboratively in the first period from 10am to 11am.&lt;br /&gt;
&lt;br /&gt;
In order to get things started quickly on the Unconference Day, participants are encouraged to post session ideas on the wiki, below, before the unconference actually starts.&lt;br /&gt;
&lt;br /&gt;
For more information, see the [[pgConUnconferenceFAQ|Unconference Day FAQ]]&lt;br /&gt;
&lt;br /&gt;
== Session Ideas == &lt;br /&gt;
&lt;br /&gt;
If you wish to lead a session at the Unconference Day, or if you wish someone else would hold one on a specific topic, please propose it below.  Copy this template and add your session proposal:&lt;br /&gt;
&lt;br /&gt;
    === My Session Idea ===&lt;br /&gt;
    &lt;br /&gt;
    Proposed By: Me&lt;br /&gt;
    &lt;br /&gt;
    Session Type: Presentation/Round-table/Open Discussion/Hacking/Other&lt;br /&gt;
    &lt;br /&gt;
    Description: write a few lines of description of your session idea here&lt;br /&gt;
     &lt;br /&gt;
    Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL.org Testing Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Josh Berkus&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: the regression tests and the Buildfarm don't cover anywhere near all the kinds, or scope, of testing we want to do with Postgres, especially during the Beta Testing period.  What other kinds of testing could we be doing?  How can we increase test coverage?  How can we get new contributors involved in testing?&lt;br /&gt;
&lt;br /&gt;
Attendees: put your name here:&lt;br /&gt;
&lt;br /&gt;
=== Enhancement of PostgreSQL testing framework ===&lt;br /&gt;
    &lt;br /&gt;
Proposed By: Galy Lee&lt;br /&gt;
    &lt;br /&gt;
Session Type: Presentation/Open Discussion&lt;br /&gt;
    &lt;br /&gt;
Description: We had enhanced three parts to current PostgreSQL regression test suite, those are: new replication testing framework, kernel testing framework for index/transaction/buffer page module, enhancement of isolation testing framework with synchronization mechanism. I will introduce our works and hope to discuss with the community how to make our testing framework better.&lt;br /&gt;
     &lt;br /&gt;
Attendees: Galy,&lt;br /&gt;
&lt;br /&gt;
=== Connection Handles for SQL/MED Brainstorming ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: David Fetter&lt;br /&gt;
   &lt;br /&gt;
Session Type: Presentation/Open Discussion/Hacking&lt;br /&gt;
   &lt;br /&gt;
Description: Neither SQL/MED nor we provide a way to monitor or use the remote connection directly.  We need to figure out how to fix this.&lt;br /&gt;
    &lt;br /&gt;
Attendees: &lt;br /&gt;
&lt;br /&gt;
* David Fetter&lt;br /&gt;
&lt;br /&gt;
* Please add yourself!&lt;br /&gt;
&lt;br /&gt;
=== Trigger-Based Replication Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Christopher Browne&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: What are people liking/not liking about Slony, Londiste, Bucardo?  What features are not available that would be valuable to have?  What backend features would be useful to make implementations better/faster/more reliable?&lt;br /&gt;
&lt;br /&gt;
Attendees: cbbrowne, me (Susanne),&lt;br /&gt;
&lt;br /&gt;
=== Open Hack Session ===&lt;br /&gt;
    &lt;br /&gt;
Proposed By: [[User:Qdw | Quinn Weaver]]&lt;br /&gt;
    &lt;br /&gt;
Session Type: Hacking&lt;br /&gt;
&lt;br /&gt;
Description: Bring a project or come looking to join, work in a team or solo, use IRC and sneakernet to help each other out — just hack!&lt;br /&gt;
&lt;br /&gt;
Attendees: Quinn, Satoshi&lt;br /&gt;
&lt;br /&gt;
Planned projects:&lt;br /&gt;
&lt;br /&gt;
* Quinn: I will be giving [https://github.com/qdw/pg-version-compare pg-version-compare] some much-needed love (top priority: adding data for recent PostgreSQL releases).&lt;br /&gt;
* Satoshi: I will be hacking [https://github.com/uptimejp/pgperf-snapshot pgperf-snapshot] to catch up to the 9.3 (and add some unit tests). See [http://www.uptime.jp/pgperf-snapshot/docs_en/ docs] for more details.&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
&lt;br /&gt;
=== The Future of Postgres ===&lt;br /&gt;
&lt;br /&gt;
Proposed by: Josh Berkus&lt;br /&gt;
&lt;br /&gt;
Session Type: Open discussion&lt;br /&gt;
&lt;br /&gt;
Description: where do you think PostgreSQL should go in 2 years?  5?  10?  What features do you see as essential to Postgres continuing to thrive?  Who's going to work on them?&lt;br /&gt;
&lt;br /&gt;
=== Lower Level Tuning ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
   &lt;br /&gt;
Session Type:  Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: Databases are real I/O and RAM eater. The talk gives an overview what administrators need to consider on buying new hardware, what they need to tune on Linux level and which variables they might want to change in postgresql.conf to get better performance.&lt;br /&gt;
&lt;br /&gt;
Attendees:: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== Why VACUUM? ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Session Type: Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: For what does PostgreSQL need VACUUM? Why should it run? When is autovacuum triggered? Why autovacuum not alwys works ...&lt;br /&gt;
&lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== InnoDB - purge_thread instead of VACUUM ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Hartmut Holzgraefe&lt;br /&gt;
&lt;br /&gt;
Session Type: Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: PostgreSQL and InnoDB/XtraDB are both implementing MVCC in similar ways, differ at the detail level though. One of the differences is how to get rid of MVCC records that are no longer needed ... where PostgreSQL requires explicit VACUUM operation (or semi-implicit AUTOVACUUM) the InnoDB storage engine uses one or (in recent releases) more background threads to get rid of old MVCC entries (almost) completely transparantly ... I'd like to have a look at the implementation details and the advantages and disadvantages of both approaches ...&lt;br /&gt;
&lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== What more is needed for better JSON use? ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: Andrew Dunstan&lt;br /&gt;
   &lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
   &lt;br /&gt;
Description: Now we have a lot of enhanced JSON functionality in 9.3, what more is needed for more effective and useful JSON?&lt;br /&gt;
    &lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
=== Don't be afraid to give a talk on PGCon ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: How to prepare a good talk, ...&lt;br /&gt;
&lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
===  Speaker wanted! Upgrading a running HA system without downtime and without lost of HA ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Description: Hot upgrading  to a new release by always minimum have running one master and minimum one slave .....&lt;br /&gt;
&lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
=== The Future of Full Text Search ===&lt;br /&gt;
&lt;br /&gt;
Proposed by: [[User:Dbs|Dan Scott]]&lt;br /&gt;
&lt;br /&gt;
Description: Full text search in PostgreSQL is already pretty awesome, but there may be a number of ways we can enhance it to provide a more competitive alternative to Solr, Elastic Search, Sphinx, and other dedicated full text search engines. Let's figure out what we are already working on and where the low-hanging fruit may be for further enhancements in PostgreSQL 9.4 and beyond, in areas like performance, flexibility (alternate parser, ranking algorithms), new operators, more language support, ...&lt;br /&gt;
&lt;br /&gt;
'''Attendees''' (''hopefully''):&lt;br /&gt;
&lt;br /&gt;
* Alexander Korotkov&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
&lt;br /&gt;
'''Attendees''' (''firm''):&lt;br /&gt;
&lt;br /&gt;
* Dan Scott&lt;br /&gt;
* [[User:3manuek|Emanuel Calvo]]&lt;br /&gt;
* and you if you're interested... add yourself to the list!&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgcon2013unconference</id>
		<title>Pgcon2013unconference</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgcon2013unconference"/>
				<updated>2013-05-24T15:45:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;Added Connection Handles for SQL/MED session&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= pgCon 2013 Unconference Day =&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL Community is having our first Unconference Day at pgCon 2013 in Ottawa!  This event, sponsored by Salesforce.com, extends pgCon and gives us additional opportunities to share, collaborate, and discuss about PostgreSQL development, hacking, usage, and community.&lt;br /&gt;
&lt;br /&gt;
For more about unconference days and why we're doing this, see the [[pgConUnconferenceFAQ|Unconference Day FAQ]].&lt;br /&gt;
&lt;br /&gt;
If you are interested in holding a session, or you want someone else to do a session on a particular topic on the Unconference day, please add your proposal to &amp;quot;session ideas&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
== Basic Information ==&lt;br /&gt;
&lt;br /&gt;
pgCon Unconference Day&lt;br /&gt;
&lt;br /&gt;
Saturday, May 25th&lt;br /&gt;
&lt;br /&gt;
10am to 5:30pm&lt;br /&gt;
&lt;br /&gt;
Rooms: MNT202, MRT221, MRT256&lt;br /&gt;
&lt;br /&gt;
== Unconference Schedule ==&lt;br /&gt;
&lt;br /&gt;
Not final, may be revised based on conference logistics.&lt;br /&gt;
&lt;br /&gt;
{|| ''Time'' || ''Event''&lt;br /&gt;
|- &lt;br /&gt;
| ''Time'' || ''Event''&lt;br /&gt;
|-&lt;br /&gt;
|10am to 11am || Introduction and selection of sessions in MRT 202&lt;br /&gt;
|-&lt;br /&gt;
|11am to 12pm || First sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|12pm to 1pm || Second sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|1pm to 2:30pm || Lunch discussion groups&lt;br /&gt;
|-&lt;br /&gt;
|2:30pm to 3:30pm || Third sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|3:30pm to 4:30pm || Fourth Sessions (3 rooms)&lt;br /&gt;
|-&lt;br /&gt;
|4:30pm to 5:30pm || Spillover Sessions (3 rooms)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How Sessions are Selected ==&lt;br /&gt;
&lt;br /&gt;
No predetermined schedule is set for the Unconference Day beforehand.  Instead, participants in the Unconference bring their ideas, demands, wishlists and discussion topics, and propose sessions at 10am in MRT 202.  Anyone can lead a session.  Sessions are accepted by acclaim, and scheduled collaboratively in the first period from 10am to 11am.&lt;br /&gt;
&lt;br /&gt;
In order to get things started quickly on the Unconference Day, participants are encouraged to post session ideas on the wiki, below, before the unconference actually starts.&lt;br /&gt;
&lt;br /&gt;
For more information, see the [[pgConUnconferenceFAQ|Unconference Day FAQ]]&lt;br /&gt;
&lt;br /&gt;
== Session Ideas == &lt;br /&gt;
&lt;br /&gt;
If you wish to lead a session at the Unconference Day, or if you wish someone else would hold one on a specific topic, please propose it below.  Copy this template and add your session proposal:&lt;br /&gt;
&lt;br /&gt;
    === My Session Idea ===&lt;br /&gt;
    &lt;br /&gt;
    Proposed By: Me&lt;br /&gt;
    &lt;br /&gt;
    Session Type: Presentation/Round-table/Open Discussion/Hacking/Other&lt;br /&gt;
    &lt;br /&gt;
    Description: write a few lines of description of your session idea here&lt;br /&gt;
     &lt;br /&gt;
    Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL.org Testing Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Josh Berkus&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: the regression tests and the Buildfarm don't cover anywhere near all the kinds, or scope, of testing we want to do with Postgres, especially during the Beta Testing period.  What other kinds of testing could we be doing?  How can we increase test coverage?  How can we get new contributors involved in testing?&lt;br /&gt;
&lt;br /&gt;
Attendees: put your name here:&lt;br /&gt;
&lt;br /&gt;
=== Enhancement of PostgreSQL testing framework ===&lt;br /&gt;
    &lt;br /&gt;
Proposed By: Galy Lee&lt;br /&gt;
    &lt;br /&gt;
Session Type: Presentation/Open Discussion&lt;br /&gt;
    &lt;br /&gt;
Description: We had enhanced three parts to current PostgreSQL regression test suite, those are: new replication testing framework, kernel testing framework for index/transaction/buffer page module, enhancement of isolation testing framework with synchronization mechanism. I will introduce our works and hope to discuss with the community how to make our testing framework better.&lt;br /&gt;
     &lt;br /&gt;
Attendees: Galy,&lt;br /&gt;
&lt;br /&gt;
=== Connection Handles for SQL/MED Brainstorming ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: David Fetter&lt;br /&gt;
   &lt;br /&gt;
Session Type: Presentation/Open Discussion/Hacking&lt;br /&gt;
   &lt;br /&gt;
Description: Neither SQL/MED nor we provide a way to monitor or use the remote connection directly.  We need to figure out how to fix this.&lt;br /&gt;
    &lt;br /&gt;
Attendees: David Fetter, &lt;br /&gt;
&lt;br /&gt;
=== Trigger-Based Replication Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Christopher Browne&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: What are people liking/not liking about Slony, Londiste, Bucardo?  What features are not available that would be valuable to have?  What backend features would be useful to make implementations better/faster/more reliable?&lt;br /&gt;
&lt;br /&gt;
Attendees: cbbrowne, me (Susanne),&lt;br /&gt;
&lt;br /&gt;
=== Open Hack Session ===&lt;br /&gt;
    &lt;br /&gt;
Proposed By: [[User:Qdw | Quinn Weaver]]&lt;br /&gt;
    &lt;br /&gt;
Session Type: Hacking&lt;br /&gt;
&lt;br /&gt;
Description: Bring a project or come looking to join, work in a team or solo, use IRC and sneakernet to help each other out — just hack!&lt;br /&gt;
&lt;br /&gt;
Attendees: Quinn, Satoshi&lt;br /&gt;
&lt;br /&gt;
Planned projects:&lt;br /&gt;
&lt;br /&gt;
* Quinn: I will be giving [https://github.com/qdw/pg-version-compare pg-version-compare] some much-needed love (top priority: adding data for recent PostgreSQL releases).&lt;br /&gt;
* Satoshi: I will be hacking [https://github.com/uptimejp/pgperf-snapshot pgperf-snapshot] to catch up to the 9.3 (and add some unit tests). See [http://www.uptime.jp/pgperf-snapshot/docs_en/ docs] for more details.&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
&lt;br /&gt;
=== The Future of Postgres ===&lt;br /&gt;
&lt;br /&gt;
Proposed by: Josh Berkus&lt;br /&gt;
&lt;br /&gt;
Session Type: Open discussion&lt;br /&gt;
&lt;br /&gt;
Description: where do you think PostgreSQL should go in 2 years?  5?  10?  What features do you see as essential to Postgres continuing to thrive?  Who's going to work on them?&lt;br /&gt;
&lt;br /&gt;
=== Lower Level Tuning ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
   &lt;br /&gt;
Session Type:  Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: Databases are real I/O and RAM eater. The talk gives an overview what administrators need to consider on buying new hardware, what they need to tune on Linux level and which variables they might want to change in postgresql.conf to get better performance.&lt;br /&gt;
&lt;br /&gt;
Attendees:: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== Why VACUUM? ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Session Type: Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: For what does PostgreSQL need VACUUM? Why should it run? When is autovacuum triggered? Why autovacuum not alwys works ...&lt;br /&gt;
&lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== InnoDB - purge_thread instead of VACUUM ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Hartmut Holzgraefe&lt;br /&gt;
&lt;br /&gt;
Session Type: Presentation and Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: PostgreSQL and InnoDB/XtraDB are both implementing MVCC in similar ways, differ at the detail level though. One of the differences is how to get rid of MVCC records that are no longer needed ... where PostgreSQL requires explicit VACUUM operation (or semi-implicit AUTOVACUUM) the InnoDB storage engine uses one or (in recent releases) more background threads to get rid of old MVCC entries (almost) completely transparantly ... I'd like to have a look at the implementation details and the advantages and disadvantages of both approaches ...&lt;br /&gt;
&lt;br /&gt;
Attendees: anyone who thinks they'll attend this, add your name here&lt;br /&gt;
&lt;br /&gt;
=== What more is needed for better JSON use? ===&lt;br /&gt;
   &lt;br /&gt;
Proposed By: Andrew Dunstan&lt;br /&gt;
   &lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
   &lt;br /&gt;
Description: Now we have a lot of enhanced JSON functionality in 9.3, what more is needed for more effective and useful JSON?&lt;br /&gt;
    &lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
=== Don't be afraid to give a talk on PGCon ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Session Type: Open Discussion&lt;br /&gt;
&lt;br /&gt;
Description: How to prepare a good talk, ...&lt;br /&gt;
&lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
===  Speaker wanted! Upgrading a running HA system without downtime and without lost of HA ===&lt;br /&gt;
&lt;br /&gt;
Proposed By: Susanne Ebrecht&lt;br /&gt;
&lt;br /&gt;
Description: Hot upgrading  to a new release by always minimum have running one master and minimum one slave .....&lt;br /&gt;
&lt;br /&gt;
Attendees: add your name here&lt;br /&gt;
&lt;br /&gt;
=== The Future of Full Text Search ===&lt;br /&gt;
&lt;br /&gt;
Proposed by: [[User:Dbs|Dan Scott]]&lt;br /&gt;
&lt;br /&gt;
Description: Full text search in PostgreSQL is already pretty awesome, but there may be a number of ways we can enhance it to provide a more competitive alternative to Solr, Elastic Search, Sphinx, and other dedicated full text search engines. Let's figure out what we are already working on and where the low-hanging fruit may be for further enhancements in PostgreSQL 9.4 and beyond, in areas like performance, flexibility (alternate parser, ranking algorithms), new operators, more language support, ...&lt;br /&gt;
&lt;br /&gt;
Attendees (hopefully):&lt;br /&gt;
&lt;br /&gt;
* Alexander Korotkov&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Emanuel Calvo&lt;br /&gt;
&lt;br /&gt;
Attendees (firm):&lt;br /&gt;
&lt;br /&gt;
* Dan Scott&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/IRC2RWNames</id>
		<title>IRC2RWNames</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/IRC2RWNames"/>
				<updated>2013-04-23T17:02:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* List of IRC nicks with their respective real world names */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== List of IRC nicks with their respective real world names ===&lt;br /&gt;
&lt;br /&gt;
You can find many PostgreSQL users and developers chatting in [irc://irc.freenode.net/postgresql #postgresql on freenode].  Here's more information about some of the regulars there.  '''Note:''' people are on the list below only when they want to be.  Do not (re-)add anyone without their express permission.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Nickname || Real Name&lt;br /&gt;
|-&lt;br /&gt;
|ads || Andreas Scherbaum&lt;br /&gt;
|-&lt;br /&gt;
|agliodbs, aglio2 (freenode), jberkus (oftc) || Josh Berkus&lt;br /&gt;
|-&lt;br /&gt;
|ahammond || Andrew Hammond&lt;br /&gt;
|-&lt;br /&gt;
|alvherre || Alvaro Herrera&lt;br /&gt;
|-&lt;br /&gt;
|andres || Andres Freund&lt;br /&gt;
|-&lt;br /&gt;
|Assid || Satish Alwani&lt;br /&gt;
|-&lt;br /&gt;
|aurynn || Aurynn Shaw&lt;br /&gt;
|-&lt;br /&gt;
|BlueAidan/BlueAidan_work || [[user:davidblewett | David Blewett]]&lt;br /&gt;
|-&lt;br /&gt;
|bmomjian || Bruce Momjian&lt;br /&gt;
|-&lt;br /&gt;
|cbbrowne || Christopher Browne&lt;br /&gt;
|-&lt;br /&gt;
|cce || Clark C. Evans&lt;br /&gt;
|-&lt;br /&gt;
|chicagoben || Benjamin Johnson&lt;br /&gt;
|-&lt;br /&gt;
|crab || Abhijit Menon-Sen&lt;br /&gt;
|-&lt;br /&gt;
|Crad || Gavin M. Roy&lt;br /&gt;
|- &lt;br /&gt;
|daamien ||  Damien Clochard&lt;br /&gt;
|-&lt;br /&gt;
|DarcyB || Darcy Buskermolen&lt;br /&gt;
|-&lt;br /&gt;
|darkixion || Thom Brown&lt;br /&gt;
|-&lt;br /&gt;
|davidfetter || David Fetter&lt;br /&gt;
|-&lt;br /&gt;
|dbb || Brian Hamlin  / darkblue_b&lt;br /&gt;
|-&lt;br /&gt;
|dcolish || [http://www.unencrypted.org Dan Colish]&lt;br /&gt;
|-&lt;br /&gt;
|dcramer || Dave Cramer&lt;br /&gt;
|-&lt;br /&gt;
|DeciBull, TheCougar || Jim C. Nasby&lt;br /&gt;
|-&lt;br /&gt;
|dennisb || Dennis Bj&amp;amp;ouml;rklund&lt;br /&gt;
|-&lt;br /&gt;
|depesz || Hubert Lubaczewski&lt;br /&gt;
|-&lt;br /&gt;
|devrimgunduz || Devrim G&amp;amp;uuml;nd&amp;amp;uuml;z&lt;br /&gt;
|-&lt;br /&gt;
|digicon || [http://digicondev.blogspot.com Zach Conrad]&lt;br /&gt;
|-&lt;br /&gt;
|dim || Dimitri Fontaine&lt;br /&gt;
|-&lt;br /&gt;
|direvus || Brendan Jurd&lt;br /&gt;
|-&lt;br /&gt;
|drbair || Ryan Bair&lt;br /&gt;
|-&lt;br /&gt;
|DrLou || Lou Picciano&lt;br /&gt;
|-&lt;br /&gt;
|duck_tape || Adi Alurkar&lt;br /&gt;
|-&lt;br /&gt;
|dvl || [http://langille.org/ Dan Langille]&lt;br /&gt;
|-&lt;br /&gt;
|eggyknap || Joshua Tolley&lt;br /&gt;
|-&lt;br /&gt;
|endpoint_david || David Christensen&lt;br /&gt;
|-&lt;br /&gt;
|eulerto || Euler Taveira&lt;br /&gt;
|-&lt;br /&gt;
|f3ew/devdas || Devdas Vasu Bhagat&lt;br /&gt;
|-&lt;br /&gt;
|feivel || Michael Meskes&lt;br /&gt;
|-&lt;br /&gt;
|elein || Elein Mustain&lt;br /&gt;
|-&lt;br /&gt;
|gleu || Guillaume Lelarge&lt;br /&gt;
|-&lt;br /&gt;
|gorthx || [[User:Gabrielle|Gabrielle Roth]]&lt;br /&gt;
|-&lt;br /&gt;
|grzm || Michael Glaesemann&lt;br /&gt;
|-&lt;br /&gt;
|gsmet || Guillaume Smet&lt;br /&gt;
|-&lt;br /&gt;
|gregs1104 || Greg Smith&lt;br /&gt;
|-&lt;br /&gt;
|gurjeet || [[User:singh.gurjeet|Gurjeet Singh]]&lt;br /&gt;
|-&lt;br /&gt;
|G_SabinoMullane || Greg Sabino Mullane&lt;br /&gt;
|-&lt;br /&gt;
|HarrisonF || Harrison Fisk&lt;br /&gt;
|-&lt;br /&gt;
|ioguix || Jehan-Guillaume de Rorthais&lt;br /&gt;
|-&lt;br /&gt;
|indigo || Phil Frost&lt;br /&gt;
|-&lt;br /&gt;
|intgr || Marti Raudsepp&lt;br /&gt;
|-&lt;br /&gt;
|JanniCash || Jan Wieck&lt;br /&gt;
|-&lt;br /&gt;
|jconway || Joe Conway&lt;br /&gt;
|-&lt;br /&gt;
|jdavis, jdavis_ || Jeff Davis&lt;br /&gt;
|-&lt;br /&gt;
|jkatz05 || Jonathan S. Katz&lt;br /&gt;
|-&lt;br /&gt;
|johto || Marko Tiikkaja&lt;br /&gt;
|-&lt;br /&gt;
|jurka || Kris Jurka&lt;br /&gt;
|-&lt;br /&gt;
|justatheory || David Wheeler&lt;br /&gt;
|-&lt;br /&gt;
|jpa || Jean-Paul Argudo&lt;br /&gt;
|-&lt;br /&gt;
|jwp || James Pye&lt;br /&gt;
|-&lt;br /&gt;
|j_williams || Josh Williams&lt;br /&gt;
|-&lt;br /&gt;
|kgrittn || Kevin Grittner&lt;br /&gt;
|-&lt;br /&gt;
|klando || [[User:c2main|Cédric Villemain]]&lt;br /&gt;
|-&lt;br /&gt;
|larryrtx || Larry Rosenman&lt;br /&gt;
|-&lt;br /&gt;
|linuxpoet, postgresman || Joshua D. Drake&lt;br /&gt;
|-&lt;br /&gt;
|lluad || Steve Atkins&lt;br /&gt;
|-&lt;br /&gt;
|lsmith || Lukas Smith&lt;br /&gt;
|-&lt;br /&gt;
|magnush || Magnus Hagander&lt;br /&gt;
|-&lt;br /&gt;
|marco44 || Marc Cousin&lt;br /&gt;
|-&lt;br /&gt;
|markwkm || Mark Wong&lt;br /&gt;
|-&lt;br /&gt;
|mastermind || [[user:mastermind | Stefan Kaltenbrunner]]&lt;br /&gt;
|-&lt;br /&gt;
|mbalmer || [[user:mbalmer | Marc Balmer]]&lt;br /&gt;
|-&lt;br /&gt;
|merlin83 || Chua Khee Chin&lt;br /&gt;
|-&lt;br /&gt;
|merlinm || Merlin Moncure&lt;br /&gt;
|-&lt;br /&gt;
|metatrontech || Chris Travers&lt;br /&gt;
|-&lt;br /&gt;
|miracee || Susanne Ebrecht&lt;br /&gt;
|-&lt;br /&gt;
|Moosbert || Peter Eisentraut&lt;br /&gt;
|-&lt;br /&gt;
|neilc || Neil Conway&lt;br /&gt;
|-&lt;br /&gt;
|oicu || Andrew Dunstan&lt;br /&gt;
|-&lt;br /&gt;
|okbobcz || Pavel Stehule&lt;br /&gt;
|-&lt;br /&gt;
|pg_docbot || [[IRCBotSyntax]]&lt;br /&gt;
|-&lt;br /&gt;
|pgSnake || Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|PJMODOS || Petr Jel&amp;amp;iacute;nek&lt;br /&gt;
|-&lt;br /&gt;
|Possible || Robert Ivens&lt;br /&gt;
|-&lt;br /&gt;
|postwait || Theo Schlossnagle&lt;br /&gt;
|-&lt;br /&gt;
|prothid || R Brenton Strickler&lt;br /&gt;
|-&lt;br /&gt;
|psoo || Bernd Helmle&lt;br /&gt;
|-&lt;br /&gt;
|PSUdaemon || Phil Sorber&lt;br /&gt;
|-&lt;br /&gt;
|pyarra || Philip Yarra&lt;br /&gt;
|-&lt;br /&gt;
|raptelan || [[user:Cshobe|Casey Allen Shobe]]&lt;br /&gt;
|-&lt;br /&gt;
|rhaas || Robert Haas&lt;br /&gt;
|-&lt;br /&gt;
|RhodiumToad (formerly AndrewSN) || Andrew Gierth&lt;br /&gt;
|-&lt;br /&gt;
|Robe || [[user:Robe | Michael Renner]]&lt;br /&gt;
|-&lt;br /&gt;
|rotellaro || Federico Campoli&lt;br /&gt;
|-&lt;br /&gt;
|rz || Kirill Simonov&lt;br /&gt;
|-&lt;br /&gt;
|SAS || Stéphane Schildknecht&lt;br /&gt;
|-&lt;br /&gt;
|schmiddy || Josh Kupershmidt&lt;br /&gt;
|-&lt;br /&gt;
|scrappy || Marc G. Fournier&lt;br /&gt;
|-&lt;br /&gt;
|selenamarie || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
|SkippyDigits || Sherri Kalm&lt;br /&gt;
|-&lt;br /&gt;
|Snow-Man || Stephen Frost&lt;br /&gt;
|-&lt;br /&gt;
|Spritz || Matteo Beccati&lt;br /&gt;
|-&lt;br /&gt;
|sternocera || Peter Geoghegan&lt;br /&gt;
|-&lt;br /&gt;
|StuckMojo, MojoWork || Jon Erdman&lt;br /&gt;
|-&lt;br /&gt;
|swm || Gavin Sherry&lt;br /&gt;
|-&lt;br /&gt;
|vy || Volkan YAZICI&lt;br /&gt;
|-&lt;br /&gt;
|wulczer || Jan Urbański&lt;br /&gt;
|-&lt;br /&gt;
|xaprb || Baron Schwartz&lt;br /&gt;
|-&lt;br /&gt;
|xzilla, xzi11a || [[User:Xzilla|Robert Treat]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PGDay_NYC_2013_Talks</id>
		<title>PGDay NYC 2013 Talks</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PGDay_NYC_2013_Talks"/>
				<updated>2013-03-26T05:04:02Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Added my slides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PGDay NYC 2013 Talks =&lt;br /&gt;
&lt;br /&gt;
== Friday March 22nd, 2013 ==&lt;br /&gt;
&lt;br /&gt;
=== Liberty Hall C ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/davidfetter/ct-es-pastpresentfuturenycpgday20130322 CTEs: Past, Present and Future (David Fetter)]&lt;br /&gt;
* [http://momjian.us/main/writings/pgsql/locking.pdf Understanding the Postgres Lock Manager (Bruce Momjian)]&lt;br /&gt;
* [http://plv8-talk.herokuapp.com/ Embracing the Web with JSON and PLV8 (Will Leinweber)]&lt;br /&gt;
* [https://speakerdeck.com/mbryzek/schema-evolutions-at-gilt-groupe Schema Evolutions at Gilt Groupe (Michael Bryzek)]&lt;br /&gt;
&lt;br /&gt;
=== Liberty Hall A ===&lt;br /&gt;
&lt;br /&gt;
*  [[:File:PPCD.pdf|Postgres Plus Cloud Database (Dave Page)]]&lt;br /&gt;
* [https://github.com/petere/logging-hooks-presentation Toward real-time log analysis (Peter Eisentraut)]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Working_with_Git</id>
		<title>Working with Git</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Working_with_Git"/>
				<updated>2013-01-25T04:27:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Getting Started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page collects various wisdom on working with the [http://git.postgresql.org/ PostgreSQL Git repository].  There are also [[Other Git Repositories]] you might work with, most notably the official [http://github.com/postgres Github mirror] which you might fork on that site.&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
A simple way to get started might look like this:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.postgresql.org/git/postgresql.git&lt;br /&gt;
 cd postgresql&lt;br /&gt;
 git checkout -b my-cool-feature&lt;br /&gt;
 $EDITOR&lt;br /&gt;
 git commit -a&lt;br /&gt;
 git diff master my-cool-feature | filterdiff --format=context &amp;gt; ../my-cool-feature.patch&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;git checkout -b my-cool-feature&amp;lt;/code&amp;gt; creates a new branch and checks it out at the same time.  Typically, you would develop each feature in a separate branch.&lt;br /&gt;
&lt;br /&gt;
See the documentation and tutorials at http://git.or.cz/ for a more detailed Git introduction. For a more detailed lesson, check out http://progit.org and maybe get a hardcopy to help support the site.&lt;br /&gt;
&lt;br /&gt;
You may wish to put the following in your .git/info/exclude [[GitExclude]].&lt;br /&gt;
Now that the master repository has been converted to git, the standard&lt;br /&gt;
.gitignore files should cover all build products, so you don't need&lt;br /&gt;
most of what is listed in that reference.  You might still want to&lt;br /&gt;
exclude *~, tags, and /cscope.out, though.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL developers have traditionally preferred context diffs (&amp;lt;code&amp;gt;diff -c&amp;lt;/code&amp;gt;) over unified diffs (&amp;lt;code&amp;gt;diff -u&amp;lt;/code&amp;gt;).  At least some major committers who you will probably have to run your patch by heavily prefer context diffs.  Bizarrely, Git doesn't easily produce context diffs. So there is some need for fiddling around, either using the &amp;lt;code&amp;gt;filterdiff&amp;lt;/code&amp;gt; utility as above (from the [http://freshmeat.net/projects/patchutils/ patchutils] distribution) or using the method described in [[#Context diffs with Git|Context diffs with Git]] below.&lt;br /&gt;
&lt;br /&gt;
=== Keeping your master branch local synchronized ===&lt;br /&gt;
&lt;br /&gt;
First, add the origin as a remote.  You only need to do this once:&lt;br /&gt;
&lt;br /&gt;
 git remote add origin git://git.postgresql.org/git/postgresql.git&lt;br /&gt;
&lt;br /&gt;
Next, fetch from your public git repository:&lt;br /&gt;
&lt;br /&gt;
 git fetch origin master&lt;br /&gt;
&lt;br /&gt;
Merge any new patches from your public repository:&lt;br /&gt;
&lt;br /&gt;
 git merge FETCH_HEAD&lt;br /&gt;
&lt;br /&gt;
Merge in any changes from the main branch:&lt;br /&gt;
&lt;br /&gt;
 git fetch origin master&lt;br /&gt;
 git merge FETCH_HEAD&lt;br /&gt;
&lt;br /&gt;
Now check that it still compiles, passes regression, etc.  Make sure you've&lt;br /&gt;
invoked ./configure, and then:&lt;br /&gt;
&lt;br /&gt;
 make check&lt;br /&gt;
 make maintainer-clean&lt;br /&gt;
&lt;br /&gt;
Assuming all that's good, do a dry run.&lt;br /&gt;
&lt;br /&gt;
 git push --dry-run origin master&lt;br /&gt;
&lt;br /&gt;
If that's happy, push it out to your public repository.&lt;br /&gt;
&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
If not, fix any merge failures, do an other dry run, and push.&lt;br /&gt;
&lt;br /&gt;
=== Tracking Other Branches ===&lt;br /&gt;
&lt;br /&gt;
Lets say you're happy tracking master, but you'd really like to track any one of the other potential branches at git.postgresql.org&lt;br /&gt;
&lt;br /&gt;
 git remote add &amp;lt;super-fun-branch&amp;gt; git://git.postgresql.org/super-fun-branch.git&lt;br /&gt;
 git fetch super-fun-branch&lt;br /&gt;
 git checkout super-fun-branch #this will stage your remote branch for a local checkout&lt;br /&gt;
 git checkout -b super-fun-branch-name #the name can be wahtever you choose&lt;br /&gt;
&lt;br /&gt;
Now you have a local branch within your local git repo tracking a different branches history. Most importantly, you can now push to that repo if you have to without making an explicit clone to track the history. It's pretty much impossible to not share some common history with the master branch.&lt;br /&gt;
&lt;br /&gt;
=== Using Back Branches ===&lt;br /&gt;
&lt;br /&gt;
Since the git repository contains branches for each of the major versions of PostgreSQL, it's easy to work on the latest code from an older version instead of the current one.  Here's how you might list the possibilities and checkout an older version:&lt;br /&gt;
&lt;br /&gt;
  git branch -r&lt;br /&gt;
  git checkout -b REL8_3_STABLE origin/REL8_3_STABLE&lt;br /&gt;
&lt;br /&gt;
Note that if you've already checked out and used a later version, you might need to clean up some of the files left behind by it.  It's suggested to run:&lt;br /&gt;
&lt;br /&gt;
  make maintainer-clean&lt;br /&gt;
&lt;br /&gt;
To get rid of as many of those as possible.  You might need to delete some files left behind after that anyway before git will allow you to do the checkout (src/interfaces/ecpg/preproc/preproc.y can be a problem with the specific example above).&lt;br /&gt;
&lt;br /&gt;
=== Testing a patch ===&lt;br /&gt;
&lt;br /&gt;
This is a typical setup to review a patch text file, as typically sent by e-mail:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b feature-to-review&lt;br /&gt;
 patch -p1 &amp;lt; feature.patch&lt;br /&gt;
&lt;br /&gt;
If the patch fails to apply, there will be file.rej files left behind showing the part that didn't apply.  If your directory tree is clean of build information, you can easily find these later using:&lt;br /&gt;
&lt;br /&gt;
 git status&lt;br /&gt;
&lt;br /&gt;
=== Context diffs with Git ===&lt;br /&gt;
&lt;br /&gt;
Copy [http://git.postgresql.org/gitweb?p=postgresql.git;a=blob_plain;f=src/tools/git-external-diff;hb=HEAD git-external-diff] into libexec/git-core/ of your git installation and configure git to use that wrapper with:&lt;br /&gt;
&lt;br /&gt;
 git config [--global] diff.external git-external-diff&lt;br /&gt;
&lt;br /&gt;
''--global'' makes the configuration global for your user - otherwise it is just configured for the current repository.&lt;br /&gt;
&lt;br /&gt;
For every command which displays diffs in some way you can use the parameter &amp;quot;--[no-]-ext-diff&amp;quot; to enable respectively disable using the external diff command.&lt;br /&gt;
&lt;br /&gt;
For the ''git diff'' command ''--ext-diff'' is enabled by default - for any other command like ''git log -p'' or ''git format-patch'' it is not!&lt;br /&gt;
&lt;br /&gt;
This method should work on all platforms supported by git.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don't want to configure the external wrapper permanently or you want to overwrite it you can also git like:&lt;br /&gt;
&lt;br /&gt;
 export GIT_EXTERNAL_DIFF=git-external-diff&lt;br /&gt;
 git diff --[no-]ext-diff&lt;br /&gt;
&lt;br /&gt;
==== Options to diff  ====&lt;br /&gt;
When using the above wrapper you can override the options for '''diff''' by specifying the environment variable '''DIFF_OPTS''' - it defaults to ''-pcd''.&lt;br /&gt;
Also, postgres uses 4 column tab spacing (see also [http://developer.postgresql.org/pgdocs/postgres/source-format.html]).&lt;br /&gt;
&lt;br /&gt;
 export DIFF_OPTS=-pcd&lt;br /&gt;
 export LESS=-x4&lt;br /&gt;
&lt;br /&gt;
==== Patch cleanup ====&lt;br /&gt;
&lt;br /&gt;
Patch diff submission works best when the author does a round of self-review of the actual patch--not just the code, but the physical diff file produced.  [[Creating Clean Patches]] covers practices commonly used to produce better patch diff output.&lt;br /&gt;
&lt;br /&gt;
==Publishing Your Work==&lt;br /&gt;
&lt;br /&gt;
If you develop a feature over a longer period of time, you want to allow for intermediate review.  The traditional approach to that has been emailing huge patches around.  The more advanced approach that we want to try (see also Peter Eisentraut's [http://petereisentraut.blogspot.com/2008/02/on-patch-review.html blog entry]) is that you push your Git branches to a private area on &amp;lt;code&amp;gt;git.postgresql.org&amp;lt;/code&amp;gt;, where others can pull your work, operate on it using the familiar Git tools, and perhaps even send you improvements as Git-formatted patches. See [http://git.postgresql.org/adm/help the git.postgresql.org site] for instructions on how to sign up, and how to use the repository.  You may need to eventually create a patch via e-mail as part of officially [[Submitting a Patch]].&lt;br /&gt;
&lt;br /&gt;
==Pushing New Branches==&lt;br /&gt;
&lt;br /&gt;
If you create a new branch, generally for a new feature test, you'll need to push it to git.postgresql.org.  &lt;br /&gt;
&lt;br /&gt;
  git push origin new_feature_branch&lt;br /&gt;
&lt;br /&gt;
Note that, if you have a completely blank repository (such as a new repo for a pgfoundry project) then not even the branch &amp;quot;master&amp;quot; will exist and will need to be pushed.&lt;br /&gt;
&lt;br /&gt;
If you ''are'' working with the postgresql core code, do NOT casually make up your own branches and push them, without clearing it on the pgsql-hackers list first.  Generally, you want to use your private repo area instead.&lt;br /&gt;
&lt;br /&gt;
==Removing a Branch==&lt;br /&gt;
&lt;br /&gt;
Once your feature has been committed to the PostgreSQL repository, you can usually remove your local feature branch.  This works as follows:&lt;br /&gt;
&lt;br /&gt;
 # switch to a different branch&lt;br /&gt;
 git checkout master&lt;br /&gt;
 git branch -D my-cool-feature&lt;br /&gt;
&lt;br /&gt;
==Working with the users/foo/postgres.git==&lt;br /&gt;
&lt;br /&gt;
One option while requesting a project at git.postgresql.org is to have a clone of the main postgresql repository.&lt;br /&gt;
&lt;br /&gt;
That is very nice feature, but how do you sync the upstream code?!&lt;br /&gt;
&lt;br /&gt;
One method is to create a git clone in your own repository and add a new remote to handle the syncing :&lt;br /&gt;
&lt;br /&gt;
 # clone your repos&lt;br /&gt;
 git clone ssh://git@git.postgresql.org/users/foo/postgres.git my_postgres&lt;br /&gt;
&lt;br /&gt;
 # add a new remote&lt;br /&gt;
 git remote add pgmaster git://git.postgresql.org/git/postgresql.git&lt;br /&gt;
&lt;br /&gt;
 # track some old versions&lt;br /&gt;
 git checkout -b REL8_3_STABLE origin/REL8_3_STABLE&lt;br /&gt;
 git checkout -b REL8_4_STABLE origin/REL8_4_STABLE&lt;br /&gt;
&lt;br /&gt;
 # change the remote of master and our old versions tracked&lt;br /&gt;
 git config branch.REL8_3_STABLE.remote pgmaster&lt;br /&gt;
 git config branch.REL8_4_STABLE.remote pgmaster&lt;br /&gt;
 git config branch.master.remote pgmaster&lt;br /&gt;
&lt;br /&gt;
 # pull from postgres official git for each branch&lt;br /&gt;
 # and finally push to origin&lt;br /&gt;
 git checkout master&lt;br /&gt;
 git pull&lt;br /&gt;
 git push origin&lt;br /&gt;
 git checkout REL8_3_STABLE&lt;br /&gt;
 git pull&lt;br /&gt;
 git push origin&lt;br /&gt;
 git checkout REL8_4_STABLE&lt;br /&gt;
 git pull&lt;br /&gt;
 git push origin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This way, PostgreSQL is easy to sync for each branch.  Pulling from the official and pushing to your own repository.&lt;br /&gt;
&lt;br /&gt;
Create your own branch and work as usual.  Users who have a local clone of the postgresql.git can add your branch in their repository and happily merge, just as you do.&lt;br /&gt;
&lt;br /&gt;
==Using the Web Interface==&lt;br /&gt;
&lt;br /&gt;
Try the web interface at http://git.postgresql.org/.  It offers browsing, &amp;quot;blame&amp;quot; functionality, snapshots, and other advanced features, and it is much faster than CVSweb.  Even if you don't care for Git or version control systems, you will probably enjoy the web interface.&lt;br /&gt;
&lt;br /&gt;
==RSS Feeds==&lt;br /&gt;
&lt;br /&gt;
The Git service provides RSS feeds that report about commits to the repositories.  Some people may find this to be an alternative to subscribing to the pgsql-committers mailing list.  The URL for the RSS feed from the PostgreSQL repository is http://git.postgresql.org/?p=postgresql.git;a=rss.  Other options are available; they can be found via the [http://git.postgresql.org/ home page] of the web interface.&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL Style==&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL source uses 4-character tabs, making the output from &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; look odd.  You can fix that by putting this into your.&amp;lt;code&amp;gt;git/config&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
  [core]&lt;br /&gt;
    pager = less -x4&lt;br /&gt;
&lt;br /&gt;
==Continuing the &amp;quot;rsync the CVSROOT&amp;quot; workflow==&lt;br /&gt;
&lt;br /&gt;
Aidan van Dyk {{messageLink|20090602162347.GF23972@yugib.highrise.ca|published a nice tutorial}} on how to keep several branches using a single copy of historical objects. This is roughly equivalent to keeping several checkouts of a rsync'ed copy of CVSROOT, which is what some committers were used to doing with CVS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Git]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012"/>
				<updated>2012-10-25T10:21:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Oops!  Fixed presentation date. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2012 Talks =&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 24th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Bellevue ===&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Pgconfeu12-collectd%2Bpsql.pdf|Watch your Elephants -- Using collectd for PostgreSQL performance analysis]] ([http://tokkee.org/ Sebastian 'tokkee' Harl])&lt;br /&gt;
* [[Media:Range-types.pdf|Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]]&lt;br /&gt;
&lt;br /&gt;
=== Vlatva ===&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday 25th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Bellevue ===&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Universal_Data_Access_with_SQL_MED.pdf|Universal Data Access with SQL/MED (David Fetter)]]&lt;br /&gt;
&lt;br /&gt;
=== Vlatva ===&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Europe]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012"/>
				<updated>2012-10-25T10:15:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Thames */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2012 Talks =&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 24th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Bellevue ===&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Pgconfeu12-collectd%2Bpsql.pdf|Watch your Elephants -- Using collectd for PostgreSQL performance analysis]] ([http://tokkee.org/ Sebastian 'tokkee' Harl])&lt;br /&gt;
* [[Media:Range-types.pdf|Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]]&lt;br /&gt;
* [[Media:Universal_Data_Access_with_SQL_MED.pdf|Universal Data Access with SQL/MED (David Fetter)]]&lt;br /&gt;
&lt;br /&gt;
=== Vlatva ===&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Europe]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012"/>
				<updated>2012-10-25T10:12:07Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Added Universal Data Access with SQL/MED */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2012 Talks =&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 24th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Bellevue ===&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/images/b/bc/Pgconfeu12-collectd%2Bpsql.pdf Watch your Elephants -- Using collectd for PostgreSQL performance analysis] ([http://tokkee.org/ Sebastian 'tokkee' Harl])&lt;br /&gt;
* [https://wiki.postgresql.org/images/f/f0/Range-types.pdf Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]&lt;br /&gt;
* [[Media:Universal_Data_Access_with_SQL_MED.pdf|Universal Data Access with SQL/MED (David Fetter)]]&lt;br /&gt;
&lt;br /&gt;
=== Vlatva ===&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Europe]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/File:Universal_Data_Access_with_SQL_MED.pdf</id>
		<title>File:Universal Data Access with SQL MED.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/File:Universal_Data_Access_with_SQL_MED.pdf"/>
				<updated>2012-10-25T10:08:18Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Shared_Storage</id>
		<title>Shared Storage</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Shared_Storage"/>
				<updated>2012-09-25T16:03:37Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;One way to make a highly-available PostgreSQL pair is to use shared storage:  a single, highly redundant disk array (usually an expensive SAN) that is connected to two servers.  This topic is addressed briefly at both http://www.postgresql.org/about/press/faq and http://www.enterprisedb.com/products/allfaq.do&lt;br /&gt;
&lt;br /&gt;
It's straighforward to build a shared storage implementation using PostgreSQL and either one of the proprietary clustering systems or using Linux-HA. And until PostgreSQL gets fully synchronous replication, it's a viable alternate solution for &amp;quot;must not lose a transaction&amp;quot; deployments when the storage used is much more reliable than the nodes.&lt;br /&gt;
&lt;br /&gt;
The main things you have to figure out are a) which of the clustering software solutions you're going to use, ranging from the free Linux on to the multiple proprietary options, and b) how you're going to enforce a node that's been demoted from being the master from reconnecting again (what's called fencing).  There's some overlap between those two decisions; not every cluster program supports every node fencing method.&lt;br /&gt;
&lt;br /&gt;
Clustering software appropriate for this approach includes products from Veritas, Sun, RedHat, and the Linux HA project.  Sun even mentions PostgreSQL support as a specific strength of their product at http://blogs.sun.com/SC/entry/migrating_from_veritas_cluster_server &lt;br /&gt;
&lt;br /&gt;
One hard part is getting a heartbeat between the two servers sharing the SAN that is both sensitive enough to catch failures while not being so paranoid that it fails over needlessly (say, when load spikes on the primary and it slows down). Make sure you test that part out very carefully with any vendor you evaluate. &lt;br /&gt;
&lt;br /&gt;
As far as the PostgreSQL specifics go, you need a solid way to ensure you've disconnected the now defunct master from the SAN (the classic &amp;quot;shoot the other node in the head&amp;quot; problem). All you *should* have to do is start the database again on the backup after doing that. That will come up as a standard crash, run through WAL replay crash recovery, and the result should be no different than had you restarted after a crash on the original node. The thing you cannot let happen is allowing the original master to continue writing to the shared SAN volume once that transition has happened.&lt;br /&gt;
&lt;br /&gt;
The hard part of shared storage failover is always solving the &amp;quot;shoot the other node in the head problem&amp;quot;, to keep a down node from coming back once it's no longer the active one. In order to do that well, you really need to lock the now unavailable node from accessing the storage at the hardware level--&amp;quot;fencing&amp;quot;--with disabling its storage port being one way to handle that. Figure out how you're going to do that reliably in a way that's integrated into a proper cluster manager, and there's no reason you can't do this with PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
There's a description of the fencing options for Linux-HA at http://www.clusterlabs.org/doc/crm_fencing.html  The cheap way to solve this problem is to have a UPS that disables the power going to the shot node. Once that's done, you can then safely failover the shared storage to another system. At that point, you can probably even turn back on the power, presuming that the now rebooted system will be able to regain access to the storage during a fresh system start. &lt;br /&gt;
&lt;br /&gt;
== Typical Setup ==&lt;br /&gt;
&lt;br /&gt;
Here's one user (John Pierce) writing about this style of deployment:&lt;br /&gt;
&lt;br /&gt;
In most of the HA clusters I've seen, the RAID controllers are in the SAN, not in the hosts, and they have their own failover, with shared write cache, also extensive use of ECC so things like double-bit memory errors are detected and treated as a failure. The sorts of high end SANs used in these kinds of systems have 5-9's reliability, through extensive use of redundancy, dual port disks, fully redundant everything, mirrored caches, etc.&lt;br /&gt;
&lt;br /&gt;
Ditto, the servers used in these sorts of clusters have ECC memory, so memory failure should be detected rather than passed on blindly in the form of corrupted data. Server grade CPUs, especially the RISC ones, have extensive ECC internally on their caches, data busses, etc, so any failure there is detected rather than allowed to corrupt data. Failure modes can include things like failing fans (which will be detected, resulting in a server shutdown if too many fail), power supply failure (redundant PSUs, but I've seen the power combining circuitry fail). Any of these sorts of failures will result in a failover without corrupting the data.&lt;br /&gt;
&lt;br /&gt;
And of course, intentional planned failovers to do OS maintenance... you patch the standby system, fail over to it and verify its good, then patch the other system.&lt;br /&gt;
&lt;br /&gt;
We had a large HA system at an overseas site fail over once due to flooding in the primary computer room caused by a sprinkler system failure upstairs. The SAN was mirrored to a SAN in the 2nd DC (fiber inteconnected) and the backup server was also in the second DC across campus, so it all failed over gracefully. This particular system was large Sun hardware and big EMC storage, and it was running Oracle rather than Postgres. We've had several big UPS failures at various sites, too, ditto HVAC, over a 15 year period. &lt;br /&gt;
&lt;br /&gt;
In my dev-lab tests of some clusters, I used the QLogic 5600 FC switch that connects my motly collection of servers... I used RHCS for one test, it supported the qlogic via telnet... I created two zone sets in the qlogic, one for each state, with the standby host blocked from accessing the LUN, and the cluster manager used telnet to talk to the switch. I ran heartbeats over two separate ethernets (one was the lab LAN segment, the other was a private switch i have all the servers connected to for various tests, and such). The qlogic switch also had another zoneset for all sorts of other servers and storage which wasn't affected by these clustering tests.&lt;br /&gt;
&lt;br /&gt;
I don't like power cycling servers, so I'd prefer not to use power switch based fencing, although I believe my blade box's management unit is supported as a power fencing device.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
Past discussions of ways to do this on the PostgreSQL list include:&lt;br /&gt;
* http://markmail.org/message/s4gka6dotadefgll&lt;br /&gt;
* http://markmail.org/message/f7gsispb2e56d7k6&lt;br /&gt;
* http://markmail.org/message/hpjh4f4z7pxslmpf&lt;br /&gt;
&lt;br /&gt;
And several pieces of good advice there have not yet been absorbed into this discussion.&lt;br /&gt;
&lt;br /&gt;
Initial text here came from those discussions on the pgsql-general and pgsql-admin lists, primarily from Greg Smith and John Pierce.&lt;br /&gt;
&lt;br /&gt;
[[Category:Clustering]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/TPC-H</id>
		<title>TPC-H</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/TPC-H"/>
				<updated>2012-09-25T16:02:44Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://www.tpc.org/tpch/ TPC-H Benchmark] is a popular one for comparing database vendors.  It's possible to run the TPC-H data set on PostgreSQL without having a formal testing kit (although there is [[DBT-3]], a work in progress to provide a full kit).  The results have generally been disappointing, for reasons that aren't necessarily relevant in the real world.  PostgreSQL is missing some of the things needed to do well on this benchmark, whereas proprietary database vendors are so focused on it they will &amp;quot;game&amp;quot; TPC-H runs (add optimizations specifically aimed at it) to make absolutely sure they do well.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* [http://dsl.serc.iisc.ernet.in/projects/PICASSO/picasso_download/doc/Installation/tpch.htm TPC-H data generation and loading]&lt;br /&gt;
* [http://monetdb.cwi.nl/SQL/Benchmark/TPCH/ TPC-H Performance Study] using an old version of PostgreSQL&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01867.php Discussion of limitations] started by the above&lt;br /&gt;
* [http://m.tholis.webnode.com/news/tpc-h-fun-with-greenplum-single-node-edition-/ TPC-H fun with Greenplum (single node edition)] - leads into the below and discusses what's needed to do well on TPC-H&lt;br /&gt;
* [http://community.greenplum.com/showthread.php?t=113  GP SNE versus Postgres 8.4.2 - 22 Query Benchmark Results] (similar to TPC-H queries, tweaked to run better)&lt;br /&gt;
[[Category:Benchmarking]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Planet_PostgreSQL</id>
		<title>Planet PostgreSQL</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Planet_PostgreSQL"/>
				<updated>2012-09-25T15:48:44Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Are commercial posts allowed? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://planet.postgresql.org/ Planet PostgreSQL] is a blog aggregation service run by the PostgreSQL community.  In addition to the main Planet site, entries are published (&amp;quot;syndicated&amp;quot;) to the [http://www.postgresql.org/ postgresql.org] site as well.&lt;br /&gt;
&lt;br /&gt;
== Planet PostgreSQL Policy ==&lt;br /&gt;
&lt;br /&gt;
The following simple rules cover the blogs being listed on Planet PostgreSQL:&lt;br /&gt;
&lt;br /&gt;
* All blogs should be about PostgreSQL or closely related technologies. If you want to blog about other things as well, please put your PostgreSQL specific posts in a separate category/tag/label, and use the feed for this category only for Planet PostgreSQL.&lt;br /&gt;
* All topics related to PostgreSQL are of course appreciated - both technical and non-technical.&lt;br /&gt;
* All posts should be in English. If you want to blog in other languages, please put your PostgreSQL specific posts in a separate category/tag/label, and use the feed for this category only for Planet PostgreSQL.&lt;br /&gt;
* All blogs should be identified by the posters name. A nickname is allowed to be used in combination with this, but blogs without names are not allowed.&lt;br /&gt;
* Avoid inflammatory comments in syndicated posts. Personal attacks are not permitted.&lt;br /&gt;
* Publishing of advertising in the syndicated part of your blog is not permitted&lt;br /&gt;
&lt;br /&gt;
Violating these rules will cause your blog to be removed from Planet PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
== Planet PostgreSQL FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== How can I remove a bad entry from the feed? ===&lt;br /&gt;
&lt;br /&gt;
It's possible to login to the administration interface and hide an individual entry.  If you realize you've made a mistake and done something like accidentally posting incorrectly tagged content, removing it on your own is recommended.&lt;br /&gt;
&lt;br /&gt;
=== What are the right URLs to use for a labeled feed from [http://www.blogger.com blogger.com]? ===&lt;br /&gt;
&lt;br /&gt;
Assuming your blog is named &amp;quot;blogname&amp;quot; and you've tagged a subset of your posts with the &amp;quot;postgresql&amp;quot; label, the correct URLs to input to the Planet code are:&lt;br /&gt;
&lt;br /&gt;
* Feedurl:  http://blogname.blogspot.com/search/label/postgresql&lt;br /&gt;
* Blogurl:  http://blogname.blogspot.com/feeds/posts/default/-/postgresql &lt;br /&gt;
&lt;br /&gt;
You can confirm those URLs display a suitable copy of your feed via a web browser before submitting them.&lt;br /&gt;
&lt;br /&gt;
=== Are commercial posts allowed? ===&lt;br /&gt;
&lt;br /&gt;
Informative entries that mention proprietary products are normally permissible, as long as the main entry is relevant to the PostgreSQL community.  But the policy specifically prohibits publication of advertising in the portion of a blog that is syndicated to the Planet feed.  It's recommended that blogs that may contain ads tag them appropriately, to provide a feed to the Planet without those entries included.&lt;br /&gt;
&lt;br /&gt;
=== What constitutes an advertisement? ===&lt;br /&gt;
&lt;br /&gt;
The primary test here is whether the information provided would be of some use even to people who have no interest in the commercial product mentioned.  Consider what your entry would look like if all references to the product were removed.  If there's no useful PostgreSQL content left after doing that, that post is an ad.&lt;br /&gt;
&lt;br /&gt;
You can find a blog entry giving a more detailed opinion from one of the moderators about this subject at [http://blog.2ndquadrant.com/en/2011/06/planetary-alignment.html Planetary alignment].  That commentary is not part of the official policy.&lt;br /&gt;
&lt;br /&gt;
=== What happens to blogs that violate the site policies? ===&lt;br /&gt;
&lt;br /&gt;
A first violation of the advertising policy will result in the blog entry with the ad being removed, and a warning e-mail sent to the listed owner of the blog.&lt;br /&gt;
&lt;br /&gt;
A second violation will resulting in the blog being removed from the Planet PostgreSQL feed.  After a two month suspension period, the blog owner can submit their blog address--or a new feed URL better tagged to filter out advertisements--for reconsideration.&lt;br /&gt;
&lt;br /&gt;
A third violation in any year will result in a full 12 month suspension of the blog from Planet PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Who makes the moderation decisions about the Planet content allowed? ===&lt;br /&gt;
&lt;br /&gt;
Site maintenance and moderation duty is done by a small team of volunteer moderators, primarily made up of [http://www.postgresql.org/community/contributors/ PostgreSQL contributors] from various companies who are familiar with the [[Policies|policies]] of the PostgreSQL community.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion</id>
		<title>Oracle to Postgres Conversion</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion"/>
				<updated>2012-06-21T19:48:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* CLOBs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This page was originally carried on the [http://openacs.org/ OpenACS] Website, but seems to have been lost over the ages and so is now reproduced here.&lt;br /&gt;
by James Shannon, Ben Adida, and Don Baccus&lt;br /&gt;
&lt;br /&gt;
= What you should know before you begin =&lt;br /&gt;
&lt;br /&gt;
You should know SQL relatively well. Knowing the details of Oracle SQL and Postgres SQL are obviously tremendous advantages, but the hints in this document should quickly bring you up to speed on what the differences are.&lt;br /&gt;
&lt;br /&gt;
If you're porting Oracle SQL to Postgres SQL for the&lt;br /&gt;
[http://acspg.benadida.com/ ACS/pg], you should also be quite familiar with AOLserver Tcl, especially the AOLserver database APIs.&lt;br /&gt;
&lt;br /&gt;
In this document, we're talking about:&lt;br /&gt;
&lt;br /&gt;
* Oracle 8 and 8i&lt;br /&gt;
* Postgres 8.4, and sometimes this also works for earlier versions.&lt;br /&gt;
&lt;br /&gt;
= Grammar Differences =&lt;br /&gt;
&lt;br /&gt;
There are a handful of grammar differences in Postgres for functionality that is actually the same. ACS/pg attempts to perform these changes automatically, leaving only the major functionality differences to be ported by hand. This is done by db_sql_prep which performs a number of regular expression substitutions on a piece of SQL.&lt;br /&gt;
&lt;br /&gt;
[[Category:Oracle]]&lt;br /&gt;
&lt;br /&gt;
== Sysdate ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the keyword sysdate to denote the current date and time. Postgres uses 'now'::datetime, which ACS/pg has conveniently wrapped in a function named sysdate().&lt;br /&gt;
&lt;br /&gt;
ACS/pg also includes a Tcl procedure named db_sysdate which should be used every time the sysdate term appears. Thus:&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select sysdate from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
should become&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select [db_sysdate] from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== The Dual Table ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the &amp;quot;fake&amp;quot; dual table for many selects. This table was created in postgres as a view to ease porting problems. This allows code to remain somewhat compatible with Oracle SQL without annoying the Postgres parser.&lt;br /&gt;
&lt;br /&gt;
== Sequences ==&lt;br /&gt;
&lt;br /&gt;
Oracle's sequence grammar is sequence_name.nextval.&lt;br /&gt;
&lt;br /&gt;
Postgres's sequence grammar is nextval('sequence_name').&lt;br /&gt;
&lt;br /&gt;
In Tcl, getting the next sequence value can be abstracted by calling [db_sequence_nextval $db sequence_name]. In case you need to include a sequence's value in a more complex SQL statement, you can use [db_sequence_nextval_sql sequence_name] which will return the appropriate grammar.&lt;br /&gt;
&lt;br /&gt;
== Decode ==&lt;br /&gt;
&lt;br /&gt;
Oracle's handy decode function works as follows:&lt;br /&gt;
&lt;br /&gt;
 decode(expr, search, expr[, search, expr...] [, default])&lt;br /&gt;
&lt;br /&gt;
To evaluate this expression, Oracle compares expr to each search value one by&lt;br /&gt;
one. If expr is equal to a search, Oracle returns the corresponding result. If&lt;br /&gt;
no match is found, Oracle returns default, or, if default is omitted, returns&lt;br /&gt;
null.&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have the same construct. It can be replicated with:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN expr THEN expr [...] ELSE expr END&lt;br /&gt;
&lt;br /&gt;
which returns the expression corresponding to the first true predicate. For example:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN c1 = 1 THEN 'match' ELSE 'no match' END&lt;br /&gt;
&lt;br /&gt;
== NVL ==&lt;br /&gt;
&lt;br /&gt;
Oracle has another handy function: NVL. NVL returns its first argument if it is not null, otherwise it returns its second argument.&lt;br /&gt;
&lt;br /&gt;
 start_date := NVL(hire_date, SYSDATE);&lt;br /&gt;
&lt;br /&gt;
The above statement will return SYSDATE if hire_date is null. Postgres has a function that performs the same thing in a more generalized way: coalesce(expr1, expr2, expr3,....) returns the first non-null expression that is passed to it.&lt;br /&gt;
&lt;br /&gt;
== Subquery in FROM  ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL requires a sub-SELECT surrounded by parentheses, and an alias '''must''' be provided for it. The alias is not mandatory for Oracle. &lt;br /&gt;
&lt;br /&gt;
a query for Oracle:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a)&lt;br /&gt;
in PostgreSQL will look like:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a) as foo&lt;br /&gt;
&lt;br /&gt;
= Functional Differences =&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have all the functionality of Oracle. ACS/pg is forced to deal with these limitations with specific work-arounds. Almost everything can be done under Postgres, but some features are awaiting new versions of the open-source database.&lt;br /&gt;
&lt;br /&gt;
== Outer Joins ==&lt;br /&gt;
&lt;br /&gt;
Outer Joins in Oracle work as follows:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id(+)&lt;br /&gt;
&lt;br /&gt;
where the (+) indicates that, if there is no row in table b that matches the correct item_id, the match should still happen, with an empty row from table b. In this case, for example, for all rows in table a where there is no matching row in b, a row will still be returned where a.field1 is correct, but b.field2 is null.&lt;br /&gt;
&lt;br /&gt;
In Postgresql:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a&lt;br /&gt;
 left outer join b&lt;br /&gt;
 on a.item_id = b.item_id;&lt;br /&gt;
&lt;br /&gt;
In certain other cases where only aggregate values are pulled out of the outer-joined table, it's possible to not use a join at all. If the original query is:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, sum(b.field2)&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id (+)&lt;br /&gt;
 group by a.field1&lt;br /&gt;
&lt;br /&gt;
then the Postgres query can look like:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b_sum_field2_by_item_id(a.item_id)&lt;br /&gt;
 from a&lt;br /&gt;
&lt;br /&gt;
where you've defined the function:&lt;br /&gt;
&lt;br /&gt;
 create function b_sum_field2_by_item_id(integer)&lt;br /&gt;
 returns integer&lt;br /&gt;
 as '&lt;br /&gt;
 DECLARE&lt;br /&gt;
      v_item_id alias for $1;&lt;br /&gt;
 BEGIN&lt;br /&gt;
      return sum(field2) from b where item_id= v_item_id;&lt;br /&gt;
 END;&lt;br /&gt;
 ' language 'plpgsql';&lt;br /&gt;
&lt;br /&gt;
== CONNECT BY ==&lt;br /&gt;
Postgres doesn't have connect by statements. It does, however, have WITH RECURSIVE.  As WITH RECURSIVE is Turing-complete, it is simple to translate CONNECT BY statements into WITH RECURSIVE ones.&lt;br /&gt;
&lt;br /&gt;
== CLOBs ==&lt;br /&gt;
Postgres has decent CLOB support in the form of TEXT.&lt;br /&gt;
&lt;br /&gt;
== BLOBs ==&lt;br /&gt;
Binary large object support in Postgres is very poor and unsuitable for use in a 24/7 environment, because you can't dump them with pg_dump. Backing up a database that makes use of Postgres large objects requires one to knock down the RDBMS and dump the files in the database directory.&lt;br /&gt;
&lt;br /&gt;
Don Baccus put together a hack that extends AOLserver's postgres driver with BLOB-like support, by uuencoding/decoding binary files before stuffing them into or extracting them from the database. The resulting objects can be consistently dumped by &amp;quot;pg_dump&amp;quot; while the RDBMS is up and running. There is no need to interrupt service while making your backup.&lt;br /&gt;
&lt;br /&gt;
To get around the one-block limit on the size of a tuple imposed by Postgres, the driver segments the encoded data into 8K chunks.&lt;br /&gt;
&lt;br /&gt;
Postgres large objects are scheduled for a major overhaul in summer 2000. Because of this, only the BLOB functionality used by the ACS was implemented.&lt;br /&gt;
&lt;br /&gt;
To use the BLOB driver extension, you must first create a column of type &amp;quot;integer&amp;quot; with the name &amp;quot;lob&amp;quot; in the table that will store the BLOB, and a trigger on it that calls &amp;quot;on_lob_ref&amp;quot;. You must use the name &amp;quot;lob&amp;quot;. Here's an example:&lt;br /&gt;
&lt;br /&gt;
 create table my_table (&lt;br /&gt;
     my_key                     integer primary key,&lt;br /&gt;
         lob                            integer references lobs,&lt;br /&gt;
     my_other_data      some_type -- etc&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
create trigger my_table_lob_trig before insert or delete or update&lt;br /&gt;
on my_table for each row execute procedure on_lob_ref();&lt;br /&gt;
&lt;br /&gt;
To put a binary file into &amp;quot;my_table&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select empty_lob()&amp;quot;]&lt;br /&gt;
 &lt;br /&gt;
 ns_db dml $db &amp;quot;begin&amp;quot;&lt;br /&gt;
 ns_db dml $db &amp;quot;update my_table set lob = $lob where my_key = $my_key&amp;quot;&lt;br /&gt;
 ns_pg blob_dml_file $db $lob $tmp_filename&lt;br /&gt;
 ns_db dml $db &amp;quot;end&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note that the call to ns_pg to stuff the file into the database MUST be wrapped in a transaction, even if you're not updating any other tables at the same time. The driver will return an error if you don't.&lt;br /&gt;
&lt;br /&gt;
To return a large object stored in &amp;quot;my_table&amp;quot; to the user:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select lob from my_table&lt;br /&gt;
                                      where my_key = $my_key&amp;quot;]&lt;br /&gt;
 ns_pg blob_write $db $lob&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to wrap the call to blob_write in a transaction, as the database isn't being modified.&lt;br /&gt;
&lt;br /&gt;
The large objects are automatically deleted when no longer used. To replace the large object stored in an existing record, just allocate a new one by calling &amp;quot;empty_lob()&amp;quot; and assign the returned key to the &amp;quot;lob&amp;quot; column in your table.&lt;br /&gt;
&lt;br /&gt;
= External Tools =&lt;br /&gt;
A couple of extension tools are available for Oracle migration.&lt;br /&gt;
&lt;br /&gt;
; [http://www.easyfrom.net/ ESF Database Migration Toolkit]&lt;br /&gt;
: A toolkit migrates Oracle databae to PostgreSQL in wizard. It connects to Oracle and PostgreSQL database directly, and migrate its table structure, data, indexes, primary keys, foreign keys, comments and so on.&lt;br /&gt;
; [http://orafce.projects.postgresql.org/ orafce]&lt;br /&gt;
: The goal of the project is to implement some functions from Oracle database. Some date functions (next_day, last_day, trunc, round, ...), string functions and some modules (DBMS_ALERT, DBMS_OUTPUT, UTL_FILE, DBMS_PIPE, ...) are implemented now. Functionality was verified on Oracle 10g and module is useful for production work.&lt;br /&gt;
; [http://pgfoundry.org/projects/ora2pg ora2pg]&lt;br /&gt;
: Ora2Pg is a Perl module to export an Oracle database schema to a PostgreSQL compatible schema. It connects your Oracle database, extracts its structure, and generates an SQL script that you can load into your PostgreSQL database.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion</id>
		<title>Oracle to Postgres Conversion</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion"/>
				<updated>2012-06-21T19:47:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* What you should know before you begin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This page was originally carried on the [http://openacs.org/ OpenACS] Website, but seems to have been lost over the ages and so is now reproduced here.&lt;br /&gt;
by James Shannon, Ben Adida, and Don Baccus&lt;br /&gt;
&lt;br /&gt;
= What you should know before you begin =&lt;br /&gt;
&lt;br /&gt;
You should know SQL relatively well. Knowing the details of Oracle SQL and Postgres SQL are obviously tremendous advantages, but the hints in this document should quickly bring you up to speed on what the differences are.&lt;br /&gt;
&lt;br /&gt;
If you're porting Oracle SQL to Postgres SQL for the&lt;br /&gt;
[http://acspg.benadida.com/ ACS/pg], you should also be quite familiar with AOLserver Tcl, especially the AOLserver database APIs.&lt;br /&gt;
&lt;br /&gt;
In this document, we're talking about:&lt;br /&gt;
&lt;br /&gt;
* Oracle 8 and 8i&lt;br /&gt;
* Postgres 8.4, and sometimes this also works for earlier versions.&lt;br /&gt;
&lt;br /&gt;
= Grammar Differences =&lt;br /&gt;
&lt;br /&gt;
There are a handful of grammar differences in Postgres for functionality that is actually the same. ACS/pg attempts to perform these changes automatically, leaving only the major functionality differences to be ported by hand. This is done by db_sql_prep which performs a number of regular expression substitutions on a piece of SQL.&lt;br /&gt;
&lt;br /&gt;
[[Category:Oracle]]&lt;br /&gt;
&lt;br /&gt;
== Sysdate ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the keyword sysdate to denote the current date and time. Postgres uses 'now'::datetime, which ACS/pg has conveniently wrapped in a function named sysdate().&lt;br /&gt;
&lt;br /&gt;
ACS/pg also includes a Tcl procedure named db_sysdate which should be used every time the sysdate term appears. Thus:&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select sysdate from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
should become&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select [db_sysdate] from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== The Dual Table ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the &amp;quot;fake&amp;quot; dual table for many selects. This table was created in postgres as a view to ease porting problems. This allows code to remain somewhat compatible with Oracle SQL without annoying the Postgres parser.&lt;br /&gt;
&lt;br /&gt;
== Sequences ==&lt;br /&gt;
&lt;br /&gt;
Oracle's sequence grammar is sequence_name.nextval.&lt;br /&gt;
&lt;br /&gt;
Postgres's sequence grammar is nextval('sequence_name').&lt;br /&gt;
&lt;br /&gt;
In Tcl, getting the next sequence value can be abstracted by calling [db_sequence_nextval $db sequence_name]. In case you need to include a sequence's value in a more complex SQL statement, you can use [db_sequence_nextval_sql sequence_name] which will return the appropriate grammar.&lt;br /&gt;
&lt;br /&gt;
== Decode ==&lt;br /&gt;
&lt;br /&gt;
Oracle's handy decode function works as follows:&lt;br /&gt;
&lt;br /&gt;
 decode(expr, search, expr[, search, expr...] [, default])&lt;br /&gt;
&lt;br /&gt;
To evaluate this expression, Oracle compares expr to each search value one by&lt;br /&gt;
one. If expr is equal to a search, Oracle returns the corresponding result. If&lt;br /&gt;
no match is found, Oracle returns default, or, if default is omitted, returns&lt;br /&gt;
null.&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have the same construct. It can be replicated with:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN expr THEN expr [...] ELSE expr END&lt;br /&gt;
&lt;br /&gt;
which returns the expression corresponding to the first true predicate. For example:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN c1 = 1 THEN 'match' ELSE 'no match' END&lt;br /&gt;
&lt;br /&gt;
== NVL ==&lt;br /&gt;
&lt;br /&gt;
Oracle has another handy function: NVL. NVL returns its first argument if it is not null, otherwise it returns its second argument.&lt;br /&gt;
&lt;br /&gt;
 start_date := NVL(hire_date, SYSDATE);&lt;br /&gt;
&lt;br /&gt;
The above statement will return SYSDATE if hire_date is null. Postgres has a function that performs the same thing in a more generalized way: coalesce(expr1, expr2, expr3,....) returns the first non-null expression that is passed to it.&lt;br /&gt;
&lt;br /&gt;
== Subquery in FROM  ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL requires a sub-SELECT surrounded by parentheses, and an alias '''must''' be provided for it. The alias is not mandatory for Oracle. &lt;br /&gt;
&lt;br /&gt;
a query for Oracle:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a)&lt;br /&gt;
in PostgreSQL will look like:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a) as foo&lt;br /&gt;
&lt;br /&gt;
= Functional Differences =&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have all the functionality of Oracle. ACS/pg is forced to deal with these limitations with specific work-arounds. Almost everything can be done under Postgres, but some features are awaiting new versions of the open-source database.&lt;br /&gt;
&lt;br /&gt;
== Outer Joins ==&lt;br /&gt;
&lt;br /&gt;
Outer Joins in Oracle work as follows:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id(+)&lt;br /&gt;
&lt;br /&gt;
where the (+) indicates that, if there is no row in table b that matches the correct item_id, the match should still happen, with an empty row from table b. In this case, for example, for all rows in table a where there is no matching row in b, a row will still be returned where a.field1 is correct, but b.field2 is null.&lt;br /&gt;
&lt;br /&gt;
In Postgresql:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a&lt;br /&gt;
 left outer join b&lt;br /&gt;
 on a.item_id = b.item_id;&lt;br /&gt;
&lt;br /&gt;
In certain other cases where only aggregate values are pulled out of the outer-joined table, it's possible to not use a join at all. If the original query is:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, sum(b.field2)&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id (+)&lt;br /&gt;
 group by a.field1&lt;br /&gt;
&lt;br /&gt;
then the Postgres query can look like:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b_sum_field2_by_item_id(a.item_id)&lt;br /&gt;
 from a&lt;br /&gt;
&lt;br /&gt;
where you've defined the function:&lt;br /&gt;
&lt;br /&gt;
 create function b_sum_field2_by_item_id(integer)&lt;br /&gt;
 returns integer&lt;br /&gt;
 as '&lt;br /&gt;
 DECLARE&lt;br /&gt;
      v_item_id alias for $1;&lt;br /&gt;
 BEGIN&lt;br /&gt;
      return sum(field2) from b where item_id= v_item_id;&lt;br /&gt;
 END;&lt;br /&gt;
 ' language 'plpgsql';&lt;br /&gt;
&lt;br /&gt;
== CONNECT BY ==&lt;br /&gt;
Postgres doesn't have connect by statements. It does, however, have WITH RECURSIVE.  As WITH RECURSIVE is Turing-complete, it is simple to translate CONNECT BY statements into WITH RECURSIVE ones.&lt;br /&gt;
&lt;br /&gt;
== CLOBs ==&lt;br /&gt;
Postgres doesn't have decent CLOB support. However, with the lztext extension coming with Postgres 7.0, there is no need for CLOBs in the ACS/pg. We'll be able to do everything using varchars. For now, we're using only varchar(4000).&lt;br /&gt;
&lt;br /&gt;
== BLOBs ==&lt;br /&gt;
Binary large object support in Postgres is very poor and unsuitable for use in a 24/7 environment, because you can't dump them with pg_dump. Backing up a database that makes use of Postgres large objects requires one to knock down the RDBMS and dump the files in the database directory.&lt;br /&gt;
&lt;br /&gt;
Don Baccus put together a hack that extends AOLserver's postgres driver with BLOB-like support, by uuencoding/decoding binary files before stuffing them into or extracting them from the database. The resulting objects can be consistently dumped by &amp;quot;pg_dump&amp;quot; while the RDBMS is up and running. There is no need to interrupt service while making your backup.&lt;br /&gt;
&lt;br /&gt;
To get around the one-block limit on the size of a tuple imposed by Postgres, the driver segments the encoded data into 8K chunks.&lt;br /&gt;
&lt;br /&gt;
Postgres large objects are scheduled for a major overhaul in summer 2000. Because of this, only the BLOB functionality used by the ACS was implemented.&lt;br /&gt;
&lt;br /&gt;
To use the BLOB driver extension, you must first create a column of type &amp;quot;integer&amp;quot; with the name &amp;quot;lob&amp;quot; in the table that will store the BLOB, and a trigger on it that calls &amp;quot;on_lob_ref&amp;quot;. You must use the name &amp;quot;lob&amp;quot;. Here's an example:&lt;br /&gt;
&lt;br /&gt;
 create table my_table (&lt;br /&gt;
     my_key                     integer primary key,&lt;br /&gt;
         lob                            integer references lobs,&lt;br /&gt;
     my_other_data      some_type -- etc&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
create trigger my_table_lob_trig before insert or delete or update&lt;br /&gt;
on my_table for each row execute procedure on_lob_ref();&lt;br /&gt;
&lt;br /&gt;
To put a binary file into &amp;quot;my_table&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select empty_lob()&amp;quot;]&lt;br /&gt;
 &lt;br /&gt;
 ns_db dml $db &amp;quot;begin&amp;quot;&lt;br /&gt;
 ns_db dml $db &amp;quot;update my_table set lob = $lob where my_key = $my_key&amp;quot;&lt;br /&gt;
 ns_pg blob_dml_file $db $lob $tmp_filename&lt;br /&gt;
 ns_db dml $db &amp;quot;end&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note that the call to ns_pg to stuff the file into the database MUST be wrapped in a transaction, even if you're not updating any other tables at the same time. The driver will return an error if you don't.&lt;br /&gt;
&lt;br /&gt;
To return a large object stored in &amp;quot;my_table&amp;quot; to the user:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select lob from my_table&lt;br /&gt;
                                      where my_key = $my_key&amp;quot;]&lt;br /&gt;
 ns_pg blob_write $db $lob&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to wrap the call to blob_write in a transaction, as the database isn't being modified.&lt;br /&gt;
&lt;br /&gt;
The large objects are automatically deleted when no longer used. To replace the large object stored in an existing record, just allocate a new one by calling &amp;quot;empty_lob()&amp;quot; and assign the returned key to the &amp;quot;lob&amp;quot; column in your table.&lt;br /&gt;
&lt;br /&gt;
= External Tools =&lt;br /&gt;
A couple of extension tools are available for Oracle migration.&lt;br /&gt;
&lt;br /&gt;
; [http://www.easyfrom.net/ ESF Database Migration Toolkit]&lt;br /&gt;
: A toolkit migrates Oracle databae to PostgreSQL in wizard. It connects to Oracle and PostgreSQL database directly, and migrate its table structure, data, indexes, primary keys, foreign keys, comments and so on.&lt;br /&gt;
; [http://orafce.projects.postgresql.org/ orafce]&lt;br /&gt;
: The goal of the project is to implement some functions from Oracle database. Some date functions (next_day, last_day, trunc, round, ...), string functions and some modules (DBMS_ALERT, DBMS_OUTPUT, UTL_FILE, DBMS_PIPE, ...) are implemented now. Functionality was verified on Oracle 10g and module is useful for production work.&lt;br /&gt;
; [http://pgfoundry.org/projects/ora2pg ora2pg]&lt;br /&gt;
: Ora2Pg is a Perl module to export an Oracle database schema to a PostgreSQL compatible schema. It connects your Oracle database, extracts its structure, and generates an SQL script that you can load into your PostgreSQL database.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion</id>
		<title>Oracle to Postgres Conversion</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion"/>
				<updated>2012-06-21T19:35:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Connect By */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This page was originally carried on the [http://openacs.org/ OpenACS] Website, but seems to have been lost over the ages and so is now reproduced here.&lt;br /&gt;
by James Shannon, Ben Adida, and Don Baccus&lt;br /&gt;
&lt;br /&gt;
= What you should know before you begin =&lt;br /&gt;
&lt;br /&gt;
You should know SQL relatively well. Knowing the details of Oracle SQL and Postgres SQL are obviously tremendous advantages, but the hints in this document should quickly bring you up to speed on what the differences are.&lt;br /&gt;
&lt;br /&gt;
If you're porting Oracle SQL to Postgres SQL for the&lt;br /&gt;
[http://acspg.benadida.com/ ACS/pg], you should also be quite familiar with AOLserver Tcl, especially the AOLserver database APIs.&lt;br /&gt;
&lt;br /&gt;
In this document, we're talking about:&lt;br /&gt;
&lt;br /&gt;
* Oracle 8 and 8i&lt;br /&gt;
* Postgres 7.0, and sometimes this also works for Postgres 6.5.3 &lt;br /&gt;
&lt;br /&gt;
= Grammar Differences =&lt;br /&gt;
&lt;br /&gt;
There are a handful of grammar differences in Postgres for functionality that is actually the same. ACS/pg attempts to perform these changes automatically, leaving only the major functionality differences to be ported by hand. This is done by db_sql_prep which performs a number of regular expression substitutions on a piece of SQL.&lt;br /&gt;
&lt;br /&gt;
[[Category:Oracle]]&lt;br /&gt;
&lt;br /&gt;
== Sysdate ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the keyword sysdate to denote the current date and time. Postgres uses 'now'::datetime, which ACS/pg has conveniently wrapped in a function named sysdate().&lt;br /&gt;
&lt;br /&gt;
ACS/pg also includes a Tcl procedure named db_sysdate which should be used every time the sysdate term appears. Thus:&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select sysdate from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
should become&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select [db_sysdate] from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== The Dual Table ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the &amp;quot;fake&amp;quot; dual table for many selects. This table was created in postgres as a view to ease porting problems. This allows code to remain somewhat compatible with Oracle SQL without annoying the Postgres parser.&lt;br /&gt;
&lt;br /&gt;
== Sequences ==&lt;br /&gt;
&lt;br /&gt;
Oracle's sequence grammar is sequence_name.nextval.&lt;br /&gt;
&lt;br /&gt;
Postgres's sequence grammar is nextval('sequence_name').&lt;br /&gt;
&lt;br /&gt;
In Tcl, getting the next sequence value can be abstracted by calling [db_sequence_nextval $db sequence_name]. In case you need to include a sequence's value in a more complex SQL statement, you can use [db_sequence_nextval_sql sequence_name] which will return the appropriate grammar.&lt;br /&gt;
&lt;br /&gt;
== Decode ==&lt;br /&gt;
&lt;br /&gt;
Oracle's handy decode function works as follows:&lt;br /&gt;
&lt;br /&gt;
 decode(expr, search, expr[, search, expr...] [, default])&lt;br /&gt;
&lt;br /&gt;
To evaluate this expression, Oracle compares expr to each search value one by&lt;br /&gt;
one. If expr is equal to a search, Oracle returns the corresponding result. If&lt;br /&gt;
no match is found, Oracle returns default, or, if default is omitted, returns&lt;br /&gt;
null.&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have the same construct. It can be replicated with:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN expr THEN expr [...] ELSE expr END&lt;br /&gt;
&lt;br /&gt;
which returns the expression corresponding to the first true predicate. For example:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN c1 = 1 THEN 'match' ELSE 'no match' END&lt;br /&gt;
&lt;br /&gt;
== NVL ==&lt;br /&gt;
&lt;br /&gt;
Oracle has another handy function: NVL. NVL returns its first argument if it is not null, otherwise it returns its second argument.&lt;br /&gt;
&lt;br /&gt;
 start_date := NVL(hire_date, SYSDATE);&lt;br /&gt;
&lt;br /&gt;
The above statement will return SYSDATE if hire_date is null. Postgres has a function that performs the same thing in a more generalized way: coalesce(expr1, expr2, expr3,....) returns the first non-null expression that is passed to it.&lt;br /&gt;
&lt;br /&gt;
== Subquery in FROM  ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL requires a sub-SELECT surrounded by parentheses, and an alias '''must''' be provided for it. The alias is not mandatory for Oracle. &lt;br /&gt;
&lt;br /&gt;
a query for Oracle:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a)&lt;br /&gt;
in PostgreSQL will look like:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a) as foo&lt;br /&gt;
&lt;br /&gt;
= Functional Differences =&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have all the functionality of Oracle. ACS/pg is forced to deal with these limitations with specific work-arounds. Almost everything can be done under Postgres, but some features are awaiting new versions of the open-source database.&lt;br /&gt;
&lt;br /&gt;
== Outer Joins ==&lt;br /&gt;
&lt;br /&gt;
Outer Joins in Oracle work as follows:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id(+)&lt;br /&gt;
&lt;br /&gt;
where the (+) indicates that, if there is no row in table b that matches the correct item_id, the match should still happen, with an empty row from table b. In this case, for example, for all rows in table a where there is no matching row in b, a row will still be returned where a.field1 is correct, but b.field2 is null.&lt;br /&gt;
&lt;br /&gt;
In Postgresql:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a&lt;br /&gt;
 left outer join b&lt;br /&gt;
 on a.item_id = b.item_id;&lt;br /&gt;
&lt;br /&gt;
In certain other cases where only aggregate values are pulled out of the outer-joined table, it's possible to not use a join at all. If the original query is:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, sum(b.field2)&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id (+)&lt;br /&gt;
 group by a.field1&lt;br /&gt;
&lt;br /&gt;
then the Postgres query can look like:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b_sum_field2_by_item_id(a.item_id)&lt;br /&gt;
 from a&lt;br /&gt;
&lt;br /&gt;
where you've defined the function:&lt;br /&gt;
&lt;br /&gt;
 create function b_sum_field2_by_item_id(integer)&lt;br /&gt;
 returns integer&lt;br /&gt;
 as '&lt;br /&gt;
 DECLARE&lt;br /&gt;
      v_item_id alias for $1;&lt;br /&gt;
 BEGIN&lt;br /&gt;
      return sum(field2) from b where item_id= v_item_id;&lt;br /&gt;
 END;&lt;br /&gt;
 ' language 'plpgsql';&lt;br /&gt;
&lt;br /&gt;
== CONNECT BY ==&lt;br /&gt;
Postgres doesn't have connect by statements. It does, however, have WITH RECURSIVE.  As WITH RECURSIVE is Turing-complete, it is simple to translate CONNECT BY statements into WITH RECURSIVE ones.&lt;br /&gt;
&lt;br /&gt;
== CLOBs ==&lt;br /&gt;
Postgres doesn't have decent CLOB support. However, with the lztext extension coming with Postgres 7.0, there is no need for CLOBs in the ACS/pg. We'll be able to do everything using varchars. For now, we're using only varchar(4000).&lt;br /&gt;
&lt;br /&gt;
== BLOBs ==&lt;br /&gt;
Binary large object support in Postgres is very poor and unsuitable for use in a 24/7 environment, because you can't dump them with pg_dump. Backing up a database that makes use of Postgres large objects requires one to knock down the RDBMS and dump the files in the database directory.&lt;br /&gt;
&lt;br /&gt;
Don Baccus put together a hack that extends AOLserver's postgres driver with BLOB-like support, by uuencoding/decoding binary files before stuffing them into or extracting them from the database. The resulting objects can be consistently dumped by &amp;quot;pg_dump&amp;quot; while the RDBMS is up and running. There is no need to interrupt service while making your backup.&lt;br /&gt;
&lt;br /&gt;
To get around the one-block limit on the size of a tuple imposed by Postgres, the driver segments the encoded data into 8K chunks.&lt;br /&gt;
&lt;br /&gt;
Postgres large objects are scheduled for a major overhaul in summer 2000. Because of this, only the BLOB functionality used by the ACS was implemented.&lt;br /&gt;
&lt;br /&gt;
To use the BLOB driver extension, you must first create a column of type &amp;quot;integer&amp;quot; with the name &amp;quot;lob&amp;quot; in the table that will store the BLOB, and a trigger on it that calls &amp;quot;on_lob_ref&amp;quot;. You must use the name &amp;quot;lob&amp;quot;. Here's an example:&lt;br /&gt;
&lt;br /&gt;
 create table my_table (&lt;br /&gt;
     my_key                     integer primary key,&lt;br /&gt;
         lob                            integer references lobs,&lt;br /&gt;
     my_other_data      some_type -- etc&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
create trigger my_table_lob_trig before insert or delete or update&lt;br /&gt;
on my_table for each row execute procedure on_lob_ref();&lt;br /&gt;
&lt;br /&gt;
To put a binary file into &amp;quot;my_table&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select empty_lob()&amp;quot;]&lt;br /&gt;
 &lt;br /&gt;
 ns_db dml $db &amp;quot;begin&amp;quot;&lt;br /&gt;
 ns_db dml $db &amp;quot;update my_table set lob = $lob where my_key = $my_key&amp;quot;&lt;br /&gt;
 ns_pg blob_dml_file $db $lob $tmp_filename&lt;br /&gt;
 ns_db dml $db &amp;quot;end&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note that the call to ns_pg to stuff the file into the database MUST be wrapped in a transaction, even if you're not updating any other tables at the same time. The driver will return an error if you don't.&lt;br /&gt;
&lt;br /&gt;
To return a large object stored in &amp;quot;my_table&amp;quot; to the user:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select lob from my_table&lt;br /&gt;
                                      where my_key = $my_key&amp;quot;]&lt;br /&gt;
 ns_pg blob_write $db $lob&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to wrap the call to blob_write in a transaction, as the database isn't being modified.&lt;br /&gt;
&lt;br /&gt;
The large objects are automatically deleted when no longer used. To replace the large object stored in an existing record, just allocate a new one by calling &amp;quot;empty_lob()&amp;quot; and assign the returned key to the &amp;quot;lob&amp;quot; column in your table.&lt;br /&gt;
&lt;br /&gt;
= External Tools =&lt;br /&gt;
A couple of extension tools are available for Oracle migration.&lt;br /&gt;
&lt;br /&gt;
; [http://www.easyfrom.net/ ESF Database Migration Toolkit]&lt;br /&gt;
: A toolkit migrates Oracle databae to PostgreSQL in wizard. It connects to Oracle and PostgreSQL database directly, and migrate its table structure, data, indexes, primary keys, foreign keys, comments and so on.&lt;br /&gt;
; [http://orafce.projects.postgresql.org/ orafce]&lt;br /&gt;
: The goal of the project is to implement some functions from Oracle database. Some date functions (next_day, last_day, trunc, round, ...), string functions and some modules (DBMS_ALERT, DBMS_OUTPUT, UTL_FILE, DBMS_PIPE, ...) are implemented now. Functionality was verified on Oracle 10g and module is useful for production work.&lt;br /&gt;
; [http://pgfoundry.org/projects/ora2pg ora2pg]&lt;br /&gt;
: Ora2Pg is a Perl module to export an Oracle database schema to a PostgreSQL compatible schema. It connects your Oracle database, extracts its structure, and generates an SQL script that you can load into your PostgreSQL database.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion</id>
		<title>Oracle to Postgres Conversion</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion"/>
				<updated>2012-06-21T19:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Connect By */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This page was originally carried on the [http://openacs.org/ OpenACS] Website, but seems to have been lost over the ages and so is now reproduced here.&lt;br /&gt;
by James Shannon, Ben Adida, and Don Baccus&lt;br /&gt;
&lt;br /&gt;
= What you should know before you begin =&lt;br /&gt;
&lt;br /&gt;
You should know SQL relatively well. Knowing the details of Oracle SQL and Postgres SQL are obviously tremendous advantages, but the hints in this document should quickly bring you up to speed on what the differences are.&lt;br /&gt;
&lt;br /&gt;
If you're porting Oracle SQL to Postgres SQL for the&lt;br /&gt;
[http://acspg.benadida.com/ ACS/pg], you should also be quite familiar with AOLserver Tcl, especially the AOLserver database APIs.&lt;br /&gt;
&lt;br /&gt;
In this document, we're talking about:&lt;br /&gt;
&lt;br /&gt;
* Oracle 8 and 8i&lt;br /&gt;
* Postgres 7.0, and sometimes this also works for Postgres 6.5.3 &lt;br /&gt;
&lt;br /&gt;
= Grammar Differences =&lt;br /&gt;
&lt;br /&gt;
There are a handful of grammar differences in Postgres for functionality that is actually the same. ACS/pg attempts to perform these changes automatically, leaving only the major functionality differences to be ported by hand. This is done by db_sql_prep which performs a number of regular expression substitutions on a piece of SQL.&lt;br /&gt;
&lt;br /&gt;
[[Category:Oracle]]&lt;br /&gt;
&lt;br /&gt;
== Sysdate ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the keyword sysdate to denote the current date and time. Postgres uses 'now'::datetime, which ACS/pg has conveniently wrapped in a function named sysdate().&lt;br /&gt;
&lt;br /&gt;
ACS/pg also includes a Tcl procedure named db_sysdate which should be used every time the sysdate term appears. Thus:&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select sysdate from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
should become&lt;br /&gt;
&lt;br /&gt;
 set now [database_to_tcl_string $db &amp;quot;select [db_sysdate] from dual&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== The Dual Table ==&lt;br /&gt;
&lt;br /&gt;
Oracle uses the &amp;quot;fake&amp;quot; dual table for many selects. This table was created in postgres as a view to ease porting problems. This allows code to remain somewhat compatible with Oracle SQL without annoying the Postgres parser.&lt;br /&gt;
&lt;br /&gt;
== Sequences ==&lt;br /&gt;
&lt;br /&gt;
Oracle's sequence grammar is sequence_name.nextval.&lt;br /&gt;
&lt;br /&gt;
Postgres's sequence grammar is nextval('sequence_name').&lt;br /&gt;
&lt;br /&gt;
In Tcl, getting the next sequence value can be abstracted by calling [db_sequence_nextval $db sequence_name]. In case you need to include a sequence's value in a more complex SQL statement, you can use [db_sequence_nextval_sql sequence_name] which will return the appropriate grammar.&lt;br /&gt;
&lt;br /&gt;
== Decode ==&lt;br /&gt;
&lt;br /&gt;
Oracle's handy decode function works as follows:&lt;br /&gt;
&lt;br /&gt;
 decode(expr, search, expr[, search, expr...] [, default])&lt;br /&gt;
&lt;br /&gt;
To evaluate this expression, Oracle compares expr to each search value one by&lt;br /&gt;
one. If expr is equal to a search, Oracle returns the corresponding result. If&lt;br /&gt;
no match is found, Oracle returns default, or, if default is omitted, returns&lt;br /&gt;
null.&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have the same construct. It can be replicated with:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN expr THEN expr [...] ELSE expr END&lt;br /&gt;
&lt;br /&gt;
which returns the expression corresponding to the first true predicate. For example:&lt;br /&gt;
&lt;br /&gt;
 CASE WHEN c1 = 1 THEN 'match' ELSE 'no match' END&lt;br /&gt;
&lt;br /&gt;
== NVL ==&lt;br /&gt;
&lt;br /&gt;
Oracle has another handy function: NVL. NVL returns its first argument if it is not null, otherwise it returns its second argument.&lt;br /&gt;
&lt;br /&gt;
 start_date := NVL(hire_date, SYSDATE);&lt;br /&gt;
&lt;br /&gt;
The above statement will return SYSDATE if hire_date is null. Postgres has a function that performs the same thing in a more generalized way: coalesce(expr1, expr2, expr3,....) returns the first non-null expression that is passed to it.&lt;br /&gt;
&lt;br /&gt;
== Subquery in FROM  ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL requires a sub-SELECT surrounded by parentheses, and an alias '''must''' be provided for it. The alias is not mandatory for Oracle. &lt;br /&gt;
&lt;br /&gt;
a query for Oracle:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a)&lt;br /&gt;
in PostgreSQL will look like:&lt;br /&gt;
  SELECT * FROM (SELECT * FROM table_a) as foo&lt;br /&gt;
&lt;br /&gt;
= Functional Differences =&lt;br /&gt;
&lt;br /&gt;
Postgres doesn't have all the functionality of Oracle. ACS/pg is forced to deal with these limitations with specific work-arounds. Almost everything can be done under Postgres, but some features are awaiting new versions of the open-source database.&lt;br /&gt;
&lt;br /&gt;
== Outer Joins ==&lt;br /&gt;
&lt;br /&gt;
Outer Joins in Oracle work as follows:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id(+)&lt;br /&gt;
&lt;br /&gt;
where the (+) indicates that, if there is no row in table b that matches the correct item_id, the match should still happen, with an empty row from table b. In this case, for example, for all rows in table a where there is no matching row in b, a row will still be returned where a.field1 is correct, but b.field2 is null.&lt;br /&gt;
&lt;br /&gt;
In Postgresql:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b.field2&lt;br /&gt;
 from a&lt;br /&gt;
 left outer join b&lt;br /&gt;
 on a.item_id = b.item_id;&lt;br /&gt;
&lt;br /&gt;
In certain other cases where only aggregate values are pulled out of the outer-joined table, it's possible to not use a join at all. If the original query is:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, sum(b.field2)&lt;br /&gt;
 from a, b&lt;br /&gt;
 where a.item_id = b.item_id (+)&lt;br /&gt;
 group by a.field1&lt;br /&gt;
&lt;br /&gt;
then the Postgres query can look like:&lt;br /&gt;
&lt;br /&gt;
 select a.field1, b_sum_field2_by_item_id(a.item_id)&lt;br /&gt;
 from a&lt;br /&gt;
&lt;br /&gt;
where you've defined the function:&lt;br /&gt;
&lt;br /&gt;
 create function b_sum_field2_by_item_id(integer)&lt;br /&gt;
 returns integer&lt;br /&gt;
 as '&lt;br /&gt;
 DECLARE&lt;br /&gt;
      v_item_id alias for $1;&lt;br /&gt;
 BEGIN&lt;br /&gt;
      return sum(field2) from b where item_id= v_item_id;&lt;br /&gt;
 END;&lt;br /&gt;
 ' language 'plpgsql';&lt;br /&gt;
&lt;br /&gt;
== Connect By ==&lt;br /&gt;
Postgres doesn't have connect by statements. It does, however, have WITH RECURSIVE.  As WITH RECURSIVE is Turing-complete, it is simple to translate CONNECT BY statements into WITH RECURSIVE ones.&lt;br /&gt;
&lt;br /&gt;
== CLOBs ==&lt;br /&gt;
Postgres doesn't have decent CLOB support. However, with the lztext extension coming with Postgres 7.0, there is no need for CLOBs in the ACS/pg. We'll be able to do everything using varchars. For now, we're using only varchar(4000).&lt;br /&gt;
&lt;br /&gt;
== BLOBs ==&lt;br /&gt;
Binary large object support in Postgres is very poor and unsuitable for use in a 24/7 environment, because you can't dump them with pg_dump. Backing up a database that makes use of Postgres large objects requires one to knock down the RDBMS and dump the files in the database directory.&lt;br /&gt;
&lt;br /&gt;
Don Baccus put together a hack that extends AOLserver's postgres driver with BLOB-like support, by uuencoding/decoding binary files before stuffing them into or extracting them from the database. The resulting objects can be consistently dumped by &amp;quot;pg_dump&amp;quot; while the RDBMS is up and running. There is no need to interrupt service while making your backup.&lt;br /&gt;
&lt;br /&gt;
To get around the one-block limit on the size of a tuple imposed by Postgres, the driver segments the encoded data into 8K chunks.&lt;br /&gt;
&lt;br /&gt;
Postgres large objects are scheduled for a major overhaul in summer 2000. Because of this, only the BLOB functionality used by the ACS was implemented.&lt;br /&gt;
&lt;br /&gt;
To use the BLOB driver extension, you must first create a column of type &amp;quot;integer&amp;quot; with the name &amp;quot;lob&amp;quot; in the table that will store the BLOB, and a trigger on it that calls &amp;quot;on_lob_ref&amp;quot;. You must use the name &amp;quot;lob&amp;quot;. Here's an example:&lt;br /&gt;
&lt;br /&gt;
 create table my_table (&lt;br /&gt;
     my_key                     integer primary key,&lt;br /&gt;
         lob                            integer references lobs,&lt;br /&gt;
     my_other_data      some_type -- etc&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
create trigger my_table_lob_trig before insert or delete or update&lt;br /&gt;
on my_table for each row execute procedure on_lob_ref();&lt;br /&gt;
&lt;br /&gt;
To put a binary file into &amp;quot;my_table&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select empty_lob()&amp;quot;]&lt;br /&gt;
 &lt;br /&gt;
 ns_db dml $db &amp;quot;begin&amp;quot;&lt;br /&gt;
 ns_db dml $db &amp;quot;update my_table set lob = $lob where my_key = $my_key&amp;quot;&lt;br /&gt;
 ns_pg blob_dml_file $db $lob $tmp_filename&lt;br /&gt;
 ns_db dml $db &amp;quot;end&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note that the call to ns_pg to stuff the file into the database MUST be wrapped in a transaction, even if you're not updating any other tables at the same time. The driver will return an error if you don't.&lt;br /&gt;
&lt;br /&gt;
To return a large object stored in &amp;quot;my_table&amp;quot; to the user:&lt;br /&gt;
&lt;br /&gt;
 set lob [database_to_tcl_string $db &amp;quot;select lob from my_table&lt;br /&gt;
                                      where my_key = $my_key&amp;quot;]&lt;br /&gt;
 ns_pg blob_write $db $lob&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to wrap the call to blob_write in a transaction, as the database isn't being modified.&lt;br /&gt;
&lt;br /&gt;
The large objects are automatically deleted when no longer used. To replace the large object stored in an existing record, just allocate a new one by calling &amp;quot;empty_lob()&amp;quot; and assign the returned key to the &amp;quot;lob&amp;quot; column in your table.&lt;br /&gt;
&lt;br /&gt;
= External Tools =&lt;br /&gt;
A couple of extension tools are available for Oracle migration.&lt;br /&gt;
&lt;br /&gt;
; [http://www.easyfrom.net/ ESF Database Migration Toolkit]&lt;br /&gt;
: A toolkit migrates Oracle databae to PostgreSQL in wizard. It connects to Oracle and PostgreSQL database directly, and migrate its table structure, data, indexes, primary keys, foreign keys, comments and so on.&lt;br /&gt;
; [http://orafce.projects.postgresql.org/ orafce]&lt;br /&gt;
: The goal of the project is to implement some functions from Oracle database. Some date functions (next_day, last_day, trunc, round, ...), string functions and some modules (DBMS_ALERT, DBMS_OUTPUT, UTL_FILE, DBMS_PIPE, ...) are implemented now. Functionality was verified on Oracle 10g and module is useful for production work.&lt;br /&gt;
; [http://pgfoundry.org/projects/ora2pg ora2pg]&lt;br /&gt;
: Ora2Pg is a Perl module to export an Oracle database schema to a PostgreSQL compatible schema. It connects your Oracle database, extracts its structure, and generates an SQL script that you can load into your PostgreSQL database.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Committers</id>
		<title>Committers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Committers"/>
				<updated>2012-06-08T17:59:33Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the current list of people with access to push to the git repository with their user names.  For technical details on how committing works, see [[Committing with Git]].  Note: This is just a list of people who currently have access to push to git; for information on current and previous contributors, see the [http://www.postgresql.org/community/contributors/ contributor profiles] section of the web site.  Note: The names are listed here in order of first commit, oldest first; this isn't intended to imply anything about depth of contribution.&lt;br /&gt;
&lt;br /&gt;
* Marc G. Fournier (scrappy)&lt;br /&gt;
* Bruce Momjian (momjian)&lt;br /&gt;
* Tom Lane (tgl)&lt;br /&gt;
* Jan Wieck (wieck)&lt;br /&gt;
* Michael Meskes (meskes)&lt;br /&gt;
* Tatsuo Ishii (ishii)&lt;br /&gt;
* Peter Eisentraut (petere)&lt;br /&gt;
* D'Arcy J.M. Cain (darcy)&lt;br /&gt;
* Teodor Sigaev (teodor)&lt;br /&gt;
* Joe Conway (joe)&lt;br /&gt;
* Neil Conway (neilc)&lt;br /&gt;
* Alvaro Herrera (alvherre)&lt;br /&gt;
* Andrew Dunstan (adunstan)&lt;br /&gt;
* Magnus Hagander (mha)&lt;br /&gt;
* Heikki Linnakangas (heikki)&lt;br /&gt;
* Robert Haas (rhaas)&lt;br /&gt;
* Itagaki Takahiro (itagaki)&lt;br /&gt;
* Simon Riggs (sriggs)&lt;br /&gt;
* Greg Stark (stark)&lt;br /&gt;
* Kevin Grittner (kgrittn)&lt;br /&gt;
&lt;br /&gt;
== Notes on the Commit Log ==&lt;br /&gt;
&lt;br /&gt;
Hundreds of developers have successfully contributed work to PostgreSQL over more than 20 years, many acting as individuals, though also many representing academic institutions and both user and vendor companies.  Both the &amp;quot;Author&amp;quot; and &amp;quot;Committer&amp;quot; fields of such patches will reflect the committer. The actual author of a patch, if different, is generally listed in the commit message; reviewers or others who contributed ideas or otherwise helped with the patch may also be listed.  Many patches, in the form in which they are committed, are the work of multiple people: original author or authors, reviewer(s), and/or committer.  As a result, no simple analysis of duration or depth of contribution over time is possible from the commit log. The project operates a system of careful peer review and even committers have their work checked by other committers and the community as a whole. &lt;br /&gt;
&lt;br /&gt;
== New Committers ==&lt;br /&gt;
&lt;br /&gt;
There is no defined process for how new committers are selected.  Typically, candidates will have sent many good patches over a longer period of time.  Then, existing committers or the core team will propose making the person a committer.  The final approval is done by the core team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Committers</id>
		<title>Committers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Committers"/>
				<updated>2012-06-08T17:59:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the current list of people with access to push to the git repository with their user names.  For technical details on how committing works, see [[Committing with Git]].  Note: This is just a list of people who currently have access to push to git; for information on current and previous contributors, see the [http://www.postgresql.org/community/contributors/ contributor profiles] section of the web site.  Note: The names are listed here in order of first commit, oldest first; this isn't intended to imply anything about depth of contribution.&lt;br /&gt;
&lt;br /&gt;
* Marc G. Fournier (scrappy)&lt;br /&gt;
* Bruce Momjian (momjian)&lt;br /&gt;
* Tom Lane (tgl)&lt;br /&gt;
* Jan Wieck (wieck)&lt;br /&gt;
* Michael Meskes (meskes)&lt;br /&gt;
* Tatsuo Ishii (ishii)&lt;br /&gt;
* Peter Eisentraut (petere)&lt;br /&gt;
* D'Arcy J.M. Cain (darcy)&lt;br /&gt;
* Teodor Sigaev (teodor)&lt;br /&gt;
* Joe Conway (joe)&lt;br /&gt;
* Neil Conway (neilc)&lt;br /&gt;
* Alvaro Herrera (alvherre)&lt;br /&gt;
* Andrew Dunstan (adunstan)&lt;br /&gt;
* Magnus Hagander (mha)&lt;br /&gt;
* Heikki Linnakangas (heikki)&lt;br /&gt;
* Robert Haas (rhaas)&lt;br /&gt;
* Itagaki Takahiro (itagaki)&lt;br /&gt;
* Simon Riggs (sriggs)&lt;br /&gt;
* Greg Stark (stark)&lt;br /&gt;
* Kevin Griggner (kgrittn)&lt;br /&gt;
&lt;br /&gt;
== Notes on the Commit Log ==&lt;br /&gt;
&lt;br /&gt;
Hundreds of developers have successfully contributed work to PostgreSQL over more than 20 years, many acting as individuals, though also many representing academic institutions and both user and vendor companies.  Both the &amp;quot;Author&amp;quot; and &amp;quot;Committer&amp;quot; fields of such patches will reflect the committer. The actual author of a patch, if different, is generally listed in the commit message; reviewers or others who contributed ideas or otherwise helped with the patch may also be listed.  Many patches, in the form in which they are committed, are the work of multiple people: original author or authors, reviewer(s), and/or committer.  As a result, no simple analysis of duration or depth of contribution over time is possible from the commit log. The project operates a system of careful peer review and even committers have their work checked by other committers and the community as a whole. &lt;br /&gt;
&lt;br /&gt;
== New Committers ==&lt;br /&gt;
&lt;br /&gt;
There is no defined process for how new committers are selected.  Typically, candidates will have sent many good patches over a longer period of time.  Then, existing committers or the core team will propose making the person a committer.  The final approval is done by the core team.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon2012CanadaClusterSummit</id>
		<title>PgCon2012CanadaClusterSummit</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon2012CanadaClusterSummit"/>
				<updated>2012-05-15T02:41:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Attendees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 3rd Postgres Cluster Hackers Summit, pgCon 2012 =&lt;br /&gt;
&lt;br /&gt;
== Time and Place ==&lt;br /&gt;
&lt;br /&gt;
Tuesday, May 15th, 10am to 5pm&lt;br /&gt;
&lt;br /&gt;
Conference room at the University of Ottawa, room MRT 219&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
Draft agenda follows.  Please let me know of any contributions/changes to the agenda you have:&lt;br /&gt;
&lt;br /&gt;
=== Project Reports: 5 minutes from each project ===&lt;br /&gt;
&lt;br /&gt;
10am to 11am&lt;br /&gt;
&lt;br /&gt;
* Hot Standby/Binary Replication -- Simon&lt;br /&gt;
* pgPoolII -- Tatsuo&lt;br /&gt;
* PostgresXC -- Koichi&lt;br /&gt;
* Slony -- Jan&lt;br /&gt;
* Stado -- Jim&lt;br /&gt;
&lt;br /&gt;
=== Technical Issues of common interest ===&lt;br /&gt;
&lt;br /&gt;
11am to Noon, and 1pm to 5pm&lt;br /&gt;
&lt;br /&gt;
* SSI in cluster/replication - Koichi, Kevin&lt;br /&gt;
* Parser export - Koichi, Tatsuo&lt;br /&gt;
* Managing consistent views of data - Koichi&lt;br /&gt;
* Command Triggers, Common API for logical replication - Dimitri&lt;br /&gt;
* Detecting database change caused by triggers and cascade operations - Tatsuo&lt;br /&gt;
* Fault detection and handling - Koichi&lt;br /&gt;
* Node addition/removal - Koichi&lt;br /&gt;
* Configuration and operation - Koichi&lt;br /&gt;
* Cursor in replication/multi master - Koichi&lt;br /&gt;
* Bi-Directional Replication - Simon&lt;br /&gt;
&lt;br /&gt;
The Cluster Summit will be from 10am to 5pm, with a break for lunch, which will be provided, sponsored by NTT.&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
# Koichi Suzuki, Postgres-XC&lt;br /&gt;
# Álvaro Herrera, Mammoth, Postgres-XC&lt;br /&gt;
# Jim Mlodgenski, Stado&lt;br /&gt;
# Mason Sharp, Stado, Postgres-XC&lt;br /&gt;
# Dimitri Fontaine, Slony, Londiste, Bucardo&lt;br /&gt;
# Christopher Browne, Slony&lt;br /&gt;
# Steve Singer, Slony&lt;br /&gt;
# Kevin Grittner, SSI&lt;br /&gt;
# Simon Riggs, Binary Replication&lt;br /&gt;
# Michael Paquier, Postgres-XC&lt;br /&gt;
# Ashutosh Bapat, Postgres-XC&lt;br /&gt;
# Tatsuo Ishii, pgPool&lt;br /&gt;
# Kaori Inaba, pgPool&lt;br /&gt;
# Daichi Matsusaka, pgPool&lt;br /&gt;
# Guillaume Lelarge, pgPool&lt;br /&gt;
# David Wheeler&lt;br /&gt;
# Josh Berkus, moderator&lt;br /&gt;
# Tetsuo Sakata, Postgres-XC&lt;br /&gt;
# Andres Freund, Bi-Directional Replication&lt;br /&gt;
# Greg Smith, Bi-Directional Replication&lt;br /&gt;
# Jan Wieck, Slony&lt;br /&gt;
# David Fetter&lt;br /&gt;
&lt;br /&gt;
=== Joining the Meeting ===&lt;br /&gt;
&lt;br /&gt;
If you will be able to attend, please email Josh ([mailto:josh@agliodbs.com josh@agliodbs.com]) with the following:&lt;br /&gt;
&lt;br /&gt;
* Your Name&lt;br /&gt;
* Project(s) you work on&lt;br /&gt;
* If you will be giving a Project Report&lt;br /&gt;
* If you have additions to the agenda&lt;br /&gt;
* Special dietary needs for lunch, if any&lt;br /&gt;
* If you need travel assistance&lt;br /&gt;
&lt;br /&gt;
Note that the availability of travel funding is not guaranteed; I can just agree to request it.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Events</id>
		<title>Events</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Events"/>
				<updated>2012-05-07T21:24:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* PostgreSQL Events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Events ==&lt;br /&gt;
&lt;br /&gt;
Most PostgreSQL-specific events are tracked on the [http://www.postgresql.org/about/eventarchive PostgreSQL Events] page.  This is a listing of events at which we expect, or would like to have, a PostgreSQL presence.  Please keep the events in order by starting date and follow the existing examples.  Please also tag the events with the MediaWiki &amp;quot;PostgreSQL Events&amp;quot; category. If you are going to be organizing a PostgreSQL booth, please adhere to [[BoothPolicies]]. PostgreSQL Europe conference coordination [[PGUG EU Conference Coordination|is here]]. Conference for China user group [[Pg_envent_cn| is here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Upcoming PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| PGCon 2012 || [http://www.pgcon.org/2012/ PGCon 2012] || May 15-18, 2012 || Canada || Ottawa, ON || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PG Day France 2012 || [http://www.pgday.fr/ PG Day France 2012] || June 7, 2012 || France || Lyon || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PG Conference China 2012 || [http://wiki.postgresql.org/wiki/Pgconfchina2012 PG Conference China 2012] || June 14-17, 2012 || China || Beijing || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGOpen 2012 || [http://postgresopen.org Postgres Open 2012] || September 16-19, 2012 || USA || Chicago, IL || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PG Conference Europe 2012 || [http://2012.pgconf.eu PostgreSQL Conference 2012] || October 23-26, 2012 ||  Czech Rep. || Prague || Training, Talks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Previous PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| PostgresSQL Conference 2012 Japan || [http://www.postgresql.jp/events/pgcon2012/top PostgreSQL Conference 2012 Japan] || February 24, 2012 || Japan || Tokyo || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGDay Austin 2012 || [http://pgday.austinpug.org PGDay Austin 2012] || March 28, 2012 || USA || Austin, TX || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGDay DC 2012 || [http://pgday.bwpug.org PGDay DC 2012] || March 30, 2012 || USA || Reston, VA || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGDay NYC 2012 || [http://pgday.nycpug.org PGDay NYC 2012] || April 2, 2012 || USA || New York, NY || Talks&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM 2012]] || [http://www.fosdem.org/2012/ FOSDEM '12] || February 04-05, 2012 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| PG Session #3 || [http://www.postgresql-sessions.org/3/ PG Session #3] || February 02 2012 || France || Paris || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Germany 2011 || [http://2011.pgconf.de/ PGConf.DE 2011]|| Nov 11, 2011 || Germany || Oberhausen || [[German-Speaking PostgreSQL Conference 2011|Talks]]&lt;br /&gt;
|-&lt;br /&gt;
| PGBR2011 || [http://pgbr.postgresql.org.br/ PGBR2011] || Nov 3-4, 2011 || Brazil || São Paulo || Tutorials, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Europe 2011 || [http://2011.pgconf.eu/ PGConf.EU 2011] || October 18-21, 2011 || The Netherlands || Amsterdam || Training, [[PostgreSQL Conference Europe Talks 2011|Talks]]&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference West 2011 || [http://www.postgresqlconference.org/ #PgWest 2011] || September 27-30, 2011 || San Jose || California || Training, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| Postgres Open || [http://postgresopen.org/2011/home/ Postgres Open 2011] || Sep 14-16, 2011 || USA || Chicago || [[Postgres Open Talks 2011]]&lt;br /&gt;
|-&lt;br /&gt;
| PGDay Porto Alegre || [http://www.postgresql.org.br/eventos/2011/pgday/rs PGDay Porto Alegre] || August 19, 2011 || Brazil || Porto Alegre || Talks, Booths&lt;br /&gt;
|-&lt;br /&gt;
| FrOSCon || [http://www.froscon.de/ FrOSCon 2011]|| August 20-21, 2011 || Germany || St. Augustin || Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| Pg Conf Colombia || [http://www.pgconf.org Pg Conf Colombia 2011]|| August 4-5, 2011 || Colombia || Bucaramanga ||&lt;br /&gt;
|-&lt;br /&gt;
| PgDay at OSCON 2011 || [http://pugs.postgresql.org/node/1663 PgDay at OSCON 2011] || July 24, 2011 || USA || Portland, OR || Talks, party&lt;br /&gt;
|-&lt;br /&gt;
| 2011 China PostgreSQL User conference ||[http://wiki.postgresql.org/wiki/Pgconchina2011 2011 China PostgreSQL User conference] || July 16-17, 2011 || China || GUANGZHOU ||Talks,Tutorial&lt;br /&gt;
|-&lt;br /&gt;
| PGCon 2011 || [http://www.pgcon.org/2011/ PGCon 2011] || May 17-20, 2011 || Canada || Ottawa || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PGEast 2011 || [https://www.postgresqlconference.org/ PGWest] || March 22-25, 2011 || USA || New York, NY || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PostgresSQL Conference 2011 Japan || || February 25-26, 2011 || Tokyo || Japan ||&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM, Brussels 2011]] || [http://www.fosdem.org/2011/ FOSDEM '11] || February 05-06, 2011 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| [[PGDAY-Latino, La Habana 2011]] || [http://postgresql.uci.cu/news/19 PGDAY-Latino '11] || February 01-05, 2011 || Cuba || La Habana || Talks, Workshop&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2010 | 2010 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2009 | 2009 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2008 | 2008 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2007 | 2007 events]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://conferences.oreillynet.com/ O'Reilly conferences]&lt;br /&gt;
* [http://opencheese.com/2007/10/14/open-source-events-2008/ &amp;quot;Open Source and Linux events in 2008&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
[[Category:Advocacy]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Events</id>
		<title>Events</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Events"/>
				<updated>2012-05-07T21:22:54Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* PostgreSQL Events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Events ==&lt;br /&gt;
&lt;br /&gt;
Most PostgreSQL-specific events are tracked on the [http://www.postgresql.org/about/eventarchive PostgreSQL Events] page.  This is a listing of events at which we expect, or would like to have, a PostgreSQL presence.  Please keep the events in order by starting date and follow the existing examples.  Please also tag the events with the MediaWiki &amp;quot;PostgreSQL Events&amp;quot; category. If you are going to be organizing a PostgreSQL booth, please adhere to [[BoothPolicies]]. PostgreSQL Europe conference coordination [[PGUG EU Conference Coordination|is here]]. Conference for China user group [[Pg_envent_cn| is here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Upcoming PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| PGCon 2012 || [http://www.pgcon.org/2012/ PGCon 2012] || May 15-18, 2012 || Canada || Ottawa, ON || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PG Day France 2012 || [http://www.pgday.fr/ PG Day France 2012] || June 7, 2012 || France || Lyon || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PG Day China 2012 || [http://wiki.postgresql.org/wiki/Pgconfchina2012 PG Day China 2012] || June 14-17, 2012 || China || Beijing || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGOpen 2012 || [http://postgresopen.org Postgres Open 2012] || September 16-19, 2012 || USA || Chicago, IL || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PG Conference Europe 2012 || [http://2012.pgconf.eu PostgreSQL Conference 2012] || October 23-26, 2012 ||  Czech Rep. || Prague || Training, Talks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Previous PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| PostgresSQL Conference 2012 Japan || [http://www.postgresql.jp/events/pgcon2012/top PostgreSQL Conference 2012 Japan] || February 24, 2012 || Japan || Tokyo || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGDay Austin 2012 || [http://pgday.austinpug.org PGDay Austin 2012] || March 28, 2012 || USA || Austin, TX || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGDay DC 2012 || [http://pgday.bwpug.org PGDay DC 2012] || March 30, 2012 || USA || Reston, VA || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGDay NYC 2012 || [http://pgday.nycpug.org PGDay NYC 2012] || April 2, 2012 || USA || New York, NY || Talks&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM 2012]] || [http://www.fosdem.org/2012/ FOSDEM '12] || February 04-05, 2012 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| PG Session #3 || [http://www.postgresql-sessions.org/3/ PG Session #3] || February 02 2012 || France || Paris || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Germany 2011 || [http://2011.pgconf.de/ PGConf.DE 2011]|| Nov 11, 2011 || Germany || Oberhausen || [[German-Speaking PostgreSQL Conference 2011|Talks]]&lt;br /&gt;
|-&lt;br /&gt;
| PGBR2011 || [http://pgbr.postgresql.org.br/ PGBR2011] || Nov 3-4, 2011 || Brazil || São Paulo || Tutorials, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Europe 2011 || [http://2011.pgconf.eu/ PGConf.EU 2011] || October 18-21, 2011 || The Netherlands || Amsterdam || Training, [[PostgreSQL Conference Europe Talks 2011|Talks]]&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference West 2011 || [http://www.postgresqlconference.org/ #PgWest 2011] || September 27-30, 2011 || San Jose || California || Training, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| Postgres Open || [http://postgresopen.org/2011/home/ Postgres Open 2011] || Sep 14-16, 2011 || USA || Chicago || [[Postgres Open Talks 2011]]&lt;br /&gt;
|-&lt;br /&gt;
| PGDay Porto Alegre || [http://www.postgresql.org.br/eventos/2011/pgday/rs PGDay Porto Alegre] || August 19, 2011 || Brazil || Porto Alegre || Talks, Booths&lt;br /&gt;
|-&lt;br /&gt;
| FrOSCon || [http://www.froscon.de/ FrOSCon 2011]|| August 20-21, 2011 || Germany || St. Augustin || Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| Pg Conf Colombia || [http://www.pgconf.org Pg Conf Colombia 2011]|| August 4-5, 2011 || Colombia || Bucaramanga ||&lt;br /&gt;
|-&lt;br /&gt;
| PgDay at OSCON 2011 || [http://pugs.postgresql.org/node/1663 PgDay at OSCON 2011] || July 24, 2011 || USA || Portland, OR || Talks, party&lt;br /&gt;
|-&lt;br /&gt;
| 2011 China PostgreSQL User conference ||[http://wiki.postgresql.org/wiki/Pgconchina2011 2011 China PostgreSQL User conference] || July 16-17, 2011 || China || GUANGZHOU ||Talks,Tutorial&lt;br /&gt;
|-&lt;br /&gt;
| PGCon 2011 || [http://www.pgcon.org/2011/ PGCon 2011] || May 17-20, 2011 || Canada || Ottawa || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PGEast 2011 || [https://www.postgresqlconference.org/ PGWest] || March 22-25, 2011 || USA || New York, NY || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PostgresSQL Conference 2011 Japan || || February 25-26, 2011 || Tokyo || Japan ||&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM, Brussels 2011]] || [http://www.fosdem.org/2011/ FOSDEM '11] || February 05-06, 2011 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| [[PGDAY-Latino, La Habana 2011]] || [http://postgresql.uci.cu/news/19 PGDAY-Latino '11] || February 01-05, 2011 || Cuba || La Habana || Talks, Workshop&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2010 | 2010 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2009 | 2009 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2008 | 2008 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2007 | 2007 events]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://conferences.oreillynet.com/ O'Reilly conferences]&lt;br /&gt;
* [http://opencheese.com/2007/10/14/open-source-events-2008/ &amp;quot;Open Source and Linux events in 2008&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
[[Category:Advocacy]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgconfchina2012</id>
		<title>Pgconfchina2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgconfchina2012"/>
				<updated>2012-05-07T21:20:33Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;s/Rigg/Riggs/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Conference China 2012 ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL中国用户会全国大会是由PostgreSQL中国用户会(CPUG)主办的旨在促进PostgreSQL在中国发展的非营利性的会议年度大会，大会是分享PostgreSQL的最佳使用实践、学习最新的功能特性、结交本领域的朋友的最佳场所。&lt;br /&gt;
&lt;br /&gt;
2012年度大会将于2012年6月14日-17日在北京举行，中国人民大学信息学院承办。其中6月14日-15日是面向初级人员的入门培训，6月16(周六),17(周日)日是正式大会。本次大会将邀请到社区的核心组员Magnus Hagander,主要开发人员Simon Riggs、PG-XC的首席架构师铃木幸一(Suzuki Koichi)及其他海外专家为本次大会分享最前沿的PostgreSQL方面的信息，同时还有业界的资深人员作相关演讲。&lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China which organized by CPUG(China Postgres User Group) is an annual conference for PostgreSQL users in China, the conference is a hub for learning new features, sharing the know-how, and making friends about PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China 2012 will be on 14-17 June 2012 at Renmin University of China in Beijing with two days of Tutorials on 14-15 June 2012. Magnus Hagander,Simon Riggs and Suzuki Koichi from community will also join this conference to give keynote speachs.&lt;br /&gt;
&lt;br /&gt;
== 信息 Information ==&lt;br /&gt;
&lt;br /&gt;
'''日期 DATE''': June 14-17, 2012&lt;br /&gt;
&lt;br /&gt;
'''地点 LOCATION''': 中国人民大学 Remin University of China, Beijing，China&lt;br /&gt;
&lt;br /&gt;
'''地址 ADDRESS''':  &lt;br /&gt;
&lt;br /&gt;
'''主办 Endorsed by''': CPUG(China PostgreSQL User Group) 中国PostgreSQL用户会&lt;br /&gt;
&lt;br /&gt;
'''承办 Organizer''': 中国人民大学信息学院 &lt;br /&gt;
&lt;br /&gt;
'''协办''': IT168盛拓传媒&lt;br /&gt;
&lt;br /&gt;
'''赞助支持伙伴 SPONSORS''': &lt;br /&gt;
&lt;br /&gt;
'''内容 TOPIC''': PostgreSQL的企业应用、架构设计、运维管理、应用开发&lt;br /&gt;
&lt;br /&gt;
'''费用 FEE''': 公司名义：300RMB(由于大会目前缺乏赞助商，所以需要门票收费，解决资金不足问题, 具体预算见下面),个人名义：200RMB(不提供发票), 学生100RMB(需提供学生证,不提供发票)。 &lt;br /&gt;
&lt;br /&gt;
'''缴费方法 ''':&lt;br /&gt;
   银行 &lt;br /&gt;
   开户人&lt;br /&gt;
   账号：&lt;br /&gt;
   &lt;br /&gt;
    注1： 如需开发票，请发邮件联系 galylee at gmail.com&lt;br /&gt;
   注2： 本次缴费由PG中国用户会负责，与IT168无任何关系，如产生任何纠纷由PG中国用户会负责，有问题请直接联系 李元佳 Galylee at gmail.com 13710389225。&lt;br /&gt;
&lt;br /&gt;
'''餐费 Lunch FEE''' 自助餐 120元/人(两天) 如需预定请注明&lt;br /&gt;
&lt;br /&gt;
'''其他赞助商'''&lt;br /&gt;
&lt;br /&gt;
'''参加方法 REGISTRATION''': &lt;br /&gt;
：本届大会将由IT168负责本次大会的报名活动，届时请参考相关主页。   &lt;br /&gt;
&lt;br /&gt;
'''联系方式 CONTACT''': &lt;br /&gt;
&lt;br /&gt;
   如有任何疑问欢迎联系。&lt;br /&gt;
   Please contact if you have any questions.&lt;br /&gt;
   大会会务负责人 Conference Orginizer：李元佳 Galy Lee&lt;br /&gt;
   手机 Mobile：+86-13710389225&lt;br /&gt;
   邮件 Email：galylee at gmail.com&lt;br /&gt;
&lt;br /&gt;
'''重要日期 IMPORTANT DATES'''&lt;br /&gt;
&lt;br /&gt;
  4月月1日 报名开始 &lt;br /&gt;
  6月1日   报名截至&lt;br /&gt;
&lt;br /&gt;
==大会主题Topics==&lt;br /&gt;
&lt;br /&gt;
6月14日-15日将是面向DBA入门培训的课程。 6月16日-17日是大会的演讲，大会安排在三个分会场举行，来自国内外的专家将会就PostgreSQL的话题进行演讲，演讲的主要主题如下：&lt;br /&gt;
*系统使用PostgreSQL的架构(包括HA，集群，灾备等)&lt;br /&gt;
*PostgreSQL的监控、配置、各种辅助工具&lt;br /&gt;
*各种数据库向PostgreSQL的迁移&lt;br /&gt;
*使用PostgreSQL的数据分析、数据仓库仓库&lt;br /&gt;
*性能调优、性能基线测试&lt;br /&gt;
*PostgreSQL的分区&lt;br /&gt;
*集群，复制&lt;br /&gt;
*实际的应用案例&lt;br /&gt;
*使用PostgreSQL的地理信息系统&lt;br /&gt;
*利用SSD等新技术提高PostgreSQL的性能&lt;br /&gt;
*PostgreSQL 9.2的新功能&lt;br /&gt;
*PostgreSQL的新特性的开发、中文相关的全文检索等&lt;br /&gt;
*PostgreSQL的内核分析，研究，以及教学上的应用&lt;br /&gt;
&lt;br /&gt;
A Two-day free Postgres DBA training will be given for people who want to learn PostgreSQL administration in the first two days. In 16-17 June, and the conference will be organized in three tracks, PostgreSQL experts from local and community will give talks about:&lt;br /&gt;
*System architecture for using PostgreSQL&lt;br /&gt;
*Migration of production systems from another database&lt;br /&gt;
*Data warehousing&lt;br /&gt;
*Tuning PostgreSQL for different work loads&lt;br /&gt;
*Replication and clustering&lt;br /&gt;
*Benchmarking and performance engineering&lt;br /&gt;
*Case studies&lt;br /&gt;
*Location-aware and mapping software with PostGIS&lt;br /&gt;
*PostgreSQL 9.2 features &lt;br /&gt;
*Research and teaching with PostgreSQL&lt;br /&gt;
Community major developers: Simmon Riggs, Suzuki Koichi will give talks about 9.2 features, PG-XC and clustering solutions.&lt;br /&gt;
&lt;br /&gt;
==Postgres集群研讨会 Postgres Clustering Summit ==&lt;br /&gt;
&lt;br /&gt;
*PG-XC专题会议 6.14日下午(仅限于相关公司或者个人)，讨论如何参与到PG-XC的开发等议题。&lt;br /&gt;
&lt;br /&gt;
== 大会议程 Schedule (subject to change) ==&lt;br /&gt;
===基础培训专场 Basic Training===&lt;br /&gt;
&lt;br /&gt;
*6月14日(周四) 9:00-17:00&lt;br /&gt;
**PostgresQL 核心架构基础(Process/Storage/Momery等) &lt;br /&gt;
**PostgresQL 安装及文件结构 &lt;br /&gt;
**PostgresQL 配置基础 &lt;br /&gt;
**PostgresQL 数据库逻辑结构(Database/Schema/Tablespace等) &lt;br /&gt;
**PostgresQL 数据备份及恢复 &lt;br /&gt;
**PostgresQL 数据库权限及安全管理 &lt;br /&gt;
*6月15日(周五) 9:00 – 17:00&lt;br /&gt;
**PostgresQL 基于时间点的数据恢复(Point-in Time Recovery) &lt;br /&gt;
**PostgresQL 运行时维护管理(MVCC/Vacuum/Reindex等) &lt;br /&gt;
**PostgresQL 存储过程及调试(pg/plsql，pgAdminIII Debuger)&lt;br /&gt;
**PostgresQL 监控排错基础&lt;br /&gt;
**PostgreSQL优化培训&lt;br /&gt;
&lt;br /&gt;
*以下内容只进行简要概念介绍(Day2)：&lt;br /&gt;
**数据库集群概论&lt;br /&gt;
**PostgresQL Hot-Standby and Stream Replication简介&lt;br /&gt;
**PostgresQL 高可用性集群架构简介&lt;br /&gt;
**PostgresQL PGPool 读写分离架构简介&lt;br /&gt;
**PostgresQL 集中管理及性能优化基础&lt;br /&gt;
&lt;br /&gt;
===大会 Conference===&lt;br /&gt;
&lt;br /&gt;
*第一天： 6月16日(周六)&lt;br /&gt;
&lt;br /&gt;
====主场1 ====&lt;br /&gt;
**会场主持:李元佳&lt;br /&gt;
**9:00-9：05大会介绍  &lt;br /&gt;
**9:05-9:15大会致辞&lt;br /&gt;
**9:15-10:00  主题演讲1   Magnus Hagander，PostgreSQL 9.2 features and Roadmap&lt;br /&gt;
**10:00-10:45 主题演讲1-1 Suzuki Koichi, Postgres-XC, Read/Write scalable PostgreSQL cluster&lt;br /&gt;
**10:45-11:00 主题演讲1-2 Suzuki Koichi, PostgreSQL usage in NTT &lt;br /&gt;
**11:00-11:45 主题演讲2   Simon  Riggs,&lt;br /&gt;
**12:00-12:15 集体照相&lt;br /&gt;
&lt;br /&gt;
==== 分场1 DBA专场 ====&lt;br /&gt;
==== 分场2 PG内核开发专场 ====&lt;br /&gt;
==== 分场3 应用开发专场   ====&lt;br /&gt;
&lt;br /&gt;
晚餐：18：00 &lt;br /&gt;
&lt;br /&gt;
*第二天6月17日(周日)&lt;br /&gt;
   上午&lt;br /&gt;
     会场1：&lt;br /&gt;
     会场2：&lt;br /&gt;
     会场3：&lt;br /&gt;
   下午：&lt;br /&gt;
     讨论、提问&lt;br /&gt;
&lt;br /&gt;
===PG-XC专场 PG XC Summit ===&lt;br /&gt;
*时间：6.14日 14:00 - 17:00&lt;br /&gt;
*地点：人民大学&lt;br /&gt;
*议题：&lt;br /&gt;
**PG-XC培训 14:00 - 16:00&lt;br /&gt;
**PG-XC讨论 16:00 - 17:00&lt;br /&gt;
*参与嘉宾：PG-XC首席架构师 铃木幸一 Suzuki Koichi&lt;br /&gt;
&lt;br /&gt;
== 大会演讲 TOPICS ==&lt;br /&gt;
*'''主题演讲Keynote: Magnus Hagander，PostgreSQL 9.2的新功能及路线图，PostgreSQL 9.2 features and Roadmap''', 45分钟&lt;br /&gt;
*'''主题演讲Keynote: Koichi Suzuki，Postgres-XC读写可扩展的PostgreSQL集群,Postgres-XC, Read/Write scalable PostgreSQL cluster''', 45分钟&lt;br /&gt;
:Postgres-XC is PostgreSQL-based database cluster based upon shared-nothing configuration.  Postgres-XC (simply XC) provides both read and write scalability.   XC's servers are symmetric so that applications can connect any of the servers.   With more servers, you can get more performance.    No dedicated hardware is required.   You need only a commodity hardware.   Each server provides single global database view.   Complete transaction management features are provided just as single PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
:The talk will cover the motivation, architecture, performance of XC, as well as high-availability features, milestone and how to be a part of XC community.   Architecture will be covered how how to provide full-fledged transaction property and both read/write scalability, as well as distributed query processing.   High-availability feature will cover how to backup each server and components for integration.&lt;br /&gt;
*'''主题演讲Keynote: Simon Riggs，企业级的PostgreSQL及未来的发展方向 Enterprise PostgreSQL &amp;amp; Futures''', 45分钟&lt;br /&gt;
*'''主题演讲Talks: Simon Rigg，PostgreSQL流复制及未来的发展方向 PostgreSQL Replication &amp;amp; Futures''', 45分钟&lt;br /&gt;
&lt;br /&gt;
*'''专家圆桌讨论Panel Discussion:Magnus, Simon, 彭智勇， 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲Talks:何伟平 He Weiping(Laser)， 45小时&lt;br /&gt;
*'''演讲Talks: DBA管理,Koichi Suzuki，PostgreSQL在电信市场的应用, PostgreSQL use in telecommunication market (NTT group)'''，15分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,萧少聪 Scott xiu，PostgreSQL的流复制'''，45分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,唐诚(阿里巴巴) Tang Cheng(Alibaba),greenplum数据库经验谈'''，45分钟&lt;br /&gt;
:1. greenplum的架构简介 2. greenplum 与　hadoop的对比 3. greenplum 的执行计划 4. 日常维护经验谈&lt;br /&gt;
&lt;br /&gt;
*'''演讲: DBA管理,德哥(斯凯网络) Digoal(Skymobi)，PostgreSQL 杂谈'''，45分钟&lt;br /&gt;
*'''演讲: DBA管理,Francs(斯凯网络),Francs(Skymobi)，PostgreSQL vs Oracle'''，45分钟&lt;br /&gt;
*'''DBA 圆桌讨论 Panel Discussion:&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 应用开发,(去哪儿)， '''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,， PostGIS 应用'''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,Gavin Yang(VMWARE)， PostgreSQL的数据分析工具MADlib, In-Database Analytics with MADlib'''，45分钟&lt;br /&gt;
:MADlib is an open-source library on RDBMS for scalable in-database big data analytics. It provides data-parallel implementations of mathematical, statistical and machine learning methods for structured and unstructured data. This talk introduces some of the problems we are tackling in the MADlib initiative and the solutions for them. We will also talk about our recent work in building decision trees and random forests within databases.&lt;br /&gt;
*'''演讲: 应用开发,蔡红雨(高鹏)，'''，45分钟&lt;br /&gt;
*'''应用开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲：内核开发,Magnus Hagander，Involving in PostgreSQL Development'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,彭智勇，PostgreSQL 内核简介'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,张孝(中国人民大学)，《高校数据库教学中PostgreSQL的学习、使用与定制》简介'''，45分钟&lt;br /&gt;
:本报告主要报告在高校的数据库教学中如何利用PostgreSQL这样的开源数据库系统来了帮助学生切实从“白盒”角度感受一个大型数据库管理系统并深化有关数据库相关理论的学习与认知。报告将从入门级入手介绍如何由外及内地学习和了解PostgreSQL的基本特点并进行系统从无到有的建立。进一步来介绍如何使用PostgreSQL来满足教学(比如数据库概论)的一些课程要求以及对某些数据库应用的支持。此外，还会根据教学中一些高级内容(比如针对研究生的《数据库原理与实现》的要求)介绍如何对PostgreSQL进行内核级的改造以提供新的系统特性或功能增强。&lt;br /&gt;
*'''演讲: 内核开发,Cao Yu(EMC),Multi-Instance Aware Query Processing'''，45分钟&lt;br /&gt;
:It is not uncommon for analytical database queries to contain multiple instances of the same (base or derived) relation. Unfortunately, almost all of the conventional relational query processing techniques are oblivious to these instances and instead deal with them as independent relations. As a result, the query evaluation performance would be suboptimal. This talk will describe our research on the problem of optimizing complex queries with multiple relational instances, which surprisingly has never received systematic or specialized public studies in the past. We investigate three fundamental query execution operations, i.e. table scan, table sorting and table join, to exploit the corresponding optimization opportunities when these operations involve multiple instances.&lt;br /&gt;
&lt;br /&gt;
:First, we present a light-weight multi-instance-aware plan evaluation engine that enables multiple instances of a relation to share one physical table scan. Second, we develop a sort-sharing-aware query processing framework to maximize the effects of sharing and collaboration during achieving different sorting requirements for multiple instances. Third, we propose an efficient algorithm for performing self-join operations between two instances and with join predicates involving two distinct instances. In all the above works, we validate our techniques by integrating them into PostgreSQL and testing their effectiveness using TPC benchmarks.&lt;br /&gt;
*'''演讲: 内核开发,孙鹏,'''，45分钟&lt;br /&gt;
*'''内核开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 李元佳,PostgreSQL用户会介绍'''，30分钟&lt;br /&gt;
*'''颁奖礼''' 30分钟&lt;br /&gt;
&lt;br /&gt;
== 大会演讲嘉宾 SPEAKERS ==  &lt;br /&gt;
* '''[http://www.hagander.net/ Magnus Hagander]'''&lt;br /&gt;
:Core Team Member and Major Developer of PostgreSQL Global Development Group&lt;br /&gt;
:Conference organizer at PostgreSQL Conference Europe&lt;br /&gt;
:Principal Database Consultant and Open Source Expert at Redpill Linpro&lt;br /&gt;
:President of the Board at PostgreSQL Europe&lt;br /&gt;
&lt;br /&gt;
*'''[http://www.linkedin.com/profile/view?id=16308658&amp;amp;locale=en_US&amp;amp;trk=tyah Simon Riggs]'''&lt;br /&gt;
&lt;br /&gt;
:Major Developer &amp;amp; Committer at PostgreSQL Global Development Group and CTO and Database Architect at 2ndQuadrant.&lt;br /&gt;
:Professional developer and consultant for PostgreSQL, following on from 20 years of experience with a variety of database technologies. Regular conference speaker.&lt;br /&gt;
:Enterprise-level experience working from within startup businesses product/service companies, including 2 successful IPOs. &lt;br /&gt;
&lt;br /&gt;
*'''[http://www.intellilink.co.jp/plan/corporate/fellow_OSS-DB.html 铃木幸一Suzuki Koichi]'''&lt;br /&gt;
&lt;br /&gt;
:Fellow at NTT DATA Intellilink Corporation&lt;br /&gt;
&lt;br /&gt;
:After joining NTT Laboratory, Koichi Suzuki was involved in the following R&amp;amp;D activities:&lt;br /&gt;
::Extended Unix Code (EUC) development and Unicode standardization,&lt;br /&gt;
::Oracle port to NTT's proprietary Unix workstations,&lt;br /&gt;
::Object-Relation Databae Management System development (UniSQL), and&lt;br /&gt;
::PostgreSQL and Postgres-XC development.&lt;br /&gt;
::From 1991 to 1993, he was a guest researcher in MIT.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://sourceforge.jp/projects/nttdatagroup-oss-square/wiki/koichi_suzuki Official web page](in Japanese)&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://postgres-xc.sourceforge.net/ Postgres-XC]&lt;br /&gt;
&lt;br /&gt;
*'''彭智勇 Peng zhiyong'''&lt;br /&gt;
&lt;br /&gt;
:日本京都大学工学博士，武汉大学计算机学院副院长、教授、博士生导师，中国计算机协会数据库专业委员会委员，国家信息产业部数据库标准工作组成员，武汉市电子政务宽带网络平台软件系统总体设计专家组成员，国内外许多学术会议程序委员会的委员。1985年毕业于武汉大学计算机科学系，获理学学士学位。1988年毕业于国防科技大学计算机系，获工学硕士学位。1995年毕业于日本京都大学信息科学系, 获工学博士学位。1995－1997年在日本京都高度技术研究所工作，研究员。1997－2000年在美国惠普公司的研究所工作，研究员。2001-2002年在武汉大学计算机科学与技术博士后流动站从事博士后研究工作。&lt;br /&gt;
&lt;br /&gt;
*'''张孝 Zhang Xiao'''&lt;br /&gt;
&lt;br /&gt;
:中国人民大学信息学院副教授，中科院计算所博士，中国人民大学硕士及学士，师从中国著名数据库专家王珊教授。&lt;br /&gt;
&lt;br /&gt;
:1997年以访问学者的身份在香港中文大学系统工程与工程管理系从事合作研究与开发。2006年在印第安纳大学DSI&amp;amp;DDE实验室作为访问学者进行e-Science相关的元数据管理和数据出处领域访问研究。&lt;br /&gt;
:主要研究领域包括：并行数据库系统、分布式数据库系统、移动数据库等。尤其擅长大型数据库系统体系的原理分析、设计和实现技术，熟悉开源数据库系统PostgreSQL源代码。近期研究兴趣集中在：数据库体系结构、大规模非结构化与智能视频数据管理、数据库关键词检索等。&lt;br /&gt;
:从1996年以来作为主要技术骨干或核心骨干先后参与多项国家科技攻关项目、国家自然科学基金、北京市重大科技项目及国家863项目。先后获得多项省部级奖励，包括教育部科技进步二等奖1次，北京市科技进步一等奖1次、二等奖2次。独立主持有国家自然科学基金、核高基专项子课题以及国际企业的合作项目等。&lt;br /&gt;
:目前是中国计算机学会高级会员和中国计算机学会虚拟现实与可视化专委会委员、ACM协会会员。先后担任APWEB 2011本地主席、国际研讨会WAIM/USD'2012 和国际研讨会APWeb/WAIM DBIR09程序委员会联合主席以及NDBC 2010 Demo主席等学术兼职。先后在《软件学报》、《计算机学报》、《计算机研究与发展》等期刊杂志以及ICDE等国际会议上单独或联合发表论文20余篇，参与王珊教授主编的3本著作的编写工作。主要担任《数据结构》、《数据库原理与实现》、《PostgreSQL源代码阅读与分析》等课程的教学工作。&lt;br /&gt;
&lt;br /&gt;
*何伟平&lt;br /&gt;
&lt;br /&gt;
*唐诚(阿里巴巴)&lt;br /&gt;
:阿里巴巴公司数据库专家，精通greenplum和PostgreSQL数据库，为公司这一技术领域的带头人。也精通oracle数据库和AIX小型机，精通C/C++编程。&lt;br /&gt;
*德哥(斯凯网络)&lt;br /&gt;
:斯凯网络DBA主管，多年数据库平台工作经验,熟悉Oracle,PostgreSQL,EnterpriseDB,GreenPlum,mongoDB等多种数据库平台,熟悉OS,存储等.负责斯凯网络数据库架构设计,性能调优与维护,存储系统设计与维护,OS维护等工作.&lt;br /&gt;
:Digoal is the cheif DBA in Sky-mobi which runs the largest mobile app market in China, he manages a system consisting of over 300 PostgreSQL nodes, he will share us with his experience in managing PostgreSQL.&lt;br /&gt;
*Francs(斯凯网络)&lt;br /&gt;
*Gavin Yang(VMWARE)&lt;br /&gt;
*Cao Yu(EMC)&lt;br /&gt;
:Yu is currently working at EMC Labs China as a senior research scientist, after receiving his Ph.D. from National University of Singapore. His broad research interest lies in large-scale data management. More specifically, he does system-oriented research on database query processing and optimization, massive data storage and MapReduce-based big data analytics.  He has published papers on top venues like SIGMOD, ICDE, EDBT, VLDB Journal, etc.&lt;br /&gt;
*萧少聪，&lt;br /&gt;
:曾任职于广东省Linux技术服务中心及红帽中国区唯一总代理，担任开源架构讲师及负责Red Hat系统开源产品华南地区技术顾问及架构设计工作。06年通过红帽RHCE认证，并获得红帽RHCI认证讲师资格，09年通过红帽全球最高认证 RHCA，成为国内前20名考取此认证的架构师。2012年成为EnterpriseDB公司在大中华区首位官方认证的 Postgres数据库讲 师，同年协助李元佳等人筹建PostgresQL中国用户组。现任北京神州立诚科技有限公司技术总监，拥有多年开发、网络架构设计及项目管理经 验，专注于开源Linux系统管理及Postgres数据库、优化、集群系统、云-虚拟架构设计领域。 &lt;br /&gt;
&lt;br /&gt;
*''孙鹏''&lt;br /&gt;
:中国科学院计算技术研究所工学博士，美国北德克萨斯大学访问学者，现任中国科学院软件研究所综合信息系统技术国家级重点实验室助理研究员，研究方向为空间数据库和空间数据库挖掘。&lt;br /&gt;
*李元佳,&lt;br /&gt;
&lt;br /&gt;
== 大会预算 Budget== &lt;br /&gt;
&lt;br /&gt;
我们在征集大会的赞助商，请赞助我们的大会，帮助我们大会顺利举行。&lt;br /&gt;
We are recruiting sponsors for the conference to help us hold this conference.&lt;br /&gt;
&lt;br /&gt;
*预算约11万 Spending 110,000 RMB&lt;br /&gt;
**外宾旅费费用6万 Travel funding for foreign speakers 60,000 RMB  （机票加酒店及车辆接送等每人约2万， 3 Guestes, each is about 20,000 ）&lt;br /&gt;
**大会场地 Conference Room 41,920 RMB（两天会议厅，加2天培训及3个分会场教室，另加投影仪等费用）&lt;br /&gt;
**用户礼品 Attendee Gift    6,000 RMB（T恤200件x30)&lt;br /&gt;
**购物袋胸卡 Bag   3,000 RMB  (200本x15元)&lt;br /&gt;
&lt;br /&gt;
*收入约11万 Income 110,000 RMB&lt;br /&gt;
**赞助 Sponsor         50,000RMB&lt;br /&gt;
**门票 Ticket          60,000RMB (300x200元=6万）&lt;br /&gt;
&lt;br /&gt;
== 参与我们 Participate == &lt;br /&gt;
&lt;br /&gt;
''演讲者''&lt;br /&gt;
&lt;br /&gt;
欢迎在PostgreSQL的企业应用、架构设计、运维管理、应用开发等方面有心得的朋友，发表演讲。如果你有需要发表的内容，请联系 galylee@gmail.com&lt;br /&gt;
&lt;br /&gt;
''志愿者''&lt;br /&gt;
&lt;br /&gt;
请帮助我们宣传大会，在你的网站，或者在论坛，或者在其他大会，告诉大家PG全国大会的举行信息。&lt;br /&gt;
&lt;br /&gt;
''赞助''&lt;br /&gt;
&lt;br /&gt;
我们是非盈利的组织，单单凭我们的力量无法承担大会的会场等相关的运营费用，只有相关企业的赞助和参与才有可能有必要的资源在国内培养PostgreSQL社区的形成。更多的赞助，可以让我们能邀请到更重量级的嘉宾为我们演讲，可以让我们有个交流和参与的平台。需要赞助的包括：场地费用及宣传品、邀请国外嘉宾的机票及食宿、嘉宾的演讲资料印刷、各种小礼物、大会首日晚上的酒会等等。。&lt;br /&gt;
&lt;br /&gt;
''捐赠''&lt;br /&gt;
&lt;br /&gt;
我们是旨在推广PG在中国发展的非营利的团体，欢迎企业为PG社区进行捐赠，捐赠的款项将完全用于PG社区的推广，包括官方文档的翻译、社区网站的托管、PG的技术交流会、PG大会的运营等。&lt;br /&gt;
&lt;br /&gt;
[http://wiki.postgresql.org/wiki/Pgconfchina2012-admin 大会组织]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgconfchina2012</id>
		<title>Pgconfchina2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgconfchina2012"/>
				<updated>2012-05-07T21:19:37Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* 主场1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Conference China 2012 ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL中国用户会全国大会是由PostgreSQL中国用户会(CPUG)主办的旨在促进PostgreSQL在中国发展的非营利性的会议年度大会，大会是分享PostgreSQL的最佳使用实践、学习最新的功能特性、结交本领域的朋友的最佳场所。&lt;br /&gt;
&lt;br /&gt;
2012年度大会将于2012年6月14日-17日在北京举行，中国人民大学信息学院承办。其中6月14日-15日是面向初级人员的入门培训，6月16(周六),17(周日)日是正式大会。本次大会将邀请到社区的核心组员Magnus Hagander,主要开发人员Simon Rigg、PG-XC的首席架构师铃木幸一(Suzuki Koichi)及其他海外专家为本次大会分享最前沿的PostgreSQL方面的信息，同时还有业界的资深人员作相关演讲。&lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China which organized by CPUG(China Postgres User Group) is an annual conference for PostgreSQL users in China, the conference is a hub for learning new features, sharing the know-how, and making friends about PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China 2012 will be on 14-17 June 2012 at Renmin University of China in Beijing with two days of Tutorials on 14-15 June 2012. Magnus Hagander,Simon Rigg and Suzuki Koichi from community will also join this conference to give keynote speachs.&lt;br /&gt;
&lt;br /&gt;
== 信息 Information ==&lt;br /&gt;
&lt;br /&gt;
'''日期 DATE''': June 14-17, 2012&lt;br /&gt;
&lt;br /&gt;
'''地点 LOCATION''': 中国人民大学 Remin University of China, Beijing，China&lt;br /&gt;
&lt;br /&gt;
'''地址 ADDRESS''':  &lt;br /&gt;
&lt;br /&gt;
'''主办 Endorsed by''': CPUG(China PostgreSQL User Group) 中国PostgreSQL用户会&lt;br /&gt;
&lt;br /&gt;
'''承办 Organizer''': 中国人民大学信息学院 &lt;br /&gt;
&lt;br /&gt;
'''协办''': IT168盛拓传媒&lt;br /&gt;
&lt;br /&gt;
'''赞助支持伙伴 SPONSORS''': &lt;br /&gt;
&lt;br /&gt;
'''内容 TOPIC''': PostgreSQL的企业应用、架构设计、运维管理、应用开发&lt;br /&gt;
&lt;br /&gt;
'''费用 FEE''': 公司名义：300RMB(由于大会目前缺乏赞助商，所以需要门票收费，解决资金不足问题, 具体预算见下面),个人名义：200RMB(不提供发票), 学生100RMB(需提供学生证,不提供发票)。 &lt;br /&gt;
&lt;br /&gt;
'''缴费方法 ''':&lt;br /&gt;
   银行 &lt;br /&gt;
   开户人&lt;br /&gt;
   账号：&lt;br /&gt;
   &lt;br /&gt;
    注1： 如需开发票，请发邮件联系 galylee at gmail.com&lt;br /&gt;
   注2： 本次缴费由PG中国用户会负责，与IT168无任何关系，如产生任何纠纷由PG中国用户会负责，有问题请直接联系 李元佳 Galylee at gmail.com 13710389225。&lt;br /&gt;
&lt;br /&gt;
'''餐费 Lunch FEE''' 自助餐 120元/人(两天) 如需预定请注明&lt;br /&gt;
&lt;br /&gt;
'''其他赞助商'''&lt;br /&gt;
&lt;br /&gt;
'''参加方法 REGISTRATION''': &lt;br /&gt;
：本届大会将由IT168负责本次大会的报名活动，届时请参考相关主页。   &lt;br /&gt;
&lt;br /&gt;
'''联系方式 CONTACT''': &lt;br /&gt;
&lt;br /&gt;
   如有任何疑问欢迎联系。&lt;br /&gt;
   Please contact if you have any questions.&lt;br /&gt;
   大会会务负责人 Conference Orginizer：李元佳 Galy Lee&lt;br /&gt;
   手机 Mobile：+86-13710389225&lt;br /&gt;
   邮件 Email：galylee at gmail.com&lt;br /&gt;
&lt;br /&gt;
'''重要日期 IMPORTANT DATES'''&lt;br /&gt;
&lt;br /&gt;
  4月月1日 报名开始 &lt;br /&gt;
  6月1日   报名截至&lt;br /&gt;
&lt;br /&gt;
==大会主题Topics==&lt;br /&gt;
&lt;br /&gt;
6月14日-15日将是面向DBA入门培训的课程。 6月16日-17日是大会的演讲，大会安排在三个分会场举行，来自国内外的专家将会就PostgreSQL的话题进行演讲，演讲的主要主题如下：&lt;br /&gt;
*系统使用PostgreSQL的架构(包括HA，集群，灾备等)&lt;br /&gt;
*PostgreSQL的监控、配置、各种辅助工具&lt;br /&gt;
*各种数据库向PostgreSQL的迁移&lt;br /&gt;
*使用PostgreSQL的数据分析、数据仓库仓库&lt;br /&gt;
*性能调优、性能基线测试&lt;br /&gt;
*PostgreSQL的分区&lt;br /&gt;
*集群，复制&lt;br /&gt;
*实际的应用案例&lt;br /&gt;
*使用PostgreSQL的地理信息系统&lt;br /&gt;
*利用SSD等新技术提高PostgreSQL的性能&lt;br /&gt;
*PostgreSQL 9.2的新功能&lt;br /&gt;
*PostgreSQL的新特性的开发、中文相关的全文检索等&lt;br /&gt;
*PostgreSQL的内核分析，研究，以及教学上的应用&lt;br /&gt;
&lt;br /&gt;
A Two-day free Postgres DBA training will be given for people who want to learn PostgreSQL administration in the first two days. In 16-17 June, and the conference will be organized in three tracks, PostgreSQL experts from local and community will give talks about:&lt;br /&gt;
*System architecture for using PostgreSQL&lt;br /&gt;
*Migration of production systems from another database&lt;br /&gt;
*Data warehousing&lt;br /&gt;
*Tuning PostgreSQL for different work loads&lt;br /&gt;
*Replication and clustering&lt;br /&gt;
*Benchmarking and performance engineering&lt;br /&gt;
*Case studies&lt;br /&gt;
*Location-aware and mapping software with PostGIS&lt;br /&gt;
*PostgreSQL 9.2 features &lt;br /&gt;
*Research and teaching with PostgreSQL&lt;br /&gt;
Community major developers: Simmon Rigg, Suzuki Koichi will give talks about 9.2 features, PG-XC and clustering solutions.&lt;br /&gt;
&lt;br /&gt;
==Postgres集群研讨会 Postgres Clustering Summit ==&lt;br /&gt;
&lt;br /&gt;
*PG-XC专题会议 6.14日下午(仅限于相关公司或者个人)，讨论如何参与到PG-XC的开发等议题。&lt;br /&gt;
&lt;br /&gt;
== 大会议程 Schedule (subject to change) ==&lt;br /&gt;
===基础培训专场 Basic Training===&lt;br /&gt;
&lt;br /&gt;
*6月14日(周四) 9:00-17:00&lt;br /&gt;
**PostgresQL 核心架构基础(Process/Storage/Momery等) &lt;br /&gt;
**PostgresQL 安装及文件结构 &lt;br /&gt;
**PostgresQL 配置基础 &lt;br /&gt;
**PostgresQL 数据库逻辑结构(Database/Schema/Tablespace等) &lt;br /&gt;
**PostgresQL 数据备份及恢复 &lt;br /&gt;
**PostgresQL 数据库权限及安全管理 &lt;br /&gt;
*6月15日(周五) 9:00 – 17:00&lt;br /&gt;
**PostgresQL 基于时间点的数据恢复(Point-in Time Recovery) &lt;br /&gt;
**PostgresQL 运行时维护管理(MVCC/Vacuum/Reindex等) &lt;br /&gt;
**PostgresQL 存储过程及调试(pg/plsql，pgAdminIII Debuger)&lt;br /&gt;
**PostgresQL 监控排错基础&lt;br /&gt;
**PostgreSQL优化培训&lt;br /&gt;
&lt;br /&gt;
*以下内容只进行简要概念介绍(Day2)：&lt;br /&gt;
**数据库集群概论&lt;br /&gt;
**PostgresQL Hot-Standby and Stream Replication简介&lt;br /&gt;
**PostgresQL 高可用性集群架构简介&lt;br /&gt;
**PostgresQL PGPool 读写分离架构简介&lt;br /&gt;
**PostgresQL 集中管理及性能优化基础&lt;br /&gt;
&lt;br /&gt;
===大会 Conference===&lt;br /&gt;
&lt;br /&gt;
*第一天： 6月16日(周六)&lt;br /&gt;
&lt;br /&gt;
====主场1 ====&lt;br /&gt;
**会场主持:李元佳&lt;br /&gt;
**9:00-9：05大会介绍  &lt;br /&gt;
**9:05-9:15大会致辞&lt;br /&gt;
**9:15-10:00  主题演讲1   Magnus Hagander，PostgreSQL 9.2 features and Roadmap&lt;br /&gt;
**10:00-10:45 主题演讲1-1 Suzuki Koichi, Postgres-XC, Read/Write scalable PostgreSQL cluster&lt;br /&gt;
**10:45-11:00 主题演讲1-2 Suzuki Koichi, PostgreSQL usage in NTT &lt;br /&gt;
**11:00-11:45 主题演讲2   Simon  Riggs,&lt;br /&gt;
**12:00-12:15 集体照相&lt;br /&gt;
&lt;br /&gt;
==== 分场1 DBA专场 ====&lt;br /&gt;
==== 分场2 PG内核开发专场 ====&lt;br /&gt;
==== 分场3 应用开发专场   ====&lt;br /&gt;
&lt;br /&gt;
晚餐：18：00 &lt;br /&gt;
&lt;br /&gt;
*第二天6月17日(周日)&lt;br /&gt;
   上午&lt;br /&gt;
     会场1：&lt;br /&gt;
     会场2：&lt;br /&gt;
     会场3：&lt;br /&gt;
   下午：&lt;br /&gt;
     讨论、提问&lt;br /&gt;
&lt;br /&gt;
===PG-XC专场 PG XC Summit ===&lt;br /&gt;
*时间：6.14日 14:00 - 17:00&lt;br /&gt;
*地点：人民大学&lt;br /&gt;
*议题：&lt;br /&gt;
**PG-XC培训 14:00 - 16:00&lt;br /&gt;
**PG-XC讨论 16:00 - 17:00&lt;br /&gt;
*参与嘉宾：PG-XC首席架构师 铃木幸一 Suzuki Koichi&lt;br /&gt;
&lt;br /&gt;
== 大会演讲 TOPICS ==&lt;br /&gt;
*'''主题演讲Keynote: Magnus Hagander，PostgreSQL 9.2的新功能及路线图，PostgreSQL 9.2 features and Roadmap''', 45分钟&lt;br /&gt;
*'''主题演讲Keynote: Koichi Suzuki，Postgres-XC读写可扩展的PostgreSQL集群,Postgres-XC, Read/Write scalable PostgreSQL cluster''', 45分钟&lt;br /&gt;
:Postgres-XC is PostgreSQL-based database cluster based upon shared-nothing configuration.  Postgres-XC (simply XC) provides both read and write scalability.   XC's servers are symmetric so that applications can connect any of the servers.   With more servers, you can get more performance.    No dedicated hardware is required.   You need only a commodity hardware.   Each server provides single global database view.   Complete transaction management features are provided just as single PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
:The talk will cover the motivation, architecture, performance of XC, as well as high-availability features, milestone and how to be a part of XC community.   Architecture will be covered how how to provide full-fledged transaction property and both read/write scalability, as well as distributed query processing.   High-availability feature will cover how to backup each server and components for integration.&lt;br /&gt;
*'''主题演讲Keynote: Simon Rigg，企业级的PostgreSQL及未来的发展方向 Enterprise PostgreSQL &amp;amp; Futures''', 45分钟&lt;br /&gt;
*'''主题演讲Talks: Simon Rigg，PostgreSQL流复制及未来的发展方向 PostgreSQL Replication &amp;amp; Futures''', 45分钟&lt;br /&gt;
&lt;br /&gt;
*'''专家圆桌讨论Panel Discussion:Magnus, Simon, 彭智勇， 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲Talks:何伟平 He Weiping(Laser)， 45小时&lt;br /&gt;
*'''演讲Talks: DBA管理,Koichi Suzuki，PostgreSQL在电信市场的应用, PostgreSQL use in telecommunication market (NTT group)'''，15分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,萧少聪 Scott xiu，PostgreSQL的流复制'''，45分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,唐诚(阿里巴巴) Tang Cheng(Alibaba),greenplum数据库经验谈'''，45分钟&lt;br /&gt;
:1. greenplum的架构简介 2. greenplum 与　hadoop的对比 3. greenplum 的执行计划 4. 日常维护经验谈&lt;br /&gt;
&lt;br /&gt;
*'''演讲: DBA管理,德哥(斯凯网络) Digoal(Skymobi)，PostgreSQL 杂谈'''，45分钟&lt;br /&gt;
*'''演讲: DBA管理,Francs(斯凯网络),Francs(Skymobi)，PostgreSQL vs Oracle'''，45分钟&lt;br /&gt;
*'''DBA 圆桌讨论 Panel Discussion:&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 应用开发,(去哪儿)， '''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,， PostGIS 应用'''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,Gavin Yang(VMWARE)， PostgreSQL的数据分析工具MADlib, In-Database Analytics with MADlib'''，45分钟&lt;br /&gt;
:MADlib is an open-source library on RDBMS for scalable in-database big data analytics. It provides data-parallel implementations of mathematical, statistical and machine learning methods for structured and unstructured data. This talk introduces some of the problems we are tackling in the MADlib initiative and the solutions for them. We will also talk about our recent work in building decision trees and random forests within databases.&lt;br /&gt;
*'''演讲: 应用开发,蔡红雨(高鹏)，'''，45分钟&lt;br /&gt;
*'''应用开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲：内核开发,Magnus Hagander，Involving in PostgreSQL Development'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,彭智勇，PostgreSQL 内核简介'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,张孝(中国人民大学)，《高校数据库教学中PostgreSQL的学习、使用与定制》简介'''，45分钟&lt;br /&gt;
:本报告主要报告在高校的数据库教学中如何利用PostgreSQL这样的开源数据库系统来了帮助学生切实从“白盒”角度感受一个大型数据库管理系统并深化有关数据库相关理论的学习与认知。报告将从入门级入手介绍如何由外及内地学习和了解PostgreSQL的基本特点并进行系统从无到有的建立。进一步来介绍如何使用PostgreSQL来满足教学(比如数据库概论)的一些课程要求以及对某些数据库应用的支持。此外，还会根据教学中一些高级内容(比如针对研究生的《数据库原理与实现》的要求)介绍如何对PostgreSQL进行内核级的改造以提供新的系统特性或功能增强。&lt;br /&gt;
*'''演讲: 内核开发,Cao Yu(EMC),Multi-Instance Aware Query Processing'''，45分钟&lt;br /&gt;
:It is not uncommon for analytical database queries to contain multiple instances of the same (base or derived) relation. Unfortunately, almost all of the conventional relational query processing techniques are oblivious to these instances and instead deal with them as independent relations. As a result, the query evaluation performance would be suboptimal. This talk will describe our research on the problem of optimizing complex queries with multiple relational instances, which surprisingly has never received systematic or specialized public studies in the past. We investigate three fundamental query execution operations, i.e. table scan, table sorting and table join, to exploit the corresponding optimization opportunities when these operations involve multiple instances.&lt;br /&gt;
&lt;br /&gt;
:First, we present a light-weight multi-instance-aware plan evaluation engine that enables multiple instances of a relation to share one physical table scan. Second, we develop a sort-sharing-aware query processing framework to maximize the effects of sharing and collaboration during achieving different sorting requirements for multiple instances. Third, we propose an efficient algorithm for performing self-join operations between two instances and with join predicates involving two distinct instances. In all the above works, we validate our techniques by integrating them into PostgreSQL and testing their effectiveness using TPC benchmarks.&lt;br /&gt;
*'''演讲: 内核开发,孙鹏,'''，45分钟&lt;br /&gt;
*'''内核开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 李元佳,PostgreSQL用户会介绍'''，30分钟&lt;br /&gt;
*'''颁奖礼''' 30分钟&lt;br /&gt;
&lt;br /&gt;
== 大会演讲嘉宾 SPEAKERS ==  &lt;br /&gt;
* '''[http://www.hagander.net/ Magnus Hagander]'''&lt;br /&gt;
:Core Team Member and Major Developer of PostgreSQL Global Development Group&lt;br /&gt;
:Conference organizer at PostgreSQL Conference Europe&lt;br /&gt;
:Principal Database Consultant and Open Source Expert at Redpill Linpro&lt;br /&gt;
:President of the Board at PostgreSQL Europe&lt;br /&gt;
&lt;br /&gt;
*'''[http://www.linkedin.com/profile/view?id=16308658&amp;amp;locale=en_US&amp;amp;trk=tyah Simon Riggs]'''&lt;br /&gt;
&lt;br /&gt;
:Major Developer &amp;amp; Committer at PostgreSQL Global Development Group and CTO and Database Architect at 2ndQuadrant.&lt;br /&gt;
:Professional developer and consultant for PostgreSQL, following on from 20 years of experience with a variety of database technologies. Regular conference speaker.&lt;br /&gt;
:Enterprise-level experience working from within startup businesses product/service companies, including 2 successful IPOs. &lt;br /&gt;
&lt;br /&gt;
*'''[http://www.intellilink.co.jp/plan/corporate/fellow_OSS-DB.html 铃木幸一Suzuki Koichi]'''&lt;br /&gt;
&lt;br /&gt;
:Fellow at NTT DATA Intellilink Corporation&lt;br /&gt;
&lt;br /&gt;
:After joining NTT Laboratory, Koichi Suzuki was involved in the following R&amp;amp;D activities:&lt;br /&gt;
::Extended Unix Code (EUC) development and Unicode standardization,&lt;br /&gt;
::Oracle port to NTT's proprietary Unix workstations,&lt;br /&gt;
::Object-Relation Databae Management System development (UniSQL), and&lt;br /&gt;
::PostgreSQL and Postgres-XC development.&lt;br /&gt;
::From 1991 to 1993, he was a guest researcher in MIT.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://sourceforge.jp/projects/nttdatagroup-oss-square/wiki/koichi_suzuki Official web page](in Japanese)&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://postgres-xc.sourceforge.net/ Postgres-XC]&lt;br /&gt;
&lt;br /&gt;
*'''彭智勇 Peng zhiyong'''&lt;br /&gt;
&lt;br /&gt;
:日本京都大学工学博士，武汉大学计算机学院副院长、教授、博士生导师，中国计算机协会数据库专业委员会委员，国家信息产业部数据库标准工作组成员，武汉市电子政务宽带网络平台软件系统总体设计专家组成员，国内外许多学术会议程序委员会的委员。1985年毕业于武汉大学计算机科学系，获理学学士学位。1988年毕业于国防科技大学计算机系，获工学硕士学位。1995年毕业于日本京都大学信息科学系, 获工学博士学位。1995－1997年在日本京都高度技术研究所工作，研究员。1997－2000年在美国惠普公司的研究所工作，研究员。2001-2002年在武汉大学计算机科学与技术博士后流动站从事博士后研究工作。&lt;br /&gt;
&lt;br /&gt;
*'''张孝 Zhang Xiao'''&lt;br /&gt;
&lt;br /&gt;
:中国人民大学信息学院副教授，中科院计算所博士，中国人民大学硕士及学士，师从中国著名数据库专家王珊教授。&lt;br /&gt;
&lt;br /&gt;
:1997年以访问学者的身份在香港中文大学系统工程与工程管理系从事合作研究与开发。2006年在印第安纳大学DSI&amp;amp;DDE实验室作为访问学者进行e-Science相关的元数据管理和数据出处领域访问研究。&lt;br /&gt;
:主要研究领域包括：并行数据库系统、分布式数据库系统、移动数据库等。尤其擅长大型数据库系统体系的原理分析、设计和实现技术，熟悉开源数据库系统PostgreSQL源代码。近期研究兴趣集中在：数据库体系结构、大规模非结构化与智能视频数据管理、数据库关键词检索等。&lt;br /&gt;
:从1996年以来作为主要技术骨干或核心骨干先后参与多项国家科技攻关项目、国家自然科学基金、北京市重大科技项目及国家863项目。先后获得多项省部级奖励，包括教育部科技进步二等奖1次，北京市科技进步一等奖1次、二等奖2次。独立主持有国家自然科学基金、核高基专项子课题以及国际企业的合作项目等。&lt;br /&gt;
:目前是中国计算机学会高级会员和中国计算机学会虚拟现实与可视化专委会委员、ACM协会会员。先后担任APWEB 2011本地主席、国际研讨会WAIM/USD'2012 和国际研讨会APWeb/WAIM DBIR09程序委员会联合主席以及NDBC 2010 Demo主席等学术兼职。先后在《软件学报》、《计算机学报》、《计算机研究与发展》等期刊杂志以及ICDE等国际会议上单独或联合发表论文20余篇，参与王珊教授主编的3本著作的编写工作。主要担任《数据结构》、《数据库原理与实现》、《PostgreSQL源代码阅读与分析》等课程的教学工作。&lt;br /&gt;
&lt;br /&gt;
*何伟平&lt;br /&gt;
&lt;br /&gt;
*唐诚(阿里巴巴)&lt;br /&gt;
:阿里巴巴公司数据库专家，精通greenplum和PostgreSQL数据库，为公司这一技术领域的带头人。也精通oracle数据库和AIX小型机，精通C/C++编程。&lt;br /&gt;
*德哥(斯凯网络)&lt;br /&gt;
:斯凯网络DBA主管，多年数据库平台工作经验,熟悉Oracle,PostgreSQL,EnterpriseDB,GreenPlum,mongoDB等多种数据库平台,熟悉OS,存储等.负责斯凯网络数据库架构设计,性能调优与维护,存储系统设计与维护,OS维护等工作.&lt;br /&gt;
:Digoal is the cheif DBA in Sky-mobi which runs the largest mobile app market in China, he manages a system consisting of over 300 PostgreSQL nodes, he will share us with his experience in managing PostgreSQL.&lt;br /&gt;
*Francs(斯凯网络)&lt;br /&gt;
*Gavin Yang(VMWARE)&lt;br /&gt;
*Cao Yu(EMC)&lt;br /&gt;
:Yu is currently working at EMC Labs China as a senior research scientist, after receiving his Ph.D. from National University of Singapore. His broad research interest lies in large-scale data management. More specifically, he does system-oriented research on database query processing and optimization, massive data storage and MapReduce-based big data analytics.  He has published papers on top venues like SIGMOD, ICDE, EDBT, VLDB Journal, etc.&lt;br /&gt;
*萧少聪，&lt;br /&gt;
:曾任职于广东省Linux技术服务中心及红帽中国区唯一总代理，担任开源架构讲师及负责Red Hat系统开源产品华南地区技术顾问及架构设计工作。06年通过红帽RHCE认证，并获得红帽RHCI认证讲师资格，09年通过红帽全球最高认证 RHCA，成为国内前20名考取此认证的架构师。2012年成为EnterpriseDB公司在大中华区首位官方认证的 Postgres数据库讲 师，同年协助李元佳等人筹建PostgresQL中国用户组。现任北京神州立诚科技有限公司技术总监，拥有多年开发、网络架构设计及项目管理经 验，专注于开源Linux系统管理及Postgres数据库、优化、集群系统、云-虚拟架构设计领域。 &lt;br /&gt;
&lt;br /&gt;
*''孙鹏''&lt;br /&gt;
:中国科学院计算技术研究所工学博士，美国北德克萨斯大学访问学者，现任中国科学院软件研究所综合信息系统技术国家级重点实验室助理研究员，研究方向为空间数据库和空间数据库挖掘。&lt;br /&gt;
*李元佳,&lt;br /&gt;
&lt;br /&gt;
== 大会预算 Budget== &lt;br /&gt;
&lt;br /&gt;
我们在征集大会的赞助商，请赞助我们的大会，帮助我们大会顺利举行。&lt;br /&gt;
We are recruiting sponsors for the conference to help us hold this conference.&lt;br /&gt;
&lt;br /&gt;
*预算约11万 Spending 110,000 RMB&lt;br /&gt;
**外宾旅费费用6万 Travel funding for foreign speakers 60,000 RMB  （机票加酒店及车辆接送等每人约2万， 3 Guestes, each is about 20,000 ）&lt;br /&gt;
**大会场地 Conference Room 41,920 RMB（两天会议厅，加2天培训及3个分会场教室，另加投影仪等费用）&lt;br /&gt;
**用户礼品 Attendee Gift    6,000 RMB（T恤200件x30)&lt;br /&gt;
**购物袋胸卡 Bag   3,000 RMB  (200本x15元)&lt;br /&gt;
&lt;br /&gt;
*收入约11万 Income 110,000 RMB&lt;br /&gt;
**赞助 Sponsor         50,000RMB&lt;br /&gt;
**门票 Ticket          60,000RMB (300x200元=6万）&lt;br /&gt;
&lt;br /&gt;
== 参与我们 Participate == &lt;br /&gt;
&lt;br /&gt;
''演讲者''&lt;br /&gt;
&lt;br /&gt;
欢迎在PostgreSQL的企业应用、架构设计、运维管理、应用开发等方面有心得的朋友，发表演讲。如果你有需要发表的内容，请联系 galylee@gmail.com&lt;br /&gt;
&lt;br /&gt;
''志愿者''&lt;br /&gt;
&lt;br /&gt;
请帮助我们宣传大会，在你的网站，或者在论坛，或者在其他大会，告诉大家PG全国大会的举行信息。&lt;br /&gt;
&lt;br /&gt;
''赞助''&lt;br /&gt;
&lt;br /&gt;
我们是非盈利的组织，单单凭我们的力量无法承担大会的会场等相关的运营费用，只有相关企业的赞助和参与才有可能有必要的资源在国内培养PostgreSQL社区的形成。更多的赞助，可以让我们能邀请到更重量级的嘉宾为我们演讲，可以让我们有个交流和参与的平台。需要赞助的包括：场地费用及宣传品、邀请国外嘉宾的机票及食宿、嘉宾的演讲资料印刷、各种小礼物、大会首日晚上的酒会等等。。&lt;br /&gt;
&lt;br /&gt;
''捐赠''&lt;br /&gt;
&lt;br /&gt;
我们是旨在推广PG在中国发展的非营利的团体，欢迎企业为PG社区进行捐赠，捐赠的款项将完全用于PG社区的推广，包括官方文档的翻译、社区网站的托管、PG的技术交流会、PG大会的运营等。&lt;br /&gt;
&lt;br /&gt;
[http://wiki.postgresql.org/wiki/Pgconfchina2012-admin 大会组织]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgconfchina2012</id>
		<title>Pgconfchina2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgconfchina2012"/>
				<updated>2012-05-07T21:19:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* 基础培训专场 Basic Training */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Conference China 2012 ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL中国用户会全国大会是由PostgreSQL中国用户会(CPUG)主办的旨在促进PostgreSQL在中国发展的非营利性的会议年度大会，大会是分享PostgreSQL的最佳使用实践、学习最新的功能特性、结交本领域的朋友的最佳场所。&lt;br /&gt;
&lt;br /&gt;
2012年度大会将于2012年6月14日-17日在北京举行，中国人民大学信息学院承办。其中6月14日-15日是面向初级人员的入门培训，6月16(周六),17(周日)日是正式大会。本次大会将邀请到社区的核心组员Magnus Hagander,主要开发人员Simon Rigg、PG-XC的首席架构师铃木幸一(Suzuki Koichi)及其他海外专家为本次大会分享最前沿的PostgreSQL方面的信息，同时还有业界的资深人员作相关演讲。&lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China which organized by CPUG(China Postgres User Group) is an annual conference for PostgreSQL users in China, the conference is a hub for learning new features, sharing the know-how, and making friends about PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China 2012 will be on 14-17 June 2012 at Renmin University of China in Beijing with two days of Tutorials on 14-15 June 2012. Magnus Hagander,Simon Rigg and Suzuki Koichi from community will also join this conference to give keynote speachs.&lt;br /&gt;
&lt;br /&gt;
== 信息 Information ==&lt;br /&gt;
&lt;br /&gt;
'''日期 DATE''': June 14-17, 2012&lt;br /&gt;
&lt;br /&gt;
'''地点 LOCATION''': 中国人民大学 Remin University of China, Beijing，China&lt;br /&gt;
&lt;br /&gt;
'''地址 ADDRESS''':  &lt;br /&gt;
&lt;br /&gt;
'''主办 Endorsed by''': CPUG(China PostgreSQL User Group) 中国PostgreSQL用户会&lt;br /&gt;
&lt;br /&gt;
'''承办 Organizer''': 中国人民大学信息学院 &lt;br /&gt;
&lt;br /&gt;
'''协办''': IT168盛拓传媒&lt;br /&gt;
&lt;br /&gt;
'''赞助支持伙伴 SPONSORS''': &lt;br /&gt;
&lt;br /&gt;
'''内容 TOPIC''': PostgreSQL的企业应用、架构设计、运维管理、应用开发&lt;br /&gt;
&lt;br /&gt;
'''费用 FEE''': 公司名义：300RMB(由于大会目前缺乏赞助商，所以需要门票收费，解决资金不足问题, 具体预算见下面),个人名义：200RMB(不提供发票), 学生100RMB(需提供学生证,不提供发票)。 &lt;br /&gt;
&lt;br /&gt;
'''缴费方法 ''':&lt;br /&gt;
   银行 &lt;br /&gt;
   开户人&lt;br /&gt;
   账号：&lt;br /&gt;
   &lt;br /&gt;
    注1： 如需开发票，请发邮件联系 galylee at gmail.com&lt;br /&gt;
   注2： 本次缴费由PG中国用户会负责，与IT168无任何关系，如产生任何纠纷由PG中国用户会负责，有问题请直接联系 李元佳 Galylee at gmail.com 13710389225。&lt;br /&gt;
&lt;br /&gt;
'''餐费 Lunch FEE''' 自助餐 120元/人(两天) 如需预定请注明&lt;br /&gt;
&lt;br /&gt;
'''其他赞助商'''&lt;br /&gt;
&lt;br /&gt;
'''参加方法 REGISTRATION''': &lt;br /&gt;
：本届大会将由IT168负责本次大会的报名活动，届时请参考相关主页。   &lt;br /&gt;
&lt;br /&gt;
'''联系方式 CONTACT''': &lt;br /&gt;
&lt;br /&gt;
   如有任何疑问欢迎联系。&lt;br /&gt;
   Please contact if you have any questions.&lt;br /&gt;
   大会会务负责人 Conference Orginizer：李元佳 Galy Lee&lt;br /&gt;
   手机 Mobile：+86-13710389225&lt;br /&gt;
   邮件 Email：galylee at gmail.com&lt;br /&gt;
&lt;br /&gt;
'''重要日期 IMPORTANT DATES'''&lt;br /&gt;
&lt;br /&gt;
  4月月1日 报名开始 &lt;br /&gt;
  6月1日   报名截至&lt;br /&gt;
&lt;br /&gt;
==大会主题Topics==&lt;br /&gt;
&lt;br /&gt;
6月14日-15日将是面向DBA入门培训的课程。 6月16日-17日是大会的演讲，大会安排在三个分会场举行，来自国内外的专家将会就PostgreSQL的话题进行演讲，演讲的主要主题如下：&lt;br /&gt;
*系统使用PostgreSQL的架构(包括HA，集群，灾备等)&lt;br /&gt;
*PostgreSQL的监控、配置、各种辅助工具&lt;br /&gt;
*各种数据库向PostgreSQL的迁移&lt;br /&gt;
*使用PostgreSQL的数据分析、数据仓库仓库&lt;br /&gt;
*性能调优、性能基线测试&lt;br /&gt;
*PostgreSQL的分区&lt;br /&gt;
*集群，复制&lt;br /&gt;
*实际的应用案例&lt;br /&gt;
*使用PostgreSQL的地理信息系统&lt;br /&gt;
*利用SSD等新技术提高PostgreSQL的性能&lt;br /&gt;
*PostgreSQL 9.2的新功能&lt;br /&gt;
*PostgreSQL的新特性的开发、中文相关的全文检索等&lt;br /&gt;
*PostgreSQL的内核分析，研究，以及教学上的应用&lt;br /&gt;
&lt;br /&gt;
A Two-day free Postgres DBA training will be given for people who want to learn PostgreSQL administration in the first two days. In 16-17 June, and the conference will be organized in three tracks, PostgreSQL experts from local and community will give talks about:&lt;br /&gt;
*System architecture for using PostgreSQL&lt;br /&gt;
*Migration of production systems from another database&lt;br /&gt;
*Data warehousing&lt;br /&gt;
*Tuning PostgreSQL for different work loads&lt;br /&gt;
*Replication and clustering&lt;br /&gt;
*Benchmarking and performance engineering&lt;br /&gt;
*Case studies&lt;br /&gt;
*Location-aware and mapping software with PostGIS&lt;br /&gt;
*PostgreSQL 9.2 features &lt;br /&gt;
*Research and teaching with PostgreSQL&lt;br /&gt;
Community major developers: Simmon Rigg, Suzuki Koichi will give talks about 9.2 features, PG-XC and clustering solutions.&lt;br /&gt;
&lt;br /&gt;
==Postgres集群研讨会 Postgres Clustering Summit ==&lt;br /&gt;
&lt;br /&gt;
*PG-XC专题会议 6.14日下午(仅限于相关公司或者个人)，讨论如何参与到PG-XC的开发等议题。&lt;br /&gt;
&lt;br /&gt;
== 大会议程 Schedule (subject to change) ==&lt;br /&gt;
===基础培训专场 Basic Training===&lt;br /&gt;
&lt;br /&gt;
*6月14日(周四) 9:00-17:00&lt;br /&gt;
**PostgresQL 核心架构基础(Process/Storage/Momery等) &lt;br /&gt;
**PostgresQL 安装及文件结构 &lt;br /&gt;
**PostgresQL 配置基础 &lt;br /&gt;
**PostgresQL 数据库逻辑结构(Database/Schema/Tablespace等) &lt;br /&gt;
**PostgresQL 数据备份及恢复 &lt;br /&gt;
**PostgresQL 数据库权限及安全管理 &lt;br /&gt;
*6月15日(周五) 9:00 – 17:00&lt;br /&gt;
**PostgresQL 基于时间点的数据恢复(Point-in Time Recovery) &lt;br /&gt;
**PostgresQL 运行时维护管理(MVCC/Vacuum/Reindex等) &lt;br /&gt;
**PostgresQL 存储过程及调试(pg/plsql，pgAdminIII Debuger)&lt;br /&gt;
**PostgresQL 监控排错基础&lt;br /&gt;
**PostgreSQL优化培训&lt;br /&gt;
&lt;br /&gt;
*以下内容只进行简要概念介绍(Day2)：&lt;br /&gt;
**数据库集群概论&lt;br /&gt;
**PostgresQL Hot-Standby and Stream Replication简介&lt;br /&gt;
**PostgresQL 高可用性集群架构简介&lt;br /&gt;
**PostgresQL PGPool 读写分离架构简介&lt;br /&gt;
**PostgresQL 集中管理及性能优化基础&lt;br /&gt;
&lt;br /&gt;
===大会 Conference===&lt;br /&gt;
&lt;br /&gt;
*第一天： 6月16日(周六)&lt;br /&gt;
&lt;br /&gt;
====主场1 ====&lt;br /&gt;
**会场主持:李元佳&lt;br /&gt;
**9:00-9：05大会介绍  &lt;br /&gt;
**9:05-9:15大会致辞&lt;br /&gt;
**9:15-10:00  主题演讲1   Magnus Hagander，PostgreSQL 9.2 features and Roadmap&lt;br /&gt;
**10:00-10:45 主题演讲1-1 Suzuki Koichi, Postgres-XC, Read/Write scalable PostgreSQL cluster&lt;br /&gt;
**10:45-11:00 主题演讲1-2 Suzuki Koichi, PostgreSQL usage in NTT &lt;br /&gt;
**11:00-11:45 主题演讲2   Simon  Rigg,&lt;br /&gt;
**12:00-12:15 集体照相&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 分场1 DBA专场 ====&lt;br /&gt;
==== 分场2 PG内核开发专场 ====&lt;br /&gt;
==== 分场3 应用开发专场   ====&lt;br /&gt;
&lt;br /&gt;
晚餐：18：00 &lt;br /&gt;
&lt;br /&gt;
*第二天6月17日(周日)&lt;br /&gt;
   上午&lt;br /&gt;
     会场1：&lt;br /&gt;
     会场2：&lt;br /&gt;
     会场3：&lt;br /&gt;
   下午：&lt;br /&gt;
     讨论、提问&lt;br /&gt;
&lt;br /&gt;
===PG-XC专场 PG XC Summit ===&lt;br /&gt;
*时间：6.14日 14:00 - 17:00&lt;br /&gt;
*地点：人民大学&lt;br /&gt;
*议题：&lt;br /&gt;
**PG-XC培训 14:00 - 16:00&lt;br /&gt;
**PG-XC讨论 16:00 - 17:00&lt;br /&gt;
*参与嘉宾：PG-XC首席架构师 铃木幸一 Suzuki Koichi&lt;br /&gt;
&lt;br /&gt;
== 大会演讲 TOPICS ==&lt;br /&gt;
*'''主题演讲Keynote: Magnus Hagander，PostgreSQL 9.2的新功能及路线图，PostgreSQL 9.2 features and Roadmap''', 45分钟&lt;br /&gt;
*'''主题演讲Keynote: Koichi Suzuki，Postgres-XC读写可扩展的PostgreSQL集群,Postgres-XC, Read/Write scalable PostgreSQL cluster''', 45分钟&lt;br /&gt;
:Postgres-XC is PostgreSQL-based database cluster based upon shared-nothing configuration.  Postgres-XC (simply XC) provides both read and write scalability.   XC's servers are symmetric so that applications can connect any of the servers.   With more servers, you can get more performance.    No dedicated hardware is required.   You need only a commodity hardware.   Each server provides single global database view.   Complete transaction management features are provided just as single PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
:The talk will cover the motivation, architecture, performance of XC, as well as high-availability features, milestone and how to be a part of XC community.   Architecture will be covered how how to provide full-fledged transaction property and both read/write scalability, as well as distributed query processing.   High-availability feature will cover how to backup each server and components for integration.&lt;br /&gt;
*'''主题演讲Keynote: Simon Rigg，企业级的PostgreSQL及未来的发展方向 Enterprise PostgreSQL &amp;amp; Futures''', 45分钟&lt;br /&gt;
*'''主题演讲Talks: Simon Rigg，PostgreSQL流复制及未来的发展方向 PostgreSQL Replication &amp;amp; Futures''', 45分钟&lt;br /&gt;
&lt;br /&gt;
*'''专家圆桌讨论Panel Discussion:Magnus, Simon, 彭智勇， 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲Talks:何伟平 He Weiping(Laser)， 45小时&lt;br /&gt;
*'''演讲Talks: DBA管理,Koichi Suzuki，PostgreSQL在电信市场的应用, PostgreSQL use in telecommunication market (NTT group)'''，15分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,萧少聪 Scott xiu，PostgreSQL的流复制'''，45分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,唐诚(阿里巴巴) Tang Cheng(Alibaba),greenplum数据库经验谈'''，45分钟&lt;br /&gt;
:1. greenplum的架构简介 2. greenplum 与　hadoop的对比 3. greenplum 的执行计划 4. 日常维护经验谈&lt;br /&gt;
&lt;br /&gt;
*'''演讲: DBA管理,德哥(斯凯网络) Digoal(Skymobi)，PostgreSQL 杂谈'''，45分钟&lt;br /&gt;
*'''演讲: DBA管理,Francs(斯凯网络),Francs(Skymobi)，PostgreSQL vs Oracle'''，45分钟&lt;br /&gt;
*'''DBA 圆桌讨论 Panel Discussion:&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 应用开发,(去哪儿)， '''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,， PostGIS 应用'''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,Gavin Yang(VMWARE)， PostgreSQL的数据分析工具MADlib, In-Database Analytics with MADlib'''，45分钟&lt;br /&gt;
:MADlib is an open-source library on RDBMS for scalable in-database big data analytics. It provides data-parallel implementations of mathematical, statistical and machine learning methods for structured and unstructured data. This talk introduces some of the problems we are tackling in the MADlib initiative and the solutions for them. We will also talk about our recent work in building decision trees and random forests within databases.&lt;br /&gt;
*'''演讲: 应用开发,蔡红雨(高鹏)，'''，45分钟&lt;br /&gt;
*'''应用开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲：内核开发,Magnus Hagander，Involving in PostgreSQL Development'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,彭智勇，PostgreSQL 内核简介'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,张孝(中国人民大学)，《高校数据库教学中PostgreSQL的学习、使用与定制》简介'''，45分钟&lt;br /&gt;
:本报告主要报告在高校的数据库教学中如何利用PostgreSQL这样的开源数据库系统来了帮助学生切实从“白盒”角度感受一个大型数据库管理系统并深化有关数据库相关理论的学习与认知。报告将从入门级入手介绍如何由外及内地学习和了解PostgreSQL的基本特点并进行系统从无到有的建立。进一步来介绍如何使用PostgreSQL来满足教学(比如数据库概论)的一些课程要求以及对某些数据库应用的支持。此外，还会根据教学中一些高级内容(比如针对研究生的《数据库原理与实现》的要求)介绍如何对PostgreSQL进行内核级的改造以提供新的系统特性或功能增强。&lt;br /&gt;
*'''演讲: 内核开发,Cao Yu(EMC),Multi-Instance Aware Query Processing'''，45分钟&lt;br /&gt;
:It is not uncommon for analytical database queries to contain multiple instances of the same (base or derived) relation. Unfortunately, almost all of the conventional relational query processing techniques are oblivious to these instances and instead deal with them as independent relations. As a result, the query evaluation performance would be suboptimal. This talk will describe our research on the problem of optimizing complex queries with multiple relational instances, which surprisingly has never received systematic or specialized public studies in the past. We investigate three fundamental query execution operations, i.e. table scan, table sorting and table join, to exploit the corresponding optimization opportunities when these operations involve multiple instances.&lt;br /&gt;
&lt;br /&gt;
:First, we present a light-weight multi-instance-aware plan evaluation engine that enables multiple instances of a relation to share one physical table scan. Second, we develop a sort-sharing-aware query processing framework to maximize the effects of sharing and collaboration during achieving different sorting requirements for multiple instances. Third, we propose an efficient algorithm for performing self-join operations between two instances and with join predicates involving two distinct instances. In all the above works, we validate our techniques by integrating them into PostgreSQL and testing their effectiveness using TPC benchmarks.&lt;br /&gt;
*'''演讲: 内核开发,孙鹏,'''，45分钟&lt;br /&gt;
*'''内核开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 李元佳,PostgreSQL用户会介绍'''，30分钟&lt;br /&gt;
*'''颁奖礼''' 30分钟&lt;br /&gt;
&lt;br /&gt;
== 大会演讲嘉宾 SPEAKERS ==  &lt;br /&gt;
* '''[http://www.hagander.net/ Magnus Hagander]'''&lt;br /&gt;
:Core Team Member and Major Developer of PostgreSQL Global Development Group&lt;br /&gt;
:Conference organizer at PostgreSQL Conference Europe&lt;br /&gt;
:Principal Database Consultant and Open Source Expert at Redpill Linpro&lt;br /&gt;
:President of the Board at PostgreSQL Europe&lt;br /&gt;
&lt;br /&gt;
*'''[http://www.linkedin.com/profile/view?id=16308658&amp;amp;locale=en_US&amp;amp;trk=tyah Simon Riggs]'''&lt;br /&gt;
&lt;br /&gt;
:Major Developer &amp;amp; Committer at PostgreSQL Global Development Group and CTO and Database Architect at 2ndQuadrant.&lt;br /&gt;
:Professional developer and consultant for PostgreSQL, following on from 20 years of experience with a variety of database technologies. Regular conference speaker.&lt;br /&gt;
:Enterprise-level experience working from within startup businesses product/service companies, including 2 successful IPOs. &lt;br /&gt;
&lt;br /&gt;
*'''[http://www.intellilink.co.jp/plan/corporate/fellow_OSS-DB.html 铃木幸一Suzuki Koichi]'''&lt;br /&gt;
&lt;br /&gt;
:Fellow at NTT DATA Intellilink Corporation&lt;br /&gt;
&lt;br /&gt;
:After joining NTT Laboratory, Koichi Suzuki was involved in the following R&amp;amp;D activities:&lt;br /&gt;
::Extended Unix Code (EUC) development and Unicode standardization,&lt;br /&gt;
::Oracle port to NTT's proprietary Unix workstations,&lt;br /&gt;
::Object-Relation Databae Management System development (UniSQL), and&lt;br /&gt;
::PostgreSQL and Postgres-XC development.&lt;br /&gt;
::From 1991 to 1993, he was a guest researcher in MIT.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://sourceforge.jp/projects/nttdatagroup-oss-square/wiki/koichi_suzuki Official web page](in Japanese)&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://postgres-xc.sourceforge.net/ Postgres-XC]&lt;br /&gt;
&lt;br /&gt;
*'''彭智勇 Peng zhiyong'''&lt;br /&gt;
&lt;br /&gt;
:日本京都大学工学博士，武汉大学计算机学院副院长、教授、博士生导师，中国计算机协会数据库专业委员会委员，国家信息产业部数据库标准工作组成员，武汉市电子政务宽带网络平台软件系统总体设计专家组成员，国内外许多学术会议程序委员会的委员。1985年毕业于武汉大学计算机科学系，获理学学士学位。1988年毕业于国防科技大学计算机系，获工学硕士学位。1995年毕业于日本京都大学信息科学系, 获工学博士学位。1995－1997年在日本京都高度技术研究所工作，研究员。1997－2000年在美国惠普公司的研究所工作，研究员。2001-2002年在武汉大学计算机科学与技术博士后流动站从事博士后研究工作。&lt;br /&gt;
&lt;br /&gt;
*'''张孝 Zhang Xiao'''&lt;br /&gt;
&lt;br /&gt;
:中国人民大学信息学院副教授，中科院计算所博士，中国人民大学硕士及学士，师从中国著名数据库专家王珊教授。&lt;br /&gt;
&lt;br /&gt;
:1997年以访问学者的身份在香港中文大学系统工程与工程管理系从事合作研究与开发。2006年在印第安纳大学DSI&amp;amp;DDE实验室作为访问学者进行e-Science相关的元数据管理和数据出处领域访问研究。&lt;br /&gt;
:主要研究领域包括：并行数据库系统、分布式数据库系统、移动数据库等。尤其擅长大型数据库系统体系的原理分析、设计和实现技术，熟悉开源数据库系统PostgreSQL源代码。近期研究兴趣集中在：数据库体系结构、大规模非结构化与智能视频数据管理、数据库关键词检索等。&lt;br /&gt;
:从1996年以来作为主要技术骨干或核心骨干先后参与多项国家科技攻关项目、国家自然科学基金、北京市重大科技项目及国家863项目。先后获得多项省部级奖励，包括教育部科技进步二等奖1次，北京市科技进步一等奖1次、二等奖2次。独立主持有国家自然科学基金、核高基专项子课题以及国际企业的合作项目等。&lt;br /&gt;
:目前是中国计算机学会高级会员和中国计算机学会虚拟现实与可视化专委会委员、ACM协会会员。先后担任APWEB 2011本地主席、国际研讨会WAIM/USD'2012 和国际研讨会APWeb/WAIM DBIR09程序委员会联合主席以及NDBC 2010 Demo主席等学术兼职。先后在《软件学报》、《计算机学报》、《计算机研究与发展》等期刊杂志以及ICDE等国际会议上单独或联合发表论文20余篇，参与王珊教授主编的3本著作的编写工作。主要担任《数据结构》、《数据库原理与实现》、《PostgreSQL源代码阅读与分析》等课程的教学工作。&lt;br /&gt;
&lt;br /&gt;
*何伟平&lt;br /&gt;
&lt;br /&gt;
*唐诚(阿里巴巴)&lt;br /&gt;
:阿里巴巴公司数据库专家，精通greenplum和PostgreSQL数据库，为公司这一技术领域的带头人。也精通oracle数据库和AIX小型机，精通C/C++编程。&lt;br /&gt;
*德哥(斯凯网络)&lt;br /&gt;
:斯凯网络DBA主管，多年数据库平台工作经验,熟悉Oracle,PostgreSQL,EnterpriseDB,GreenPlum,mongoDB等多种数据库平台,熟悉OS,存储等.负责斯凯网络数据库架构设计,性能调优与维护,存储系统设计与维护,OS维护等工作.&lt;br /&gt;
:Digoal is the cheif DBA in Sky-mobi which runs the largest mobile app market in China, he manages a system consisting of over 300 PostgreSQL nodes, he will share us with his experience in managing PostgreSQL.&lt;br /&gt;
*Francs(斯凯网络)&lt;br /&gt;
*Gavin Yang(VMWARE)&lt;br /&gt;
*Cao Yu(EMC)&lt;br /&gt;
:Yu is currently working at EMC Labs China as a senior research scientist, after receiving his Ph.D. from National University of Singapore. His broad research interest lies in large-scale data management. More specifically, he does system-oriented research on database query processing and optimization, massive data storage and MapReduce-based big data analytics.  He has published papers on top venues like SIGMOD, ICDE, EDBT, VLDB Journal, etc.&lt;br /&gt;
*萧少聪，&lt;br /&gt;
:曾任职于广东省Linux技术服务中心及红帽中国区唯一总代理，担任开源架构讲师及负责Red Hat系统开源产品华南地区技术顾问及架构设计工作。06年通过红帽RHCE认证，并获得红帽RHCI认证讲师资格，09年通过红帽全球最高认证 RHCA，成为国内前20名考取此认证的架构师。2012年成为EnterpriseDB公司在大中华区首位官方认证的 Postgres数据库讲 师，同年协助李元佳等人筹建PostgresQL中国用户组。现任北京神州立诚科技有限公司技术总监，拥有多年开发、网络架构设计及项目管理经 验，专注于开源Linux系统管理及Postgres数据库、优化、集群系统、云-虚拟架构设计领域。 &lt;br /&gt;
&lt;br /&gt;
*''孙鹏''&lt;br /&gt;
:中国科学院计算技术研究所工学博士，美国北德克萨斯大学访问学者，现任中国科学院软件研究所综合信息系统技术国家级重点实验室助理研究员，研究方向为空间数据库和空间数据库挖掘。&lt;br /&gt;
*李元佳,&lt;br /&gt;
&lt;br /&gt;
== 大会预算 Budget== &lt;br /&gt;
&lt;br /&gt;
我们在征集大会的赞助商，请赞助我们的大会，帮助我们大会顺利举行。&lt;br /&gt;
We are recruiting sponsors for the conference to help us hold this conference.&lt;br /&gt;
&lt;br /&gt;
*预算约11万 Spending 110,000 RMB&lt;br /&gt;
**外宾旅费费用6万 Travel funding for foreign speakers 60,000 RMB  （机票加酒店及车辆接送等每人约2万， 3 Guestes, each is about 20,000 ）&lt;br /&gt;
**大会场地 Conference Room 41,920 RMB（两天会议厅，加2天培训及3个分会场教室，另加投影仪等费用）&lt;br /&gt;
**用户礼品 Attendee Gift    6,000 RMB（T恤200件x30)&lt;br /&gt;
**购物袋胸卡 Bag   3,000 RMB  (200本x15元)&lt;br /&gt;
&lt;br /&gt;
*收入约11万 Income 110,000 RMB&lt;br /&gt;
**赞助 Sponsor         50,000RMB&lt;br /&gt;
**门票 Ticket          60,000RMB (300x200元=6万）&lt;br /&gt;
&lt;br /&gt;
== 参与我们 Participate == &lt;br /&gt;
&lt;br /&gt;
''演讲者''&lt;br /&gt;
&lt;br /&gt;
欢迎在PostgreSQL的企业应用、架构设计、运维管理、应用开发等方面有心得的朋友，发表演讲。如果你有需要发表的内容，请联系 galylee@gmail.com&lt;br /&gt;
&lt;br /&gt;
''志愿者''&lt;br /&gt;
&lt;br /&gt;
请帮助我们宣传大会，在你的网站，或者在论坛，或者在其他大会，告诉大家PG全国大会的举行信息。&lt;br /&gt;
&lt;br /&gt;
''赞助''&lt;br /&gt;
&lt;br /&gt;
我们是非盈利的组织，单单凭我们的力量无法承担大会的会场等相关的运营费用，只有相关企业的赞助和参与才有可能有必要的资源在国内培养PostgreSQL社区的形成。更多的赞助，可以让我们能邀请到更重量级的嘉宾为我们演讲，可以让我们有个交流和参与的平台。需要赞助的包括：场地费用及宣传品、邀请国外嘉宾的机票及食宿、嘉宾的演讲资料印刷、各种小礼物、大会首日晚上的酒会等等。。&lt;br /&gt;
&lt;br /&gt;
''捐赠''&lt;br /&gt;
&lt;br /&gt;
我们是旨在推广PG在中国发展的非营利的团体，欢迎企业为PG社区进行捐赠，捐赠的款项将完全用于PG社区的推广，包括官方文档的翻译、社区网站的托管、PG的技术交流会、PG大会的运营等。&lt;br /&gt;
&lt;br /&gt;
[http://wiki.postgresql.org/wiki/Pgconfchina2012-admin 大会组织]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgconfchina2012</id>
		<title>Pgconfchina2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgconfchina2012"/>
				<updated>2012-05-07T12:22:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* 大会预算 Buget */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Conference China 2012 ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL中国用户会全国大会是由PostgreSQL中国用户会(CPUG)主办的旨在促进PostgreSQL在中国发展的非营利性的会议年度大会，大会是分享PostgreSQL的最佳使用实践、学习最新的功能特性、结交本领域的朋友的最佳场所。&lt;br /&gt;
&lt;br /&gt;
2012年度大会将于2012年6月14日-17日在北京举行，中国人民大学信息学院承办。其中6月14日-15日是面向初级人员的入门培训，6月16(周六),17(周日)日是正式大会。本次大会将邀请到社区的核心组员Magnus Hagander,主要开发人员Simon Rigg、PG-XC的首席架构师铃木幸一(Suzuki Koichi)及其他海外专家为本次大会分享最前沿的PostgreSQL方面的信息，同时还有业界的资深人员作相关演讲。&lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China which organized by CPUG(China Postgres User Group) is an annual conference for PostgreSQL users in China, the conference is a hub for learning new features, sharing the know-how, and making friends about PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China 2012 will be on 14-17 June 2012 at Renmin University of China in Beijing with two days of Tutorials on 14-15 June 2012. Magnus Hagander,Simon Rigg and Suzuki Koichi from community will also join this conference to give keynote speachs.&lt;br /&gt;
&lt;br /&gt;
== 信息 Information ==&lt;br /&gt;
&lt;br /&gt;
'''日期 DATE''': June 14-17, 2012&lt;br /&gt;
&lt;br /&gt;
'''地点 LOCATION''': 中国人民大学 Remin University of China, Beijing，China&lt;br /&gt;
&lt;br /&gt;
'''地址 ADDRESS''':  &lt;br /&gt;
&lt;br /&gt;
'''主办 Endorsed by''': CPUG(China PostgreSQL User Group) 中国PostgreSQL用户会&lt;br /&gt;
&lt;br /&gt;
'''承办 Organizer''': 中国人民大学信息学院 &lt;br /&gt;
&lt;br /&gt;
'''协办''': IT168盛拓传媒&lt;br /&gt;
&lt;br /&gt;
'''赞助支持伙伴 SPONSORS''': &lt;br /&gt;
&lt;br /&gt;
'''内容 TOPIC''': PostgreSQL的企业应用、架构设计、运维管理、应用开发&lt;br /&gt;
&lt;br /&gt;
'''费用 FEE''': 公司名义：300RMB(由于大会目前缺乏赞助商，所以需要门票收费，解决资金不足问题, 具体预算见下面),个人名义：200RMB(不提供发票), 学生100RMB(需提供学生证,不提供发票)。 &lt;br /&gt;
&lt;br /&gt;
'''缴费方法 ''':&lt;br /&gt;
   银行 &lt;br /&gt;
   开户人&lt;br /&gt;
   账号：&lt;br /&gt;
   &lt;br /&gt;
    注1： 如需开发票，请发邮件联系 galylee at gmail.com&lt;br /&gt;
   注2： 本次缴费由PG中国用户会负责，与IT168无任何关系，如产生任何纠纷由PG中国用户会负责，有问题请直接联系 李元佳 Galylee at gmail.com 13710389225。&lt;br /&gt;
&lt;br /&gt;
'''餐费 Lunch FEE''' 自助餐 120元/人(两天) 如需预定请注明&lt;br /&gt;
&lt;br /&gt;
'''其他赞助商'''&lt;br /&gt;
&lt;br /&gt;
'''参加方法 REGISTRATION''': &lt;br /&gt;
：本届大会将由IT168负责本次大会的报名活动，届时请参考相关主页。   &lt;br /&gt;
&lt;br /&gt;
'''联系方式 CONTACT''': &lt;br /&gt;
&lt;br /&gt;
   如有任何疑问欢迎联系。&lt;br /&gt;
   Please contact if you have any questions.&lt;br /&gt;
   大会会务负责人 Conference Orginizer：李元佳 Galy Lee&lt;br /&gt;
   手机 Mobile：+86-13710389225&lt;br /&gt;
   邮件 Email：galylee at gmail.com&lt;br /&gt;
&lt;br /&gt;
'''重要日期 IMPORTANT DATES'''&lt;br /&gt;
&lt;br /&gt;
  4月月1日 报名开始 &lt;br /&gt;
  6月1日   报名截至&lt;br /&gt;
&lt;br /&gt;
==大会主题Topics==&lt;br /&gt;
&lt;br /&gt;
6月14日-15日将是面向DBA入门培训的课程。 6月16日-17日是大会的演讲，大会安排在三个分会场举行，来自国内外的专家将会就PostgreSQL的话题进行演讲，演讲的主要主题如下：&lt;br /&gt;
*系统使用PostgreSQL的架构(包括HA，集群，灾备等)&lt;br /&gt;
*PostgreSQL的监控、配置、各种辅助工具&lt;br /&gt;
*各种数据库向PostgreSQL的迁移&lt;br /&gt;
*使用PostgreSQL的数据分析、数据仓库仓库&lt;br /&gt;
*性能调优、性能基线测试&lt;br /&gt;
*PostgreSQL的分区&lt;br /&gt;
*集群，复制&lt;br /&gt;
*实际的应用案例&lt;br /&gt;
*使用PostgreSQL的地理信息系统&lt;br /&gt;
*利用SSD等新技术提高PostgreSQL的性能&lt;br /&gt;
*PostgreSQL 9.2的新功能&lt;br /&gt;
*PostgreSQL的新特性的开发、中文相关的全文检索等&lt;br /&gt;
*PostgreSQL的内核分析，研究，以及教学上的应用&lt;br /&gt;
&lt;br /&gt;
A Two-day free Postgres DBA training will be given for people who want to learn PostgreSQL administration in the first two days. In 16-17 June, and the conference will be organized in three tracks, PostgreSQL experts from local and community will give talks about:&lt;br /&gt;
*System architecture for using PostgreSQL&lt;br /&gt;
*Migration of production systems from another database&lt;br /&gt;
*Data warehousing&lt;br /&gt;
*Tuning PostgreSQL for different work loads&lt;br /&gt;
*Replication and clustering&lt;br /&gt;
*Benchmarking and performance engineering&lt;br /&gt;
*Case studies&lt;br /&gt;
*Location-aware and mapping software with PostGIS&lt;br /&gt;
*PostgreSQL 9.2 features &lt;br /&gt;
*Research and teaching with PostgreSQL&lt;br /&gt;
Community major developers: Simmon Rigg, Suzuki Koichi will give talks about 9.2 features, PG-XC and clustering solutions.&lt;br /&gt;
&lt;br /&gt;
==Postgres集群研讨会 Postgres Clustering Summit ==&lt;br /&gt;
&lt;br /&gt;
*PG-XC专题会议 6.14日下午(仅限于相关公司或者个人)，讨论如何参与到PG-XC的开发等议题。&lt;br /&gt;
&lt;br /&gt;
== 大会议程 Schedule (subject to change) ==&lt;br /&gt;
===基础培训专场 Basic Tranning===&lt;br /&gt;
&lt;br /&gt;
*6月14日(周四) 9:00-17:00&lt;br /&gt;
**PostgresQL 核心架构基础(Process/Storage/Momery等) &lt;br /&gt;
**PostgresQL 安装及文件结构 &lt;br /&gt;
**PostgresQL 配置基础 &lt;br /&gt;
**PostgresQL 数据库逻辑结构(Database/Schema/Tablespace等) &lt;br /&gt;
**PostgresQL 数据备份及恢复 &lt;br /&gt;
**PostgresQL 数据库权限及安全管理 &lt;br /&gt;
*6月15日(周五) 9:00 – 17:00&lt;br /&gt;
**PostgresQL 基于时间点的数据恢复(Point-in Time Recovery) &lt;br /&gt;
**PostgresQL 运行时维护管理(MVCC/Vacuum/Reindex等) &lt;br /&gt;
**PostgresQL 存储过程及调试(pg/plsql，pgAdminIII Debuger)&lt;br /&gt;
**PostgresQL 监控排错基础&lt;br /&gt;
**PostgreSQL优化培训&lt;br /&gt;
&lt;br /&gt;
*以下内容只进行简要概念介绍(Day2)：&lt;br /&gt;
**数据库集群概论&lt;br /&gt;
**PostgresQL Hot-Standby and Stream Replication简介&lt;br /&gt;
**PostgresQL 高可用性集群架构简介&lt;br /&gt;
**PostgresQL PGPool 读写分离架构简介&lt;br /&gt;
**PostgresQL 集中管理及性能优化基础&lt;br /&gt;
&lt;br /&gt;
===大会 Conference===&lt;br /&gt;
&lt;br /&gt;
*第一天： 6月16日(周六)&lt;br /&gt;
&lt;br /&gt;
====主场1 ====&lt;br /&gt;
**会场主持:李元佳&lt;br /&gt;
**9:00-9：05大会介绍  &lt;br /&gt;
**9:05-9:15大会致辞&lt;br /&gt;
**9:15-10:00  主题演讲1   Magnus Hagander，PostgreSQL 9.2 features and Roadmap&lt;br /&gt;
**10:00-10:45 主题演讲1-1 Suzuki Koichi, Postgres-XC, Read/Write scalable PostgreSQL cluster&lt;br /&gt;
**10:45-11:00 主题演讲1-2 Suzuki Koichi, PostgreSQL usage in NTT &lt;br /&gt;
**11:00-11:45 主题演讲2   Simon  Rigg,&lt;br /&gt;
**12:00-12:15 集体照相&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 分场1 DBA专场 ====&lt;br /&gt;
==== 分场2 PG内核开发专场 ====&lt;br /&gt;
==== 分场3 应用开发专场   ====&lt;br /&gt;
&lt;br /&gt;
晚餐：18：00 &lt;br /&gt;
&lt;br /&gt;
*第二天6月17日(周日)&lt;br /&gt;
   上午&lt;br /&gt;
     会场1：&lt;br /&gt;
     会场2：&lt;br /&gt;
     会场3：&lt;br /&gt;
   下午：&lt;br /&gt;
     讨论、提问&lt;br /&gt;
&lt;br /&gt;
===PG-XC专场 PG XC Summit ===&lt;br /&gt;
*时间：6.14日 14:00 - 17:00&lt;br /&gt;
*地点：人民大学&lt;br /&gt;
*议题：&lt;br /&gt;
**PG-XC培训 14:00 - 16:00&lt;br /&gt;
**PG-XC讨论 16:00 - 17:00&lt;br /&gt;
*参与嘉宾：PG-XC首席架构师 铃木幸一 Suzuki Koichi&lt;br /&gt;
&lt;br /&gt;
== 大会演讲 TOPICS ==&lt;br /&gt;
*'''主题演讲Keynote: Magnus Hagander，PostgreSQL 9.2的新功能及路线图，PostgreSQL 9.2 features and Roadmap''', 45分钟&lt;br /&gt;
*'''主题演讲Keynote: Koichi Suzuki，Postgres-XC读写可扩展的PostgreSQL集群,Postgres-XC, Read/Write scalable PostgreSQL cluster''', 45分钟&lt;br /&gt;
:Postgres-XC is PostgreSQL-based database cluster based upon shared-nothing configuration.  Postgres-XC (simply XC) provides both read and write scalability.   XC's servers are symmetric so that applications can connect any of the servers.   With more servers, you can get more performance.    No dedicated hardware is required.   You need only a commodity hardware.   Each server provides single global database view.   Complete transaction management features are provided just as single PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
:The talk will cover the motivation, architecture, performance of XC, as well as high-availability features, milestone and how to be a part of XC community.   Architecture will be covered how how to provide full-fledged transaction property and both read/write scalability, as well as distributed query processing.   High-availability feature will cover how to backup each server and components for integration.&lt;br /&gt;
*'''主题演讲Keynote: Simon Rigg，企业级的PostgreSQL及未来的发展方向 Enterprise PostgreSQL &amp;amp; Futures''', 45分钟&lt;br /&gt;
*'''主题演讲Talks: Simon Rigg，PostgreSQL流复制及未来的发展方向 PostgreSQL Replication &amp;amp; Futures''', 45分钟&lt;br /&gt;
&lt;br /&gt;
*'''专家圆桌讨论Panel Discussion:Magnus, Simon, 彭智勇， 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲Talks:何伟平 He Weiping(Laser)， 45小时&lt;br /&gt;
*'''演讲Talks: DBA管理,Koichi Suzuki，PostgreSQL在电信市场的应用, PostgreSQL use in telecommunication market (NTT group)'''，15分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,萧少聪 Scott xiu，PostgreSQL的流复制'''，45分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,唐诚(阿里巴巴) Tang Cheng(Alibaba),greenplum数据库经验谈'''，45分钟&lt;br /&gt;
:1. greenplum的架构简介 2. greenplum 与　hadoop的对比 3. greenplum 的执行计划 4. 日常维护经验谈&lt;br /&gt;
&lt;br /&gt;
*'''演讲: DBA管理,德哥(斯凯网络) Digoal(Skymobi)，PostgreSQL 杂谈'''，45分钟&lt;br /&gt;
*'''演讲: DBA管理,Francs(斯凯网络),Francs(Skymobi)，PostgreSQL vs Oracle'''，45分钟&lt;br /&gt;
*'''DBA 圆桌讨论 Panel Discussion:&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 应用开发,(去哪儿)， '''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,， PostGIS 应用'''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,Gavin Yang(VMWARE)， PostgreSQL的数据分析工具MADlib, In-Database Analytics with MADlib'''，45分钟&lt;br /&gt;
:MADlib is an open-source library on RDBMS for scalable in-database big data analytics. It provides data-parallel implementations of mathematical, statistical and machine learning methods for structured and unstructured data. This talk introduces some of the problems we are tackling in the MADlib initiative and the solutions for them. We will also talk about our recent work in building decision trees and random forests within databases.&lt;br /&gt;
*'''演讲: 应用开发,蔡红雨(高鹏)，'''，45分钟&lt;br /&gt;
*'''应用开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲：内核开发,Magnus Hagander，Involving in PostgreSQL Development'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,彭智勇，PostgreSQL 内核简介'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,张孝(中国人民大学)，《高校数据库教学中PostgreSQL的学习、使用与定制》简介'''，45分钟&lt;br /&gt;
:本报告主要报告在高校的数据库教学中如何利用PostgreSQL这样的开源数据库系统来了帮助学生切实从“白盒”角度感受一个大型数据库管理系统并深化有关数据库相关理论的学习与认知。报告将从入门级入手介绍如何由外及内地学习和了解PostgreSQL的基本特点并进行系统从无到有的建立。进一步来介绍如何使用PostgreSQL来满足教学(比如数据库概论)的一些课程要求以及对某些数据库应用的支持。此外，还会根据教学中一些高级内容(比如针对研究生的《数据库原理与实现》的要求)介绍如何对PostgreSQL进行内核级的改造以提供新的系统特性或功能增强。&lt;br /&gt;
*'''演讲: 内核开发,Cao Yu(EMC),Multi-Instance Aware Query Processing'''，45分钟&lt;br /&gt;
:It is not uncommon for analytical database queries to contain multiple instances of the same (base or derived) relation. Unfortunately, almost all of the conventional relational query processing techniques are oblivious to these instances and instead deal with them as independent relations. As a result, the query evaluation performance would be suboptimal. This talk will describe our research on the problem of optimizing complex queries with multiple relational instances, which surprisingly has never received systematic or specialized public studies in the past. We investigate three fundamental query execution operations, i.e. table scan, table sorting and table join, to exploit the corresponding optimization opportunities when these operations involve multiple instances.&lt;br /&gt;
&lt;br /&gt;
:First, we present a light-weight multi-instance-aware plan evaluation engine that enables multiple instances of a relation to share one physical table scan. Second, we develop a sort-sharing-aware query processing framework to maximize the effects of sharing and collaboration during achieving different sorting requirements for multiple instances. Third, we propose an efficient algorithm for performing self-join operations between two instances and with join predicates involving two distinct instances. In all the above works, we validate our techniques by integrating them into PostgreSQL and testing their effectiveness using TPC benchmarks.&lt;br /&gt;
*'''演讲: 内核开发,孙鹏,'''，45分钟&lt;br /&gt;
*'''内核开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 李元佳,PostgreSQL用户会介绍'''，30分钟&lt;br /&gt;
*'''颁奖礼''' 30分钟&lt;br /&gt;
&lt;br /&gt;
== 大会演讲嘉宾 SPEAKERS ==  &lt;br /&gt;
* '''[http://www.hagander.net/ Magnus Hagander]'''&lt;br /&gt;
:Core Team Member and Major Developer of PostgreSQL Global Development Group&lt;br /&gt;
:Conference organizer at PostgreSQL Conference Europe&lt;br /&gt;
:Principal Database Consultant and Open Source Expert at Redpill Linpro&lt;br /&gt;
:President of the Board at PostgreSQL Europe&lt;br /&gt;
&lt;br /&gt;
*'''[http://www.linkedin.com/profile/view?id=16308658&amp;amp;locale=en_US&amp;amp;trk=tyah Simon Riggs]'''&lt;br /&gt;
&lt;br /&gt;
:Major Developer &amp;amp; Committer at PostgreSQL Global Development Group and CTO and Database Architect at 2ndQuadrant.&lt;br /&gt;
:Professional developer and consultant for PostgreSQL, following on from 20 years of experience with a variety of database technologies. Regular conference speaker.&lt;br /&gt;
:Enterprise-level experience working from within startup businesses product/service companies, including 2 successful IPOs. &lt;br /&gt;
&lt;br /&gt;
*'''[http://www.intellilink.co.jp/plan/corporate/fellow_OSS-DB.html 铃木幸一Suzuki Koichi]'''&lt;br /&gt;
&lt;br /&gt;
:Fellow at NTT DATA Intellilink Corporation&lt;br /&gt;
&lt;br /&gt;
:After joining NTT Laboratory, Koichi Suzuki was involved in the following R&amp;amp;D activities:&lt;br /&gt;
::Extended Unix Code (EUC) development and Unicode standardization,&lt;br /&gt;
::Oracle port to NTT's proprietary Unix workstations,&lt;br /&gt;
::Object-Relation Databae Management System development (UniSQL), and&lt;br /&gt;
::PostgreSQL and Postgres-XC development.&lt;br /&gt;
::From 1991 to 1993, he was a guest researcher in MIT.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://sourceforge.jp/projects/nttdatagroup-oss-square/wiki/koichi_suzuki Official web page](in Japanese)&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://postgres-xc.sourceforge.net/ Postgres-XC]&lt;br /&gt;
&lt;br /&gt;
*'''彭智勇 Peng zhiyong'''&lt;br /&gt;
&lt;br /&gt;
:日本京都大学工学博士，武汉大学计算机学院副院长、教授、博士生导师，中国计算机协会数据库专业委员会委员，国家信息产业部数据库标准工作组成员，武汉市电子政务宽带网络平台软件系统总体设计专家组成员，国内外许多学术会议程序委员会的委员。1985年毕业于武汉大学计算机科学系，获理学学士学位。1988年毕业于国防科技大学计算机系，获工学硕士学位。1995年毕业于日本京都大学信息科学系, 获工学博士学位。1995－1997年在日本京都高度技术研究所工作，研究员。1997－2000年在美国惠普公司的研究所工作，研究员。2001-2002年在武汉大学计算机科学与技术博士后流动站从事博士后研究工作。&lt;br /&gt;
&lt;br /&gt;
*'''张孝 Zhang Xiao'''&lt;br /&gt;
&lt;br /&gt;
:中国人民大学信息学院副教授，中科院计算所博士，中国人民大学硕士及学士，师从中国著名数据库专家王珊教授。&lt;br /&gt;
&lt;br /&gt;
:1997年以访问学者的身份在香港中文大学系统工程与工程管理系从事合作研究与开发。2006年在印第安纳大学DSI&amp;amp;DDE实验室作为访问学者进行e-Science相关的元数据管理和数据出处领域访问研究。&lt;br /&gt;
:主要研究领域包括：并行数据库系统、分布式数据库系统、移动数据库等。尤其擅长大型数据库系统体系的原理分析、设计和实现技术，熟悉开源数据库系统PostgreSQL源代码。近期研究兴趣集中在：数据库体系结构、大规模非结构化与智能视频数据管理、数据库关键词检索等。&lt;br /&gt;
:从1996年以来作为主要技术骨干或核心骨干先后参与多项国家科技攻关项目、国家自然科学基金、北京市重大科技项目及国家863项目。先后获得多项省部级奖励，包括教育部科技进步二等奖1次，北京市科技进步一等奖1次、二等奖2次。独立主持有国家自然科学基金、核高基专项子课题以及国际企业的合作项目等。&lt;br /&gt;
:目前是中国计算机学会高级会员和中国计算机学会虚拟现实与可视化专委会委员、ACM协会会员。先后担任APWEB 2011本地主席、国际研讨会WAIM/USD'2012 和国际研讨会APWeb/WAIM DBIR09程序委员会联合主席以及NDBC 2010 Demo主席等学术兼职。先后在《软件学报》、《计算机学报》、《计算机研究与发展》等期刊杂志以及ICDE等国际会议上单独或联合发表论文20余篇，参与王珊教授主编的3本著作的编写工作。主要担任《数据结构》、《数据库原理与实现》、《PostgreSQL源代码阅读与分析》等课程的教学工作。&lt;br /&gt;
&lt;br /&gt;
*何伟平&lt;br /&gt;
&lt;br /&gt;
*唐诚(阿里巴巴)&lt;br /&gt;
:阿里巴巴公司数据库专家，精通greenplum和PostgreSQL数据库，为公司这一技术领域的带头人。也精通oracle数据库和AIX小型机，精通C/C++编程。&lt;br /&gt;
*德哥(斯凯网络)&lt;br /&gt;
:斯凯网络DBA主管，多年数据库平台工作经验,熟悉Oracle,PostgreSQL,EnterpriseDB,GreenPlum,mongoDB等多种数据库平台,熟悉OS,存储等.负责斯凯网络数据库架构设计,性能调优与维护,存储系统设计与维护,OS维护等工作.&lt;br /&gt;
:Digoal is the cheif DBA in Sky-mobi which runs the largest mobile app market in China, he manages a system consisting of over 300 PostgreSQL nodes, he will share us with his experience in managing PostgreSQL.&lt;br /&gt;
*Francs(斯凯网络)&lt;br /&gt;
*Gavin Yang(VMWARE)&lt;br /&gt;
*Cao Yu(EMC)&lt;br /&gt;
:Yu is currently working at EMC Labs China as a senior research scientist, after receiving his Ph.D. from National University of Singapore. His broad research interest lies in large-scale data management. More specifically, he does system-oriented research on database query processing and optimization, massive data storage and MapReduce-based big data analytics.  He has published papers on top venues like SIGMOD, ICDE, EDBT, VLDB Journal, etc.&lt;br /&gt;
*萧少聪，&lt;br /&gt;
:曾任职于广东省Linux技术服务中心及红帽中国区唯一总代理，担任开源架构讲师及负责Red Hat系统开源产品华南地区技术顾问及架构设计工作。06年通过红帽RHCE认证，并获得红帽RHCI认证讲师资格，09年通过红帽全球最高认证 RHCA，成为国内前20名考取此认证的架构师。2012年成为EnterpriseDB公司在大中华区首位官方认证的 Postgres数据库讲 师，同年协助李元佳等人筹建PostgresQL中国用户组。现任北京神州立诚科技有限公司技术总监，拥有多年开发、网络架构设计及项目管理经 验，专注于开源Linux系统管理及Postgres数据库、优化、集群系统、云-虚拟架构设计领域。 &lt;br /&gt;
&lt;br /&gt;
*''孙鹏''&lt;br /&gt;
:中国科学院计算技术研究所工学博士，美国北德克萨斯大学访问学者，现任中国科学院软件研究所综合信息系统技术国家级重点实验室助理研究员，研究方向为空间数据库和空间数据库挖掘。&lt;br /&gt;
*李元佳,&lt;br /&gt;
&lt;br /&gt;
== 大会预算 Budget== &lt;br /&gt;
&lt;br /&gt;
我们在征集大会的赞助商，请赞助我们的大会，帮助我们大会顺利举行。&lt;br /&gt;
We are recruiting sponsors for the conference to help us hold this conference.&lt;br /&gt;
&lt;br /&gt;
*预算约11万 Spending 110,000 RMB&lt;br /&gt;
**外宾旅费费用6万 Travel funding for foreign speakers 60,000 RMB  （机票加酒店及车辆接送等每人约2万， 3 Guestes, each is about 20,000 ）&lt;br /&gt;
**大会场地 Conference Room 41,920 RMB（两天会议厅，加2天培训及3个分会场教室，另加投影仪等费用）&lt;br /&gt;
**用户礼品 Attendee Gift    6,000 RMB（T恤200件x30)&lt;br /&gt;
**购物袋胸卡 Bag   3,000 RMB  (200本x15元)&lt;br /&gt;
&lt;br /&gt;
*收入约11万 Income 110,000 RMB&lt;br /&gt;
**赞助 Sponsor         50,000RMB&lt;br /&gt;
**门票 Ticket          60,000RMB (300x200元=6万）&lt;br /&gt;
&lt;br /&gt;
== 参与我们 Participate == &lt;br /&gt;
&lt;br /&gt;
''演讲者''&lt;br /&gt;
&lt;br /&gt;
欢迎在PostgreSQL的企业应用、架构设计、运维管理、应用开发等方面有心得的朋友，发表演讲。如果你有需要发表的内容，请联系 galylee@gmail.com&lt;br /&gt;
&lt;br /&gt;
''志愿者''&lt;br /&gt;
&lt;br /&gt;
请帮助我们宣传大会，在你的网站，或者在论坛，或者在其他大会，告诉大家PG全国大会的举行信息。&lt;br /&gt;
&lt;br /&gt;
''赞助''&lt;br /&gt;
&lt;br /&gt;
我们是非盈利的组织，单单凭我们的力量无法承担大会的会场等相关的运营费用，只有相关企业的赞助和参与才有可能有必要的资源在国内培养PostgreSQL社区的形成。更多的赞助，可以让我们能邀请到更重量级的嘉宾为我们演讲，可以让我们有个交流和参与的平台。需要赞助的包括：场地费用及宣传品、邀请国外嘉宾的机票及食宿、嘉宾的演讲资料印刷、各种小礼物、大会首日晚上的酒会等等。。&lt;br /&gt;
&lt;br /&gt;
''捐赠''&lt;br /&gt;
&lt;br /&gt;
我们是旨在推广PG在中国发展的非营利的团体，欢迎企业为PG社区进行捐赠，捐赠的款项将完全用于PG社区的推广，包括官方文档的翻译、社区网站的托管、PG的技术交流会、PG大会的运营等。&lt;br /&gt;
&lt;br /&gt;
[http://wiki.postgresql.org/wiki/Pgconfchina2012-admin 大会组织]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Pgconfchina2012</id>
		<title>Pgconfchina2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Pgconfchina2012"/>
				<updated>2012-05-07T12:17:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* 大会演讲嘉宾 SPEAKERS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Conference China 2012 ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL中国用户会全国大会是由PostgreSQL中国用户会(CPUG)主办的旨在促进PostgreSQL在中国发展的非营利性的会议年度大会，大会是分享PostgreSQL的最佳使用实践、学习最新的功能特性、结交本领域的朋友的最佳场所。&lt;br /&gt;
&lt;br /&gt;
2012年度大会将于2012年6月14日-17日在北京举行，中国人民大学信息学院承办。其中6月14日-15日是面向初级人员的入门培训，6月16(周六),17(周日)日是正式大会。本次大会将邀请到社区的核心组员Magnus Hagander,主要开发人员Simon Rigg、PG-XC的首席架构师铃木幸一(Suzuki Koichi)及其他海外专家为本次大会分享最前沿的PostgreSQL方面的信息，同时还有业界的资深人员作相关演讲。&lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China which organized by CPUG(China Postgres User Group) is an annual conference for PostgreSQL users in China, the conference is a hub for learning new features, sharing the know-how, and making friends about PostgreSQL. &lt;br /&gt;
&lt;br /&gt;
PostgresQL User Group Conference China 2012 will be on 14-17 June 2012 at Renmin University of China in Beijing with two days of Tutorials on 14-15 June 2012. Magnus Hagander,Simon Rigg and Suzuki Koichi from community will also join this conference to give keynote speachs.&lt;br /&gt;
&lt;br /&gt;
== 信息 Information ==&lt;br /&gt;
&lt;br /&gt;
'''日期 DATE''': June 14-17, 2012&lt;br /&gt;
&lt;br /&gt;
'''地点 LOCATION''': 中国人民大学 Remin University of China, Beijing，China&lt;br /&gt;
&lt;br /&gt;
'''地址 ADDRESS''':  &lt;br /&gt;
&lt;br /&gt;
'''主办 Endorsed by''': CPUG(China PostgreSQL User Group) 中国PostgreSQL用户会&lt;br /&gt;
&lt;br /&gt;
'''承办 Organizer''': 中国人民大学信息学院 &lt;br /&gt;
&lt;br /&gt;
'''协办''': IT168盛拓传媒&lt;br /&gt;
&lt;br /&gt;
'''赞助支持伙伴 SPONSORS''': &lt;br /&gt;
&lt;br /&gt;
'''内容 TOPIC''': PostgreSQL的企业应用、架构设计、运维管理、应用开发&lt;br /&gt;
&lt;br /&gt;
'''费用 FEE''': 公司名义：300RMB(由于大会目前缺乏赞助商，所以需要门票收费，解决资金不足问题, 具体预算见下面),个人名义：200RMB(不提供发票), 学生100RMB(需提供学生证,不提供发票)。 &lt;br /&gt;
&lt;br /&gt;
'''缴费方法 ''':&lt;br /&gt;
   银行 &lt;br /&gt;
   开户人&lt;br /&gt;
   账号：&lt;br /&gt;
   &lt;br /&gt;
    注1： 如需开发票，请发邮件联系 galylee at gmail.com&lt;br /&gt;
   注2： 本次缴费由PG中国用户会负责，与IT168无任何关系，如产生任何纠纷由PG中国用户会负责，有问题请直接联系 李元佳 Galylee at gmail.com 13710389225。&lt;br /&gt;
&lt;br /&gt;
'''餐费 Lunch FEE''' 自助餐 120元/人(两天) 如需预定请注明&lt;br /&gt;
&lt;br /&gt;
'''其他赞助商'''&lt;br /&gt;
&lt;br /&gt;
'''参加方法 REGISTRATION''': &lt;br /&gt;
：本届大会将由IT168负责本次大会的报名活动，届时请参考相关主页。   &lt;br /&gt;
&lt;br /&gt;
'''联系方式 CONTACT''': &lt;br /&gt;
&lt;br /&gt;
   如有任何疑问欢迎联系。&lt;br /&gt;
   Please contact if you have any questions.&lt;br /&gt;
   大会会务负责人 Conference Orginizer：李元佳 Galy Lee&lt;br /&gt;
   手机 Mobile：+86-13710389225&lt;br /&gt;
   邮件 Email：galylee at gmail.com&lt;br /&gt;
&lt;br /&gt;
'''重要日期 IMPORTANT DATES'''&lt;br /&gt;
&lt;br /&gt;
  4月月1日 报名开始 &lt;br /&gt;
  6月1日   报名截至&lt;br /&gt;
&lt;br /&gt;
==大会主题Topics==&lt;br /&gt;
&lt;br /&gt;
6月14日-15日将是面向DBA入门培训的课程。 6月16日-17日是大会的演讲，大会安排在三个分会场举行，来自国内外的专家将会就PostgreSQL的话题进行演讲，演讲的主要主题如下：&lt;br /&gt;
*系统使用PostgreSQL的架构(包括HA，集群，灾备等)&lt;br /&gt;
*PostgreSQL的监控、配置、各种辅助工具&lt;br /&gt;
*各种数据库向PostgreSQL的迁移&lt;br /&gt;
*使用PostgreSQL的数据分析、数据仓库仓库&lt;br /&gt;
*性能调优、性能基线测试&lt;br /&gt;
*PostgreSQL的分区&lt;br /&gt;
*集群，复制&lt;br /&gt;
*实际的应用案例&lt;br /&gt;
*使用PostgreSQL的地理信息系统&lt;br /&gt;
*利用SSD等新技术提高PostgreSQL的性能&lt;br /&gt;
*PostgreSQL 9.2的新功能&lt;br /&gt;
*PostgreSQL的新特性的开发、中文相关的全文检索等&lt;br /&gt;
*PostgreSQL的内核分析，研究，以及教学上的应用&lt;br /&gt;
&lt;br /&gt;
A Two-day free Postgres DBA training will be given for people who want to learn PostgreSQL administration in the first two days. In 16-17 June, and the conference will be organized in three tracks, PostgreSQL experts from local and community will give talks about:&lt;br /&gt;
*System architecture for using PostgreSQL&lt;br /&gt;
*Migration of production systems from another database&lt;br /&gt;
*Data warehousing&lt;br /&gt;
*Tuning PostgreSQL for different work loads&lt;br /&gt;
*Replication and clustering&lt;br /&gt;
*Benchmarking and performance engineering&lt;br /&gt;
*Case studies&lt;br /&gt;
*Location-aware and mapping software with PostGIS&lt;br /&gt;
*PostgreSQL 9.2 features &lt;br /&gt;
*Research and teaching with PostgreSQL&lt;br /&gt;
Community major developers: Simmon Rigg, Suzuki Koichi will give talks about 9.2 features, PG-XC and clustering solutions.&lt;br /&gt;
&lt;br /&gt;
==Postgres集群研讨会 Postgres Clustering Summit ==&lt;br /&gt;
&lt;br /&gt;
*PG-XC专题会议 6.14日下午(仅限于相关公司或者个人)，讨论如何参与到PG-XC的开发等议题。&lt;br /&gt;
&lt;br /&gt;
== 大会议程 Schedule (subject to change) ==&lt;br /&gt;
===基础培训专场 Basic Tranning===&lt;br /&gt;
&lt;br /&gt;
*6月14日(周四) 9:00-17:00&lt;br /&gt;
**PostgresQL 核心架构基础(Process/Storage/Momery等) &lt;br /&gt;
**PostgresQL 安装及文件结构 &lt;br /&gt;
**PostgresQL 配置基础 &lt;br /&gt;
**PostgresQL 数据库逻辑结构(Database/Schema/Tablespace等) &lt;br /&gt;
**PostgresQL 数据备份及恢复 &lt;br /&gt;
**PostgresQL 数据库权限及安全管理 &lt;br /&gt;
*6月15日(周五) 9:00 – 17:00&lt;br /&gt;
**PostgresQL 基于时间点的数据恢复(Point-in Time Recovery) &lt;br /&gt;
**PostgresQL 运行时维护管理(MVCC/Vacuum/Reindex等) &lt;br /&gt;
**PostgresQL 存储过程及调试(pg/plsql，pgAdminIII Debuger)&lt;br /&gt;
**PostgresQL 监控排错基础&lt;br /&gt;
**PostgreSQL优化培训&lt;br /&gt;
&lt;br /&gt;
*以下内容只进行简要概念介绍(Day2)：&lt;br /&gt;
**数据库集群概论&lt;br /&gt;
**PostgresQL Hot-Standby and Stream Replication简介&lt;br /&gt;
**PostgresQL 高可用性集群架构简介&lt;br /&gt;
**PostgresQL PGPool 读写分离架构简介&lt;br /&gt;
**PostgresQL 集中管理及性能优化基础&lt;br /&gt;
&lt;br /&gt;
===大会 Conference===&lt;br /&gt;
&lt;br /&gt;
*第一天： 6月16日(周六)&lt;br /&gt;
&lt;br /&gt;
====主场1 ====&lt;br /&gt;
**会场主持:李元佳&lt;br /&gt;
**9:00-9：05大会介绍  &lt;br /&gt;
**9:05-9:15大会致辞&lt;br /&gt;
**9:15-10:00  主题演讲1   Magnus Hagander，PostgreSQL 9.2 features and Roadmap&lt;br /&gt;
**10:00-10:45 主题演讲1-1 Suzuki Koichi, Postgres-XC, Read/Write scalable PostgreSQL cluster&lt;br /&gt;
**10:45-11:00 主题演讲1-2 Suzuki Koichi, PostgreSQL usage in NTT &lt;br /&gt;
**11:00-11:45 主题演讲2   Simon  Rigg,&lt;br /&gt;
**12:00-12:15 集体照相&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 分场1 DBA专场 ====&lt;br /&gt;
==== 分场2 PG内核开发专场 ====&lt;br /&gt;
==== 分场3 应用开发专场   ====&lt;br /&gt;
&lt;br /&gt;
晚餐：18：00 &lt;br /&gt;
&lt;br /&gt;
*第二天6月17日(周日)&lt;br /&gt;
   上午&lt;br /&gt;
     会场1：&lt;br /&gt;
     会场2：&lt;br /&gt;
     会场3：&lt;br /&gt;
   下午：&lt;br /&gt;
     讨论、提问&lt;br /&gt;
&lt;br /&gt;
===PG-XC专场 PG XC Summit ===&lt;br /&gt;
*时间：6.14日 14:00 - 17:00&lt;br /&gt;
*地点：人民大学&lt;br /&gt;
*议题：&lt;br /&gt;
**PG-XC培训 14:00 - 16:00&lt;br /&gt;
**PG-XC讨论 16:00 - 17:00&lt;br /&gt;
*参与嘉宾：PG-XC首席架构师 铃木幸一 Suzuki Koichi&lt;br /&gt;
&lt;br /&gt;
== 大会演讲 TOPICS ==&lt;br /&gt;
*'''主题演讲Keynote: Magnus Hagander，PostgreSQL 9.2的新功能及路线图，PostgreSQL 9.2 features and Roadmap''', 45分钟&lt;br /&gt;
*'''主题演讲Keynote: Koichi Suzuki，Postgres-XC读写可扩展的PostgreSQL集群,Postgres-XC, Read/Write scalable PostgreSQL cluster''', 45分钟&lt;br /&gt;
:Postgres-XC is PostgreSQL-based database cluster based upon shared-nothing configuration.  Postgres-XC (simply XC) provides both read and write scalability.   XC's servers are symmetric so that applications can connect any of the servers.   With more servers, you can get more performance.    No dedicated hardware is required.   You need only a commodity hardware.   Each server provides single global database view.   Complete transaction management features are provided just as single PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
:The talk will cover the motivation, architecture, performance of XC, as well as high-availability features, milestone and how to be a part of XC community.   Architecture will be covered how how to provide full-fledged transaction property and both read/write scalability, as well as distributed query processing.   High-availability feature will cover how to backup each server and components for integration.&lt;br /&gt;
*'''主题演讲Keynote: Simon Rigg，企业级的PostgreSQL及未来的发展方向 Enterprise PostgreSQL &amp;amp; Futures''', 45分钟&lt;br /&gt;
*'''主题演讲Talks: Simon Rigg，PostgreSQL流复制及未来的发展方向 PostgreSQL Replication &amp;amp; Futures''', 45分钟&lt;br /&gt;
&lt;br /&gt;
*'''专家圆桌讨论Panel Discussion:Magnus, Simon, 彭智勇， 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲Talks:何伟平 He Weiping(Laser)， 45小时&lt;br /&gt;
*'''演讲Talks: DBA管理,Koichi Suzuki，PostgreSQL在电信市场的应用, PostgreSQL use in telecommunication market (NTT group)'''，15分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,萧少聪 Scott xiu，PostgreSQL的流复制'''，45分钟&lt;br /&gt;
*'''演讲Talks: DBA管理,唐诚(阿里巴巴) Tang Cheng(Alibaba),greenplum数据库经验谈'''，45分钟&lt;br /&gt;
:1. greenplum的架构简介 2. greenplum 与　hadoop的对比 3. greenplum 的执行计划 4. 日常维护经验谈&lt;br /&gt;
&lt;br /&gt;
*'''演讲: DBA管理,德哥(斯凯网络) Digoal(Skymobi)，PostgreSQL 杂谈'''，45分钟&lt;br /&gt;
*'''演讲: DBA管理,Francs(斯凯网络),Francs(Skymobi)，PostgreSQL vs Oracle'''，45分钟&lt;br /&gt;
*'''DBA 圆桌讨论 Panel Discussion:&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 应用开发,(去哪儿)， '''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,， PostGIS 应用'''，45分钟&lt;br /&gt;
*'''演讲: 应用开发,Gavin Yang(VMWARE)， PostgreSQL的数据分析工具MADlib, In-Database Analytics with MADlib'''，45分钟&lt;br /&gt;
:MADlib is an open-source library on RDBMS for scalable in-database big data analytics. It provides data-parallel implementations of mathematical, statistical and machine learning methods for structured and unstructured data. This talk introduces some of the problems we are tackling in the MADlib initiative and the solutions for them. We will also talk about our recent work in building decision trees and random forests within databases.&lt;br /&gt;
*'''演讲: 应用开发,蔡红雨(高鹏)，'''，45分钟&lt;br /&gt;
*'''应用开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲：内核开发,Magnus Hagander，Involving in PostgreSQL Development'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,彭智勇，PostgreSQL 内核简介'''，45分钟&lt;br /&gt;
*'''演讲: 内核开发,张孝(中国人民大学)，《高校数据库教学中PostgreSQL的学习、使用与定制》简介'''，45分钟&lt;br /&gt;
:本报告主要报告在高校的数据库教学中如何利用PostgreSQL这样的开源数据库系统来了帮助学生切实从“白盒”角度感受一个大型数据库管理系统并深化有关数据库相关理论的学习与认知。报告将从入门级入手介绍如何由外及内地学习和了解PostgreSQL的基本特点并进行系统从无到有的建立。进一步来介绍如何使用PostgreSQL来满足教学(比如数据库概论)的一些课程要求以及对某些数据库应用的支持。此外，还会根据教学中一些高级内容(比如针对研究生的《数据库原理与实现》的要求)介绍如何对PostgreSQL进行内核级的改造以提供新的系统特性或功能增强。&lt;br /&gt;
*'''演讲: 内核开发,Cao Yu(EMC),Multi-Instance Aware Query Processing'''，45分钟&lt;br /&gt;
:It is not uncommon for analytical database queries to contain multiple instances of the same (base or derived) relation. Unfortunately, almost all of the conventional relational query processing techniques are oblivious to these instances and instead deal with them as independent relations. As a result, the query evaluation performance would be suboptimal. This talk will describe our research on the problem of optimizing complex queries with multiple relational instances, which surprisingly has never received systematic or specialized public studies in the past. We investigate three fundamental query execution operations, i.e. table scan, table sorting and table join, to exploit the corresponding optimization opportunities when these operations involve multiple instances.&lt;br /&gt;
&lt;br /&gt;
:First, we present a light-weight multi-instance-aware plan evaluation engine that enables multiple instances of a relation to share one physical table scan. Second, we develop a sort-sharing-aware query processing framework to maximize the effects of sharing and collaboration during achieving different sorting requirements for multiple instances. Third, we propose an efficient algorithm for performing self-join operations between two instances and with join predicates involving two distinct instances. In all the above works, we validate our techniques by integrating them into PostgreSQL and testing their effectiveness using TPC benchmarks.&lt;br /&gt;
*'''演讲: 内核开发,孙鹏,'''，45分钟&lt;br /&gt;
*'''内核开发圆桌讨论: 1小时&lt;br /&gt;
&lt;br /&gt;
*'''演讲: 李元佳,PostgreSQL用户会介绍'''，30分钟&lt;br /&gt;
*'''颁奖礼''' 30分钟&lt;br /&gt;
&lt;br /&gt;
== 大会演讲嘉宾 SPEAKERS ==  &lt;br /&gt;
* '''[http://www.hagander.net/ Magnus Hagander]'''&lt;br /&gt;
:Core Team Member and Major Developer of PostgreSQL Global Development Group&lt;br /&gt;
:Conference organizer at PostgreSQL Conference Europe&lt;br /&gt;
:Principal Database Consultant and Open Source Expert at Redpill Linpro&lt;br /&gt;
:President of the Board at PostgreSQL Europe&lt;br /&gt;
&lt;br /&gt;
*'''[http://www.linkedin.com/profile/view?id=16308658&amp;amp;locale=en_US&amp;amp;trk=tyah Simon Riggs]'''&lt;br /&gt;
&lt;br /&gt;
:Major Developer &amp;amp; Committer at PostgreSQL Global Development Group and CTO and Database Architect at 2ndQuadrant.&lt;br /&gt;
:Professional developer and consultant for PostgreSQL, following on from 20 years of experience with a variety of database technologies. Regular conference speaker.&lt;br /&gt;
:Enterprise-level experience working from within startup businesses product/service companies, including 2 successful IPOs. &lt;br /&gt;
&lt;br /&gt;
*'''[http://www.intellilink.co.jp/plan/corporate/fellow_OSS-DB.html 铃木幸一Suzuki Koichi]'''&lt;br /&gt;
&lt;br /&gt;
:Fellow at NTT DATA Intellilink Corporation&lt;br /&gt;
&lt;br /&gt;
:After joining NTT Laboratory, Koichi Suzuki was involved in the following R&amp;amp;D activities:&lt;br /&gt;
::Extended Unix Code (EUC) development and Unicode standardization,&lt;br /&gt;
::Oracle port to NTT's proprietary Unix workstations,&lt;br /&gt;
::Object-Relation Databae Management System development (UniSQL), and&lt;br /&gt;
::PostgreSQL and Postgres-XC development.&lt;br /&gt;
::From 1991 to 1993, he was a guest researcher in MIT.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://sourceforge.jp/projects/nttdatagroup-oss-square/wiki/koichi_suzuki Official web page](in Japanese)&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://postgres-xc.sourceforge.net/ Postgres-XC]&lt;br /&gt;
&lt;br /&gt;
*'''彭智勇 Peng zhiyong'''&lt;br /&gt;
&lt;br /&gt;
:日本京都大学工学博士，武汉大学计算机学院副院长、教授、博士生导师，中国计算机协会数据库专业委员会委员，国家信息产业部数据库标准工作组成员，武汉市电子政务宽带网络平台软件系统总体设计专家组成员，国内外许多学术会议程序委员会的委员。1985年毕业于武汉大学计算机科学系，获理学学士学位。1988年毕业于国防科技大学计算机系，获工学硕士学位。1995年毕业于日本京都大学信息科学系, 获工学博士学位。1995－1997年在日本京都高度技术研究所工作，研究员。1997－2000年在美国惠普公司的研究所工作，研究员。2001-2002年在武汉大学计算机科学与技术博士后流动站从事博士后研究工作。&lt;br /&gt;
&lt;br /&gt;
*'''张孝 Zhang Xiao'''&lt;br /&gt;
&lt;br /&gt;
:中国人民大学信息学院副教授，中科院计算所博士，中国人民大学硕士及学士，师从中国著名数据库专家王珊教授。&lt;br /&gt;
&lt;br /&gt;
:1997年以访问学者的身份在香港中文大学系统工程与工程管理系从事合作研究与开发。2006年在印第安纳大学DSI&amp;amp;DDE实验室作为访问学者进行e-Science相关的元数据管理和数据出处领域访问研究。&lt;br /&gt;
:主要研究领域包括：并行数据库系统、分布式数据库系统、移动数据库等。尤其擅长大型数据库系统体系的原理分析、设计和实现技术，熟悉开源数据库系统PostgreSQL源代码。近期研究兴趣集中在：数据库体系结构、大规模非结构化与智能视频数据管理、数据库关键词检索等。&lt;br /&gt;
:从1996年以来作为主要技术骨干或核心骨干先后参与多项国家科技攻关项目、国家自然科学基金、北京市重大科技项目及国家863项目。先后获得多项省部级奖励，包括教育部科技进步二等奖1次，北京市科技进步一等奖1次、二等奖2次。独立主持有国家自然科学基金、核高基专项子课题以及国际企业的合作项目等。&lt;br /&gt;
:目前是中国计算机学会高级会员和中国计算机学会虚拟现实与可视化专委会委员、ACM协会会员。先后担任APWEB 2011本地主席、国际研讨会WAIM/USD'2012 和国际研讨会APWeb/WAIM DBIR09程序委员会联合主席以及NDBC 2010 Demo主席等学术兼职。先后在《软件学报》、《计算机学报》、《计算机研究与发展》等期刊杂志以及ICDE等国际会议上单独或联合发表论文20余篇，参与王珊教授主编的3本著作的编写工作。主要担任《数据结构》、《数据库原理与实现》、《PostgreSQL源代码阅读与分析》等课程的教学工作。&lt;br /&gt;
&lt;br /&gt;
*何伟平&lt;br /&gt;
&lt;br /&gt;
*唐诚(阿里巴巴)&lt;br /&gt;
:阿里巴巴公司数据库专家，精通greenplum和PostgreSQL数据库，为公司这一技术领域的带头人。也精通oracle数据库和AIX小型机，精通C/C++编程。&lt;br /&gt;
*德哥(斯凯网络)&lt;br /&gt;
:斯凯网络DBA主管，多年数据库平台工作经验,熟悉Oracle,PostgreSQL,EnterpriseDB,GreenPlum,mongoDB等多种数据库平台,熟悉OS,存储等.负责斯凯网络数据库架构设计,性能调优与维护,存储系统设计与维护,OS维护等工作.&lt;br /&gt;
:Digoal is the cheif DBA in Sky-mobi which runs the largest mobile app market in China, he manages a system consisting of over 300 PostgreSQL nodes, he will share us with his experience in managing PostgreSQL.&lt;br /&gt;
*Francs(斯凯网络)&lt;br /&gt;
*Gavin Yang(VMWARE)&lt;br /&gt;
*Cao Yu(EMC)&lt;br /&gt;
:Yu is currently working at EMC Labs China as a senior research scientist, after receiving his Ph.D. from National University of Singapore. His broad research interest lies in large-scale data management. More specifically, he does system-oriented research on database query processing and optimization, massive data storage and MapReduce-based big data analytics.  He has published papers on top venues like SIGMOD, ICDE, EDBT, VLDB Journal, etc.&lt;br /&gt;
*萧少聪，&lt;br /&gt;
:曾任职于广东省Linux技术服务中心及红帽中国区唯一总代理，担任开源架构讲师及负责Red Hat系统开源产品华南地区技术顾问及架构设计工作。06年通过红帽RHCE认证，并获得红帽RHCI认证讲师资格，09年通过红帽全球最高认证 RHCA，成为国内前20名考取此认证的架构师。2012年成为EnterpriseDB公司在大中华区首位官方认证的 Postgres数据库讲 师，同年协助李元佳等人筹建PostgresQL中国用户组。现任北京神州立诚科技有限公司技术总监，拥有多年开发、网络架构设计及项目管理经 验，专注于开源Linux系统管理及Postgres数据库、优化、集群系统、云-虚拟架构设计领域。 &lt;br /&gt;
&lt;br /&gt;
*''孙鹏''&lt;br /&gt;
:中国科学院计算技术研究所工学博士，美国北德克萨斯大学访问学者，现任中国科学院软件研究所综合信息系统技术国家级重点实验室助理研究员，研究方向为空间数据库和空间数据库挖掘。&lt;br /&gt;
*李元佳,&lt;br /&gt;
&lt;br /&gt;
== 大会预算 Buget== &lt;br /&gt;
&lt;br /&gt;
我们在征集大会的赞助商，请赞助我们的大会，帮助我们大会顺利举行。&lt;br /&gt;
We are recruiting sponsors for the conference to help us hold this conference.&lt;br /&gt;
&lt;br /&gt;
*预算约11万 Spending 110,000 RMB&lt;br /&gt;
**外宾旅费费用6万 Travel funding for foreign speakers 60,000 RMB  （机票加酒店及车辆接送等每人约2万， 3 Guestes, each is about 20,000 ）&lt;br /&gt;
**大会场地 Conference Room 41,920 RMB（两天会议厅，加2天培训及3个分会场教室，另加投影仪等费用）&lt;br /&gt;
**用户礼品 Attendee Gift    6,000 RMB（T恤200件x30)&lt;br /&gt;
**购物袋胸卡 Bag   3,000 RMB  (200本x15元)&lt;br /&gt;
&lt;br /&gt;
*收入约11万 Income 110,000 RMB&lt;br /&gt;
**赞助 Sponsor         50,000RMB&lt;br /&gt;
**门票 Ticket          60,000RMB (300x200元=6万）&lt;br /&gt;
&lt;br /&gt;
== 参与我们 Participate == &lt;br /&gt;
&lt;br /&gt;
''演讲者''&lt;br /&gt;
&lt;br /&gt;
欢迎在PostgreSQL的企业应用、架构设计、运维管理、应用开发等方面有心得的朋友，发表演讲。如果你有需要发表的内容，请联系 galylee@gmail.com&lt;br /&gt;
&lt;br /&gt;
''志愿者''&lt;br /&gt;
&lt;br /&gt;
请帮助我们宣传大会，在你的网站，或者在论坛，或者在其他大会，告诉大家PG全国大会的举行信息。&lt;br /&gt;
&lt;br /&gt;
''赞助''&lt;br /&gt;
&lt;br /&gt;
我们是非盈利的组织，单单凭我们的力量无法承担大会的会场等相关的运营费用，只有相关企业的赞助和参与才有可能有必要的资源在国内培养PostgreSQL社区的形成。更多的赞助，可以让我们能邀请到更重量级的嘉宾为我们演讲，可以让我们有个交流和参与的平台。需要赞助的包括：场地费用及宣传品、邀请国外嘉宾的机票及食宿、嘉宾的演讲资料印刷、各种小礼物、大会首日晚上的酒会等等。。&lt;br /&gt;
&lt;br /&gt;
''捐赠''&lt;br /&gt;
&lt;br /&gt;
我们是旨在推广PG在中国发展的非营利的团体，欢迎企业为PG社区进行捐赠，捐赠的款项将完全用于PG社区的推广，包括官方文档的翻译、社区网站的托管、PG的技术交流会、PG大会的运营等。&lt;br /&gt;
&lt;br /&gt;
[http://wiki.postgresql.org/wiki/Pgconfchina2012-admin 大会组织]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon2012CanadaInCoreReplicationMeeting</id>
		<title>PgCon2012CanadaInCoreReplicationMeeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon2012CanadaInCoreReplicationMeeting"/>
				<updated>2012-04-27T04:48:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Attendees (alphabetical) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL In-Core Replication meeting, pgCon 2012 =&lt;br /&gt;
&lt;br /&gt;
== Time and Place ==&lt;br /&gt;
&lt;br /&gt;
Wednesday, May 16th, 6pm to 10pm&lt;br /&gt;
&lt;br /&gt;
Ottawa somewhere, room TBA&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
Draft agenda follows.  Please let me know of any contributions/changes to the agenda you have:&lt;br /&gt;
&lt;br /&gt;
# Discussion of Multi-Master Theory (Simon)&lt;br /&gt;
# Demonstration of prototypes (Andres)&lt;br /&gt;
# Performance comparisons&lt;br /&gt;
# My use case (Keaton)&lt;br /&gt;
# Social Media use case (Simon)&lt;br /&gt;
&lt;br /&gt;
Broad and general discussion throughout. Notes and actions will be taken. Volunteers for tasks welcome.&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 6pm to 10pm, with various forms of food and possibly a drink or two, sponsored by 2ndQuadrant.&lt;br /&gt;
&lt;br /&gt;
== Attendees (alphabetical) ==&lt;br /&gt;
&lt;br /&gt;
* Keaton Adams&lt;br /&gt;
* Josh Berkus (prefer vegetarian)&lt;br /&gt;
* David Fetter&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Andres Freund&lt;br /&gt;
* Jim Mlodgenski&lt;br /&gt;
* Jim Nasby (plus guest)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Meeting limit about 20-25 people&lt;br /&gt;
&lt;br /&gt;
=== Joining the Meeting ===&lt;br /&gt;
&lt;br /&gt;
If you will be able to attend, please email Simon ([mailto:simon@2ndQuadrant.com simon@2ndQuadrant.com]) with the following:&lt;br /&gt;
&lt;br /&gt;
* Your Name&lt;br /&gt;
* What pizza topping you like&lt;br /&gt;
&lt;br /&gt;
and please come armed with detailed information about your future replication requirements.&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Binary_Replication_Tutorial</id>
		<title>Binary Replication Tutorial</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Binary_Replication_Tutorial"/>
				<updated>2012-04-12T17:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;Made labels match URLs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the new PostgreSQL 9 replication and standby databases guide. This new set of features implements possibly the longest awaited functionality in PostgreSQL's history.  As a result, a lot of people are going to be trying to deploy standby databases for the first time, and find the process rather unintuitive.   This guide is here to help.&lt;br /&gt;
&lt;br /&gt;
'''Work in progress: only 40% complete'''&lt;br /&gt;
&lt;br /&gt;
= 5 Minutes to Simple Replication =&lt;br /&gt;
&lt;br /&gt;
This is the easiest way to set up replication between a master and standby. It requires shutting down the master; other methods are detailed later in this guide.&lt;br /&gt;
&lt;br /&gt;
What we're going to do is shut down the master and copy the files we need over to the slave server, creating a cloned copy of the master.  Because the master is shut down, we don't have to worry about changes being made to it.&lt;br /&gt;
&lt;br /&gt;
Note:  Both the '5 minutes' instructions and the '10 minutes' version which follows do not deal with the complications that arise with a database that uses tablespaces, specifically what to do about the pg_tblspc directory and its contents.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
You must have the right setup to make this work:&lt;br /&gt;
&lt;br /&gt;
* 2 servers with similar operating systems (e.g both Linux 64-bit).&lt;br /&gt;
* The same release of PostgreSQL 9.0 installed on both servers.&lt;br /&gt;
* PostgreSQL superuser shell access on both servers.&lt;br /&gt;
* Knowledge of how to start, stop and reload Postgres.&lt;br /&gt;
* PostgreSQL 9.0 running on Server1.&lt;br /&gt;
* A database created and loaded on Server1.&lt;br /&gt;
* A postgres user or root user who has network &lt;br /&gt;
&lt;br /&gt;
See the full documentation for more information:&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.org/docs/9.0/static/warm-standby.html 9.0 Replication Documentation]&lt;br /&gt;
* [http://www.postgresql.org/docs/9.1/static/warm-standby.html 9.1 Replication Documentation]&lt;br /&gt;
&lt;br /&gt;
== Binary Replication in 6 Steps ==&lt;br /&gt;
&lt;br /&gt;
This 6-step guide, and all of the examples in this tutorial, assume that you have a master server at 192.168.0.1 and a standby server at 192.168.0.2 and that your database and its configuration files are installed at /var/lib/postgresql/data.  Replace those with whatever your actual server addresses and directories are.&lt;br /&gt;
&lt;br /&gt;
1. Edit postgresql.conf on the master to turn on streaming replication. Change these settings:&lt;br /&gt;
&lt;br /&gt;
  listen_address = '*'&lt;br /&gt;
  wal_level = hot_standby&lt;br /&gt;
  max_wal_senders = 3&lt;br /&gt;
&lt;br /&gt;
2. Edit pg_hba.conf on the master in order to let the standby connect. &lt;br /&gt;
&lt;br /&gt;
  host  replication   all   192.168.0.2/32      trust&lt;br /&gt;
&lt;br /&gt;
3. Edit recovery.conf and postgresql.conf on the standby to start up replication and hot standby.  First, in postgresql.conf, change this line:&lt;br /&gt;
&lt;br /&gt;
  hot_standby = on&lt;br /&gt;
&lt;br /&gt;
Then create a file in the standby's '''data directory''' (which is often the same directory as postgresql.conf and pg_hba.conf, except on some Linux distributions such as Debian and Ubuntu), called recovery.conf, with the following lines:&lt;br /&gt;
&lt;br /&gt;
  standby_mode = 'on'&lt;br /&gt;
  primary_conninfo = 'host=192.168.0.1'&lt;br /&gt;
&lt;br /&gt;
4. Shutdown the master and copy the files.  You want to copy most but not all files between the two servers, excluding the configuration files and the pg_xlog directory.  An example rsync script would be:&lt;br /&gt;
&lt;br /&gt;
  rsync -av --exclude pg_xlog --exclude postgresql.conf data/* 192.168.0.2:/var/lib/postgresql/data/&lt;br /&gt;
&lt;br /&gt;
5. Start the standby first, so that they can't get out of sync. (Messages will be logged about not being able to connect to the primary server, that's OK.)&lt;br /&gt;
&lt;br /&gt;
6. Start the master.&lt;br /&gt;
 &lt;br /&gt;
== Starting Replication with only a Quick Master Restart ==&lt;br /&gt;
&lt;br /&gt;
Is taking down the master for long enough to copy the files too long?  Then you need the 10-minute version.&lt;br /&gt;
&lt;br /&gt;
What we're going to do this time is similar to what we did before, cloning the database by copying the files from the master to the slave server.  However, because the database is only going to be shut down for a short period of time, long enough to activate the changes in the configuration file, after we've copied the data files we will need to copy additional files so that the slave will be an up-to-date copy of the master.  &lt;br /&gt;
&lt;br /&gt;
So, we will tell the master we're running a backup, copy the data files (not quite the same set of files as before), tell the master the backup is complete, then copy the WAL files in the pg_xlog directory so that when the slave comes up it can make all the changes that were committed to the master database after the backup was started.&lt;br /&gt;
&lt;br /&gt;
First, start with the same prerequisites as above.&lt;br /&gt;
&lt;br /&gt;
1. Set the postgresql.conf variables the same in step (1) as above.&lt;br /&gt;
&lt;br /&gt;
2. Don't close the file yet.  You'll need to set two other variables which control the size of your write-ahead-log (WAL).  The first is wal_keep_segments, the second is checkpoint_segments.  Unless you've already done so, you're going to need to increase these, which is usually a good idea for performance anyway.  You want the WAL to be big enough to not get used up in 15 or 20 minutes.  If you don't have a clear idea of that, here's some reasonable values, based on how busy and how large your database is.  Also, a database with large blob objects may require a much larger setting.  Remember, these logs will take up disk space, so make sure that you have enough available - space requirements are below.&lt;br /&gt;
  &lt;br /&gt;
  checkpoint_segments = 8    &lt;br /&gt;
  wal_keep_segments = 8 &lt;br /&gt;
  # light load       500MB&lt;br /&gt;
&lt;br /&gt;
  checkpoint_segments = 16&lt;br /&gt;
  wal_keep_segments = 32&lt;br /&gt;
  # moderately busy  1.5GB  &lt;br /&gt;
&lt;br /&gt;
  checkpoint_segments = 64&lt;br /&gt;
  wal_keep_segments = 128&lt;br /&gt;
  # busy server      5GB&lt;br /&gt;
&lt;br /&gt;
You don't ''have'' to increase checkpoint_segments in order to increase wal_keep_segments, but it's generally a good idea.  Now save the file.  &lt;br /&gt;
&lt;br /&gt;
3. Edit pg_hba.conf as in (2) in the &amp;quot;Six Steps&amp;quot; above.&lt;br /&gt;
&lt;br /&gt;
4. Now you need to restart the master.  Given the interruption in service, you should probably plan this ahead. &lt;br /&gt;
&lt;br /&gt;
5. Edit postgresql.conf and recovery.conf on the standby as in (3) above.&lt;br /&gt;
&lt;br /&gt;
6. Now, we're going to need to copy the files from the master and start the standby.  Unlike in the 6-step version, this needs to be done quickly or the standby will fail to sync and you'll need to try again.  First step, you need to tell the master you're starting a backup (see below for a more detailed explanation of this).  Log in to psql as the database superuser.&lt;br /&gt;
&lt;br /&gt;
  psql -U postgres&lt;br /&gt;
  # select pg_start_backup('clone',true);&lt;br /&gt;
&lt;br /&gt;
Note that the string you use as a backup label doesn't matter; use any string you want.&lt;br /&gt;
&lt;br /&gt;
7. Now, quickly copy all the database files.  This rsync is slightly different from the 6-step version:&lt;br /&gt;
&lt;br /&gt;
   rsync -av --exclude pg_xlog --exclude postgresql.conf --exclude postgresql.pid \ &lt;br /&gt;
      data/*  192.168.0.2:/var/lib/postgresql/data/&lt;br /&gt;
&lt;br /&gt;
8. As soon as that's done you need to stop the backup on the master:&lt;br /&gt;
  &lt;br /&gt;
   # select pg_stop_backup();&lt;br /&gt;
&lt;br /&gt;
9. As soon as that completes, you need to quickly copy the WAL files from the master to the standby.&lt;br /&gt;
&lt;br /&gt;
   rsync -av data/pg_xlog 192.168.0.2:/var/lib/postgresql/data/&lt;br /&gt;
&lt;br /&gt;
10. Now, start the standby.&lt;br /&gt;
&lt;br /&gt;
If you've done this quickly enough, then the standby should catch up with the master and you should be replicating. If not, you'll get this message:&lt;br /&gt;
&lt;br /&gt;
... which means you need to try again, possibly with checkpoint_segments and wal_keep_segments higher.  If that still doesn't work, you're going to need to use the even more complex archiving method described below.&lt;br /&gt;
&lt;br /&gt;
Now, the rest of the guide will explain how to deal with more complex situations, such as archive logs, handling security, and maintaining availability, failover and standby promotion.&lt;br /&gt;
&lt;br /&gt;
= Introduction to Binary Replication =&lt;br /&gt;
&lt;br /&gt;
Binary replication is also called &amp;quot;Hot Standby&amp;quot; and &amp;quot;Streaming Replication&amp;quot; which are two separate, but complimentary, features of PostgreSQL 9.0 and later.  Here's some general information about how they work and what they are for.&lt;br /&gt;
&lt;br /&gt;
== What Can You Do With Binary Replication? ==&lt;br /&gt;
&lt;br /&gt;
* Have a simple and complete replica of your production database, preventing all but a couple seconds of data loss even under catastrophic circumstances.&lt;br /&gt;
* Load-balance between your read/write master server and multiple read-only servers.&lt;br /&gt;
* Run reporting or other long-running queries on a replica server, taking them off your main transaction-processing server.&lt;br /&gt;
* Replicate all DDL, including table and index changes, and even creating new databases.&lt;br /&gt;
* Replicate a hosted multi-tenant database, making no specific requirements for primary keys or database changes of your users.&lt;br /&gt;
&lt;br /&gt;
== What Can't You Do With Binary Replication? ==&lt;br /&gt;
&lt;br /&gt;
* Replicate a specific table, schema, or database.  Binary replication is the entire Postgres instance (or &amp;quot;cluster&amp;quot;).&lt;br /&gt;
* Multi-master replication.  Multi-master binary replication is probably technically impossible.&lt;br /&gt;
* Replicate between different versions of PostgreSQL, or between different platforms.&lt;br /&gt;
* Set up replication without administration rights on the server.  Sorry, working on it.&lt;br /&gt;
* Replicate data synchronously, guaranteeing zero data loss.  But ... this is coming in PostgreSQL 9.1.&lt;br /&gt;
&lt;br /&gt;
For the reasons above, we expect that Slony-I, Londiste, Bucardo, pgPool2 and other systems will continue to be used.&lt;br /&gt;
&lt;br /&gt;
== Transaction Logs and Log Shipping ==&lt;br /&gt;
&lt;br /&gt;
Users who are already familiar with the PostgreSQL transaction log and warm standby can skip this section.&lt;br /&gt;
&lt;br /&gt;
An individual &amp;quot;instance&amp;quot;, &amp;quot;server&amp;quot;, or (confusingly) &amp;quot;cluster&amp;quot; of PostgreSQL (hereafter Server) consists of a single postmaster server process connected to a single initialized PostgreSQL data directory (PGDATA), which in turn contains several databases.  Each running Server has a transaction log, located in the PGDATA/pg_xlog directory.  This transaction log consists of binary snapshots of data, written to record synchronously each change to all databases' data, in case of unexpected shutdown of the database server (such as in a power failure).  This ensures that data is not corrupted and no completed transaction is lost.&lt;br /&gt;
&lt;br /&gt;
You can also use this log to allow a copy of the original database to replicate changes made to a master database.  This was first implemented with the PITR feature in PostgreSQL 8.0, and is known as &amp;quot;log shipping&amp;quot;.   Log shipping is required for most forms of binary replication.&lt;br /&gt;
&lt;br /&gt;
This log consists of 16MB segments full of new data pages (8K segments) of the database, and not of SQL statements.  For this reason there is no before and after auditing possible via this log, as you cannot know exactly what has changed. Also, the log is treated as a buffer, being deleted as it is no longer needed for crash recovery. More importantly, the data page format of the log means that log segments can only be applied to a database which is binary-identical to the database which created the log.  &lt;br /&gt;
&lt;br /&gt;
== PITR, Warm Standby, Hot Standby, and Streaming Replication ==&lt;br /&gt;
&lt;br /&gt;
For the rest of this tutorial, we will refer to the active read-write instance of the Server which generates transaction logs as the &amp;quot;Master&amp;quot; and the passive, read-only or offline instance (or instances) of the Server which receives transaction logs as the &amp;quot;Standby&amp;quot; (or &amp;quot;Standbys&amp;quot;).  The term Master/Standby is equivalent to other terminology which may be used in the database industry, such as Master/Slave, Primary/Secondary or Primary/Replica.&lt;br /&gt;
&lt;br /&gt;
=== PITR ===&lt;br /&gt;
&lt;br /&gt;
In Point-In-Time Recovery (PITR), transaction logs are copied and saved to storage until needed.  Then, when needed, the Standby server can be &amp;quot;brought up&amp;quot; (made active) and transaction logs applied, either stopping when they run out or at a prior point indicated by the administrator.  PITR has been available since PostgreSQL version 8.0, and as such will not be documented here.&lt;br /&gt;
&lt;br /&gt;
PITR is primarily used for database forensics and recovery.  It is also useful when you need to back up a very large database, as it effectively supports incremental backups, which pg_dump does not.&lt;br /&gt;
&lt;br /&gt;
=== Warm Standby ===&lt;br /&gt;
&lt;br /&gt;
In Warm Standby, transaction logs are copied from the Master and applied to the Standby immediately after they are received, or at a short delay. The Standby is offline (in &amp;quot;recovery mode&amp;quot;) and not available for any query workload. This allows the Standby to be brought up to full operation very quickly.  Warm Standby has been available since version 8.3, and will not be fully documented here.&lt;br /&gt;
&lt;br /&gt;
Warm Standby requires Log Shipping.  It is primary used for database failover.&lt;br /&gt;
&lt;br /&gt;
=== Hot Standby ===&lt;br /&gt;
&lt;br /&gt;
Hot Standby is identical to Warm Standby, except that the Standby is available to run read-only queries.  This offers all of the advantages of Warm Standby, plus the ability to distribute some business workload to the Standby server(s).  Hot Standby by itself requires Log Shipping.&lt;br /&gt;
&lt;br /&gt;
Hot Standby is used both for database failover, and can also be used for load-balancing.  In contrast to Streaming Replication, it places no load on the master (except for disk space requirements) and is thus theoretically infinitely scalable.  A WAL archive could be distributed to dozens or hundreds of servers via network storage.  The WAL files could also easily be copied over a poor quality network connection, or by SFTP.&lt;br /&gt;
&lt;br /&gt;
However, since Hot Standby replicates by shipping 16MB logs, it is at best minutes behind and sometimes more than that.  This can be problematic both from a failover and a load-balancing perspective.&lt;br /&gt;
&lt;br /&gt;
=== Streaming Replication ===&lt;br /&gt;
&lt;br /&gt;
Streaming Replication improves either Warm Standby or Hot Standby by opening a network connection between the Standby and the Master database, instead of copying 16MB log files. This allows data changes to be copied over the network almost immediately on completion on the Master.  &lt;br /&gt;
&lt;br /&gt;
In Streaming Replication, the master and the standby have special processes called the walsender and walreceiver which transmit modified data pages over a network port.  This requires one fairly busy connection per standby, imposing an incremental load on the master for each additional standby.  Still, the load is quite low and a single master should be able to support multiple standbys easily.&lt;br /&gt;
&lt;br /&gt;
Streaming replication does not require log shipping in normal operation.  It may, however, require log shipping to start replication, and can utilize log shipping in order to catch up standbys which fall behind.&lt;br /&gt;
&lt;br /&gt;
= How to Replicate =&lt;br /&gt;
&lt;br /&gt;
== Cloning a Live Database ==&lt;br /&gt;
&lt;br /&gt;
If your workload doesn't allow you to take the master down (and whose does?), things get a bit more complicated.  You need to somehow take a &amp;quot;coherent snapshot&amp;quot; of the master, so that you don't have an inconsistent or corrupt database on the standby.  Now, in some cases this can be done via filesystem snapshotting tools or similar tricks, but as that approach is tricky and platform-dependant, we're not going to cover it here.&lt;br /&gt;
&lt;br /&gt;
Instead, we're going to cover the built-in method, which involves keeping a log of all changes applied to the database which happen during the copying process.  The steps are essentially the same, regardless of whether you're planning to use just hot standby, streaming replication, or both. There are two parts:&lt;br /&gt;
&lt;br /&gt;
* Cloning the database files&lt;br /&gt;
* Copying the archive logs&lt;br /&gt;
&lt;br /&gt;
Unintuitive as it is, the latter needs to be set up first, so we're going to start with that.&lt;br /&gt;
&lt;br /&gt;
== Setting Up Archiving On The Master ==&lt;br /&gt;
&lt;br /&gt;
Archiving is the process of making an extra copy of each WAL file as it is completed.  These log files then need to somehow be accessed by the standby.  There are three basic ways to handle this, and you should decide in advance what method you're going to use:&lt;br /&gt;
&lt;br /&gt;
# Manually&lt;br /&gt;
# Automatic file copying from master to standby using rsync or simiar&lt;br /&gt;
# Writing them to a common shared network file location&lt;br /&gt;
&lt;br /&gt;
The first method is only appropriate if you're archiving logs only to jump-start streaming replication, and you have a fairly low-traffic database or the ability to stop all writes.  The third method is probably the easiest to manage if you have an appropriate network share; it can even be used to support multiple standbys with some extra thought and scripting.  All of these methods will be explained below.&lt;br /&gt;
&lt;br /&gt;
This needs to be turned on on the master, which if it's never been done before may require a restart (sorry, working on it), and will certainly require a reload.  You'll need to set the following parameters:&lt;br /&gt;
&lt;br /&gt;
   wal_level = hot_standby&lt;br /&gt;
   archive_mode = on&lt;br /&gt;
   archive_command = 'some command'&lt;br /&gt;
&lt;br /&gt;
What archive command you use depends on which archiving approach you are taking, of course.  Here are three examples of commands you might use.  Note that you will need to create the &amp;quot;archive&amp;quot; directories.&lt;br /&gt;
&lt;br /&gt;
# Manual: cp -f %p /var/lib/postgresql/data/archive/%f &amp;lt;/dev/null&lt;br /&gt;
# Automatic Copy: rsync -a %p 192.168.0.2:/var/lib/pgsql/data/archive/%f&lt;br /&gt;
# Network Share: cp -f %p /shares/walarchive/archive/%f &amp;lt;/dev/null&lt;br /&gt;
&lt;br /&gt;
In these commands, %p is replace by postgres at invocation time with the full path and name of the WAL file, and %f with the name of the file alone.  There are more escapes and parameters dealing with WAL archiving which will be detailed later in the tutorial.  Note that, in real production, you are unlikely to want to use any commands as simple as the above.  In general, you will want to have archive_command call an executable script which traps errors and can be disabled.  Examples of such scripts are available in this tutorial.&lt;br /&gt;
&lt;br /&gt;
Now, if archive_mode was originally &amp;quot;off&amp;quot; or if you had to change wal_level, you're going to need to restart the master (sorry, this will be fixed in a later version).  If you just needed to change the archive_command, however, only a reload is required.&lt;br /&gt;
&lt;br /&gt;
Once you've restarted or reloaded, check the master's logs to make sure archiving is working.  If it's failing, the master will complain extensively.  You might also check that archive log files are being created; run the command &amp;quot;SELECT pg_switch_xlog();&amp;quot; as the superuser to force a new log to be written.&lt;br /&gt;
&lt;br /&gt;
== Setting Up Archiving on the Standby ==&lt;br /&gt;
&lt;br /&gt;
The standby needs to be configured to consume logs.  This is simpler than the master's setup, and doesn't really change no matter what archive copying strategy you're using.&lt;br /&gt;
&lt;br /&gt;
== Recovery.conf ==&lt;br /&gt;
&lt;br /&gt;
On the standby, replication configuration is controlled through a file called, for historical reasons, recovery.conf.  If this file is present in PostgreSQL's data directory when PostgreSQL is started, that server will assume it is a standby and attempt to obey it.  Generally, there is an example file installed with the other PostgreSQL shared docs.  However, that example file covers all of the various replication options at once, so it's often simpler to write your own file, from scratch.  Any change to recovery.conf requires a restart of the standby.&lt;br /&gt;
&lt;br /&gt;
In recovery.conf, you need to add a command to copy the archived WAL files to the standby's on pg_xlog directory.  This is the mirror image of the archive_command on the master.  Generally, a simple cp command is sufficient:&lt;br /&gt;
&lt;br /&gt;
  restore_command = 'cp -f /var/lib/postgresql/data/archive/%f %p &amp;lt;/dev/null'&lt;br /&gt;
  restore_command = 'cp -f /shares/walarchive/%f %p &amp;lt;/dev/null'&lt;br /&gt;
&lt;br /&gt;
Again, you might want to use a simple shell script which traps error messages, and, importantly, deletes archive files which are no longer needed. If you will be doing only hot standby and not using streaming replication, you probably want to compile the pg_standby binary provided in PostgreSQL's additional modules or &amp;quot;contrib&amp;quot;, and use it instead:&lt;br /&gt;
&lt;br /&gt;
  restore_command = 'pg_standby /shares/walarchive/%f %p %r'&lt;br /&gt;
&lt;br /&gt;
More detail on pg_standby is in its documentation.&lt;br /&gt;
&lt;br /&gt;
== Cloning a Snapshot of the Master ==&lt;br /&gt;
&lt;br /&gt;
Once you have archiving working, you're ready to clone the master database.  At this point, it's a simple process:&lt;br /&gt;
&lt;br /&gt;
# As superuser, issue the command &amp;quot;SELECT pg_start_backup('backup');&amp;quot; on the master.&lt;br /&gt;
# Copy all of the database files to the standby.&lt;br /&gt;
# Start the standby database.&lt;br /&gt;
# Issue the command &amp;quot;SELECT pg_stop_backup();&amp;quot; on the master.&lt;br /&gt;
&lt;br /&gt;
Of course, each of those steps deserves a little more elaboration.  pg_start_backup and pg_stop_backup are special commands you issue on the master in order to create, hold open, and close, a &amp;quot;snapshot&amp;quot; which is how we make sure your copy of the database is not inconsistent.  They also write special files to the archive log which tell the standby when it has a complete snapshot.&lt;br /&gt;
&lt;br /&gt;
If you are using the &amp;quot;manual&amp;quot; method of synching the archive logs, immediately after step 4 you need to do one last rsync or copy of the archive logs to the standby.&lt;br /&gt;
&lt;br /&gt;
When you're done with the cloning, you should see output similar to the below:&lt;br /&gt;
&lt;br /&gt;
This means that you're up and replicating, and should now be able to run queries on the standby.&lt;br /&gt;
&lt;br /&gt;
== Failing Over To The Standby ==&lt;br /&gt;
&lt;br /&gt;
Of course, one of the major reasons to have a standby is in case something (planned or unplanned) causes the master server to shut down.  Then you want to &amp;quot;fail over&amp;quot;, or stop replication and change the standby to a full read-write master.&lt;br /&gt;
&lt;br /&gt;
The recommended method is the same regardless of the type of replication or standby: via &amp;quot;trigger file&amp;quot;.  First, you need to set a configuration option in recovery.conf on the standby:&lt;br /&gt;
  &lt;br /&gt;
  trigger_file = '/var/lib/postgresql/data/failover'&lt;br /&gt;
&lt;br /&gt;
Then, when it's time to fail over, you just create an empty file with that name, such as by using the &amp;quot;touch&amp;quot; command.  The standby will notice the file, attempt to apply any remaining WAL records or files it has received, and then switch to read-write or &amp;quot;master&amp;quot; mode.  When this happens, you will see a message like this in the Postgres log:&lt;br /&gt;
&lt;br /&gt;
PostgreSQL will also rename the recovery.conf file to recovery.done in order to prevent having the new master fail on restart.  For this reason, the recovery.conf file should be owned by the same user which the server runs as (usually &amp;quot;postgres&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The alternative to using a trigger file is to failover manually, by deleting or renaming the recovery.conf file and restarting the standby.  This method is inferior because it requires a restart which would interrupt any read-only connections to the standby currently in use.&lt;br /&gt;
&lt;br /&gt;
In a high-availability system, the above activity should be managed automatically in order to avoid downtime.  PostgreSQL itself supplies no tools to do this, but numerous third-party utilities such as &amp;quot;Linux heartbeat&amp;quot; are compatible with PostgreSQL replication.&lt;br /&gt;
&lt;br /&gt;
It's important to prevent the original master from restarting after failover, lest you end up with a &amp;quot;split brain&amp;quot; problem and data loss.  There is a substantial body of literature on this, and third-party tools, so we won't discuss them here at this time.&lt;br /&gt;
&lt;br /&gt;
== Load Balancing ==&lt;br /&gt;
&lt;br /&gt;
== Managing Archive Logs ==&lt;br /&gt;
&lt;br /&gt;
== Tuning and Configuration of Binary Replication ==&lt;br /&gt;
&lt;br /&gt;
== Monitoring Replication ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Replication]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/WWW_FDW</id>
		<title>WWW FDW</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/WWW_FDW"/>
				<updated>2011-09-28T14:23:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;While it may be pronounced &amp;quot;shed-yule&amp;quot; in some parts of the world, it's spelled with a 'c'.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Idea ==&lt;br /&gt;
&lt;br /&gt;
Provide ability to work with data from web service using SQL.&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
* ability to select data from web service using different criterias (filters, sort, aggregation, other sql features);&lt;br /&gt;
* ability to join/union data from web service with other table data (probably output of another web service);&lt;br /&gt;
* export of data from web service into table view; &lt;br /&gt;
* common interface for any web service.&lt;br /&gt;
&lt;br /&gt;
== Details ==&lt;br /&gt;
&lt;br /&gt;
Will be implemented using [[Foreign data wrappers]] ([[SQL/MED]]).&lt;br /&gt;
&lt;br /&gt;
Main complexity here is to build easy interface for wide range of web services. Main goal for this implementation will be [http://en.wikipedia.org/wiki/REST#RESTful_web_services RESTful] services.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Each FDW will have following configuration options:&lt;br /&gt;
* uri - base URI for web service;&lt;br /&gt;
* uri_select - part of URI for selection command, default - &amp;quot;&amp;quot;;&lt;br /&gt;
* uri_insert - part of URI for insert command, default - &amp;quot;&amp;quot; (reserved for future);&lt;br /&gt;
* uri_delete - part of URI for delete command, default - &amp;quot;&amp;quot; (reserved for future);&lt;br /&gt;
* uri_update - part of URI for update command, default - &amp;quot;&amp;quot; (reserved for future);&lt;br /&gt;
* uri_callback - callback for URI forming (in case it's not static);&lt;br /&gt;
* method_select - http method for select command, default value - &amp;quot;GET&amp;quot;;&lt;br /&gt;
* method_insert - http method for insert command, default value - &amp;quot;PUT&amp;quot;;&lt;br /&gt;
* method_delete - http method for delete command, default value - &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* method_update - http method for update command, default value - &amp;quot;POST&amp;quot;;&lt;br /&gt;
* request_serialize_callback - callback for forming request (for non standard cases, will be covered later);&lt;br /&gt;
* response_type - web service response content type, possible values:&lt;br /&gt;
** json - default value;&lt;br /&gt;
** xml&lt;br /&gt;
** yaml&lt;br /&gt;
** other&lt;br /&gt;
* response_deserialize_callback - callback for parsing responses of &amp;quot;other&amp;quot; type;&lt;br /&gt;
* response_iterate_callback - callback for extracting/iterating rows from response.&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
There is following correspondence between sql commands and http methods:&lt;br /&gt;
* SELECT - GET&lt;br /&gt;
* INSERT - PUT&lt;br /&gt;
* DELETE - DELETE&lt;br /&gt;
* UPDATE - POST&lt;br /&gt;
&lt;br /&gt;
There are configurable options for correspondence above.&lt;br /&gt;
&lt;br /&gt;
In the current version (postgres 9.1) there is no implementation for FDW INSERT/DELETE/UPDATE. But stuff related for INSERT/DELETE/UPDATE is reserved for future.&lt;br /&gt;
&lt;br /&gt;
=== Request ===&lt;br /&gt;
&lt;br /&gt;
Since all request parameters to web service are pairs (key,value), therefore default behavior for request preparation is:&lt;br /&gt;
pack pairs (column, value) from sql query as &amp;quot;column=pair&amp;quot;. Operators differ from &amp;quot;=&amp;quot; will raise an error (if request_serialize_callback wasn't specified).&lt;br /&gt;
&lt;br /&gt;
request_serialize_callback is designed for non standard request preparation (aliases for parameters, default parameters etc).&lt;br /&gt;
&lt;br /&gt;
=== Response ===&lt;br /&gt;
&lt;br /&gt;
In case response type is one of:&lt;br /&gt;
* json&lt;br /&gt;
* xml&lt;br /&gt;
* yaml&lt;br /&gt;
response will be parsed and response elements will be casted to postgres types.&lt;br /&gt;
If response_iterate_callback is specified it will be called from IterateForeignScan_function with result structure and bigint iterator.&lt;br /&gt;
Other way first array (if it has all elements of the same type/structure) will be returned (breadth-first search).&lt;br /&gt;
&lt;br /&gt;
postgres has following data types which will cover needed data structures:&lt;br /&gt;
* strings/numbers/boolean/NULL;&lt;br /&gt;
* [http://www.postgresql.org/docs/9.1/interactive/arrays.html arrays];&lt;br /&gt;
* [http://www.postgresql.org/docs/9.1/interactive/rowtypes.html composite type].&lt;br /&gt;
&lt;br /&gt;
In case of &amp;quot;other&amp;quot; response type response_deserialize_callback will be called. It's return value is array of result rows.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION example_response_iterate_callback(e anyelement, idx bigint) RETURNS g AS $$&lt;br /&gt;
DECLARE&lt;br /&gt;
	r	g;&lt;br /&gt;
BEGIN&lt;br /&gt;
	BEGIN&lt;br /&gt;
		IF idx &amp;gt; array_length(e.items, 1) THEN&lt;br /&gt;
			RETURN	NULL;&lt;br /&gt;
		END IF;&lt;br /&gt;
		r.title	:= e.items[idx].title;&lt;br /&gt;
		r.link	:= e.items[idx].link;&lt;br /&gt;
		r.snippet	:= e.items[idx].snippet;&lt;br /&gt;
	EXCEPTION&lt;br /&gt;
		WHEN OTHERS THEN&lt;br /&gt;
			RAISE EXCEPTION 'error occured, sqlstate: %', SQLSTATE;&lt;br /&gt;
	END;&lt;br /&gt;
	RETURN	r;&lt;br /&gt;
END; $$ LANGUAGE PLPGSQL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Function is passed as FDW option:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE SERVER www_server FOREIGN DATA WRAPPER www_fdw OPTIONS (response_iterate_callback 'example_response_iterate_callback($1,$2)');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Call to this function is implemented through [http://www.postgresql.org/docs/9.1/interactive/spi.html SPI].&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
Extension installation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Install the extension&lt;br /&gt;
CREATE EXTENSION www_fdw;&lt;br /&gt;
&lt;br /&gt;
-- Create the foreign server, a pointer to the web service.&lt;br /&gt;
CREATE SERVER www_service FOREIGN DATA WRAPPER www_fdw &lt;br /&gt;
    OPTIONS (uri 'URI', ...OTHER_PARAMETERS_HERE...);&lt;br /&gt;
&lt;br /&gt;
CREATE USER MAPPING FOR current_user SERVER www_service;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example for [http://code.google.com/apis/customsearch/v1/overview.html google search API]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE SERVER www_fdw_google_search_server FOREIGN DATA WRAPPER www_fdw &lt;br /&gt;
    OPTIONS (uri 'https://www.googleapis.com/customsearch/v1?alt=qson&amp;amp;key=KEY');&lt;br /&gt;
&lt;br /&gt;
CREATE FOREIGN TABLE www_fdw_google_search (&lt;br /&gt;
  title text,&lt;br /&gt;
  link text,&lt;br /&gt;
  snippet text&lt;br /&gt;
) SERVER www_fdw_google_search_server;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queries examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select title,snippet from www_fdw_google_search where q=’cat dog’ limit 1;&lt;br /&gt;
    title                                            |             snippet&lt;br /&gt;
-----------------------------------------------------+-----------------------------------------------------------------------------------------&lt;br /&gt;
 CatDog - Wikipedia, the free encyclopedia           | CatDog is an American animated television series which first aired on April 4, 1998, ...&lt;br /&gt;
&lt;br /&gt;
-- example of union with full text search:&lt;br /&gt;
select * from documents where body @@ plainto_tsquery('cat dog')&lt;br /&gt;
union&lt;br /&gt;
select title,snippet from www_fdw_google_search where q=’cat dog’ limit 1;&lt;br /&gt;
    name                                             |             body&lt;br /&gt;
-----------------------------------------------------+-----------------------------------------------------------------------------------------&lt;br /&gt;
 cat and dog                                         | cat and dog set on a pavement&lt;br /&gt;
 CatDog - Wikipedia, the free encyclopedia           | CatDog is an American animated television series which first aired on April 4, 1998, ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other interesting examples:&lt;br /&gt;
* different [http://code.google.com/labs/ google APIs]:&lt;br /&gt;
** [http://code.google.com/apis/books/ books];&lt;br /&gt;
** [http://code.google.com/apis/maps/documentation/javascript/ maps (geocoding for example)];&lt;br /&gt;
** [http://code.google.com/apis/socialgraph/docs/api.html social graph];&lt;br /&gt;
** ...&lt;br /&gt;
* [http://www.mediawiki.org/wiki/API:Opensearch wiki API];&lt;br /&gt;
* [https://dev.twitter.com/docs/api twitter];&lt;br /&gt;
* [http://developers.facebook.com/ facebook] / [https://developers.google.com/+/api/ google+] / other social nets;&lt;br /&gt;
* lot more.&lt;br /&gt;
&lt;br /&gt;
== More ==&lt;br /&gt;
&lt;br /&gt;
Besides providing specialized callbacks there is another way: building web service &amp;quot;in the middle&amp;quot;, which translates formats. In simplest case it implements GET returning json array with row objects. &lt;br /&gt;
&lt;br /&gt;
Central place is realization of extension core, which will be developed &amp;amp; QAed independently from any callback/web_services implementations. In this case it will be really easy to reuse this extension with minimum of coding for new services. From the other side, any complicated service can be handled with more complex callbacks.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
'''TODO'''&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Foreign_data_wrappers</id>
		<title>Foreign data wrappers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Foreign_data_wrappers"/>
				<updated>2011-09-21T05:49:40Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* SQL Databases Wrappers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Foreign Data Wrappers =&lt;br /&gt;
&lt;br /&gt;
In 2003, a new extension called [[SQL/MED]] (  &amp;quot;SQL Management of External Data&amp;quot; ) was added to the SQL standard. It is a standardized way of handling access to remote objects in SQL databases. In 2011, PostgreSQL 9.1 was released with a great support of this standard.&lt;br /&gt;
&lt;br /&gt;
In a nutshell, you can now use various Foreign Data Wrappers (FDW) to connect a PostgreSQL Server to remote data stores. This page is an incomplete list of the Wrappers available right now. Another [http://pgxn.org/tag/fdw/ fdw list] can be found at the PGXN website : http://pgxn.org/tag/fdw/&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that most of these wrappers are '''not officially supported by the PostgreSQL Global Development Group''' (PGDG) and that some of these projects are '''still in Beta''' version. Use Carefully !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SQL Databases Wrappers ==&lt;br /&gt;
&lt;br /&gt;
'''oracle_fdw''' : &lt;br /&gt;
* source code : http://pgfoundry.org/projects/oracle-fdw/&lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/oracle_fdw/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''mysql_fdw''' : This extension implements a Foreign Data Wrapper for MySQL. It is supported on PostgreSQL 9.1 and above.&lt;br /&gt;
* source code : http://github.com/dpage/mysql_fdw&lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/mysql_fdw/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''odbc_fdw''' is wrapper for databases with an ODBC driver, including Oracle, DB2, Microsoft SQL Server, Sybase, Pervasive SQL, IBM Lotus Domino, MySQL, PostgreSQL and desktop database products such as FileMaker and Microsoft Access :  &lt;br /&gt;
* source code : https://github.com/ZhengYang/odbc_fdw&lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/odbc_fdw/&lt;br /&gt;
&lt;br /&gt;
== NoSQL Databases Wrappers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''couchdb_fdw''' is a wrapper for [http://couchdb.apache.org/ CouchDB]&lt;br /&gt;
* source code : https://github.com/ZhengYang/couchdb_fdw &lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/couchdb_fdw/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''redis_fdw''' is a wrapper for [http://redis.io/ Redis]&lt;br /&gt;
* source code : https://github.com/dpage/redis_fdw&lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/redis_fdw/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Wrappers  ==&lt;br /&gt;
&lt;br /&gt;
'''file_fdw''' is a CSV Files wrapper. It is a delivered as an official extension of PostgreSQL 9.1 &lt;br /&gt;
* documentation : http://www.postgresql.org/docs/9.1/static/file-fdw.html&lt;br /&gt;
* example : http://www.depesz.com/index.php/2011/03/14/waiting-for-9-1-foreign-data-wrapper/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''file_text_array_fdw''' is another CSV wrapper :&lt;br /&gt;
* source code : https://github.com/adunstan/file_text_array_fdw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
'''twitter_fdw''' is a wrapper which fetches text messages from Twitter over the Internet and returns as a table :&lt;br /&gt;
* source code : https://github.com/umitanuki/twitter_fdw&lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/twitter_fdw/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ldap_fdw''' allows your PostgreSQL server to query an LDAP server and retrieve data from some pre-configured Organizational Unit&lt;br /&gt;
* source code : https://github.com/guedes/ldap_fdw&lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/ldap_fdw/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''s3_fdw''' reads files located in Amazon S3 &lt;br /&gt;
* source code : https://github.com/umitanuki/s3_fdw&lt;br /&gt;
* install with PGXN : http://pgxn.org/dist/s3_fdw/&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Events</id>
		<title>Events</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Events"/>
				<updated>2011-08-08T21:55:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;Added PGDay Porto Alegre&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Events ==&lt;br /&gt;
&lt;br /&gt;
Most PostgreSQL-specific events are tracked on the [http://www.postgresql.org/about/eventarchive PostgreSQL Events] page.  This is a listing of events at which we expect, or would like to have, a PostgreSQL presence.  Please keep the events in order by starting date and follow the existing examples.  Please also tag the events with the MediaWiki &amp;quot;PostgreSQL Events&amp;quot; category. If you are going to be organizing a PostgreSQL booth, please adhere to [[BoothPolicies]]. PostgreSQL Europe conference coordination [[PGUG EU Conference Coordination|is here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Upcoming PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| PGDay Porto Alegre || [http://www.postgresql.org.br/eventos/2011/pgday/rs PGDay Porto Alegre] || August 19, 2011 || Brazil || Porto Alegre || Talks, Booths&lt;br /&gt;
|-&lt;br /&gt;
| FrOSCon || [http://www.froscon.de/ FrOSCon 2011]|| August 20-21, 2011 || Germany || St. Augustin || Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| Postgres Open || [http://postgresopen.org/2011/home/ Postgres Open 2011] || Sep 14-16, 2011 || USA || Chicago || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference West 2011 || [http://www.postgresqlconference.org/ #PgWest 2011] || September 27-30, 2011 || San Jose || California || Training, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Europe 2011 || [http://2011.pgconf.eu/ PGConf.EU 2011] || October 18-21, 2011 || The Netherlands || Amsterdam || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGBR2011 || [http://pgbr.postgresql.org.br/ PGBR2011] || Nov 3-4, 2011 || Brazil || São Paulo || Tutorials, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Germany 2011 || [http://2011.pgconf.de/ PGConf.DE 2011]|| Nov 11, 2011 || Germany || Oberhausen || Talks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Previous PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| Pg Conf Colombia || [http://www.pgconf.org Pg Conf Colombia 2011]|| August 4-5, 2011 || Colombia || Bucaramanga ||&lt;br /&gt;
|-&lt;br /&gt;
| PgDay at OSCON 2011 || [http://pugs.postgresql.org/node/1663 PgDay at OSCON 2011] || July 24, 2011 || USA || Portland, OR || Talks, party&lt;br /&gt;
|-&lt;br /&gt;
| 2011 China PostgreSQL User conference ||[http://wiki.postgresql.org/wiki/Pgconchina2011 2011 China PostgreSQL User conference] || July 16-17, 2011 || China || GUANGZHOU ||Talks,Tutorial&lt;br /&gt;
|-&lt;br /&gt;
| PGCon 2011 || [http://www.pgcon.org/2011/ PGCon 2011] || May 17-20, 2011 || Canada || Ottawa || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PGEast 2011 || [https://www.postgresqlconference.org/ PGWest] || March 22-25, 2011 || USA || New York, NY || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PostgresSQL Conference 2011 Japan || || February 25-26, 2011 || Tokyo || Japan ||&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM, Brussels 2011]] || [http://www.fosdem.org/2011/ FOSDEM '11] || February 05-06, 2011 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| [[PGDAY-Latino, La Habana 2011]] || [http://postgresql.uci.cu/news/19 PGDAY-Latino '11] || February 01-05, 2011 || Cuba || La Habana || Talks, Workshop&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2010 | 2010 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2009 | 2009 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2008 | 2008 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2007 | 2007 events]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://conferences.oreillynet.com/ O'Reilly conferences]&lt;br /&gt;
* [http://opencheese.com/2007/10/14/open-source-events-2008/ &amp;quot;Open Source and Linux events in 2008&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
[[Category:Advocacy]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Events</id>
		<title>Events</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Events"/>
				<updated>2011-08-08T21:02:54Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;PG Conf Colombia is over.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PostgreSQL Events ==&lt;br /&gt;
&lt;br /&gt;
Most PostgreSQL-specific events are tracked on the [http://www.postgresql.org/about/eventarchive PostgreSQL Events] page.  This is a listing of events at which we expect, or would like to have, a PostgreSQL presence.  Please keep the events in order by starting date and follow the existing examples.  Please also tag the events with the MediaWiki &amp;quot;PostgreSQL Events&amp;quot; category. If you are going to be organizing a PostgreSQL booth, please adhere to [[BoothPolicies]]. PostgreSQL Europe conference coordination [[PGUG EU Conference Coordination|is here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Upcoming PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| FrOSCon || [http://www.froscon.de/ FrOSCon 2011]|| August 20-21, 2011 || Germany || St. Augustin || Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| Postgres Open || [http://postgresopen.org/2011/home/ Postgres Open 2011] || Sep 14-16, 2011 || USA || Chicago || Talks&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference West 2011 || [http://www.postgresqlconference.org/ #PgWest 2011] || September 27-30, 2011 || San Jose || California || Training, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Europe 2011 || [http://2011.pgconf.eu/ PGConf.EU 2011] || October 18-21, 2011 || The Netherlands || Amsterdam || Training, Talks&lt;br /&gt;
|-&lt;br /&gt;
| PGBR2011 || [http://pgbr.postgresql.org.br/ PGBR2011] || Nov 3-4, 2011 || Brazil || São Paulo || Tutorials, Talks, Booth&lt;br /&gt;
|-&lt;br /&gt;
| PostgreSQL Conference Germany 2011 || [http://2011.pgconf.de/ PGConf.DE 2011]|| Nov 11, 2011 || Germany || Oberhausen || Talks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|- style=&amp;quot;background:Khaki;&amp;quot;&lt;br /&gt;
'''Previous PostgreSQL Events Listing'''&lt;br /&gt;
| '''Event''' || '''Web Page''' || '''Date''' || '''Country''' || '''City''' || '''Activities'''&lt;br /&gt;
|-&lt;br /&gt;
| Pg Conf Colombia || [http://www.pgconf.org Pg Conf Colombia 2011]|| August 4-5, 2011 || Colombia || Bucaramanga ||&lt;br /&gt;
|-&lt;br /&gt;
| PgDay at OSCON 2011 || [http://pugs.postgresql.org/node/1663 PgDay at OSCON 2011] || July 24, 2011 || USA || Portland, OR || Talks, party&lt;br /&gt;
|-&lt;br /&gt;
| 2011 China PostgreSQL User conference ||[http://wiki.postgresql.org/wiki/Pgconchina2011 2011 China PostgreSQL User conference] || July 16-17, 2011 || China || GUANGZHOU ||Talks,Tutorial&lt;br /&gt;
|-&lt;br /&gt;
| PGCon 2011 || [http://www.pgcon.org/2011/ PGCon 2011] || May 17-20, 2011 || Canada || Ottawa || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PGEast 2011 || [https://www.postgresqlconference.org/ PGWest] || March 22-25, 2011 || USA || New York, NY || Talks, Training&lt;br /&gt;
|-&lt;br /&gt;
| PostgresSQL Conference 2011 Japan || || February 25-26, 2011 || Tokyo || Japan ||&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM, Brussels 2011]] || [http://www.fosdem.org/2011/ FOSDEM '11] || February 05-06, 2011 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| [[PGDAY-Latino, La Habana 2011]] || [http://postgresql.uci.cu/news/19 PGDAY-Latino '11] || February 01-05, 2011 || Cuba || La Habana || Talks, Workshop&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2010 | 2010 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2009 | 2009 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2008 | 2008 events]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; | [[Events/2007 | 2007 events]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://conferences.oreillynet.com/ O'Reilly conferences]&lt;br /&gt;
* [http://opencheese.com/2007/10/14/open-source-events-2008/ &amp;quot;Open Source and Linux events in 2008&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
[[Category:Advocacy]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Cyclic_Tag_System</id>
		<title>Cyclic Tag System</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Cyclic_Tag_System"/>
				<updated>2011-08-06T11:44:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;Cyclic Tag System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SnippetInfo|Cyclic Tag System|version=8.4|lang=SQL|category=Fun}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This SQL query (requires PostgreSQL 8.4) forms a cyclic tag system, which is sufficient to demonstrate that SQL is Turing-complete.  It is written entirely in SQL:2008-conformant SQL.&lt;br /&gt;
&lt;br /&gt;
Thanks to Andrew (RhodiumToad) Gierth, who came up with the concept and wrote the code.&lt;br /&gt;
&lt;br /&gt;
The productions are encoded in the table &amp;quot;p&amp;quot; as follows:&lt;br /&gt;
   &amp;quot;iter&amp;quot; is the production number;&lt;br /&gt;
   &amp;quot;rnum&amp;quot; is the index of the bit;&lt;br /&gt;
   &amp;quot;tag&amp;quot; is the bit value.&lt;br /&gt;
&lt;br /&gt;
This example uses the productions:&lt;br /&gt;
     110 01 0000&lt;br /&gt;
&lt;br /&gt;
The initial state is encoded in the non-recursive union arm, in this case just '1'&lt;br /&gt;
&lt;br /&gt;
The (r.iter % n) subexpression encodes the number of productions, which can be greater than the size of table &amp;quot;p&amp;quot;, because empty productions are not included in the table.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
     the content of &amp;quot;p&amp;quot;&lt;br /&gt;
     the content of the non-recursive branch&lt;br /&gt;
     the 3 in (r.iter % 3)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;p&amp;quot; encodes the production rules;  the non-recursive branch is the initial state, and the 3 is the number of rules&lt;br /&gt;
&lt;br /&gt;
The result at each level is a bitstring encoded as 1 bit per row, with rnum as the index of the bit number.&lt;br /&gt;
&lt;br /&gt;
At each iteration, bit 0 is removed, the remaining bits shifted up one, and if and only if bit 0 was a 1, the content of the current production rule is appended at the end of the string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
WITH RECURSIVE&lt;br /&gt;
p(iter,rnum,tag) AS (&lt;br /&gt;
    VALUES (0,0,1),(0,1,1),(0,2,0),&lt;br /&gt;
           (1,0,0),(1,1,1),&lt;br /&gt;
           (2,0,0),(2,1,0),(2,2,0),(2,3,0)&lt;br /&gt;
),&lt;br /&gt;
r(iter,rnum,tag) AS (&lt;br /&gt;
    VALUES (0,0,1)&lt;br /&gt;
UNION ALL&lt;br /&gt;
    SELECT r.iter+1,&lt;br /&gt;
           CASE&lt;br /&gt;
               WHEN r.rnum=0 THEN p.rnum + max(r.rnum) OVER ()&lt;br /&gt;
               ELSE r.rnum-1&lt;br /&gt;
           END,&lt;br /&gt;
           CASE&lt;br /&gt;
               WHEN r.rnum=0 THEN p.tag&lt;br /&gt;
               ELSE r.tag&lt;br /&gt;
           END&lt;br /&gt;
    FROM&lt;br /&gt;
        r&lt;br /&gt;
    LEFT JOIN p&lt;br /&gt;
        ON (r.rnum=0 and r.tag=1 and p.iter=(r.iter % 3))&lt;br /&gt;
    WHERE&lt;br /&gt;
        r.rnum&amp;gt;0&lt;br /&gt;
    OR p.iter IS NOT NULL&lt;br /&gt;
)&lt;br /&gt;
SELECT iter, rnum, tag&lt;br /&gt;
FROM r&lt;br /&gt;
ORDER BY iter, rnum;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Table_partitioning</id>
		<title>Table partitioning</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Table_partitioning"/>
				<updated>2011-07-26T15:40:26Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Oracle-Style */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
&lt;br /&gt;
== Status Quo ==&lt;br /&gt;
Currently we allow the user to create arbitrary nested tables with arbitrary constraints and then the planner tries to detect at run-time which child tables are candidates for the query.  See [http://www.postgresql.org/docs/current/interactive/ddl-partitioning.html PostgreSQL Partitioning] for details.&lt;br /&gt;
&lt;br /&gt;
=== Resolved Issues ===&lt;br /&gt;
* SELECT, UPDATE, DELETE (in 8.2) : They can be handled with constraint_exclusion.&lt;br /&gt;
* TRUNCATE (in 8.4) : TRUNCATE for a parent table is expanded into child tables.&lt;br /&gt;
* ANALYZE (in 9.0) : {{MessageLink|20091229201145.CF641753FB7@cvs.postgresql.org|ANALYZE to compute such stats for tables that have subclasses}}&lt;br /&gt;
* MAX()/MIN() (in 9.1) : Smarter partition detection.&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
* We never exclude the parent table&lt;br /&gt;
* We don't handle INSERTs on the parent table&lt;br /&gt;
* It requires a lot of manual work to set it up&lt;br /&gt;
&lt;br /&gt;
== Overviews of Project Goals ==&lt;br /&gt;
* [[:Image:Partitioning Requirements.pdf | Partitioning Requirements document from Simon Riggs]]&lt;br /&gt;
* [[PgCon 2008 Developer Meeting#Partitioning_Roadmap|PGCon 2008 Developer meeting roadmap]]&lt;br /&gt;
&lt;br /&gt;
=== List discussions ===&lt;br /&gt;
&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg00375.php &amp;lt;nowiki&amp;gt;Auto creation of Partitions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-04/msg00151.php &amp;lt;nowiki&amp;gt;Re: Auto Partitioning Patch - WIP version 1&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00028.php &amp;lt;nowiki&amp;gt;Dynamic Partitioning using Segment Visibility Maps&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00248.php &amp;lt;nowiki&amp;gt;Named vs Unnamed Partitions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00387.php &amp;lt;nowiki&amp;gt;Storage Model for Partitioning&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00413.php &amp;lt;nowiki&amp;gt;Declarative partitioning grammar&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01097.php Auto-Partitioning patch discussion]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-03/msg00897.php Partitioning feature]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-05/msg00005.php Transparent table partitioning in future version of PG?]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1247564358.11347.1308.camel@ebony.2ndQuadrant Comments on automatic DML routing and explicit partitioning subcommands]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-10/msg01831.php Patch for automated partitioning]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20091112195450.A967.52131E4D@oss.ntt.co.jp Syntax for partitioning]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4AFADD6A.9070002@asterdata.com Partitioning support for COPY]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-07/msg01519.php Scalability of the planner with non trivial number of partitions]&lt;br /&gt;
&lt;br /&gt;
== Possible Directions ==&lt;br /&gt;
&lt;br /&gt;
=== Oracle-Style ===&lt;br /&gt;
Allow users to declare their intention with partitioned tables. Ie, declare what the partition key is and what range or values are covered by each partition.&lt;br /&gt;
&lt;br /&gt;
I think this would mean two new types of relation. One &amp;quot;meta-table&amp;quot; that acts like a view, in that it doesn't have an attached filenode. It would also have some kind of meta data about the partition key but no view definition, it would act like parent tables in nested table structure do now. The other would be &amp;quot;partition&amp;quot; which would be a separate namespace from tables and would have attached information about what values of the partition key it covered.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
&lt;br /&gt;
* Makes it more reasonable to handle inserts automatically since the structure is explicit and doesn't require making logical deductions. &lt;br /&gt;
* More idiot-proof, ie you can't set up nonsensical combinations of constraints.&lt;br /&gt;
* Consistent with other databases and DBA expectations.&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
&lt;br /&gt;
* Less flexible, you can't set up arbitrary non-traditional structures such as having some data in the parent table or having extra columns in some children.&lt;br /&gt;
&lt;br /&gt;
Background:&lt;br /&gt;
* [http://download-east.oracle.com/docs/cd/B13789_01/server.101/b10759/statements_7002.htm#i2129707 Oracle CREATE TABLE syntax]&lt;br /&gt;
* [http://download-east.oracle.com/docs/cd/B13789_01/server.101/b10736/parpart.htm Partitioning in Oracle 10g]&lt;br /&gt;
* [http://download-east.oracle.com/docs/cd/B13789_01/server.101/b10739/partiti.htm#i1006820 Partition management in Oracle 10g]&lt;br /&gt;
* [http://www.oracle.com/technetwork/articles/sql/11g-partitioning-084209.html Partition management in Oracle 11g including interval partitions]&lt;br /&gt;
* [http://dev.mysql.com/doc/refman/5.1/en/partitioning.html MySQL partitioning]&lt;br /&gt;
&lt;br /&gt;
=== Trigger-based ===&lt;br /&gt;
First attempts to support auto-partitioning have been made using triggers.&lt;br /&gt;
* avoid specific languages such as pgpsql that requires 'CREATE LANGUAGE'&lt;br /&gt;
* performance of C trigger 4 to 5 times faster than pgpsql&lt;br /&gt;
* insert/copy returns 0 rows when all rows have been routed by trigger from master to child tables&lt;br /&gt;
* chaining triggers allow tunable behavior in case of rows not matching any partition: add an error trigger, move to an overflow table, create new partitions dynamically&lt;br /&gt;
* constraint_exclusion does not work well with prepared statements. It might possible to convert CHECKs to One-Time Filter plan nodes if the condition is a variable.&lt;br /&gt;
&lt;br /&gt;
= Active Work In Progress =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Syntax is proposed at &amp;quot;[https://commitfest.postgresql.org/action/patch_view?id=207 Syntax for partitioning]&amp;quot;, [https://commitfest.postgresql.org/action/patch_view?id=266 second version]. The syntax resembles [[Oracle]] and [[MySQL]]. See also [[Todo#Administration]] (Simplify ability to create partitioned tables).&lt;br /&gt;
&lt;br /&gt;
 -- create partitioned table and child partitions at once.&lt;br /&gt;
 CREATE TABLE parent (...)&lt;br /&gt;
 PARTITION BY [ RANGE | LIST ] ( key ) [ opclass ]&lt;br /&gt;
 [ (&lt;br /&gt;
      PARTITION child&lt;br /&gt;
        {&lt;br /&gt;
            VALUES LESS THAN { ... | MAXVALUE } -- for RANGE&lt;br /&gt;
          | VALUES [ IN ] ( { ... | DEFAULT } ) -- for LIST&lt;br /&gt;
        }&lt;br /&gt;
        [ WITH ( ... ) ] [ TABLESPACE tbs ]&lt;br /&gt;
      [, ...]&lt;br /&gt;
   ) ] ;&lt;br /&gt;
 &lt;br /&gt;
 -- add a partition key to a table.&lt;br /&gt;
 ALTER TABLE parent PARTITION BY  [ RANGE | LIST ] ( key ) [ opclass ] [ (...) ] ;&lt;br /&gt;
 &lt;br /&gt;
 -- create a new partition on a partitioned table.&lt;br /&gt;
 CREATE PARTITION child ON parent VALUES ... ;&lt;br /&gt;
 &lt;br /&gt;
 -- add a table as a partition.&lt;br /&gt;
 ALTER TABLE parent ATTACH PARTITION child VALUES ... ;&lt;br /&gt;
 &lt;br /&gt;
 -- Remove a partition as a normal table.&lt;br /&gt;
 ALTER TABLE parent DETACH PARTITION child ;&lt;br /&gt;
&lt;br /&gt;
== Internal representation ==&lt;br /&gt;
On-disk structure is included in the &amp;quot;Syntax for partitioning&amp;quot; patch.&lt;br /&gt;
On-memory structure will be proposed in a future patch&lt;br /&gt;
&lt;br /&gt;
=== On-disk structure ===&lt;br /&gt;
A new system table &amp;quot;pg_partition&amp;quot; added.&lt;br /&gt;
Partition keys are stored in it.&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE pg_catalog.pg_partition&lt;br /&gt;
 (&lt;br /&gt;
    partrelid   oid    NOT NULL, -- partitioned table oid&lt;br /&gt;
    partopclass oid    NOT NULL, -- operator class to compare keys&lt;br /&gt;
    partkind    &amp;quot;char&amp;quot; NOT NULL, -- kind of partition: RANGE or LIST&lt;br /&gt;
    partkey     text,            -- partition key expression&lt;br /&gt;
 &lt;br /&gt;
    PRIMARY KEY (partrelid),&lt;br /&gt;
    FOREIGN KEY (partrelid)   REFERENCES pg_class (oid),&lt;br /&gt;
    FOREIGN KEY (partopclass) REFERENCES pg_opclass (oid)&lt;br /&gt;
 )&lt;br /&gt;
 WITHOUT OIDS ;&lt;br /&gt;
&lt;br /&gt;
A new column &amp;quot;inhvalues&amp;quot; are added into pg_inherits.&lt;br /&gt;
Partition values for each partition are stored in it.&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE pg_class.pg_inherits ADD COLUMN inhvalues anyarray ;&lt;br /&gt;
&lt;br /&gt;
* RANGE partition has an upper value of the range in partkey.&lt;br /&gt;
* LIST partition has an array with multiple elements in partkey.&lt;br /&gt;
* An overflow partition has an empty array in partkey.&lt;br /&gt;
* A normal inherited table has a NULL in partkey.&lt;br /&gt;
&lt;br /&gt;
=== On-memory structure ===&lt;br /&gt;
A cached list of partitions are sorted by partition values and stored in the relcache for the parent table. Changes to the partitions would need to invalidate parent caches to ensure the cache is accurately maintained.&lt;br /&gt;
&lt;br /&gt;
== Operations ==&lt;br /&gt;
=== INSERT ===&lt;br /&gt;
INSERT TRIGGERs will be replaced with specialized tuple-routing feature using on-memory structure. Tuples will be routed in O(log N). It also solve &amp;quot;0 row affected&amp;quot; problem in INSERT TRIGGERs.&lt;br /&gt;
&lt;br /&gt;
=== SELECT, UPDATE, DELETE ===&lt;br /&gt;
CHECK constraints continue to be used for a while.&lt;br /&gt;
&lt;br /&gt;
It would be improved using on-memory structure; instead of CHECK constraints for each child tables, we can use a sorted list in the parent table. Constraint exclusion can be in O(log N) order instead of O(N) of now.&lt;br /&gt;
&lt;br /&gt;
=== VACUUM, CLUSTER, REINDEX ===&lt;br /&gt;
We don't expand those commands for now, but they might have to be expanded like as TRUNCATE.&lt;br /&gt;
&lt;br /&gt;
= Future improvements =&lt;br /&gt;
They are hard to fix in 9.0, but should continue to be improved in the future releases.&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* Support SPLIT and MERGE for existing partitions. See also [http://archives.postgresql.org/pgsql-hackers/2009-10/msg01831.php Kedar's patch]&lt;br /&gt;
* Support UPDATE of partition keys and values.&lt;br /&gt;
* Support adding a partition between existing partitions. It requires SPLIT feature.&lt;br /&gt;
* Support sub-partitions.&lt;br /&gt;
* Support some partition kinds for GIS types. For example, &amp;quot;PARTITION BY GIST&amp;quot; holds partition keys as a GiST tree in on-memory structure.&lt;br /&gt;
* Support HASH partitions. Each partition could be a FOREIGN TABLE in [[SQL/MED]]. In other words, it is [[PL/Proxy]] integration.&lt;br /&gt;
* Support CREATE TABLE AS -- CREATE TABLE tbl PARTITION BY ... AS SELECT ...;&lt;br /&gt;
&lt;br /&gt;
=== Executor ===&lt;br /&gt;
* SELECT FOR SHARE/UPDATE for parent tables.&lt;br /&gt;
* Prepared statements that uses partition keys in place holders.&lt;br /&gt;
** An idea is to convert check constraints into One-Time_Filter [http://archives.postgresql.org/message-id/20081013172100.87A1.52131E4D@oss.ntt.co.jp]&lt;br /&gt;
* Unique constraint over multiple partitions, when each partition has a unique index on set/superset of partition keys&lt;br /&gt;
* Unique constraints over multiple partitions in the general case (typically called as &amp;quot;global index&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Planner ===&lt;br /&gt;
* Optimization for min/max, LIMIT + ORDER BY, GROUP BY on partition keys.&lt;br /&gt;
* Optimization when constraint exclusion are used with stable or volatile functions. It is a very common case that the partition key is timestamp and compared with now().&lt;br /&gt;
* Join optimization for two partitioned tables.&lt;br /&gt;
&lt;br /&gt;
[[Category:Table partitioning]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Table_partitioning</id>
		<title>Table partitioning</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Table_partitioning"/>
				<updated>2011-06-21T18:56:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Resolved Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
&lt;br /&gt;
== Status Quo ==&lt;br /&gt;
Currently we allow the user to create arbitrary nested tables with arbitrary constraints and then the planner tries to detect at run-time which child tables are candidates for the query.  See [http://www.postgresql.org/docs/current/interactive/ddl-partitioning.html PostgreSQL Partitioning] for details.&lt;br /&gt;
&lt;br /&gt;
=== Resolved Issues ===&lt;br /&gt;
* SELECT, UPDATE, DELETE (in 8.2) : They can be handled with constraint_exclusion.&lt;br /&gt;
* TRUNCATE (in 8.4) : TRUNCATE for a parent table is expanded into child tables.&lt;br /&gt;
* ANALYZE (in 9.0) : {{MessageLink|20091229201145.CF641753FB7@cvs.postgresql.org|ANALYZE to compute such stats for tables that have subclasses}}&lt;br /&gt;
* MAX()/MIN() (in 9.1) : Smarter partition detection.&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
* We never exclude the parent table&lt;br /&gt;
* We don't handle INSERTs on the parent table&lt;br /&gt;
* It requires a lot of manual work to set it up&lt;br /&gt;
&lt;br /&gt;
== Overviews of Project Goals ==&lt;br /&gt;
* [[:Image:Partitioning Requirements.pdf | Partitioning Requirements document from Simon Riggs]]&lt;br /&gt;
* [[PgCon 2008 Developer Meeting#Partitioning_Roadmap|PGCon 2008 Developer meeting roadmap]]&lt;br /&gt;
&lt;br /&gt;
=== List discussions ===&lt;br /&gt;
&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-03/msg00375.php &amp;lt;nowiki&amp;gt;Auto creation of Partitions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2007-04/msg00151.php &amp;lt;nowiki&amp;gt;Re: Auto Partitioning Patch - WIP version 1&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00028.php &amp;lt;nowiki&amp;gt;Dynamic Partitioning using Segment Visibility Maps&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00248.php &amp;lt;nowiki&amp;gt;Named vs Unnamed Partitions&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00387.php &amp;lt;nowiki&amp;gt;Storage Model for Partitioning&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-01/msg00413.php &amp;lt;nowiki&amp;gt;Declarative partitioning grammar&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2008-10/msg01097.php Auto-Partitioning patch discussion]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-03/msg00897.php Partitioning feature]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-performance/2009-05/msg00005.php Transparent table partitioning in future version of PG?]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/1247564358.11347.1308.camel@ebony.2ndQuadrant Comments on automatic DML routing and explicit partitioning subcommands]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2009-10/msg01831.php Patch for automated partitioning]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/20091112195450.A967.52131E4D@oss.ntt.co.jp Syntax for partitioning]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4AFADD6A.9070002@asterdata.com Partitioning support for COPY]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-07/msg01519.php Scalability of the planner with non trivial number of partitions]&lt;br /&gt;
&lt;br /&gt;
== Possible Directions ==&lt;br /&gt;
&lt;br /&gt;
=== Oracle-Style ===&lt;br /&gt;
Allow users to declare their intention with partitioned tables. Ie, declare what the partition key is and what range or values are covered by each partition.&lt;br /&gt;
&lt;br /&gt;
I think this would mean two new types of relation. One &amp;quot;meta-table&amp;quot; that acts like a view, in that it doesn't have an attached filenode. It would also have some kind of meta data about the partition key but no view definition, it would act like parent tables in nested table structure do now. The other would be &amp;quot;partition&amp;quot; which would be a separate namespace from tables and would have attached information about what values of the partition key it covered.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
&lt;br /&gt;
* Makes it more reasonable to handle inserts automatically since the structure is explicit and doesn't require making logical deductions. &lt;br /&gt;
* More idiot-proof, ie you can't set up nonsensical combinations of constraints.&lt;br /&gt;
* Consistent with other databases and DBA expectations.&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
&lt;br /&gt;
* Less flexible, you can't set up arbitrary non-traditional structures such as having some data in the parent table or having extra columns in some children.&lt;br /&gt;
&lt;br /&gt;
Background:&lt;br /&gt;
* [http://download-east.oracle.com/docs/cd/B13789_01/server.101/b10759/statements_7002.htm#i2129707 Oracle CREATE TABLE syntax]&lt;br /&gt;
* [http://download-east.oracle.com/docs/cd/B13789_01/server.101/b10736/parpart.htm Partitioning in Oracle 10g]&lt;br /&gt;
* [http://download-east.oracle.com/docs/cd/B13789_01/server.101/b10739/partiti.htm#i1006820 Partition management in Oracle 10g]&lt;br /&gt;
* [http://www.oracle.com/technology/obe/11gr1_db/bidw/partition/partition.htm Partition management in Oracle 11g including interval partitions]&lt;br /&gt;
* [http://dev.mysql.com/doc/refman/5.1/en/partitioning.html MySQL partitioning]&lt;br /&gt;
&lt;br /&gt;
=== Trigger-based ===&lt;br /&gt;
First attempts to support auto-partitioning have been made using triggers.&lt;br /&gt;
* avoid specific languages such as pgpsql that requires 'CREATE LANGUAGE'&lt;br /&gt;
* performance of C trigger 4 to 5 times faster than pgpsql&lt;br /&gt;
* insert/copy returns 0 rows when all rows have been routed by trigger from master to child tables&lt;br /&gt;
* chaining triggers allow tunable behavior in case of rows not matching any partition: add an error trigger, move to an overflow table, create new partitions dynamically&lt;br /&gt;
* constraint_exclusion does not work well with prepared statements. It might possible to convert CHECKs to One-Time Filter plan nodes if the condition is a variable.&lt;br /&gt;
&lt;br /&gt;
= Active Work In Progress =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Syntax is proposed at &amp;quot;[https://commitfest.postgresql.org/action/patch_view?id=207 Syntax for partitioning]&amp;quot;, [https://commitfest.postgresql.org/action/patch_view?id=266 second version]. The syntax resembles [[Oracle]] and [[MySQL]]. See also [[Todo#Administration]] (Simplify ability to create partitioned tables).&lt;br /&gt;
&lt;br /&gt;
 -- create partitioned table and child partitions at once.&lt;br /&gt;
 CREATE TABLE parent (...)&lt;br /&gt;
 PARTITION BY [ RANGE | LIST ] ( key ) [ opclass ]&lt;br /&gt;
 [ (&lt;br /&gt;
      PARTITION child&lt;br /&gt;
        {&lt;br /&gt;
            VALUES LESS THAN { ... | MAXVALUE } -- for RANGE&lt;br /&gt;
          | VALUES [ IN ] ( { ... | DEFAULT } ) -- for LIST&lt;br /&gt;
        }&lt;br /&gt;
        [ WITH ( ... ) ] [ TABLESPACE tbs ]&lt;br /&gt;
      [, ...]&lt;br /&gt;
   ) ] ;&lt;br /&gt;
 &lt;br /&gt;
 -- add a partition key to a table.&lt;br /&gt;
 ALTER TABLE parent PARTITION BY  [ RANGE | LIST ] ( key ) [ opclass ] [ (...) ] ;&lt;br /&gt;
 &lt;br /&gt;
 -- create a new partition on a partitioned table.&lt;br /&gt;
 CREATE PARTITION child ON parent VALUES ... ;&lt;br /&gt;
 &lt;br /&gt;
 -- add a table as a partition.&lt;br /&gt;
 ALTER TABLE parent ATTACH PARTITION child VALUES ... ;&lt;br /&gt;
 &lt;br /&gt;
 -- Remove a partition as a normal table.&lt;br /&gt;
 ALTER TABLE parent DETACH PARTITION child ;&lt;br /&gt;
&lt;br /&gt;
== Internal representation ==&lt;br /&gt;
On-disk structure is included in the &amp;quot;Syntax for partitioning&amp;quot; patch.&lt;br /&gt;
On-memory structure will be proposed in a future patch&lt;br /&gt;
&lt;br /&gt;
=== On-disk structure ===&lt;br /&gt;
A new system table &amp;quot;pg_partition&amp;quot; added.&lt;br /&gt;
Partition keys are stored in it.&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE pg_catalog.pg_partition&lt;br /&gt;
 (&lt;br /&gt;
    partrelid   oid    NOT NULL, -- partitioned table oid&lt;br /&gt;
    partopclass oid    NOT NULL, -- operator class to compare keys&lt;br /&gt;
    partkind    &amp;quot;char&amp;quot; NOT NULL, -- kind of partition: RANGE or LIST&lt;br /&gt;
    partkey     text,            -- partition key expression&lt;br /&gt;
 &lt;br /&gt;
    PRIMARY KEY (partrelid),&lt;br /&gt;
    FOREIGN KEY (partrelid)   REFERENCES pg_class (oid),&lt;br /&gt;
    FOREIGN KEY (partopclass) REFERENCES pg_opclass (oid)&lt;br /&gt;
 )&lt;br /&gt;
 WITHOUT OIDS ;&lt;br /&gt;
&lt;br /&gt;
A new column &amp;quot;inhvalues&amp;quot; are added into pg_inherits.&lt;br /&gt;
Partition values for each partition are stored in it.&lt;br /&gt;
&lt;br /&gt;
 ALTER TABLE pg_class.pg_inherits ADD COLUMN inhvalues anyarray ;&lt;br /&gt;
&lt;br /&gt;
* RANGE partition has an upper value of the range in partkey.&lt;br /&gt;
* LIST partition has an array with multiple elements in partkey.&lt;br /&gt;
* An overflow partition has an empty array in partkey.&lt;br /&gt;
* A normal inherited table has a NULL in partkey.&lt;br /&gt;
&lt;br /&gt;
=== On-memory structure ===&lt;br /&gt;
A cached list of partitions are sorted by partition values and stored in the relcache for the parent table. Changes to the partitions would need to invalidate parent caches to ensure the cache is accurately maintained.&lt;br /&gt;
&lt;br /&gt;
== Operations ==&lt;br /&gt;
=== INSERT ===&lt;br /&gt;
INSERT TRIGGERs will be replaced with specialized tuple-routing feature using on-memory structure. Tuples will be routed in O(log N). It also solve &amp;quot;0 row affected&amp;quot; problem in INSERT TRIGGERs.&lt;br /&gt;
&lt;br /&gt;
=== SELECT, UPDATE, DELETE ===&lt;br /&gt;
CHECK constraints continue to be used for a while.&lt;br /&gt;
&lt;br /&gt;
It would be improved using on-memory structure; instead of CHECK constraints for each child tables, we can use a sorted list in the parent table. Constraint exclusion can be in O(log N) order instead of O(N) of now.&lt;br /&gt;
&lt;br /&gt;
=== VACUUM, CLUSTER, REINDEX ===&lt;br /&gt;
We don't expand those commands for now, but they might have to be expanded like as TRUNCATE.&lt;br /&gt;
&lt;br /&gt;
= Future improvements =&lt;br /&gt;
They are hard to fix in 9.0, but should continue to be improved in the future releases.&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
* Support SPLIT and MERGE for existing partitions. See also [http://archives.postgresql.org/pgsql-hackers/2009-10/msg01831.php Kedar's patch]&lt;br /&gt;
* Support UPDATE of partition keys and values.&lt;br /&gt;
* Support adding a partition between existing partitions. It requires SPLIT feature.&lt;br /&gt;
* Support sub-partitions.&lt;br /&gt;
* Support some partition kinds for GIS types. For example, &amp;quot;PARTITION BY GIST&amp;quot; holds partition keys as a GiST tree in on-memory structure.&lt;br /&gt;
* Support HASH partitions. Each partition could be a FOREIGN TABLE in [[SQL/MED]]. In other words, it is [[PL/Proxy]] integration.&lt;br /&gt;
* Support CREATE TABLE AS -- CREATE TABLE tbl PARTITION BY ... AS SELECT ...;&lt;br /&gt;
&lt;br /&gt;
=== Executor ===&lt;br /&gt;
* SELECT FOR SHARE/UPDATE for parent tables.&lt;br /&gt;
* Prepared statements that uses partition keys in place holders.&lt;br /&gt;
** An idea is to convert check constraints into One-Time_Filter [http://archives.postgresql.org/message-id/20081013172100.87A1.52131E4D@oss.ntt.co.jp]&lt;br /&gt;
* Unique constraint over multiple partitions, when each partition has a unique index on set/superset of partition keys&lt;br /&gt;
* Unique constraints over multiple partitions in the general case (typically called as &amp;quot;global index&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Planner ===&lt;br /&gt;
* Optimization for min/max, LIMIT + ORDER BY, GROUP BY on partition keys.&lt;br /&gt;
* Optimization when constraint exclusion are used with stable or volatile functions. It is a very common case that the partition key is timestamp and compared with now().&lt;br /&gt;
* Join optimization for two partitioned tables.&lt;br /&gt;
&lt;br /&gt;
[[Category:Table partitioning]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2011_PL_Summit</id>
		<title>PgCon 2011 PL Summit</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2011_PL_Summit"/>
				<updated>2011-05-19T20:21:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What: PL Summit&lt;br /&gt;
&lt;br /&gt;
Where: PgCon, Ottawa&lt;br /&gt;
&lt;br /&gt;
Date: Saturday May 21, 2011&lt;br /&gt;
&lt;br /&gt;
Time: 9:30am - 5pm&lt;br /&gt;
&lt;br /&gt;
Room: DMS 1110&lt;br /&gt;
&lt;br /&gt;
= Tentative Agenda =&lt;br /&gt;
&lt;br /&gt;
9:30am: Introductions&lt;br /&gt;
&lt;br /&gt;
10am: State of PLs&lt;br /&gt;
&lt;br /&gt;
* Jan Urbański - PL/Python&lt;br /&gt;
* Alexey Klyukin - PL/PHP and PL/Perl &lt;br /&gt;
* Luis Carvalho - PL/Lua&lt;br /&gt;
* Tim Child - PL/OpenCL&lt;br /&gt;
* David Fetter - PL/Parrot&lt;br /&gt;
&lt;br /&gt;
10:30am: PLs as Extensions - Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
11:00am: Discussion of documentation for PL supported features&lt;br /&gt;
&lt;br /&gt;
http://wiki.postgresql.org/wiki/PL_Matrix&lt;br /&gt;
&lt;br /&gt;
http://wiki.postgresql.org/wiki/PL_Features_Matrix&lt;br /&gt;
&lt;br /&gt;
11:30am: Discussion of improvements to PostgreSQL PL interface&lt;br /&gt;
&lt;br /&gt;
12:30am: Break for lunch&lt;br /&gt;
&lt;br /&gt;
1:30pm-5pm: Small groups for detailed discussion and hacking&lt;br /&gt;
&lt;br /&gt;
= Related wiki pages =&lt;br /&gt;
&lt;br /&gt;
[[PL_Matrix]]&lt;br /&gt;
&lt;br /&gt;
[[PL_Features_Matrix]]&lt;br /&gt;
&lt;br /&gt;
= Attendees =&lt;br /&gt;
Selena Deckelmann&lt;br /&gt;
&lt;br /&gt;
Leon Starr&lt;br /&gt;
&lt;br /&gt;
Pavel Stehule&lt;br /&gt;
&lt;br /&gt;
Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
David E. Wheeler&lt;br /&gt;
&lt;br /&gt;
David Fetter&lt;br /&gt;
&lt;br /&gt;
Aaron Thul&lt;br /&gt;
&lt;br /&gt;
Alexey Klyukin&lt;br /&gt;
&lt;br /&gt;
Brian Decker&lt;br /&gt;
&lt;br /&gt;
Jan Urbański&lt;br /&gt;
&lt;br /&gt;
Steve Singer&lt;br /&gt;
&lt;br /&gt;
Alvaro Herrera&lt;br /&gt;
&lt;br /&gt;
Jan Wieck&lt;br /&gt;
&lt;br /&gt;
Heikki Linnakangas&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting</id>
		<title>PgCon 2011 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting"/>
				<updated>2011-05-17T21:40:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers and senior figures from PostgreSQL-developer-sponsoring companies is being planned for Wednesday 18th May, 2010 near the University of Ottawa, prior to pgCon 2011. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org).&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Albion B&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting:&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Selena Deckelmann&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* David Fetter&lt;br /&gt;
* Marc Fournier&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Alvaro Herrera&lt;br /&gt;
* Tatsuo Ishii&lt;br /&gt;
* Marko Kreen&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Heikki Linnakangas&lt;br /&gt;
* Fuji Masao&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&lt;br /&gt;
* Greg Stark&lt;br /&gt;
* Koichi Suzuki&lt;br /&gt;
* Robert Treat&lt;br /&gt;
* David Wheeler&lt;br /&gt;
* Mark Wong&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Review of the move from CVS to GIT (Dave Page)&lt;br /&gt;
* Build and Test Automation (David Fetter)&lt;br /&gt;
* SELinux/PG Update and what-about-RLS? (Stephen Frost, KaiGai Kohei)&lt;br /&gt;
* What to do about MaxAllocSize? (Stephen Frost)&lt;br /&gt;
* Improving logging (Stephen Frost, David Fetter)&lt;br /&gt;
* Changes to the Wire Protocol (David Fetter)&lt;br /&gt;
* Slave-only based backups (Robert Treat)&lt;br /&gt;
* Authorization issues (Alvaro Herrera)&lt;br /&gt;
* Resource control (Simon Riggs)&lt;br /&gt;
* User Defined Daemons (Simon Riggs)&lt;br /&gt;
* Streaming SRFs and FDW WHERE clauses (Simon Riggs)&lt;br /&gt;
* Schedule for 9.2 Development (Robert Haas)&lt;br /&gt;
* Database Federation support (Koichi Suzuki)&lt;br /&gt;
* Report from prior day's Clustering Summit (Josh Berkus)&lt;br /&gt;
* Managing release schedules and patch submission processes (Dave Page)&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&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;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|09:00 - 09:15&lt;br /&gt;
|Review of the move from CVS to GIT&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|09:15 - 09:45&lt;br /&gt;
|Build and test automation&lt;br /&gt;
|David Fetter&lt;br /&gt;
|-&lt;br /&gt;
|09:45 - 10:15&lt;br /&gt;
|SELinux/PG Update, and what to do about RLS? [http://sepgsql.googlecode.com/files/pgcon2010-developer-meeting-kaigai-handsout.pdf (handout)]&lt;br /&gt;
|Stephen Frost, KaiGai Kohei&lt;br /&gt;
|-&lt;br /&gt;
|10:15 - 10:30&lt;br /&gt;
|What to do about MaxAllocSize?&lt;br /&gt;
|Stephen Frost&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10:45 - 11:00&lt;br /&gt;
|Schedule for 9.2 development&lt;br /&gt;
|Robert Haas&lt;br /&gt;
|-&lt;br /&gt;
|11:00 - 11:20&lt;br /&gt;
|Report from prior day's Clustering Summit&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
|-&lt;br /&gt;
|11:20 - 11:40&lt;br /&gt;
|Improving logging&lt;br /&gt;
|Stephen Frost, David Fetter&lt;br /&gt;
|-&lt;br /&gt;
|11:40 - 12:00&lt;br /&gt;
|Slave-only based backups&lt;br /&gt;
|Robert Treat&lt;br /&gt;
|-&lt;br /&gt;
|12:00 - 12:30&lt;br /&gt;
|Resource control&lt;br /&gt;
|Simon Riggs&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13:30 - 14:00&lt;br /&gt;
|Authorisation issues&lt;br /&gt;
|Alvaro Herrera&lt;br /&gt;
|-&lt;br /&gt;
|14:00 - 14:30&lt;br /&gt;
|DBT-2 I/O performance&lt;br /&gt;
|Koichi Suzuki&lt;br /&gt;
|-&lt;br /&gt;
|14:30 - 15:00&lt;br /&gt;
|Streaming SRFs and FDW WHERE clauses&lt;br /&gt;
|Simon Riggs&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15:15 - 15:45&lt;br /&gt;
|Database federation support&lt;br /&gt;
|Koichi Suzuki&lt;br /&gt;
|-&lt;br /&gt;
|15:45 - 16:15&lt;br /&gt;
|User defined daemons&lt;br /&gt;
|Simon Riggs&lt;br /&gt;
|-&lt;br /&gt;
|16:15 - 16:45&lt;br /&gt;
|Managing release schedules and patch submission processes&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Release_Support_Policy</id>
		<title>PostgreSQL Release Support Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Release_Support_Policy"/>
				<updated>2011-04-27T19:10:28Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;notes about 8.1 on windows no longer relevant.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PostgreSQL project aims to fully support a major release for '''five years''', 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' 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;
|''PostgreSQL 7.4''&lt;br /&gt;
|October 2010 (extended)&lt;br /&gt;
|November 2003&lt;br /&gt;
|-&lt;br /&gt;
|''PostgreSQL 8.0''&lt;br /&gt;
|October 2010 (extended)&lt;br /&gt;
|January 2005&lt;br /&gt;
|-&lt;br /&gt;
|''PostgreSQL 8.1''&lt;br /&gt;
|November 2010&lt;br /&gt;
|November 2005&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;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting</id>
		<title>PgCon 2011 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting"/>
				<updated>2011-04-22T14:14:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Attendees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers and senior figures from PostgreSQL-developer-sponsoring companies is being planned for Wednesday 18th May, 2010 near the University of Ottawa, prior to pgCon 2011. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org).&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Albion B&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting:&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Selena Deckelmann&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* David Fetter&lt;br /&gt;
* Marc Fournier&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Alvaro Herrera&lt;br /&gt;
* Tatsuo Ishii&lt;br /&gt;
* Marko Kreen&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Heikki Linnakangas&lt;br /&gt;
* Fuji Masao&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Greg Sabino Mullane&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&lt;br /&gt;
* Koichi Suzuki&lt;br /&gt;
* Robert Treat&lt;br /&gt;
* David Wheeler&lt;br /&gt;
* Mark Wong&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Review of the move from CVS to GIT (Dave Page)&lt;br /&gt;
* Build and Test Automation (David Fetter)&lt;br /&gt;
* SELinux/PG Update and what-about-RLS? (Stephen Frost, KaiGai Kohei)&lt;br /&gt;
* What to do about MaxAllocSize? (Stephen Frost)&lt;br /&gt;
* Improving logging (Stephen Frost, David Fetter)&lt;br /&gt;
* Slave-only based backups (Robert Treat)&lt;br /&gt;
* Authorization issues (Alvaro Herrera)&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&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;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting</id>
		<title>PgCon 2011 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting"/>
				<updated>2011-03-07T18:26:59Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers and senior figures from PostgreSQL-developer-sponsoring companies is being planned for Wednesday 18th May, 2010 near the University of Ottawa, prior to pgCon 2011. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org).&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Albion B&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting:&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Selena Deckelmann&lt;br /&gt;
* David Fetter&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page&lt;br /&gt;
* Greg Sabino Mullane&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Koichi Suzuki&lt;br /&gt;
* Robert Treat&lt;br /&gt;
* David Wheeler&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Review of the move from CVS to GIT (Dave Page)&lt;br /&gt;
* Build and Test Automation (David Fetter)&lt;br /&gt;
* Performance Testing Automation (Robert Treat)&lt;br /&gt;
* SELinux/PG Update and what-about-RLS? (Stephen Frost)&lt;br /&gt;
* What to do about MaxAllocSize? (Stephen Frost)&lt;br /&gt;
* Improving logging (Stephen Frost)&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&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;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting</id>
		<title>PgCon 2011 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting"/>
				<updated>2011-03-03T20:50:18Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers and senior figures from PostgreSQL-developer-sponsoring companies is being planned for Wednesday 18th May, 2010 near the University of Ottawa, prior to pgCon 2011. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org).&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Albion B&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting:&lt;br /&gt;
&lt;br /&gt;
* Josh Berkus&lt;br /&gt;
* Selena Deckelmann&lt;br /&gt;
* David Fetter&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Dave Page&lt;br /&gt;
* David Wheeler&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Review of the move from CVS to GIT (Dave Page)&lt;br /&gt;
* Build and Test Automation (David Fetter)&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&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;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting</id>
		<title>PgCon 2011 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2011_Developer_Meeting"/>
				<updated>2011-03-03T20:36:07Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Attendees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers and senior figures from PostgreSQL-developer-sponsoring companies is being planned for Wednesday 18th May, 2010 near the University of Ottawa, prior to pgCon 2011. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org).&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Albion B&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting:&lt;br /&gt;
&lt;br /&gt;
* Josh Berkus&lt;br /&gt;
* Selena Deckelmann&lt;br /&gt;
* David Fetter&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Dave Page&lt;br /&gt;
* David Wheeler&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Review of the move from CVS to GIT (Dave)&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&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;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PGDay_Europe_2010_rideshare</id>
		<title>PGDay Europe 2010 rideshare</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PGDay_Europe_2010_rideshare"/>
				<updated>2010-11-28T22:54:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Departure from Stuttgart Airport (STR) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for registering your arrival to and departure from Stuttgart for PGDay Europe 2010, in case you want to share a ride with someone or just meet up for some company. Just put your arrival information down, and then coordinate with whomever arrives around the same time.&lt;br /&gt;
&lt;br /&gt;
''There is no official coordination activity, we just provide this wiki page for people to register their own information.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arriving at Stuttgart Airport (STR) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||14:40||BA0920||Thom Brown||thom@linux.com&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||17:15||UA9242||David Fetter||davidfetter@postgresql.org&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||21:00||AF5586||Jean-Christophe Arnu || jca@postgresql.fr&lt;br /&gt;
|-&lt;br /&gt;
|Monday (Dec 6th)||09:25||AB6611||Andreas Zickel||zickel@hesgdv.de&lt;br /&gt;
|-&lt;br /&gt;
|Monday (Dec 6th)||09:25||AB6611||Christopher Dove||dove@hesgdv.de&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Arriving at Stuttgart Main Station ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Train||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Monday (Dec 6th)||09:08||ICE 591||Hartmut Holzgraefe &amp;amp; Susanne Ebrecht: &amp;lt;hartmut@php.net or miracee@web.de&amp;gt; +49-172-2707759 or call Susanne (Magnus should have the number)&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||14:08||ICE 517||Giuseppe Maxia (datacharmer AT gmail dot com)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Arriving at Frankfurt Airport (FRA) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||15:05||LH849||Heikki Linnakangas (heikki@enterprisedb.com, +358405226830)&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||10:05, Frankfurt-Terminal 2 (FRA)||EI0650||Peter Geoghegan (peter.geoghegan86@gmail.com, +353 863271976)&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||11:15, Frankfurt-Terminal 2 (FRA)||AZ400||Giuseppe Maxia (datacharmer AT gmail dot com) &lt;br /&gt;
|-&lt;br /&gt;
|Saturday (Dec 4th)||06:20, Frankfurt-Terminal (FRA)||US700||Bruce Momjian (bruce@momjian.us) &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Departure from Stuttgart Airport (STR) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||07:00||AF5581||Jean-Christophe Arnu ||jca@postgresql.fr&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||09:20||LH2143||David Fetter ||davidfetter@postgresql.org&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||15:15||AB6612||Andreas Zickel||zickel@hesgdv.de&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||15:15||AB6612||Christopher Dove||dove@hesgdv.de&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||15:30||BA0919||Thom Brown||thom@linux.com&lt;br /&gt;
|-&lt;br /&gt;
|Friday (Dec 10th)||11:50||SK658||Magnus Hagander||magnus@hagander.net&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Departure from Stuttgart Main Station ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Train||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Wednesday (Dec 8th)||16:10||EC 144||Hartmut Holzgraefe &amp;amp; Susanne Ebrecht: &amp;lt;hartmut@php.net&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||05:51||ICE 616 || Giuseppe Maxia (datacharmer AT gmail dot com)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Departure from Frankfurt Airport (FRA) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||10:50, Frankfurt-Terminal 2 (FRA)||EI0651||Peter Geoghegan (peter.geoghegan86@gmail.com, +353 863271976)&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||09:40, Frankfurt-Terminal 2 (FRA)||AZ413||Giuseppe Maxia (datacharmer at gmail dot com)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* I'm heading to Erfurt on Thursday (Dec 9th). Anyone going to that direction that could give me a ride? - Heikki Linnakangas (heikki@enterprisedb.com, +358405226830)&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PGDay_Europe_2010_rideshare</id>
		<title>PGDay Europe 2010 rideshare</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PGDay_Europe_2010_rideshare"/>
				<updated>2010-11-28T18:58:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Arriving at Stuttgart Airport (STR) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for registering your arrival to and departure from Stuttgart for PGDay Europe 2010, in case you want to share a ride with someone or just meet up for some company. Just put your arrival information down, and then coordinate with whomever arrives around the same time.&lt;br /&gt;
&lt;br /&gt;
''There is no official coordination activity, we just provide this wiki page for people to register their own information.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Arriving at Stuttgart Airport (STR) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||14:40||BA0920||Thom Brown||thom@linux.com&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||17:15||UA9242||David Fetter||davidfetter@postgresql.org&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||21:00||AF5586||Jean-Christophe Arnu || jca@postgresql.fr&lt;br /&gt;
|-&lt;br /&gt;
|Monday (Dec 6th)||09:25||AB6611||Andreas Zickel||zickel@hesgdv.de&lt;br /&gt;
|-&lt;br /&gt;
|Monday (Dec 6th)||09:25||AB6611||Christopher Dove||dove@hesgdv.de&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Arriving at Stuttgart Main Station ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Train||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Monday (Dec 6th)||09:08||ICE 591||Hartmut Holzgraefe &amp;amp; Susanne Ebrecht: &amp;lt;hartmut@php.net or miracee@web.de&amp;gt; +49-172-2707759 or call Susanne (Magnus should have the number)&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||14:08||ICE 517||Giuseppe Maxia (datacharmer AT gmail dot com)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Arriving at Frankfurt Airport (FRA) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||15:05||LH849||Heikki Linnakangas (heikki@enterprisedb.com, +358405226830)&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||10:05, Frankfurt-Terminal 2 (FRA)||EI0650||Peter Geoghegan (peter.geoghegan86@gmail.com, +353 863271976)&lt;br /&gt;
|-&lt;br /&gt;
|Sunday (Dec 5th)||11:15, Frankfurt-Terminal 2 (FRA)||AZ400||Giuseppe Maxia (datacharmer AT gmail dot com) &lt;br /&gt;
|-&lt;br /&gt;
|Saturday (Dec 4th)||06:20, Frankfurt-Terminal (FRA)||US700||Bruce Momjian (bruce@momjian.us) &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Departure from Stuttgart Airport (STR) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||15:15||AB6612||Andreas Zickel||zickel@hesgdv.de&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||15:15||AB6612||Christopher Dove||dove@hesgdv.de&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||15:30||BA0919||Thom Brown||thom@linux.com&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||07:00||AF5581||Jean-Christophe Arnu ||jca@postgresql.fr&lt;br /&gt;
|-&lt;br /&gt;
|Friday (Dec 10th)||11:50||SK658||Magnus Hagander||magnus@hagander.net&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Departure from Stuttgart Main Station ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Train||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Wednesday (Dec 8th)||16:10||EC 144||Hartmut Holzgraefe &amp;amp; Susanne Ebrecht: &amp;lt;hartmut@php.net&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||05:51||ICE 616 || Giuseppe Maxia (datacharmer AT gmail dot com)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Departure from Frankfurt Airport (FRA) ==&lt;br /&gt;
{|&lt;br /&gt;
!!|Day||Time||Flight||Name/contact info&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||10:50, Frankfurt-Terminal 2 (FRA)||EI0651||Peter Geoghegan (peter.geoghegan86@gmail.com, +353 863271976)&lt;br /&gt;
|-&lt;br /&gt;
|Thursday (Dec 9th)||09:40, Frankfurt-Terminal 2 (FRA)||AZ413||Giuseppe Maxia (datacharmer at gmail dot com)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* I'm heading to Erfurt on Thursday (Dec 9th). Anyone going to that direction that could give me a ride? - Heikki Linnakangas (heikki@enterprisedb.com, +358405226830)&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Refactor_Type_System</id>
		<title>Refactor Type System</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Refactor_Type_System"/>
				<updated>2010-11-12T22:11:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Refactor the Type System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Refactor the Type System =&lt;br /&gt;
&lt;br /&gt;
ISSUES:&lt;br /&gt;
&lt;br /&gt;
Creaky typmod system&lt;br /&gt;
&lt;br /&gt;
    One 32-bit integer does not contain enough structure to describe&lt;br /&gt;
    conveniently what a type should be.  Pushing information into&lt;br /&gt;
    userland, as PostGIS is forced to do, exposes these types to the&lt;br /&gt;
    vicissitudes of user environment, search_path, etc.&lt;br /&gt;
&lt;br /&gt;
    Typmod is not preserved over all operations, leading to surprising&lt;br /&gt;
    behavior.&lt;br /&gt;
&lt;br /&gt;
Need to store a separate entry for a type's array and other possible multiplicities&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Refactor_Type_System</id>
		<title>Refactor Type System</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Refactor_Type_System"/>
				<updated>2010-11-12T16:32:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* Refactor the Type System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Refactor the Type System =&lt;br /&gt;
&lt;br /&gt;
ISSUES:&lt;br /&gt;
&lt;br /&gt;
- Creaky typmod system&lt;br /&gt;
&lt;br /&gt;
- Need to store a separate entry for a type's array and other possible multiplicities&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Refactor_Type_System</id>
		<title>Refactor Type System</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Refactor_Type_System"/>
				<updated>2010-11-12T16:28:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;New page: = Refactor the Type System =  TODO  - Creaky typmod system  - Need to store a separate entry for a type's array and other possible multiplicities&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Refactor the Type System =&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
- Creaky typmod system&lt;br /&gt;
&lt;br /&gt;
- Need to store a separate entry for a type's array and other possible multiplicities&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/FAQ</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/FAQ"/>
				<updated>2010-11-09T22:40:50Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* How do I find out about known bugs or missing features? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
[[:Category:FAQ|Additional FAQ Entries on this Wiki]]&lt;br /&gt;
&lt;br /&gt;
== Translations of this Document ==&lt;br /&gt;
&lt;br /&gt;
* [[Häufig gestellte Fragen|German]]&lt;br /&gt;
* [[Perguntas Frequentes|Portuguese]]&lt;br /&gt;
* [[Preguntas Frecuentes|Spanish]]&lt;br /&gt;
&lt;br /&gt;
== Platform-specific questions ==&lt;br /&gt;
&lt;br /&gt;
Windows users should also read the [[Running &amp;amp; Installing PostgreSQL On Native Windows|platform FAQ for Windows]]. There are [[Frequently Asked Questions#Platform FAQs|FAQs for other platforms]] too.&lt;br /&gt;
&lt;br /&gt;
== General Questions ==&lt;br /&gt;
&lt;br /&gt;
=== What is PostgreSQL? How is it pronounced? What is Postgres? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL is pronounced Post-Gres-Q-L. (For those curious about how&lt;br /&gt;
to say &amp;quot;PostgreSQL&amp;quot;, an [http://www.postgresql.org/files/postgresql.mp3 audio file] is available.)&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is an object-relational database system that has the&lt;br /&gt;
features of traditional proprietary database systems with enhancements&lt;br /&gt;
to be found in next-generation DBMS systems. PostgreSQL is free and&lt;br /&gt;
the complete source code is available.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL development is performed by a team of mostly volunteer&lt;br /&gt;
developers spread throughout the world and communicating via the&lt;br /&gt;
Internet. It is a community project and is not controlled by any&lt;br /&gt;
company. To get involved, see the [[Developer_FAQ | Developer FAQ]].&lt;br /&gt;
&lt;br /&gt;
Postgres is a widely-used nickname for PostgreSQL. It was the original&lt;br /&gt;
name of the project at Berkeley and is strongly preferred over other&lt;br /&gt;
nicknames. If you find 'PostgreSQL' hard to pronounce, call it&lt;br /&gt;
'Postgres' instead.&lt;br /&gt;
&lt;br /&gt;
=== Who controls PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
If you are looking for a PostgreSQL gatekeeper, central committee, or&lt;br /&gt;
controlling company, give up --- there isn't one. We do have a core&lt;br /&gt;
committee and CVS committers, but these groups are more for&lt;br /&gt;
administrative purposes than control. The project is directed by the&lt;br /&gt;
community of developers and users, which anyone can join. All you need&lt;br /&gt;
to do is subscribe to the mailing lists and participate in the&lt;br /&gt;
discussions. (See the [[Developer FAQ|Developer's FAQ]] for information on how to get&lt;br /&gt;
involved in PostgreSQL development.)&lt;br /&gt;
&lt;br /&gt;
=== Who is the PostgreSQL Global Development Group? ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;PGDG&amp;quot; is an international, unincorporated association of&lt;br /&gt;
individuals and companies who have contributed to the PostgreSQL&lt;br /&gt;
project.  The PostgreSQL Core Team generally act as spokespeople&lt;br /&gt;
for the PGDG.&lt;br /&gt;
&lt;br /&gt;
=== Who is the PostgreSQL Core Team? ===&lt;br /&gt;
&lt;br /&gt;
A committee of five to seven (currently six) senior contributors to&lt;br /&gt;
PostgreSQL who do the following for the project: (a) set release dates,&lt;br /&gt;
(b) handle confidential matters for the project, (c) act as spokespeople&lt;br /&gt;
for the PGDG when required, and (d) arbitrate community decisions which&lt;br /&gt;
are not settled by consensus.  The current Core Team is listed on top of&lt;br /&gt;
[http://www.postgresql.org/community/contributors/ the contributors page]&lt;br /&gt;
&lt;br /&gt;
=== What about the various PostgreSQL foundations? ===&lt;br /&gt;
&lt;br /&gt;
While the PostgreSQL project utilizes non-profit corporations in the&lt;br /&gt;
USA, Europe, Brazil and Japan for fundraising and project coordination,&lt;br /&gt;
these entities do not own the PostgreSQL code.&lt;br /&gt;
&lt;br /&gt;
=== What is the license of PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL is distributed under a license similar to BSD and MIT. Basically, it&lt;br /&gt;
allows users to do anything they want with the code, including&lt;br /&gt;
reselling binaries without the source code. The only restriction is&lt;br /&gt;
that you not hold us legally liable for problems with the software.&lt;br /&gt;
There is also the requirement that this copyright appear in all copies&lt;br /&gt;
of the software. Here is the license we use:&lt;br /&gt;
&lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-1996 Regents of the University of&lt;br /&gt;
 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;
=== What platforms does PostgreSQL support? ===&lt;br /&gt;
  &lt;br /&gt;
In general, any modern Unix-compatible platform should be able to run&lt;br /&gt;
PostgreSQL. The platforms that have received recent explicit testing&lt;br /&gt;
can be seen in the [http://buildfarm.postgresql.org/ Build farm].&lt;br /&gt;
The documentation contains more details about supported platforms at http://www.postgresql.org/docs/current/static/supported-platforms.html.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL also runs natively on Microsoft Windows NT-based operating&lt;br /&gt;
systems like Win2000 SP4, WinXP, and Win2003. A prepackaged installer&lt;br /&gt;
is available at http://www.postgresql.org/download/windows.&lt;br /&gt;
MSDOS-based versions of Windows (Win95, Win98, WinMe) can run&lt;br /&gt;
PostgreSQL using Cygwin.&lt;br /&gt;
&lt;br /&gt;
=== Where can I get PostgreSQL? ===&lt;br /&gt;
&lt;br /&gt;
There are binary distributions for various operating systems and platforms; see [http://www.postgresql.org/download our download area].&lt;br /&gt;
&lt;br /&gt;
The source code can be obtained [http://www.postgresql.org/ftp/ via web browser] or [ftp://ftp.postgresql.org/pub/ through ftp].&lt;br /&gt;
&lt;br /&gt;
=== What is the most recent release? ===&lt;br /&gt;
  &lt;br /&gt;
The latest release of PostgreSQL is shown on the front page of [http://www.postgresql.org/ our website].&lt;br /&gt;
&lt;br /&gt;
We typically have a major release every year, with minor releases every few months.&lt;br /&gt;
Minor releases are usually made at the same time for all supported major-release branches.&lt;br /&gt;
For more about major versus minor releases, see&lt;br /&gt;
http://www.postgresql.org/support/versioning.&lt;br /&gt;
&lt;br /&gt;
=== Where can I get support? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL community provides assistance to many of its users via&lt;br /&gt;
email. The main web site to subscribe to the email lists is&lt;br /&gt;
http://www.postgresql.org/community/lists/. The general or bugs lists&lt;br /&gt;
are a good place to start. For best results, consider reading the &lt;br /&gt;
[[guide to reporting problems]] before you post to make sure you&lt;br /&gt;
include enough information for people to help you.&lt;br /&gt;
&lt;br /&gt;
The major IRC channel is #postgresql on Freenode (irc.freenode.net).&lt;br /&gt;
A Spanish one also&lt;br /&gt;
exists on the same network, (#postgresql-es), a French one,&lt;br /&gt;
(#postgresqlfr), and a Brazilian one, (#postgresql-br). There is also&lt;br /&gt;
a PostgreSQL channel on EFNet.&lt;br /&gt;
&lt;br /&gt;
A list of support companies is available at&lt;br /&gt;
http://www.postgresql.org/support/professional_support.&lt;br /&gt;
&lt;br /&gt;
=== How do I submit a bug report? ===&lt;br /&gt;
  &lt;br /&gt;
Visit the PostgreSQL bug form at&lt;br /&gt;
http://www.postgresql.org/support/submitbug to submit your bug&lt;br /&gt;
report to the pgsql-bugs mailing list. Also check out our ftp&lt;br /&gt;
site ftp://ftp.postgresql.org/pub/ to see if there is a more recent&lt;br /&gt;
PostgreSQL version.&lt;br /&gt;
&lt;br /&gt;
For a prompt and helpful response, it is important for you to read the &lt;br /&gt;
[[guide to reporting problems]] to make sure that you include the &lt;br /&gt;
information required to fully understand and act on your report.&lt;br /&gt;
&lt;br /&gt;
Bugs submitted using the bug form or posted to any PostgreSQL mailing&lt;br /&gt;
list typically generates one of the following replies:&lt;br /&gt;
* It is not a bug, and why&lt;br /&gt;
* It is a known bug and is already on the TODO list&lt;br /&gt;
* The bug has been fixed in the current release&lt;br /&gt;
* The bug has been fixed but is not packaged yet in an official release&lt;br /&gt;
* A request is made for more detailed information:&lt;br /&gt;
** Operating system&lt;br /&gt;
** PostgreSQL version&lt;br /&gt;
** Reproducible test case&lt;br /&gt;
** Debugging information&lt;br /&gt;
** [[Generating_a_stack_trace_of_a_PostgreSQL_backend|Debugger backtrace output]]&lt;br /&gt;
* The bug is new. The following might happen:&lt;br /&gt;
** A patch is created and will be included in the next major or minor release&lt;br /&gt;
** The bug cannot be fixed immediately and is added to the TODO list&lt;br /&gt;
&lt;br /&gt;
=== How do I find out about known bugs or missing features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL supports an extended subset of SQL:2008. See our [[Todo|TODO list]]&lt;br /&gt;
for known bugs, missing features, and future plans.&lt;br /&gt;
&lt;br /&gt;
A feature request usually results in one of the following replies:&lt;br /&gt;
* The feature is already on the TODO list&lt;br /&gt;
* The feature is not desired because:&lt;br /&gt;
** It duplicates existing functionality that already follows the SQL standard&lt;br /&gt;
** The feature would increase code complexity but add little benefit&lt;br /&gt;
** The feature would be insecure or unreliable&lt;br /&gt;
* The new feature is added to the TODO list&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL does not use a bug tracking system because we find it more&lt;br /&gt;
efficient to respond directly to email and keep the TODO list&lt;br /&gt;
up-to-date. In practice, bugs don't last very long in the software,&lt;br /&gt;
and bugs that affect a large number of users are fixed rapidly. The&lt;br /&gt;
only place to find all changes, improvements, and fixes in a&lt;br /&gt;
PostgreSQL release is to read the CVS log messages. Even the release&lt;br /&gt;
notes do not list every change made to the software.&lt;br /&gt;
&lt;br /&gt;
=== A bug I'm encountering is fixed in a newer minor release of PostgreSQL, but I don't want to upgrade. Can I get a patch for just this issue? ===&lt;br /&gt;
&lt;br /&gt;
No. Nobody will make a custom patch for you so you can (say) extract a fix from 8.4.3 and apply it to 8.4.1 . &lt;br /&gt;
That's because there should never be any need to do that.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL has a strict policy that only bug fixes are back-patched into point releases, as per the [http://www.postgresql.org/support/versioning version policy]. It is safe to upgrade from 8.4.1 to 8.4.3,&lt;br /&gt;
for example. Binary compatibility will be maintained, no dump and reload is required, nothing will break, but bugs that might &lt;br /&gt;
cause problems have been fixed. Even if you are not yet encountering a particular bug, you might later, and it is wise to upgrade promptly.&lt;br /&gt;
You just have to install the update and re-start the database server, nothing more.&lt;br /&gt;
&lt;br /&gt;
Upgrading from 8.3 to 8.4, or 8.4 to 9.0, is a major upgrade that does not come with the same guarantees. However, if a bug&lt;br /&gt;
is discovered in 9.0 then it will generally be fixed in all maintained older versions like 8.4 and 8.3 if it is safe and&lt;br /&gt;
practical to do so.&lt;br /&gt;
&lt;br /&gt;
This means that if you're running 8.1.0, upgrading to 8.1.21 is &amp;lt;b&amp;gt;strongly&amp;lt;/b&amp;gt; recommended and very safe. On the other hand,&lt;br /&gt;
upgrading to the next major release, 8.2.x, may require changes to your app, and will certainly require a dump and reload.&lt;br /&gt;
&lt;br /&gt;
If you want to be careful about all upgrades, you should read the [http://www.postgresql.org/docs/current/static/release.html release notes] &lt;br /&gt;
for each point release between your current one and the latest minor version of the same major release carefully. If you're&lt;br /&gt;
exceptionally paranoid about upgrades, you can fetch the source code to each set of point release changes from [http://git.postgresql.org/ PostgreSQL's git repository] and examine it.&lt;br /&gt;
&lt;br /&gt;
It is strongly recommended that you &amp;lt;b&amp;gt;always&amp;lt;/b&amp;gt; upgrade to the latest minor release. Avoid trying to extract and apply individual fixes&lt;br /&gt;
from point releases; by doing so you're bypassing all the QA done by the PostgreSQL team when they prepare a release, and are creating your&lt;br /&gt;
own custom version that &amp;lt;i&amp;gt;nobody else has ever used&amp;lt;/i&amp;gt;. It's a lot safer to just update to the latest tested, safe release. &amp;lt;i&amp;gt;Patching your own custom, non-standard build will also take more time/effort, and will require the same amount of downtime as a normal upgrade.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== I have a program that says it wants PostgreSQL x.y.1. Can I use PostgreSQL x.y.2 instead? ===&lt;br /&gt;
&lt;br /&gt;
Any program that works with a particular version, like 8.4.1, should work with any other minor version in the same major version. That means that if a program says it wants (eg) 8.4.1, you can and should install the latest in the 8.4 series instead.&lt;br /&gt;
&lt;br /&gt;
See the previous question for more details.&lt;br /&gt;
&lt;br /&gt;
=== What documentation is available? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL includes extensive documentation, including a large manual,&lt;br /&gt;
manual pages, and some test examples. See the /doc directory. You can&lt;br /&gt;
also browse the manuals online at http://www.postgresql.org/docs.&lt;br /&gt;
&lt;br /&gt;
There are a number of PostgreSQL&lt;br /&gt;
books available for purchase; two of them are also available online.  A list of books can be found at&lt;br /&gt;
http://www.postgresql.org/docs/books/.  One of the most popular ones is the one by Korry &amp;amp; Susan&lt;br /&gt;
Douglas.&lt;br /&gt;
&lt;br /&gt;
There is also a collection of&lt;br /&gt;
PostgreSQL technical articles on the &lt;br /&gt;
[[Community_Generated_Articles%2C_Guides%2C_and_Documentation | wiki]].&lt;br /&gt;
&lt;br /&gt;
The command line client program psql has some \d commands to show&lt;br /&gt;
information about types, operators, functions, aggregates, etc. - use&lt;br /&gt;
\? to display the available commands.&lt;br /&gt;
&lt;br /&gt;
=== How can I learn SQL? ===&lt;br /&gt;
&lt;br /&gt;
First,  consider the PostgreSQL-specific books mentioned above. Many of&lt;br /&gt;
our users also like The Practical SQL Handbook, Bowman, Judith S., et&lt;br /&gt;
al., Addison-Wesley. Others like The Complete Reference SQL, Groff et&lt;br /&gt;
al., McGraw-Hill.&lt;br /&gt;
&lt;br /&gt;
Many people consider the PostgreSQL documentation to be an excellent guide&lt;br /&gt;
for learning SQL its self, as well as for PostgreSQL's implementation of it.&lt;br /&gt;
For best results use PostgreSQL alongside another full-featured SQL database as&lt;br /&gt;
you learn, so you get used to SQL without becoming reliant on PostgreSQL-specific&lt;br /&gt;
features. The PostgreSQL documentation generally mentions when features are PostgreSQL&lt;br /&gt;
extensions of the standard.&lt;br /&gt;
&lt;br /&gt;
There are also many nice tutorials available online:&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;
* http://sqlzoo.net&lt;br /&gt;
&lt;br /&gt;
=== How do I submit a patch or join the development team? ===&lt;br /&gt;
  &lt;br /&gt;
See the [[Developer FAQ|Developer's FAQ]].&lt;br /&gt;
&lt;br /&gt;
=== How does PostgreSQL compare to other DBMSs? ===&lt;br /&gt;
  &lt;br /&gt;
There are several ways of measuring software: features, performance,&lt;br /&gt;
reliability, support, and price.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL has most features present in large proprietary DBMSs,&lt;br /&gt;
like transactions, subselects, triggers, views, foreign key&lt;br /&gt;
referential integrity, and sophisticated locking. We have some&lt;br /&gt;
features they do not have, like user-defined types,&lt;br /&gt;
inheritance, rules, and multi-version concurrency control to&lt;br /&gt;
reduce lock contention.&lt;br /&gt;
       &lt;br /&gt;
==== Performance ====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL's performance is comparable to other proprietary and&lt;br /&gt;
open source databases. It is faster for some things, slower for&lt;br /&gt;
others. Our performance is usually +/-10% compared to other databases.&lt;br /&gt;
       &lt;br /&gt;
==== Reliability ====&lt;br /&gt;
&lt;br /&gt;
We realize that a DBMS must be reliable, or it is worthless. We&lt;br /&gt;
strive to release well-tested, stable code that has a minimum&lt;br /&gt;
of bugs. Each release has at least one month of beta testing,&lt;br /&gt;
and our release history shows that we can provide stable, solid&lt;br /&gt;
releases that are ready for production use. We believe we&lt;br /&gt;
compare favorably to other database software in this area.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
&lt;br /&gt;
Our mailing lists provide contact with a large group of&lt;br /&gt;
developers and users to help resolve any problems encountered.&lt;br /&gt;
While we cannot guarantee a fix, proprietary DBMSs do not always&lt;br /&gt;
supply a fix either. Direct access to developers, the user&lt;br /&gt;
community, manuals, and the source code often make PostgreSQL&lt;br /&gt;
support superior to other DBMSs. There is commercial&lt;br /&gt;
per-incident support available for those who need it. (See [[#Where_can_I_get_support.3F | section 1.7]]).&lt;br /&gt;
&lt;br /&gt;
==== Price ====&lt;br /&gt;
&lt;br /&gt;
We are free for all use, both proprietary and open source.&lt;br /&gt;
You can add our code to your product with no limitations,&lt;br /&gt;
except those outlined in our BSD-style license stated above.       &lt;br /&gt;
&lt;br /&gt;
=== Can PostgreSQL be embedded? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is designed as a client/server architecture, which requires&lt;br /&gt;
separate processes for each client and server, and various helper&lt;br /&gt;
processes. Many embedded architectures can support such requirements.&lt;br /&gt;
However, if your embedded architecture requires the database server to&lt;br /&gt;
run inside the application process, you cannot use Postgres and should&lt;br /&gt;
select a lighter-weight database solution.&lt;br /&gt;
&lt;br /&gt;
Popular embeddable options include [http://sqlite.org SQLite] and [http://firebirdsql.org Firebird SQL].&lt;br /&gt;
&lt;br /&gt;
=== How do I unsubscribe from the PostgreSQL email lists? How do I avoid receiving duplicate emails? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL Majordomo page allows subscribing or unsubscribing from&lt;br /&gt;
any of the PostgreSQL email lists. (You might need to have your&lt;br /&gt;
Majordomo password emailed to you to log in.)&lt;br /&gt;
&lt;br /&gt;
All PostgreSQL email lists are configured so a group reply goes to the&lt;br /&gt;
email list and the original email author. This is done so users&lt;br /&gt;
receive the quickest possible email replies. If you would prefer not&lt;br /&gt;
to receive duplicate email from the list in cases where you already&lt;br /&gt;
receive an email directly, check eliminatecc from the Majordomo Change&lt;br /&gt;
Settings page. You can also prevent yourself from receiving copies of&lt;br /&gt;
emails you post to the lists by unchecking selfcopy.&lt;br /&gt;
&lt;br /&gt;
== User Client Questions ==&lt;br /&gt;
                                   &lt;br /&gt;
=== What interfaces are available for PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL install includes only the C and embedded C interfaces.&lt;br /&gt;
All other interfaces are independent projects that are downloaded&lt;br /&gt;
separately; being separate allows them to have their own release&lt;br /&gt;
schedule and development teams.&lt;br /&gt;
&lt;br /&gt;
Some programming languages like PHP include an interface to&lt;br /&gt;
PostgreSQL. Interfaces for languages like Perl, TCL, Python, and many&lt;br /&gt;
others are available at http://pgfoundry.org.&lt;br /&gt;
&lt;br /&gt;
=== What tools are available for using PostgreSQL with Web pages? ===&lt;br /&gt;
  &lt;br /&gt;
A nice introduction to Database-backed Web pages can be seen at:&lt;br /&gt;
http://www.webreview.com&lt;br /&gt;
&lt;br /&gt;
For Web integration, PHP (http://www.php.net) is an excellent&lt;br /&gt;
interface.&lt;br /&gt;
&lt;br /&gt;
For complex cases, many use the Perl and DBD::Pg with CGI.pm or&lt;br /&gt;
mod_perl.&lt;br /&gt;
&lt;br /&gt;
=== Does PostgreSQL have a graphical user interface? ===&lt;br /&gt;
  &lt;br /&gt;
There are a large number of GUI Tools that are available for&lt;br /&gt;
PostgreSQL from both proprietary and open source developers. A detailed&lt;br /&gt;
list can be found in the [[Community Guide to PostgreSQL GUI Tools]].&lt;br /&gt;
&lt;br /&gt;
== Administrative Questions ==&lt;br /&gt;
                                   &lt;br /&gt;
=== How do I install PostgreSQL somewhere other than /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Specify the --prefix option when running configure.&lt;br /&gt;
&lt;br /&gt;
=== I'm installing PostgreSQL and don't know the password 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;
=== How do I control connections from other hosts? ===&lt;br /&gt;
  &lt;br /&gt;
By default, PostgreSQL only allows connections from the local machine&lt;br /&gt;
using Unix domain sockets or TCP/IP connections. Other machines will&lt;br /&gt;
not be able to connect unless you modify listen_addresses in the&lt;br /&gt;
postgresql.conf file, enable host-based authentication by modifying&lt;br /&gt;
the $PGDATA/pg_hba.conf file, and restart the database server.&lt;br /&gt;
&lt;br /&gt;
=== How do I tune the database engine for better performance? ===&lt;br /&gt;
  &lt;br /&gt;
There are three major areas for potential performance improvement:&lt;br /&gt;
&lt;br /&gt;
==== Query Changes ====&lt;br /&gt;
This involves modifying queries to obtain better performance:&lt;br /&gt;
       &lt;br /&gt;
* Creation of indexes, including expression and partial indexes&lt;br /&gt;
* Use of COPY instead of multiple INSERTs&lt;br /&gt;
* Grouping of multiple statements into a single transaction to reduce commit overhead&lt;br /&gt;
* Use of CLUSTER when retrieving many rows from an index&lt;br /&gt;
* Use of LIMIT for returning a subset of a query's output&lt;br /&gt;
* Use of Prepared queries&lt;br /&gt;
* Use of ANALYZE to maintain accurate optimizer statistics&lt;br /&gt;
* Regular use of VACUUM or pg_autovacuum&lt;br /&gt;
* Dropping of indexes during large data changes&lt;br /&gt;
         &lt;br /&gt;
==== Server Configuration ====&lt;br /&gt;
A number of postgresql.conf settings affect performance. For&lt;br /&gt;
more details, see Administration Guide/Server Run-time&lt;br /&gt;
Environment/Run-time Configuration.&lt;br /&gt;
&lt;br /&gt;
==== Hardware Selection ====&lt;br /&gt;
The effect of hardware on performance is detailed in&lt;br /&gt;
http://www.powerpostgresql.com/PerfList/ and&lt;br /&gt;
http://momjian.us/main/writings/pgsql/hw_performance/index.html.&lt;br /&gt;
&lt;br /&gt;
=== What debugging features are available? ===&lt;br /&gt;
  &lt;br /&gt;
There are many log_* server configuration variables at http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html that enable printing of query and process statistics which can be very useful for debugging and performance measurements.&lt;br /&gt;
&lt;br /&gt;
=== Why do I get &amp;quot;Sorry, too many clients&amp;quot; when trying to connect? ===&lt;br /&gt;
  &lt;br /&gt;
You have reached the default limit of 100 database sessions. You need&lt;br /&gt;
to increase the server's limit on how many concurrent backend&lt;br /&gt;
processes it can start by changing the max_connections value in&lt;br /&gt;
postgresql.conf and restarting the server.&lt;br /&gt;
&lt;br /&gt;
=== What is the upgrade process for PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
See http://www.postgresql.org/support/versioning for a general&lt;br /&gt;
discussion about upgrading, and&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
for specific instructions.&lt;br /&gt;
&lt;br /&gt;
=== Will PostgreSQL handle recent daylight saving time changes in various countries? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL releases 8.0 and up depend on the widely-used tzdata database&lt;br /&gt;
(also called the zoneinfo database or the [http://www.twinsun.com/tz/tz-link.htm Olson timezone database]) for&lt;br /&gt;
daylight savings information.  To deal with a DST law change that affects you,&lt;br /&gt;
install a new tzdata file set and restart the server.&lt;br /&gt;
&lt;br /&gt;
All PostgreSQL update releases include the latest available tzdata files,&lt;br /&gt;
so keeping up-to-date on minor releases for your major version is usually&lt;br /&gt;
sufficient for this.&lt;br /&gt;
&lt;br /&gt;
On platforms that receive regular software updates including new tzdata files,&lt;br /&gt;
it may be more convenient to rely on the system's copy of the tzdata files.&lt;br /&gt;
This is possible as a compile-time option.  Most Linux distributions choose&lt;br /&gt;
this approach for their pre-built versions of PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL releases before 8.0 always rely on the operating system's timezone&lt;br /&gt;
information.&lt;br /&gt;
&lt;br /&gt;
=== What computer hardware should I use? ===&lt;br /&gt;
  &lt;br /&gt;
Because PC hardware is mostly compatible, people tend to believe that&lt;br /&gt;
all PC hardware is of equal quality. It is not. ECC RAM, SCSI, and&lt;br /&gt;
quality motherboards are more reliable and have better performance&lt;br /&gt;
than less expensive hardware. PostgreSQL will run on almost any&lt;br /&gt;
hardware, but if reliability and performance are important it is wise&lt;br /&gt;
to research your hardware options thoroughly. &lt;br /&gt;
&lt;br /&gt;
Database servers, unlike many other applications, are usually I/O and memory constrained, so it is wise to focus on the I/O subsystem first, then memory capacity, and lastly consider CPU issues.  For example, a disk controller with a&lt;br /&gt;
battery-backed cache is often the cheapest and easiest way to improve database performance. Our email lists can be used to discuss hardware options and tradeoffs.&lt;br /&gt;
&lt;br /&gt;
=== How does PostgreSQL use CPU resources? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL server is process-based (not threaded), and uses one operating system process per database session.  A single database session (connection) cannot utilize more than one CPU.  Of course, multiple sessions are automatically spread across all available CPUs by your operating system.  Client applications can easily use threads and create multiple database connections from each thread.&lt;br /&gt;
&lt;br /&gt;
A single complex and CPU-intensive query is unable to use more than one CPU to do the processing for the query. The OS may still be able to use others for disk I/O etc, but you won't see much benefit from more than one spare core.&lt;br /&gt;
&lt;br /&gt;
=== Why does PostgreSQL have so many processes, even when idle? ===&lt;br /&gt;
&lt;br /&gt;
As noted in [[FAQ#How does PostgreSQL use CPU resources?|the answer above]], PostgreSQL is process based, so it starts one &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;postgres.exe&amp;lt;/code&amp;gt; on Windows) instance per connection. The postmaster (which accepts connections and starts new postgres instances for them) is always running. In addition, PostgreSQL generally has one or more &amp;quot;helper&amp;quot; processes like the stats collector, background writer, autovacuum daemon, walsender, etc, all of which show up as &amp;quot;postgres&amp;quot; instances in most system monitoring tools.&lt;br /&gt;
&lt;br /&gt;
Despite the number of processes, they actually use very little in the way of real resources. See [[FAQ#Why does PostgreSQL show up as using so much memory in my system monitoring tool?|the next answer]].&lt;br /&gt;
&lt;br /&gt;
=== Why does PostgreSQL use so much memory? ===&lt;br /&gt;
&lt;br /&gt;
Despite appearances, this is absolutely normal, and there's actually nowhere near as much memory being used as tools like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; or the Windows process monitor say PostgreSQL is using.&lt;br /&gt;
&lt;br /&gt;
Tools like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; and the Windows process monitor may show many &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; instances (see above), each of which appears to use a huge amount of memory. Often, when added up, the amount the postgres instances use is many times the amount of memory actually installed in the computer!&lt;br /&gt;
&lt;br /&gt;
This is a consequence of how these tools report memory use. They generally don't understand shared memory very well, and show it as if it was memory used individually and exclusively by each postgres instance. PostgreSQL uses a big chunk of shared memory to communicate between its backends and cache data. Because these tools count that shared memory block once per &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; instance instead of counting it once for &amp;lt;i&amp;gt;all&amp;lt;/i&amp;gt; &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; instances, they massively over-estimate how much memory PostgreSQL is using.&lt;br /&gt;
&lt;br /&gt;
== Operational Questions ==&lt;br /&gt;
                                   &lt;br /&gt;
=== How do I SELECT only the first few rows of a query? A random row? ===&lt;br /&gt;
  &lt;br /&gt;
To retrieve only a few rows, if you know at the number of rows needed&lt;br /&gt;
at the time of the SELECT use LIMIT . If an index matches the ORDER BY&lt;br /&gt;
it is possible the entire query does not have to be executed. If you&lt;br /&gt;
don't know the number of rows at SELECT time, use a cursor and FETCH.&lt;br /&gt;
&lt;br /&gt;
To SELECT a random row, use:&lt;br /&gt;
 SELECT col&lt;br /&gt;
 FROM tab&lt;br /&gt;
 ORDER BY random()&lt;br /&gt;
 LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
See also this [http://blog.rhodiumtoad.org.uk/2009/03/08/selecting-random-rows-from-a-table/ blog entry by Andrew Gierth]&lt;br /&gt;
that has more information on this topic.&lt;br /&gt;
&lt;br /&gt;
=== How do I find out what tables, indexes, databases, and users are defined? How do I see the queries used by psql to display them? ===&lt;br /&gt;
  &lt;br /&gt;
Use the \dt command to see tables in psql. For a complete list of&lt;br /&gt;
commands inside psql you can use \?. Alternatively you can read the&lt;br /&gt;
source code for psql in file pgsql/src/bin/psql/describe.c, it&lt;br /&gt;
contains SQL commands that generate the output for psql's backslash&lt;br /&gt;
commands. You can also start psql with the -E option so it will print&lt;br /&gt;
out the queries it uses to execute the commands you give. PostgreSQL&lt;br /&gt;
also provides an SQL compliant INFORMATION SCHEMA interface you can&lt;br /&gt;
query to get information about the database.&lt;br /&gt;
&lt;br /&gt;
There are also system tables beginning with pg_ that describe these&lt;br /&gt;
too.&lt;br /&gt;
&lt;br /&gt;
Use psql -l will list all databases.&lt;br /&gt;
&lt;br /&gt;
Also try the file pgsql/src/tutorial/syscat.source. It illustrates&lt;br /&gt;
many of the SELECTs needed to get information from the database system&lt;br /&gt;
tables.&lt;br /&gt;
&lt;br /&gt;
=== How do you change a column's data type? ===&lt;br /&gt;
  &lt;br /&gt;
Changing the data type of a column can be done easily in 8.0 and later&lt;br /&gt;
with ALTER TABLE ALTER COLUMN TYPE.&lt;br /&gt;
&lt;br /&gt;
In earlier releases, do this:&lt;br /&gt;
 BEGIN;&lt;br /&gt;
 ALTER TABLE tab ADD COLUMN new_col new_data_type;&lt;br /&gt;
 UPDATE tab SET new_col = CAST(old_col AS new_data_type);&lt;br /&gt;
 ALTER TABLE tab DROP COLUMN old_col;&lt;br /&gt;
 COMMIT;&lt;br /&gt;
&lt;br /&gt;
You might then want to do VACUUM FULL tab to reclaim the disk space&lt;br /&gt;
used by the expired rows.&lt;br /&gt;
&lt;br /&gt;
=== What is the maximum size for a row, a table, and a database? ===&lt;br /&gt;
  &lt;br /&gt;
These are the limits:&lt;br /&gt;
&lt;br /&gt;
 Maximum size for a database? unlimited (32 TB databases exist)&lt;br /&gt;
 Maximum size for a table? 32 TB&lt;br /&gt;
 Maximum size for a row? 400 GB&lt;br /&gt;
 Maximum size for a field? 1 GB&lt;br /&gt;
 Maximum number of rows in a table? unlimited&lt;br /&gt;
 Maximum number of columns in a table? 250-1600 depending on column types&lt;br /&gt;
 Maximum number of indexes on a table? unlimited&lt;br /&gt;
&lt;br /&gt;
Of course, these are not actually unlimited, but limited to available&lt;br /&gt;
disk space and memory/swap space. Performance may suffer when these&lt;br /&gt;
values get unusually large.&lt;br /&gt;
&lt;br /&gt;
The maximum table size of 32 TB does not require large file support&lt;br /&gt;
from the operating system. Large tables are stored as multiple 1 GB&lt;br /&gt;
files so file system size limits are not important.&lt;br /&gt;
&lt;br /&gt;
The maximum table size, row size, and maximum number of columns can be&lt;br /&gt;
quadrupled by increasing the default block size to 32k. The maximum&lt;br /&gt;
table size can also be increased using table partitioning.&lt;br /&gt;
&lt;br /&gt;
One limitation is that indexes can not be created on columns longer&lt;br /&gt;
than about 2,000 characters. Fortunately, such indexes are rarely&lt;br /&gt;
needed. Uniqueness is best guaranteed by a function index of an MD5&lt;br /&gt;
hash of the long column, and full text indexing allows for searching&lt;br /&gt;
of words within the column.&lt;br /&gt;
&lt;br /&gt;
=== How much database disk space is required to store data from a typical text file? ===&lt;br /&gt;
  &lt;br /&gt;
A PostgreSQL database may require up to five times the disk space to&lt;br /&gt;
store data from a text file.&lt;br /&gt;
&lt;br /&gt;
As an example, consider a file of 100,000 lines with an integer and&lt;br /&gt;
text description on each line. Suppose the text string averages&lt;br /&gt;
twenty bytes in length. The flat file would be 2.8 MB. The size of the&lt;br /&gt;
PostgreSQL database file containing this data can be estimated as 5.2&lt;br /&gt;
MB:&lt;br /&gt;
  24 bytes: each row header (approximate)&lt;br /&gt;
  24 bytes: one int field and one text field&lt;br /&gt;
 + 4 bytes: pointer on page to tuple&lt;br /&gt;
 ----------------------------------------&lt;br /&gt;
  52 bytes per row&lt;br /&gt;
&lt;br /&gt;
The data page size in PostgreSQL is 8192 bytes (8 KB), so:&lt;br /&gt;
&lt;br /&gt;
 8192 bytes per page&lt;br /&gt;
 -------------------  =  158 rows per database page (rounded down)&lt;br /&gt;
   52 bytes per row&lt;br /&gt;
&lt;br /&gt;
  100000 data rows&lt;br /&gt;
 ------------------  =  633 database pages (rounded up)&lt;br /&gt;
  158 rows per page&lt;br /&gt;
&lt;br /&gt;
 633 database pages * 8192 bytes per page  =  5,185,536 bytes (5.2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexes do not require as much overhead, but do contain the data that&lt;br /&gt;
is being indexed, so they can be large also.&lt;br /&gt;
&lt;br /&gt;
NULLs are stored as bitmaps, so they use very little space.&lt;br /&gt;
&lt;br /&gt;
Note that long values may be compressed transparently.&lt;br /&gt;
&lt;br /&gt;
See also this presentation on the topic: [[Image:How_Long_Is_a_String.pdf]].&lt;br /&gt;
&lt;br /&gt;
=== Why are my queries slow? Why don't they use my indexes? ===&lt;br /&gt;
  &lt;br /&gt;
Indexes are not used by every query. Indexes are used only if the&lt;br /&gt;
table is larger than a minimum size, and the query selects only a&lt;br /&gt;
small percentage of the rows in the table. This is because the random&lt;br /&gt;
disk access caused by an index scan can be slower than a straight read&lt;br /&gt;
through the table, or sequential scan.&lt;br /&gt;
&lt;br /&gt;
To determine if an index should be used, PostgreSQL must have&lt;br /&gt;
statistics about the table. These statistics are collected using&lt;br /&gt;
VACUUM ANALYZE, or simply ANALYZE. Using statistics, the optimizer&lt;br /&gt;
knows how many rows are in the table, and can better determine if&lt;br /&gt;
indexes should be used. Statistics are also valuable in determining&lt;br /&gt;
optimal join order and join methods. Statistics collection should be&lt;br /&gt;
performed periodically as the contents of the table change.&lt;br /&gt;
&lt;br /&gt;
Indexes are normally not used for ORDER BY or to perform joins. A&lt;br /&gt;
sequential scan followed by an explicit sort is usually faster than an&lt;br /&gt;
index scan of a large table. However, LIMIT combined with ORDER BY&lt;br /&gt;
often will use an index because only a small portion of the table is&lt;br /&gt;
returned.&lt;br /&gt;
&lt;br /&gt;
If you believe the optimizer is incorrect in choosing a sequential&lt;br /&gt;
scan, use SET enable_seqscan TO 'off' and run query again to see if an&lt;br /&gt;
index scan is indeed faster.&lt;br /&gt;
&lt;br /&gt;
When using wild-card operators such as LIKE or ~, indexes can only be&lt;br /&gt;
used in certain circumstances:&lt;br /&gt;
&lt;br /&gt;
* The beginning of the search string must be anchored to the start of the string, i.e.&lt;br /&gt;
** LIKE patterns must not start with % or _.&lt;br /&gt;
** ~ (regular expression) patterns must start with ^.&lt;br /&gt;
&lt;br /&gt;
* The search string can not start with a character class, e.g. [a-e].&lt;br /&gt;
&lt;br /&gt;
* Case-insensitive searches such as ILIKE and ~* do not utilize indexes. Instead, use expression indexes, which are described in [[#How_do_I_perform_regular_expression_searches_and_case-insensitive_regular_expression_searches.3F_How_do_I_use_an_index_for_case-insensitive_searches.3F | section 4.8]].&lt;br /&gt;
&lt;br /&gt;
* C locale must be used during initdb because sorting in a non-C locale often doesn't match the behavior of LIKE. You can create a special text_pattern_ops index that will work in such cases, but note it is only helpful for LIKE indexing.&lt;br /&gt;
&lt;br /&gt;
It is also possible to use full text indexing for word searches.&lt;br /&gt;
&lt;br /&gt;
The [[SlowQueryQuestions]] article contains some more tips and guidance.&lt;br /&gt;
&lt;br /&gt;
=== How do I see how the query optimizer is evaluating my query? ===&lt;br /&gt;
  &lt;br /&gt;
This is done with the EXPLAIN command; see [[Using EXPLAIN]].&lt;br /&gt;
&lt;br /&gt;
=== How do I change the sort ordering of textual data? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL sorts textual data according to the ordering that is defined by the current locale, which is selected during initdb.&lt;br /&gt;
(In 8.4 and up it will be possible to select a different locale when creating a new database.)&lt;br /&gt;
If you don't like the ordering then you need to use a different locale.&lt;br /&gt;
In particular, most locales other than &amp;quot;C&amp;quot; sort according to dictionary order, which largely ignores punctuation and spacing.&lt;br /&gt;
If that's not what you want then you need &amp;quot;C&amp;quot; locale.&lt;br /&gt;
&lt;br /&gt;
=== How do I perform regular expression searches and case-insensitive regular expression searches? How do I use an index for case-insensitive searches? ===&lt;br /&gt;
  &lt;br /&gt;
The ~ operator does regular expression matching, and ~* does&lt;br /&gt;
case-insensitive regular expression matching. The case-insensitive&lt;br /&gt;
variant of LIKE is called ILIKE.&lt;br /&gt;
&lt;br /&gt;
Case-insensitive equality comparisons are normally expressed as:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 WHERE lower(col) = 'abc';&lt;br /&gt;
&lt;br /&gt;
This will not use a standard index on &amp;quot;col&amp;quot;. However, if you create an&lt;br /&gt;
expression index on &amp;quot;lower(col)&amp;quot;, it will be used:&lt;br /&gt;
 CREATE INDEX tabindex ON tab (lower(col));&lt;br /&gt;
&lt;br /&gt;
If the above index is created as UNIQUE, then the column can store&lt;br /&gt;
upper and lowercase characters, but it cannot contain identical values that&lt;br /&gt;
differ only in case. To force a particular case to be stored in the&lt;br /&gt;
column, use a CHECK constraint or a trigger.&lt;br /&gt;
&lt;br /&gt;
In PostgreSQL 8.4 and later, you can also use the contributed [http://www.postgresql.org/docs/8.4/static/citext.html CITEXT data type], which internally implements the &amp;quot;lower()&amp;quot; calls, so that you can effectively treat it as a fully case-insensitive data type. CITEXT is also [https://svn.kineticode.com/citext/trunk/ available for 8.3], and an earlier version that treats only ASCII characters case-insensitively on 8.2 and earlier is available on [http://pgfoundry.org/projects/citext/ pgFoundry].&lt;br /&gt;
&lt;br /&gt;
=== In a query, how do I detect if a field is NULL? How do I concatenate possible NULLs? How can I sort on whether a field is NULL or not? ===&lt;br /&gt;
  &lt;br /&gt;
You can test the value with IS NULL or IS NOT NULL, like this:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 WHERE col IS NULL;&lt;br /&gt;
&lt;br /&gt;
Concatenating a NULL with something else produces another NULL.&lt;br /&gt;
If that's not what you want, you can replace the NULL(s) using&lt;br /&gt;
COALESCE(), like this:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SELECT COALESCE(col1, '') || COALESCE(col2, '')&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 FROM tab;&lt;br /&gt;
&lt;br /&gt;
To sort by the NULL status, use an IS NULL or IS NOT NULL test&lt;br /&gt;
in your ORDER BY clause. Things that are true will sort higher than&lt;br /&gt;
things that are false, so the following will put NULL entries at the&lt;br /&gt;
front of the output:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 ORDER BY (col IS NOT NULL), col;&lt;br /&gt;
&lt;br /&gt;
In PostgreSQL 8.3 and up, you can also control sort ordering of NULLs&lt;br /&gt;
using the recently-standardized NULLS FIRST/NULLS LAST modifiers,&lt;br /&gt;
like this:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 ORDER BY col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== What is the difference between the various character types? ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Internal Name&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|size specifies maximum length, no padding&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|blank-padded to the specified fixed length&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|no specific upper limit on length&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|variable-length byte array (null-byte safe)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|one byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You will see the internal name when examining system catalogs and in&lt;br /&gt;
some error messages.&lt;br /&gt;
&lt;br /&gt;
The first four types above are &amp;quot;varlena&amp;quot; types (i.e., the field length&lt;br /&gt;
is explicitly stored on disk, followed by the data). Thus the actual&lt;br /&gt;
space used is slightly greater than the expected size. However, long&lt;br /&gt;
values are also subject to compression, so the space on disk might&lt;br /&gt;
also be less than expected.&lt;br /&gt;
&lt;br /&gt;
VARCHAR(n) is best when storing variable-length strings if a specific&lt;br /&gt;
upper limit on the string length is required by the application.&lt;br /&gt;
TEXT is for strings of &amp;quot;unlimited&amp;quot; length (though all fields in PostgreSQL&lt;br /&gt;
are subject to a maximum value length of one gigabyte).&lt;br /&gt;
&lt;br /&gt;
CHAR(n) is for storing strings that are all the same length. CHAR(n)&lt;br /&gt;
pads with blanks to the specified length, while VARCHAR(n) only stores&lt;br /&gt;
the characters supplied.  BYTEA is for storing binary data,&lt;br /&gt;
particularly values that include zero bytes. All these types have similar&lt;br /&gt;
performance characteristics, except that the blank-padding involved&lt;br /&gt;
in CHAR(n) requires additional storage and some extra runtime.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;char&amp;quot; type (the quotes are required to distinguish it from CHAR(n))&lt;br /&gt;
is a specialized datatype that can store exactly one byte.  It is found in&lt;br /&gt;
the system catalogs but its use in user tables is generally discouraged.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a serial/auto-incrementing field? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL supports a SERIAL data type. Actually, this isn't quite&lt;br /&gt;
a real type.  It's a shorthand for creating an integer column that&lt;br /&gt;
is fed from a sequence.&lt;br /&gt;
&lt;br /&gt;
For example, this:&lt;br /&gt;
 CREATE TABLE person (&lt;br /&gt;
     id SERIAL,&lt;br /&gt;
     name TEXT&lt;br /&gt;
 );&lt;br /&gt;
is automatically translated into this:&lt;br /&gt;
 CREATE SEQUENCE person_id_seq;&lt;br /&gt;
 CREATE TABLE person (&lt;br /&gt;
     id INTEGER NOT NULL DEFAULT nextval('person_id_seq'),&lt;br /&gt;
     name TEXT&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
The automatically created sequence is named ''table''_''serialcolumn''_seq,&lt;br /&gt;
where ''table'' and ''serialcolumn'' are the names of the table and SERIAL&lt;br /&gt;
column, respectively. See the CREATE SEQUENCE manual page for more&lt;br /&gt;
information about sequences.&lt;br /&gt;
&lt;br /&gt;
There is also BIGSERIAL, which is like SERIAL except that the resulting&lt;br /&gt;
column is of type BIGINT instead of INTEGER.  Use this type if you think&lt;br /&gt;
that you might need more than 2 billion serial values over the lifespan&lt;br /&gt;
of the table.&lt;br /&gt;
&lt;br /&gt;
=== How do I get the value of a SERIAL insert? ===&lt;br /&gt;
  &lt;br /&gt;
The simplest way is to retrieve the assigned SERIAL value with&lt;br /&gt;
RETURNING. Using the example table in the previous question, it would look like this:&lt;br /&gt;
 INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;&lt;br /&gt;
&lt;br /&gt;
You can also call nextval() and use that value in the INSERT, or call&lt;br /&gt;
currval() after the INSERT.&lt;br /&gt;
&lt;br /&gt;
=== Doesn't currval() lead to a race condition with other users? ===&lt;br /&gt;
  &lt;br /&gt;
No. currval() returns the latest sequence value assigned by your session,&lt;br /&gt;
independently of what is happening in other sessions.&lt;br /&gt;
&lt;br /&gt;
=== Why are there gaps in the numbering of my sequence/SERIAL column? Why aren't my sequence numbers reused on transaction abort? ===&lt;br /&gt;
  &lt;br /&gt;
To improve concurrency, sequence values are given out to running&lt;br /&gt;
transactions on-demand; the sequence object is not kept locked but is&lt;br /&gt;
immediately available for another transaction to get another sequence&lt;br /&gt;
value. This causes gaps in numbering from aborted transactions.&lt;br /&gt;
&lt;br /&gt;
=== What is an OID? ===&lt;br /&gt;
  &lt;br /&gt;
If a table is created WITH OIDS, each row includes an OID column that is automatically filled in during INSERT.&lt;br /&gt;
OIDs are sequentially assigned 4-byte integers.  Initially they are unique&lt;br /&gt;
across the entire installation. However, the OID counter wraps around at 4 billion,&lt;br /&gt;
and after that OIDs may be duplicated.&lt;br /&gt;
&lt;br /&gt;
It is possible to prevent duplication of OIDs within a single table by&lt;br /&gt;
creating a unique index on the OID column (but note that the WITH OIDS&lt;br /&gt;
clause doesn't by itself create such an index).&lt;br /&gt;
The system checks the index to see if a newly&lt;br /&gt;
generated OID is already present, and if so generates a new OID and&lt;br /&gt;
repeats.  This works well so long as no OID-containing table has&lt;br /&gt;
more than a small fraction of 4 billion rows. &lt;br /&gt;
&lt;br /&gt;
PostgreSQL uses OIDs for object identifiers in the system catalogs,&lt;br /&gt;
where the size limit is unlikely to be a problem.&lt;br /&gt;
&lt;br /&gt;
To uniquely number rows in user tables, it is best to use SERIAL&lt;br /&gt;
rather than an OID column, or BIGSERIAL if the table is expected to&lt;br /&gt;
have more than 2 billion entries over its lifespan.&lt;br /&gt;
&lt;br /&gt;
=== What is a CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs identify specific physical rows by their block and&lt;br /&gt;
offset positions within a table.&lt;br /&gt;
They are used by index entries to point to physical rows.&lt;br /&gt;
A logical row's CTID changes when it is updated, so the CTID&lt;br /&gt;
cannot be used as a long-term row identifier.  But it is sometimes&lt;br /&gt;
useful to identify a row within a transaction when no competing&lt;br /&gt;
update is expected.&lt;br /&gt;
&lt;br /&gt;
=== Why do I get the error &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
You probably have run out of virtual memory on your system, or your&lt;br /&gt;
kernel has a low limit for certain resources. Try this before starting&lt;br /&gt;
the server:&lt;br /&gt;
 ulimit -d 262144&lt;br /&gt;
 limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Depending on your shell, only one of these may succeed, but it will&lt;br /&gt;
set your process data segment limit much higher and perhaps allow the&lt;br /&gt;
query to complete. This command applies to the current process, and&lt;br /&gt;
all subprocesses created after the command is run. If you are having a&lt;br /&gt;
problem with the SQL client because the backend is returning too much&lt;br /&gt;
data, try it before starting the client.&lt;br /&gt;
&lt;br /&gt;
=== How do I tell what PostgreSQL version I am running? ===&lt;br /&gt;
  &lt;br /&gt;
Run this query: SELECT version();&lt;br /&gt;
&lt;br /&gt;
=== Is there a way to leave an audit trail of database operations? ===&lt;br /&gt;
&lt;br /&gt;
There's nothing built-in, but it's not too difficult to build such&lt;br /&gt;
facilities yourself.&lt;br /&gt;
&lt;br /&gt;
Simple example right in the official docs:&lt;br /&gt;
http://www.postgresql.org/docs/8.3/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-AUDIT-EXAMPLE&lt;br /&gt;
&lt;br /&gt;
Project targeting this feature:  http://pgfoundry.org/projects/tablelog/&lt;br /&gt;
&lt;br /&gt;
Background information and other sample implementations: &lt;br /&gt;
http://it.toolbox.com/blogs/database-soup/simple-data-auditing-19014&lt;br /&gt;
http://www.go4expert.com/forums/showthread.php?t=7252&lt;br /&gt;
http://www.alberton.info/postgresql_table_audit.html&lt;br /&gt;
&lt;br /&gt;
=== How do I create a column that will default to the current time? ===&lt;br /&gt;
  &lt;br /&gt;
Use CURRENT_TIMESTAMP:&lt;br /&gt;
 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== How do I perform an outer join? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL supports outer joins using the SQL standard syntax. Here&lt;br /&gt;
are two examples:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM t1 LEFT OUTER JOIN t2 USING (col);&lt;br /&gt;
&lt;br /&gt;
These identical queries join t1.col to t2.col, and also return any&lt;br /&gt;
unjoined rows in t1 (those with no match in t2). A RIGHT join would&lt;br /&gt;
add unjoined rows of t2. A FULL join would return the matched rows&lt;br /&gt;
plus all unjoined rows from t1 and t2. The word OUTER is optional and&lt;br /&gt;
is assumed in LEFT, RIGHT, and FULL joins. Ordinary joins are called&lt;br /&gt;
INNER joins.&lt;br /&gt;
&lt;br /&gt;
=== How do I perform queries using multiple databases? ===&lt;br /&gt;
  &lt;br /&gt;
There is no way to query a database other than the current one.&lt;br /&gt;
Because PostgreSQL loads database-specific system catalogs, it is&lt;br /&gt;
uncertain how a cross-database query should even behave.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink allows cross-database queries using function calls. Of&lt;br /&gt;
course, a client can also make simultaneous connections to different&lt;br /&gt;
databases and merge the results on the client side.&lt;br /&gt;
&lt;br /&gt;
=== How do I return multiple rows or columns from a function? ===&lt;br /&gt;
  &lt;br /&gt;
It is easy using set-returning functions,&lt;br /&gt;
[[Return more than one row of data from PL/pgSQL functions]].&lt;br /&gt;
&lt;br /&gt;
=== Why do I get &amp;quot;relation with OID ##### does not exist&amp;quot; errors when accessing temporary tables in PL/PgSQL functions? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL versions &amp;lt; 8.3, PL/PgSQL caches function scripts, and an&lt;br /&gt;
unfortunate side effect is that if a PL/PgSQL function accesses a&lt;br /&gt;
temporary table, and that table is later dropped and recreated, and&lt;br /&gt;
the function called again, the function will fail because the cached&lt;br /&gt;
function contents still point to the old temporary table. The solution&lt;br /&gt;
is to use EXECUTE for temporary table access in PL/PgSQL. This will&lt;br /&gt;
cause the query to be reparsed every time.&lt;br /&gt;
&lt;br /&gt;
This problem does not occur in PostgreSQL 8.3 and later.&lt;br /&gt;
&lt;br /&gt;
=== What replication solutions are available? ===&lt;br /&gt;
  &lt;br /&gt;
Though &amp;quot;replication&amp;quot; is a single term, there are several technologies&lt;br /&gt;
for doing replication, with advantages and disadvantages for each.&lt;br /&gt;
Our documentation contains a good introduction to this topic at&lt;br /&gt;
http://www.postgresql.org/docs/8.3/static/high-availability.html and a&lt;br /&gt;
grid listing replication software and features is at&lt;br /&gt;
[[Replication, Clustering, and Connection Pooling]]&lt;br /&gt;
&lt;br /&gt;
Master/slave replication allows a single master to receive read/write&lt;br /&gt;
queries, while slaves can only accept read/SELECT queries. The most&lt;br /&gt;
popular freely available master-slave PostgreSQL replication solution&lt;br /&gt;
is Slony-I.&lt;br /&gt;
&lt;br /&gt;
Multi-master replication allows read/write queries to be sent to&lt;br /&gt;
multiple replicated computers. This capability also has a severe&lt;br /&gt;
impact on performance due to the need to synchronize changes between&lt;br /&gt;
servers. PGCluster is the most popular such solution freely available&lt;br /&gt;
for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
There are also proprietary and hardware-based replication solutions&lt;br /&gt;
available supporting a variety of replication models.&lt;br /&gt;
&lt;br /&gt;
=== Is possible to create a shared-storage postgresql server cluster? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL does not support clustering using [[Shared_Storage|shared storage]] on a SAN, SCSI backplane,&lt;br /&gt;
iSCSI volume, or other shared media. Such &amp;quot;RAC-style&amp;quot; clustering isn't supported.&lt;br /&gt;
Only replication-based clustering is currently supported.&lt;br /&gt;
&lt;br /&gt;
See [[Replication, Clustering, and Connection Pooling]] information for details.&lt;br /&gt;
&lt;br /&gt;
[[Shared_Storage|Shared-storage]] 'failover' is possible, but it is not safe to have more than one&lt;br /&gt;
postmaster running and accessing the data store at the same time. Heartbeat and&lt;br /&gt;
[http://en.wikipedia.org/wiki/STONITH STONITH] or some other hard-disconnect option are recommended.&lt;br /&gt;
&lt;br /&gt;
=== Why are my table and column names not recognized in my query? Why is capitalization not preserved? ===&lt;br /&gt;
  &lt;br /&gt;
The most common cause of unrecognized names is the use of&lt;br /&gt;
double-quotes around table or column names during table creation. When&lt;br /&gt;
double-quotes are used, table and column names (called identifiers)&lt;br /&gt;
are stored case-sensitive, meaning you must use double-quotes when&lt;br /&gt;
referencing the names in a query. Some interfaces, like pgAdmin,&lt;br /&gt;
automatically double-quote identifiers during table creation. So, for&lt;br /&gt;
identifiers to be recognized, you must either:&lt;br /&gt;
&lt;br /&gt;
* Avoid double-quoting identifiers when creating tables&lt;br /&gt;
* Use only lowercase characters in identifiers&lt;br /&gt;
* Double-quote identifiers when referencing them in queries&lt;br /&gt;
&lt;br /&gt;
=== I lost the database password.  What can I do to recover it? ===&lt;br /&gt;
&lt;br /&gt;
You can't.  However, you can reset it to something else.  To do this, you&lt;br /&gt;
&lt;br /&gt;
* edit pg_hba.conf to allow ''trust'' authorization temporarily&lt;br /&gt;
* Reload the config file (pg_ctl reload)&lt;br /&gt;
* Connect and issue ALTER ROLE / PASSWORD to set the new password&lt;br /&gt;
* edit pg_hba.conf again and restore the previous settings&lt;br /&gt;
* Reload the config file again&lt;br /&gt;
&lt;br /&gt;
=== Does PostgreSQL have stored procedures? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL doesn't. However PostgreSQL have very powerful functions and user-defined functions capabilities that can do most things that other RDBMS stored routines (procedures and functions) can do and in many cases more.&lt;br /&gt;
&lt;br /&gt;
These functions can be of different types and can be implemented in several programming languages.&lt;br /&gt;
(Refer to documentation for more details. [http://www.postgresql.org/docs/current/static/xfunc.html User-Defined Functions])&lt;br /&gt;
&lt;br /&gt;
PostgreSQL functions can be invoked in many ways. If you want to invoke a function as you would call a stored procedure in other RDBMS (typically a function with side-effects but whose result you don't care for example because it returns void), one option would be to use [http://www.postgresql.org/docs/current/static/plpgsql.html PL/pgSQL Language] for your procedure and the [http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT PERFORM] command. Example:&lt;br /&gt;
 PERFORM theNameOfTheFunction(arg1, arg2);&lt;br /&gt;
&lt;br /&gt;
Note that invoking instead:&lt;br /&gt;
 SELECT theNameOfTheFunction(arg1, arg2);&lt;br /&gt;
would produce a result even if the function returns void (this result would be one row containing a void value).&lt;br /&gt;
&lt;br /&gt;
[http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT PERFORM] could thus be used to discard this unuseful result.&lt;br /&gt;
&lt;br /&gt;
The main limitations on Pg's stored functions - as compared to true stored procedures - are:&lt;br /&gt;
&lt;br /&gt;
* inability to return multiple result sets&lt;br /&gt;
* no support for autonomous transactions (&amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ROLLBACK&amp;lt;/code&amp;gt; within a function)&lt;br /&gt;
* no support for the SQL-standard &amp;lt;code&amp;gt;CALL&amp;lt;/code&amp;gt; syntax, though the ODBC and JDBC drivers will translate calls for you.&lt;br /&gt;
&lt;br /&gt;
=== Why don't BEGIN, ROLLBACK and COMMIT work in stored procedures/functions? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL doesn't support autonomous transactions in its stored functions. Like all PostgreSQL queries, stored functions always run in a transaction and cannot operate outside a transaction.&lt;br /&gt;
&lt;br /&gt;
If you need a stored procedure to manage transactions, you can look into the dblink interface or do the work from a client-side script instead. In some cases you can do what you need to using [http://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING exception blocks in PL/PgSQL], because each BEGIN/EXCEPTION/END block creates a subtransaction.&lt;br /&gt;
&lt;br /&gt;
=== Why is &amp;quot;SELECT count(*) FROM bigtable;&amp;quot; slow? ===&lt;br /&gt;
&lt;br /&gt;
It can't be answered directly from an index. PostgreSQL has to check the visibility for each record, so it&lt;br /&gt;
forces a sequential scan of the entire table.  If you want, you can keep track of the number of rows yourself with triggers, but beware that this will slow down write access to the table.&lt;br /&gt;
&lt;br /&gt;
You can get an estimation.  The reltuples column in [http://www.postgresql.org/docs/current/static/catalog-pg-class.html pg_class] contains the information from the latest [http://www.postgresql.org/docs/current/static/sql-analyze.html ANALYZE] of the table.  On a large table this is often accurate to within a few thousandths of a percent, which is accurate enough for many purposes.&lt;br /&gt;
 &lt;br /&gt;
An &amp;quot;exact&amp;quot; count is often not exact for very long, anyway; due to [http://www.postgresql.org/docs/current/static/mvcc-intro.html MVCC] concurrency, the count will be accurate as of the moment the SELECT count(*) query (or, for stricter [http://www.postgresql.org/docs/current/static/transaction-iso.html transaction isolation] levels, its transaction) ''started'', and may well be out-of-date by the time the query completes.  In a transaction mix where the table is being modified, two count(*) executions which return at the same moment might have different values, if a modifying transaction committed between their start times.&lt;br /&gt;
&lt;br /&gt;
For more information, see [[Slow Counting]].&lt;br /&gt;
&lt;br /&gt;
=== Why is my query much slower when run as a prepared query? ===&lt;br /&gt;
&lt;br /&gt;
When PostgreSQL has the full query with all parameters known by planning time, it can use statistics in the table to find out if the values used in the query are very common or very uncommon in a column. This lets it change the way it fetches the data to be more efficient, as it knows to expect lots or very few results from a certain part of the query. For example, it might choose an sequential scan instead of doing an index scan if you search for 'active=y' and it knows that 99% of the records in the table have 'active=y', because in this case a sequential scan will be much faster.&lt;br /&gt;
&lt;br /&gt;
In a prepared query, PostgreSQL doesn't have the value of all parameters when it's creating the plan. It has to try to pick a &amp;quot;safe&amp;quot; plan that should work fairly well no matter what value you supply as the parameter when you execute the prepared query. Unfortunately, this plan might not be very appropriate if the value you supply is vastly more common, or vastly less common, than is average for some randomly selected values in the table.&lt;br /&gt;
&lt;br /&gt;
If you suspect this issue is affecting you, start by using the [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] command to compare the slow and fast queries. Look at the output of &amp;lt;code&amp;gt;EXPLAIN SELECT query...&amp;lt;/code&amp;gt; and compare it to the result of &amp;lt;code&amp;gt;PREPARE query... ; EXPLAIN EXECUTE query...&amp;lt;/code&amp;gt; to see if the plans are notably different. &amp;lt;code&amp;gt;EXPLAIN ANALYZE&amp;lt;/code&amp;gt; may give you more information, such as row count estimates and counts.&lt;br /&gt;
&lt;br /&gt;
Usually people having this problem are trying to use prepared queries as a security measure to prevent SQL injection, rather than as a performance tuning option for expensive-to-plan queries frequently executed with a variety of different parameters. Those people should consider using client-side prepared statements if their client interface (eg PgJDBC) supports it.&lt;br /&gt;
&lt;br /&gt;
At present, PostgreSQL does not offer a way to request re-planning of a prepared statement using a particular set of parameter values; doing so somewhat defeats the purpose of server-side prepared statements. Running a statistics check to see if a particular parameter value is notably outside the norm and automatically re-planning in that case has been discussed, but not agreed upon or implemented as yet.&lt;br /&gt;
&lt;br /&gt;
See [[Using_EXPLAIN]]. If you're going to ask for help on the mailing lists, please read the [[Guide to reporting problems]].&lt;br /&gt;
&lt;br /&gt;
=== Why is my query much slower when run in a function than standalone? ===&lt;br /&gt;
&lt;br /&gt;
See [[FAQ#Why is my query much slower when run as a prepared query?]]. Queries in PL/PgSQL functions are prepared and cached, so they execute in much the same way as if you'd &amp;lt;code&amp;gt;PREPARE&amp;lt;/code&amp;gt;d then &amp;lt;code&amp;gt;EXECUTE&amp;lt;/code&amp;gt;d the query yourself.&lt;br /&gt;
&lt;br /&gt;
If you're having really severe issues with this that improving the table statistics or adjusting your query don't help with, you can work around it by forcing PL/PgSQL to re-prepare your query at every execution. To do this, use the &amp;lt;code&amp;gt;EXECUTE ... USING&amp;lt;/code&amp;gt; statement in PL/PgSQL to supply your query as a textual string. Alternately, the [http://www.postgresql.org/docs/current/static/functions-string.html quote_literal or quote_nullable] functions may be used to escape parameters substituted into query text.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/FAQ</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/FAQ"/>
				<updated>2010-11-09T22:23:14Z</updated>
		
		<summary type="html">&lt;p&gt;Dfetter:&amp;#32;/* What is the license of PostgreSQL? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
[[:Category:FAQ|Additional FAQ Entries on this Wiki]]&lt;br /&gt;
&lt;br /&gt;
== Translations of this Document ==&lt;br /&gt;
&lt;br /&gt;
* [[Häufig gestellte Fragen|German]]&lt;br /&gt;
* [[Perguntas Frequentes|Portuguese]]&lt;br /&gt;
* [[Preguntas Frecuentes|Spanish]]&lt;br /&gt;
&lt;br /&gt;
== Platform-specific questions ==&lt;br /&gt;
&lt;br /&gt;
Windows users should also read the [[Running &amp;amp; Installing PostgreSQL On Native Windows|platform FAQ for Windows]]. There are [[Frequently Asked Questions#Platform FAQs|FAQs for other platforms]] too.&lt;br /&gt;
&lt;br /&gt;
== General Questions ==&lt;br /&gt;
&lt;br /&gt;
=== What is PostgreSQL? How is it pronounced? What is Postgres? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL is pronounced Post-Gres-Q-L. (For those curious about how&lt;br /&gt;
to say &amp;quot;PostgreSQL&amp;quot;, an [http://www.postgresql.org/files/postgresql.mp3 audio file] is available.)&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is an object-relational database system that has the&lt;br /&gt;
features of traditional proprietary database systems with enhancements&lt;br /&gt;
to be found in next-generation DBMS systems. PostgreSQL is free and&lt;br /&gt;
the complete source code is available.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL development is performed by a team of mostly volunteer&lt;br /&gt;
developers spread throughout the world and communicating via the&lt;br /&gt;
Internet. It is a community project and is not controlled by any&lt;br /&gt;
company. To get involved, see the [[Developer_FAQ | Developer FAQ]].&lt;br /&gt;
&lt;br /&gt;
Postgres is a widely-used nickname for PostgreSQL. It was the original&lt;br /&gt;
name of the project at Berkeley and is strongly preferred over other&lt;br /&gt;
nicknames. If you find 'PostgreSQL' hard to pronounce, call it&lt;br /&gt;
'Postgres' instead.&lt;br /&gt;
&lt;br /&gt;
=== Who controls PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
If you are looking for a PostgreSQL gatekeeper, central committee, or&lt;br /&gt;
controlling company, give up --- there isn't one. We do have a core&lt;br /&gt;
committee and CVS committers, but these groups are more for&lt;br /&gt;
administrative purposes than control. The project is directed by the&lt;br /&gt;
community of developers and users, which anyone can join. All you need&lt;br /&gt;
to do is subscribe to the mailing lists and participate in the&lt;br /&gt;
discussions. (See the [[Developer FAQ|Developer's FAQ]] for information on how to get&lt;br /&gt;
involved in PostgreSQL development.)&lt;br /&gt;
&lt;br /&gt;
=== Who is the PostgreSQL Global Development Group? ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;PGDG&amp;quot; is an international, unincorporated association of&lt;br /&gt;
individuals and companies who have contributed to the PostgreSQL&lt;br /&gt;
project.  The PostgreSQL Core Team generally act as spokespeople&lt;br /&gt;
for the PGDG.&lt;br /&gt;
&lt;br /&gt;
=== Who is the PostgreSQL Core Team? ===&lt;br /&gt;
&lt;br /&gt;
A committee of five to seven (currently six) senior contributors to&lt;br /&gt;
PostgreSQL who do the following for the project: (a) set release dates,&lt;br /&gt;
(b) handle confidential matters for the project, (c) act as spokespeople&lt;br /&gt;
for the PGDG when required, and (d) arbitrate community decisions which&lt;br /&gt;
are not settled by consensus.  The current Core Team is listed on top of&lt;br /&gt;
[http://www.postgresql.org/community/contributors/ the contributors page]&lt;br /&gt;
&lt;br /&gt;
=== What about the various PostgreSQL foundations? ===&lt;br /&gt;
&lt;br /&gt;
While the PostgreSQL project utilizes non-profit corporations in the&lt;br /&gt;
USA, Europe, Brazil and Japan for fundraising and project coordination,&lt;br /&gt;
these entities do not own the PostgreSQL code.&lt;br /&gt;
&lt;br /&gt;
=== What is the license of PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL is distributed under a license similar to BSD and MIT. Basically, it&lt;br /&gt;
allows users to do anything they want with the code, including&lt;br /&gt;
reselling binaries without the source code. The only restriction is&lt;br /&gt;
that you not hold us legally liable for problems with the software.&lt;br /&gt;
There is also the requirement that this copyright appear in all copies&lt;br /&gt;
of the software. Here is the license we use:&lt;br /&gt;
&lt;br /&gt;
 PostgreSQL Data Base Management System&lt;br /&gt;
 &lt;br /&gt;
 Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group&lt;br /&gt;
 Portions Copyright (c) 1994-1996 Regents of the University of&lt;br /&gt;
 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;
=== What platforms does PostgreSQL support? ===&lt;br /&gt;
  &lt;br /&gt;
In general, any modern Unix-compatible platform should be able to run&lt;br /&gt;
PostgreSQL. The platforms that have received recent explicit testing&lt;br /&gt;
can be seen in the [http://buildfarm.postgresql.org/ Build farm].&lt;br /&gt;
The documentation contains more details about supported platforms at http://www.postgresql.org/docs/current/static/supported-platforms.html.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL also runs natively on Microsoft Windows NT-based operating&lt;br /&gt;
systems like Win2000 SP4, WinXP, and Win2003. A prepackaged installer&lt;br /&gt;
is available at http://www.postgresql.org/download/windows.&lt;br /&gt;
MSDOS-based versions of Windows (Win95, Win98, WinMe) can run&lt;br /&gt;
PostgreSQL using Cygwin.&lt;br /&gt;
&lt;br /&gt;
=== Where can I get PostgreSQL? ===&lt;br /&gt;
&lt;br /&gt;
There are binary distributions for various operating systems and platforms; see [http://www.postgresql.org/download our download area].&lt;br /&gt;
&lt;br /&gt;
The source code can be obtained [http://www.postgresql.org/ftp/ via web browser] or [ftp://ftp.postgresql.org/pub/ through ftp].&lt;br /&gt;
&lt;br /&gt;
=== What is the most recent release? ===&lt;br /&gt;
  &lt;br /&gt;
The latest release of PostgreSQL is shown on the front page of [http://www.postgresql.org/ our website].&lt;br /&gt;
&lt;br /&gt;
We typically have a major release every year, with minor releases every few months.&lt;br /&gt;
Minor releases are usually made at the same time for all supported major-release branches.&lt;br /&gt;
For more about major versus minor releases, see&lt;br /&gt;
http://www.postgresql.org/support/versioning.&lt;br /&gt;
&lt;br /&gt;
=== Where can I get support? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL community provides assistance to many of its users via&lt;br /&gt;
email. The main web site to subscribe to the email lists is&lt;br /&gt;
http://www.postgresql.org/community/lists/. The general or bugs lists&lt;br /&gt;
are a good place to start. For best results, consider reading the &lt;br /&gt;
[[guide to reporting problems]] before you post to make sure you&lt;br /&gt;
include enough information for people to help you.&lt;br /&gt;
&lt;br /&gt;
The major IRC channel is #postgresql on Freenode (irc.freenode.net).&lt;br /&gt;
A Spanish one also&lt;br /&gt;
exists on the same network, (#postgresql-es), a French one,&lt;br /&gt;
(#postgresqlfr), and a Brazilian one, (#postgresql-br). There is also&lt;br /&gt;
a PostgreSQL channel on EFNet.&lt;br /&gt;
&lt;br /&gt;
A list of support companies is available at&lt;br /&gt;
http://www.postgresql.org/support/professional_support.&lt;br /&gt;
&lt;br /&gt;
=== How do I submit a bug report? ===&lt;br /&gt;
  &lt;br /&gt;
Visit the PostgreSQL bug form at&lt;br /&gt;
http://www.postgresql.org/support/submitbug to submit your bug&lt;br /&gt;
report to the pgsql-bugs mailing list. Also check out our ftp&lt;br /&gt;
site ftp://ftp.postgresql.org/pub/ to see if there is a more recent&lt;br /&gt;
PostgreSQL version.&lt;br /&gt;
&lt;br /&gt;
For a prompt and helpful response, it is important for you to read the &lt;br /&gt;
[[guide to reporting problems]] to make sure that you include the &lt;br /&gt;
information required to fully understand and act on your report.&lt;br /&gt;
&lt;br /&gt;
Bugs submitted using the bug form or posted to any PostgreSQL mailing&lt;br /&gt;
list typically generates one of the following replies:&lt;br /&gt;
* It is not a bug, and why&lt;br /&gt;
* It is a known bug and is already on the TODO list&lt;br /&gt;
* The bug has been fixed in the current release&lt;br /&gt;
* The bug has been fixed but is not packaged yet in an official release&lt;br /&gt;
* A request is made for more detailed information:&lt;br /&gt;
** Operating system&lt;br /&gt;
** PostgreSQL version&lt;br /&gt;
** Reproducible test case&lt;br /&gt;
** Debugging information&lt;br /&gt;
** [[Generating_a_stack_trace_of_a_PostgreSQL_backend|Debugger backtrace output]]&lt;br /&gt;
* The bug is new. The following might happen:&lt;br /&gt;
** A patch is created and will be included in the next major or minor release&lt;br /&gt;
** The bug cannot be fixed immediately and is added to the TODO list&lt;br /&gt;
&lt;br /&gt;
=== How do I find out about known bugs or missing features? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL supports an extended subset of SQL:2003. See our [[Todo|TODO list]]&lt;br /&gt;
for known bugs, missing features, and future plans.&lt;br /&gt;
&lt;br /&gt;
A feature request usually results in one of the following replies:&lt;br /&gt;
* The feature is already on the TODO list&lt;br /&gt;
* The feature is not desired because:&lt;br /&gt;
** It duplicates existing functionality that already follows the SQL standard&lt;br /&gt;
** The feature would increase code complexity but add little benefit&lt;br /&gt;
** The feature would be insecure or unreliable&lt;br /&gt;
* The new feature is added to the TODO list&lt;br /&gt;
    &lt;br /&gt;
PostgreSQL does not use a bug tracking system because we find it more&lt;br /&gt;
efficient to respond directly to email and keep the TODO list&lt;br /&gt;
up-to-date. In practice, bugs don't last very long in the software,&lt;br /&gt;
and bugs that affect a large number of users are fixed rapidly. The&lt;br /&gt;
only place to find all changes, improvements, and fixes in a&lt;br /&gt;
PostgreSQL release is to read the CVS log messages. Even the release&lt;br /&gt;
notes do not list every change made to the software.&lt;br /&gt;
&lt;br /&gt;
=== A bug I'm encountering is fixed in a newer minor release of PostgreSQL, but I don't want to upgrade. Can I get a patch for just this issue? ===&lt;br /&gt;
&lt;br /&gt;
No. Nobody will make a custom patch for you so you can (say) extract a fix from 8.4.3 and apply it to 8.4.1 . &lt;br /&gt;
That's because there should never be any need to do that.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL has a strict policy that only bug fixes are back-patched into point releases, as per the [http://www.postgresql.org/support/versioning version policy]. It is safe to upgrade from 8.4.1 to 8.4.3,&lt;br /&gt;
for example. Binary compatibility will be maintained, no dump and reload is required, nothing will break, but bugs that might &lt;br /&gt;
cause problems have been fixed. Even if you are not yet encountering a particular bug, you might later, and it is wise to upgrade promptly.&lt;br /&gt;
You just have to install the update and re-start the database server, nothing more.&lt;br /&gt;
&lt;br /&gt;
Upgrading from 8.3 to 8.4, or 8.4 to 9.0, is a major upgrade that does not come with the same guarantees. However, if a bug&lt;br /&gt;
is discovered in 9.0 then it will generally be fixed in all maintained older versions like 8.4 and 8.3 if it is safe and&lt;br /&gt;
practical to do so.&lt;br /&gt;
&lt;br /&gt;
This means that if you're running 8.1.0, upgrading to 8.1.21 is &amp;lt;b&amp;gt;strongly&amp;lt;/b&amp;gt; recommended and very safe. On the other hand,&lt;br /&gt;
upgrading to the next major release, 8.2.x, may require changes to your app, and will certainly require a dump and reload.&lt;br /&gt;
&lt;br /&gt;
If you want to be careful about all upgrades, you should read the [http://www.postgresql.org/docs/current/static/release.html release notes] &lt;br /&gt;
for each point release between your current one and the latest minor version of the same major release carefully. If you're&lt;br /&gt;
exceptionally paranoid about upgrades, you can fetch the source code to each set of point release changes from [http://git.postgresql.org/ PostgreSQL's git repository] and examine it.&lt;br /&gt;
&lt;br /&gt;
It is strongly recommended that you &amp;lt;b&amp;gt;always&amp;lt;/b&amp;gt; upgrade to the latest minor release. Avoid trying to extract and apply individual fixes&lt;br /&gt;
from point releases; by doing so you're bypassing all the QA done by the PostgreSQL team when they prepare a release, and are creating your&lt;br /&gt;
own custom version that &amp;lt;i&amp;gt;nobody else has ever used&amp;lt;/i&amp;gt;. It's a lot safer to just update to the latest tested, safe release. &amp;lt;i&amp;gt;Patching your own custom, non-standard build will also take more time/effort, and will require the same amount of downtime as a normal upgrade.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== I have a program that says it wants PostgreSQL x.y.1. Can I use PostgreSQL x.y.2 instead? ===&lt;br /&gt;
&lt;br /&gt;
Any program that works with a particular version, like 8.4.1, should work with any other minor version in the same major version. That means that if a program says it wants (eg) 8.4.1, you can and should install the latest in the 8.4 series instead.&lt;br /&gt;
&lt;br /&gt;
See the previous question for more details.&lt;br /&gt;
&lt;br /&gt;
=== What documentation is available? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL includes extensive documentation, including a large manual,&lt;br /&gt;
manual pages, and some test examples. See the /doc directory. You can&lt;br /&gt;
also browse the manuals online at http://www.postgresql.org/docs.&lt;br /&gt;
&lt;br /&gt;
There are a number of PostgreSQL&lt;br /&gt;
books available for purchase; two of them are also available online.  A list of books can be found at&lt;br /&gt;
http://www.postgresql.org/docs/books/.  One of the most popular ones is the one by Korry &amp;amp; Susan&lt;br /&gt;
Douglas.&lt;br /&gt;
&lt;br /&gt;
There is also a collection of&lt;br /&gt;
PostgreSQL technical articles on the &lt;br /&gt;
[[Community_Generated_Articles%2C_Guides%2C_and_Documentation | wiki]].&lt;br /&gt;
&lt;br /&gt;
The command line client program psql has some \d commands to show&lt;br /&gt;
information about types, operators, functions, aggregates, etc. - use&lt;br /&gt;
\? to display the available commands.&lt;br /&gt;
&lt;br /&gt;
=== How can I learn SQL? ===&lt;br /&gt;
&lt;br /&gt;
First,  consider the PostgreSQL-specific books mentioned above. Many of&lt;br /&gt;
our users also like The Practical SQL Handbook, Bowman, Judith S., et&lt;br /&gt;
al., Addison-Wesley. Others like The Complete Reference SQL, Groff et&lt;br /&gt;
al., McGraw-Hill.&lt;br /&gt;
&lt;br /&gt;
Many people consider the PostgreSQL documentation to be an excellent guide&lt;br /&gt;
for learning SQL its self, as well as for PostgreSQL's implementation of it.&lt;br /&gt;
For best results use PostgreSQL alongside another full-featured SQL database as&lt;br /&gt;
you learn, so you get used to SQL without becoming reliant on PostgreSQL-specific&lt;br /&gt;
features. The PostgreSQL documentation generally mentions when features are PostgreSQL&lt;br /&gt;
extensions of the standard.&lt;br /&gt;
&lt;br /&gt;
There are also many nice tutorials available online:&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;
* http://sqlzoo.net&lt;br /&gt;
&lt;br /&gt;
=== How do I submit a patch or join the development team? ===&lt;br /&gt;
  &lt;br /&gt;
See the [[Developer FAQ|Developer's FAQ]].&lt;br /&gt;
&lt;br /&gt;
=== How does PostgreSQL compare to other DBMSs? ===&lt;br /&gt;
  &lt;br /&gt;
There are several ways of measuring software: features, performance,&lt;br /&gt;
reliability, support, and price.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL has most features present in large proprietary DBMSs,&lt;br /&gt;
like transactions, subselects, triggers, views, foreign key&lt;br /&gt;
referential integrity, and sophisticated locking. We have some&lt;br /&gt;
features they do not have, like user-defined types,&lt;br /&gt;
inheritance, rules, and multi-version concurrency control to&lt;br /&gt;
reduce lock contention.&lt;br /&gt;
       &lt;br /&gt;
==== Performance ====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL's performance is comparable to other proprietary and&lt;br /&gt;
open source databases. It is faster for some things, slower for&lt;br /&gt;
others. Our performance is usually +/-10% compared to other databases.&lt;br /&gt;
       &lt;br /&gt;
==== Reliability ====&lt;br /&gt;
&lt;br /&gt;
We realize that a DBMS must be reliable, or it is worthless. We&lt;br /&gt;
strive to release well-tested, stable code that has a minimum&lt;br /&gt;
of bugs. Each release has at least one month of beta testing,&lt;br /&gt;
and our release history shows that we can provide stable, solid&lt;br /&gt;
releases that are ready for production use. We believe we&lt;br /&gt;
compare favorably to other database software in this area.&lt;br /&gt;
       &lt;br /&gt;
==== Support ====&lt;br /&gt;
&lt;br /&gt;
Our mailing lists provide contact with a large group of&lt;br /&gt;
developers and users to help resolve any problems encountered.&lt;br /&gt;
While we cannot guarantee a fix, proprietary DBMSs do not always&lt;br /&gt;
supply a fix either. Direct access to developers, the user&lt;br /&gt;
community, manuals, and the source code often make PostgreSQL&lt;br /&gt;
support superior to other DBMSs. There is commercial&lt;br /&gt;
per-incident support available for those who need it. (See [[#Where_can_I_get_support.3F | section 1.7]]).&lt;br /&gt;
&lt;br /&gt;
==== Price ====&lt;br /&gt;
&lt;br /&gt;
We are free for all use, both proprietary and open source.&lt;br /&gt;
You can add our code to your product with no limitations,&lt;br /&gt;
except those outlined in our BSD-style license stated above.       &lt;br /&gt;
&lt;br /&gt;
=== Can PostgreSQL be embedded? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is designed as a client/server architecture, which requires&lt;br /&gt;
separate processes for each client and server, and various helper&lt;br /&gt;
processes. Many embedded architectures can support such requirements.&lt;br /&gt;
However, if your embedded architecture requires the database server to&lt;br /&gt;
run inside the application process, you cannot use Postgres and should&lt;br /&gt;
select a lighter-weight database solution.&lt;br /&gt;
&lt;br /&gt;
Popular embeddable options include [http://sqlite.org SQLite] and [http://firebirdsql.org Firebird SQL].&lt;br /&gt;
&lt;br /&gt;
=== How do I unsubscribe from the PostgreSQL email lists? How do I avoid receiving duplicate emails? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL Majordomo page allows subscribing or unsubscribing from&lt;br /&gt;
any of the PostgreSQL email lists. (You might need to have your&lt;br /&gt;
Majordomo password emailed to you to log in.)&lt;br /&gt;
&lt;br /&gt;
All PostgreSQL email lists are configured so a group reply goes to the&lt;br /&gt;
email list and the original email author. This is done so users&lt;br /&gt;
receive the quickest possible email replies. If you would prefer not&lt;br /&gt;
to receive duplicate email from the list in cases where you already&lt;br /&gt;
receive an email directly, check eliminatecc from the Majordomo Change&lt;br /&gt;
Settings page. You can also prevent yourself from receiving copies of&lt;br /&gt;
emails you post to the lists by unchecking selfcopy.&lt;br /&gt;
&lt;br /&gt;
== User Client Questions ==&lt;br /&gt;
                                   &lt;br /&gt;
=== What interfaces are available for PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL install includes only the C and embedded C interfaces.&lt;br /&gt;
All other interfaces are independent projects that are downloaded&lt;br /&gt;
separately; being separate allows them to have their own release&lt;br /&gt;
schedule and development teams.&lt;br /&gt;
&lt;br /&gt;
Some programming languages like PHP include an interface to&lt;br /&gt;
PostgreSQL. Interfaces for languages like Perl, TCL, Python, and many&lt;br /&gt;
others are available at http://pgfoundry.org.&lt;br /&gt;
&lt;br /&gt;
=== What tools are available for using PostgreSQL with Web pages? ===&lt;br /&gt;
  &lt;br /&gt;
A nice introduction to Database-backed Web pages can be seen at:&lt;br /&gt;
http://www.webreview.com&lt;br /&gt;
&lt;br /&gt;
For Web integration, PHP (http://www.php.net) is an excellent&lt;br /&gt;
interface.&lt;br /&gt;
&lt;br /&gt;
For complex cases, many use the Perl and DBD::Pg with CGI.pm or&lt;br /&gt;
mod_perl.&lt;br /&gt;
&lt;br /&gt;
=== Does PostgreSQL have a graphical user interface? ===&lt;br /&gt;
  &lt;br /&gt;
There are a large number of GUI Tools that are available for&lt;br /&gt;
PostgreSQL from both proprietary and open source developers. A detailed&lt;br /&gt;
list can be found in the [[Community Guide to PostgreSQL GUI Tools]].&lt;br /&gt;
&lt;br /&gt;
== Administrative Questions ==&lt;br /&gt;
                                   &lt;br /&gt;
=== How do I install PostgreSQL somewhere other than /usr/local/pgsql? ===&lt;br /&gt;
  &lt;br /&gt;
Specify the --prefix option when running configure.&lt;br /&gt;
&lt;br /&gt;
=== I'm installing PostgreSQL and don't know the password 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;
=== How do I control connections from other hosts? ===&lt;br /&gt;
  &lt;br /&gt;
By default, PostgreSQL only allows connections from the local machine&lt;br /&gt;
using Unix domain sockets or TCP/IP connections. Other machines will&lt;br /&gt;
not be able to connect unless you modify listen_addresses in the&lt;br /&gt;
postgresql.conf file, enable host-based authentication by modifying&lt;br /&gt;
the $PGDATA/pg_hba.conf file, and restart the database server.&lt;br /&gt;
&lt;br /&gt;
=== How do I tune the database engine for better performance? ===&lt;br /&gt;
  &lt;br /&gt;
There are three major areas for potential performance improvement:&lt;br /&gt;
&lt;br /&gt;
==== Query Changes ====&lt;br /&gt;
This involves modifying queries to obtain better performance:&lt;br /&gt;
       &lt;br /&gt;
* Creation of indexes, including expression and partial indexes&lt;br /&gt;
* Use of COPY instead of multiple INSERTs&lt;br /&gt;
* Grouping of multiple statements into a single transaction to reduce commit overhead&lt;br /&gt;
* Use of CLUSTER when retrieving many rows from an index&lt;br /&gt;
* Use of LIMIT for returning a subset of a query's output&lt;br /&gt;
* Use of Prepared queries&lt;br /&gt;
* Use of ANALYZE to maintain accurate optimizer statistics&lt;br /&gt;
* Regular use of VACUUM or pg_autovacuum&lt;br /&gt;
* Dropping of indexes during large data changes&lt;br /&gt;
         &lt;br /&gt;
==== Server Configuration ====&lt;br /&gt;
A number of postgresql.conf settings affect performance. For&lt;br /&gt;
more details, see Administration Guide/Server Run-time&lt;br /&gt;
Environment/Run-time Configuration.&lt;br /&gt;
&lt;br /&gt;
==== Hardware Selection ====&lt;br /&gt;
The effect of hardware on performance is detailed in&lt;br /&gt;
http://www.powerpostgresql.com/PerfList/ and&lt;br /&gt;
http://momjian.us/main/writings/pgsql/hw_performance/index.html.&lt;br /&gt;
&lt;br /&gt;
=== What debugging features are available? ===&lt;br /&gt;
  &lt;br /&gt;
There are many log_* server configuration variables at http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html that enable printing of query and process statistics which can be very useful for debugging and performance measurements.&lt;br /&gt;
&lt;br /&gt;
=== Why do I get &amp;quot;Sorry, too many clients&amp;quot; when trying to connect? ===&lt;br /&gt;
  &lt;br /&gt;
You have reached the default limit of 100 database sessions. You need&lt;br /&gt;
to increase the server's limit on how many concurrent backend&lt;br /&gt;
processes it can start by changing the max_connections value in&lt;br /&gt;
postgresql.conf and restarting the server.&lt;br /&gt;
&lt;br /&gt;
=== What is the upgrade process for PostgreSQL? ===&lt;br /&gt;
  &lt;br /&gt;
See http://www.postgresql.org/support/versioning for a general&lt;br /&gt;
discussion about upgrading, and&lt;br /&gt;
http://www.postgresql.org/docs/current/static/install-upgrading.html&lt;br /&gt;
for specific instructions.&lt;br /&gt;
&lt;br /&gt;
=== Will PostgreSQL handle recent daylight saving time changes in various countries? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL releases 8.0 and up depend on the widely-used tzdata database&lt;br /&gt;
(also called the zoneinfo database or the [http://www.twinsun.com/tz/tz-link.htm Olson timezone database]) for&lt;br /&gt;
daylight savings information.  To deal with a DST law change that affects you,&lt;br /&gt;
install a new tzdata file set and restart the server.&lt;br /&gt;
&lt;br /&gt;
All PostgreSQL update releases include the latest available tzdata files,&lt;br /&gt;
so keeping up-to-date on minor releases for your major version is usually&lt;br /&gt;
sufficient for this.&lt;br /&gt;
&lt;br /&gt;
On platforms that receive regular software updates including new tzdata files,&lt;br /&gt;
it may be more convenient to rely on the system's copy of the tzdata files.&lt;br /&gt;
This is possible as a compile-time option.  Most Linux distributions choose&lt;br /&gt;
this approach for their pre-built versions of PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL releases before 8.0 always rely on the operating system's timezone&lt;br /&gt;
information.&lt;br /&gt;
&lt;br /&gt;
=== What computer hardware should I use? ===&lt;br /&gt;
  &lt;br /&gt;
Because PC hardware is mostly compatible, people tend to believe that&lt;br /&gt;
all PC hardware is of equal quality. It is not. ECC RAM, SCSI, and&lt;br /&gt;
quality motherboards are more reliable and have better performance&lt;br /&gt;
than less expensive hardware. PostgreSQL will run on almost any&lt;br /&gt;
hardware, but if reliability and performance are important it is wise&lt;br /&gt;
to research your hardware options thoroughly. &lt;br /&gt;
&lt;br /&gt;
Database servers, unlike many other applications, are usually I/O and memory constrained, so it is wise to focus on the I/O subsystem first, then memory capacity, and lastly consider CPU issues.  For example, a disk controller with a&lt;br /&gt;
battery-backed cache is often the cheapest and easiest way to improve database performance. Our email lists can be used to discuss hardware options and tradeoffs.&lt;br /&gt;
&lt;br /&gt;
=== How does PostgreSQL use CPU resources? ===&lt;br /&gt;
  &lt;br /&gt;
The PostgreSQL server is process-based (not threaded), and uses one operating system process per database session.  A single database session (connection) cannot utilize more than one CPU.  Of course, multiple sessions are automatically spread across all available CPUs by your operating system.  Client applications can easily use threads and create multiple database connections from each thread.&lt;br /&gt;
&lt;br /&gt;
A single complex and CPU-intensive query is unable to use more than one CPU to do the processing for the query. The OS may still be able to use others for disk I/O etc, but you won't see much benefit from more than one spare core.&lt;br /&gt;
&lt;br /&gt;
=== Why does PostgreSQL have so many processes, even when idle? ===&lt;br /&gt;
&lt;br /&gt;
As noted in [[FAQ#How does PostgreSQL use CPU resources?|the answer above]], PostgreSQL is process based, so it starts one &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;postgres.exe&amp;lt;/code&amp;gt; on Windows) instance per connection. The postmaster (which accepts connections and starts new postgres instances for them) is always running. In addition, PostgreSQL generally has one or more &amp;quot;helper&amp;quot; processes like the stats collector, background writer, autovacuum daemon, walsender, etc, all of which show up as &amp;quot;postgres&amp;quot; instances in most system monitoring tools.&lt;br /&gt;
&lt;br /&gt;
Despite the number of processes, they actually use very little in the way of real resources. See [[FAQ#Why does PostgreSQL show up as using so much memory in my system monitoring tool?|the next answer]].&lt;br /&gt;
&lt;br /&gt;
=== Why does PostgreSQL use so much memory? ===&lt;br /&gt;
&lt;br /&gt;
Despite appearances, this is absolutely normal, and there's actually nowhere near as much memory being used as tools like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; or the Windows process monitor say PostgreSQL is using.&lt;br /&gt;
&lt;br /&gt;
Tools like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; and the Windows process monitor may show many &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; instances (see above), each of which appears to use a huge amount of memory. Often, when added up, the amount the postgres instances use is many times the amount of memory actually installed in the computer!&lt;br /&gt;
&lt;br /&gt;
This is a consequence of how these tools report memory use. They generally don't understand shared memory very well, and show it as if it was memory used individually and exclusively by each postgres instance. PostgreSQL uses a big chunk of shared memory to communicate between its backends and cache data. Because these tools count that shared memory block once per &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; instance instead of counting it once for &amp;lt;i&amp;gt;all&amp;lt;/i&amp;gt; &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt; instances, they massively over-estimate how much memory PostgreSQL is using.&lt;br /&gt;
&lt;br /&gt;
== Operational Questions ==&lt;br /&gt;
                                   &lt;br /&gt;
=== How do I SELECT only the first few rows of a query? A random row? ===&lt;br /&gt;
  &lt;br /&gt;
To retrieve only a few rows, if you know at the number of rows needed&lt;br /&gt;
at the time of the SELECT use LIMIT . If an index matches the ORDER BY&lt;br /&gt;
it is possible the entire query does not have to be executed. If you&lt;br /&gt;
don't know the number of rows at SELECT time, use a cursor and FETCH.&lt;br /&gt;
&lt;br /&gt;
To SELECT a random row, use:&lt;br /&gt;
 SELECT col&lt;br /&gt;
 FROM tab&lt;br /&gt;
 ORDER BY random()&lt;br /&gt;
 LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
See also this [http://blog.rhodiumtoad.org.uk/2009/03/08/selecting-random-rows-from-a-table/ blog entry by Andrew Gierth]&lt;br /&gt;
that has more information on this topic.&lt;br /&gt;
&lt;br /&gt;
=== How do I find out what tables, indexes, databases, and users are defined? How do I see the queries used by psql to display them? ===&lt;br /&gt;
  &lt;br /&gt;
Use the \dt command to see tables in psql. For a complete list of&lt;br /&gt;
commands inside psql you can use \?. Alternatively you can read the&lt;br /&gt;
source code for psql in file pgsql/src/bin/psql/describe.c, it&lt;br /&gt;
contains SQL commands that generate the output for psql's backslash&lt;br /&gt;
commands. You can also start psql with the -E option so it will print&lt;br /&gt;
out the queries it uses to execute the commands you give. PostgreSQL&lt;br /&gt;
also provides an SQL compliant INFORMATION SCHEMA interface you can&lt;br /&gt;
query to get information about the database.&lt;br /&gt;
&lt;br /&gt;
There are also system tables beginning with pg_ that describe these&lt;br /&gt;
too.&lt;br /&gt;
&lt;br /&gt;
Use psql -l will list all databases.&lt;br /&gt;
&lt;br /&gt;
Also try the file pgsql/src/tutorial/syscat.source. It illustrates&lt;br /&gt;
many of the SELECTs needed to get information from the database system&lt;br /&gt;
tables.&lt;br /&gt;
&lt;br /&gt;
=== How do you change a column's data type? ===&lt;br /&gt;
  &lt;br /&gt;
Changing the data type of a column can be done easily in 8.0 and later&lt;br /&gt;
with ALTER TABLE ALTER COLUMN TYPE.&lt;br /&gt;
&lt;br /&gt;
In earlier releases, do this:&lt;br /&gt;
 BEGIN;&lt;br /&gt;
 ALTER TABLE tab ADD COLUMN new_col new_data_type;&lt;br /&gt;
 UPDATE tab SET new_col = CAST(old_col AS new_data_type);&lt;br /&gt;
 ALTER TABLE tab DROP COLUMN old_col;&lt;br /&gt;
 COMMIT;&lt;br /&gt;
&lt;br /&gt;
You might then want to do VACUUM FULL tab to reclaim the disk space&lt;br /&gt;
used by the expired rows.&lt;br /&gt;
&lt;br /&gt;
=== What is the maximum size for a row, a table, and a database? ===&lt;br /&gt;
  &lt;br /&gt;
These are the limits:&lt;br /&gt;
&lt;br /&gt;
 Maximum size for a database? unlimited (32 TB databases exist)&lt;br /&gt;
 Maximum size for a table? 32 TB&lt;br /&gt;
 Maximum size for a row? 400 GB&lt;br /&gt;
 Maximum size for a field? 1 GB&lt;br /&gt;
 Maximum number of rows in a table? unlimited&lt;br /&gt;
 Maximum number of columns in a table? 250-1600 depending on column types&lt;br /&gt;
 Maximum number of indexes on a table? unlimited&lt;br /&gt;
&lt;br /&gt;
Of course, these are not actually unlimited, but limited to available&lt;br /&gt;
disk space and memory/swap space. Performance may suffer when these&lt;br /&gt;
values get unusually large.&lt;br /&gt;
&lt;br /&gt;
The maximum table size of 32 TB does not require large file support&lt;br /&gt;
from the operating system. Large tables are stored as multiple 1 GB&lt;br /&gt;
files so file system size limits are not important.&lt;br /&gt;
&lt;br /&gt;
The maximum table size, row size, and maximum number of columns can be&lt;br /&gt;
quadrupled by increasing the default block size to 32k. The maximum&lt;br /&gt;
table size can also be increased using table partitioning.&lt;br /&gt;
&lt;br /&gt;
One limitation is that indexes can not be created on columns longer&lt;br /&gt;
than about 2,000 characters. Fortunately, such indexes are rarely&lt;br /&gt;
needed. Uniqueness is best guaranteed by a function index of an MD5&lt;br /&gt;
hash of the long column, and full text indexing allows for searching&lt;br /&gt;
of words within the column.&lt;br /&gt;
&lt;br /&gt;
=== How much database disk space is required to store data from a typical text file? ===&lt;br /&gt;
  &lt;br /&gt;
A PostgreSQL database may require up to five times the disk space to&lt;br /&gt;
store data from a text file.&lt;br /&gt;
&lt;br /&gt;
As an example, consider a file of 100,000 lines with an integer and&lt;br /&gt;
text description on each line. Suppose the text string averages&lt;br /&gt;
twenty bytes in length. The flat file would be 2.8 MB. The size of the&lt;br /&gt;
PostgreSQL database file containing this data can be estimated as 5.2&lt;br /&gt;
MB:&lt;br /&gt;
  24 bytes: each row header (approximate)&lt;br /&gt;
  24 bytes: one int field and one text field&lt;br /&gt;
 + 4 bytes: pointer on page to tuple&lt;br /&gt;
 ----------------------------------------&lt;br /&gt;
  52 bytes per row&lt;br /&gt;
&lt;br /&gt;
The data page size in PostgreSQL is 8192 bytes (8 KB), so:&lt;br /&gt;
&lt;br /&gt;
 8192 bytes per page&lt;br /&gt;
 -------------------  =  158 rows per database page (rounded down)&lt;br /&gt;
   52 bytes per row&lt;br /&gt;
&lt;br /&gt;
  100000 data rows&lt;br /&gt;
 ------------------  =  633 database pages (rounded up)&lt;br /&gt;
  158 rows per page&lt;br /&gt;
&lt;br /&gt;
 633 database pages * 8192 bytes per page  =  5,185,536 bytes (5.2 MB)&lt;br /&gt;
&lt;br /&gt;
Indexes do not require as much overhead, but do contain the data that&lt;br /&gt;
is being indexed, so they can be large also.&lt;br /&gt;
&lt;br /&gt;
NULLs are stored as bitmaps, so they use very little space.&lt;br /&gt;
&lt;br /&gt;
Note that long values may be compressed transparently.&lt;br /&gt;
&lt;br /&gt;
See also this presentation on the topic: [[Image:How_Long_Is_a_String.pdf]].&lt;br /&gt;
&lt;br /&gt;
=== Why are my queries slow? Why don't they use my indexes? ===&lt;br /&gt;
  &lt;br /&gt;
Indexes are not used by every query. Indexes are used only if the&lt;br /&gt;
table is larger than a minimum size, and the query selects only a&lt;br /&gt;
small percentage of the rows in the table. This is because the random&lt;br /&gt;
disk access caused by an index scan can be slower than a straight read&lt;br /&gt;
through the table, or sequential scan.&lt;br /&gt;
&lt;br /&gt;
To determine if an index should be used, PostgreSQL must have&lt;br /&gt;
statistics about the table. These statistics are collected using&lt;br /&gt;
VACUUM ANALYZE, or simply ANALYZE. Using statistics, the optimizer&lt;br /&gt;
knows how many rows are in the table, and can better determine if&lt;br /&gt;
indexes should be used. Statistics are also valuable in determining&lt;br /&gt;
optimal join order and join methods. Statistics collection should be&lt;br /&gt;
performed periodically as the contents of the table change.&lt;br /&gt;
&lt;br /&gt;
Indexes are normally not used for ORDER BY or to perform joins. A&lt;br /&gt;
sequential scan followed by an explicit sort is usually faster than an&lt;br /&gt;
index scan of a large table. However, LIMIT combined with ORDER BY&lt;br /&gt;
often will use an index because only a small portion of the table is&lt;br /&gt;
returned.&lt;br /&gt;
&lt;br /&gt;
If you believe the optimizer is incorrect in choosing a sequential&lt;br /&gt;
scan, use SET enable_seqscan TO 'off' and run query again to see if an&lt;br /&gt;
index scan is indeed faster.&lt;br /&gt;
&lt;br /&gt;
When using wild-card operators such as LIKE or ~, indexes can only be&lt;br /&gt;
used in certain circumstances:&lt;br /&gt;
&lt;br /&gt;
* The beginning of the search string must be anchored to the start of the string, i.e.&lt;br /&gt;
** LIKE patterns must not start with % or _.&lt;br /&gt;
** ~ (regular expression) patterns must start with ^.&lt;br /&gt;
&lt;br /&gt;
* The search string can not start with a character class, e.g. [a-e].&lt;br /&gt;
&lt;br /&gt;
* Case-insensitive searches such as ILIKE and ~* do not utilize indexes. Instead, use expression indexes, which are described in [[#How_do_I_perform_regular_expression_searches_and_case-insensitive_regular_expression_searches.3F_How_do_I_use_an_index_for_case-insensitive_searches.3F | section 4.8]].&lt;br /&gt;
&lt;br /&gt;
* C locale must be used during initdb because sorting in a non-C locale often doesn't match the behavior of LIKE. You can create a special text_pattern_ops index that will work in such cases, but note it is only helpful for LIKE indexing.&lt;br /&gt;
&lt;br /&gt;
It is also possible to use full text indexing for word searches.&lt;br /&gt;
&lt;br /&gt;
The [[SlowQueryQuestions]] article contains some more tips and guidance.&lt;br /&gt;
&lt;br /&gt;
=== How do I see how the query optimizer is evaluating my query? ===&lt;br /&gt;
  &lt;br /&gt;
This is done with the EXPLAIN command; see [[Using EXPLAIN]].&lt;br /&gt;
&lt;br /&gt;
=== How do I change the sort ordering of textual data? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL sorts textual data according to the ordering that is defined by the current locale, which is selected during initdb.&lt;br /&gt;
(In 8.4 and up it will be possible to select a different locale when creating a new database.)&lt;br /&gt;
If you don't like the ordering then you need to use a different locale.&lt;br /&gt;
In particular, most locales other than &amp;quot;C&amp;quot; sort according to dictionary order, which largely ignores punctuation and spacing.&lt;br /&gt;
If that's not what you want then you need &amp;quot;C&amp;quot; locale.&lt;br /&gt;
&lt;br /&gt;
=== How do I perform regular expression searches and case-insensitive regular expression searches? How do I use an index for case-insensitive searches? ===&lt;br /&gt;
  &lt;br /&gt;
The ~ operator does regular expression matching, and ~* does&lt;br /&gt;
case-insensitive regular expression matching. The case-insensitive&lt;br /&gt;
variant of LIKE is called ILIKE.&lt;br /&gt;
&lt;br /&gt;
Case-insensitive equality comparisons are normally expressed as:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 WHERE lower(col) = 'abc';&lt;br /&gt;
&lt;br /&gt;
This will not use a standard index on &amp;quot;col&amp;quot;. However, if you create an&lt;br /&gt;
expression index on &amp;quot;lower(col)&amp;quot;, it will be used:&lt;br /&gt;
 CREATE INDEX tabindex ON tab (lower(col));&lt;br /&gt;
&lt;br /&gt;
If the above index is created as UNIQUE, then the column can store&lt;br /&gt;
upper and lowercase characters, but it cannot contain identical values that&lt;br /&gt;
differ only in case. To force a particular case to be stored in the&lt;br /&gt;
column, use a CHECK constraint or a trigger.&lt;br /&gt;
&lt;br /&gt;
In PostgreSQL 8.4 and later, you can also use the contributed [http://www.postgresql.org/docs/8.4/static/citext.html CITEXT data type], which internally implements the &amp;quot;lower()&amp;quot; calls, so that you can effectively treat it as a fully case-insensitive data type. CITEXT is also [https://svn.kineticode.com/citext/trunk/ available for 8.3], and an earlier version that treats only ASCII characters case-insensitively on 8.2 and earlier is available on [http://pgfoundry.org/projects/citext/ pgFoundry].&lt;br /&gt;
&lt;br /&gt;
=== In a query, how do I detect if a field is NULL? How do I concatenate possible NULLs? How can I sort on whether a field is NULL or not? ===&lt;br /&gt;
  &lt;br /&gt;
You can test the value with IS NULL or IS NOT NULL, like this:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 WHERE col IS NULL;&lt;br /&gt;
&lt;br /&gt;
Concatenating a NULL with something else produces another NULL.&lt;br /&gt;
If that's not what you want, you can replace the NULL(s) using&lt;br /&gt;
COALESCE(), like this:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SELECT COALESCE(col1, '') || COALESCE(col2, '')&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 FROM tab;&lt;br /&gt;
&lt;br /&gt;
To sort by the NULL status, use an IS NULL or IS NOT NULL test&lt;br /&gt;
in your ORDER BY clause. Things that are true will sort higher than&lt;br /&gt;
things that are false, so the following will put NULL entries at the&lt;br /&gt;
front of the output:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 ORDER BY (col IS NOT NULL), col;&lt;br /&gt;
&lt;br /&gt;
In PostgreSQL 8.3 and up, you can also control sort ordering of NULLs&lt;br /&gt;
using the recently-standardized NULLS FIRST/NULLS LAST modifiers,&lt;br /&gt;
like this:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM tab&lt;br /&gt;
 ORDER BY col NULLS FIRST;&lt;br /&gt;
&lt;br /&gt;
=== What is the difference between the various character types? ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Internal Name&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|VARCHAR(n) &lt;br /&gt;
|varchar&lt;br /&gt;
|size specifies maximum length, no padding&lt;br /&gt;
|-  &lt;br /&gt;
|CHAR(n)&lt;br /&gt;
|bpchar&lt;br /&gt;
|blank-padded to the specified fixed length&lt;br /&gt;
|-&lt;br /&gt;
|TEXT&lt;br /&gt;
|text&lt;br /&gt;
|no specific upper limit on length&lt;br /&gt;
|-&lt;br /&gt;
|BYTEA&lt;br /&gt;
|bytea&lt;br /&gt;
|variable-length byte array (null-byte safe)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;char&amp;quot; (with the quotes)&lt;br /&gt;
|char&lt;br /&gt;
|one byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You will see the internal name when examining system catalogs and in&lt;br /&gt;
some error messages.&lt;br /&gt;
&lt;br /&gt;
The first four types above are &amp;quot;varlena&amp;quot; types (i.e., the field length&lt;br /&gt;
is explicitly stored on disk, followed by the data). Thus the actual&lt;br /&gt;
space used is slightly greater than the expected size. However, long&lt;br /&gt;
values are also subject to compression, so the space on disk might&lt;br /&gt;
also be less than expected.&lt;br /&gt;
&lt;br /&gt;
VARCHAR(n) is best when storing variable-length strings if a specific&lt;br /&gt;
upper limit on the string length is required by the application.&lt;br /&gt;
TEXT is for strings of &amp;quot;unlimited&amp;quot; length (though all fields in PostgreSQL&lt;br /&gt;
are subject to a maximum value length of one gigabyte).&lt;br /&gt;
&lt;br /&gt;
CHAR(n) is for storing strings that are all the same length. CHAR(n)&lt;br /&gt;
pads with blanks to the specified length, while VARCHAR(n) only stores&lt;br /&gt;
the characters supplied.  BYTEA is for storing binary data,&lt;br /&gt;
particularly values that include zero bytes. All these types have similar&lt;br /&gt;
performance characteristics, except that the blank-padding involved&lt;br /&gt;
in CHAR(n) requires additional storage and some extra runtime.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;char&amp;quot; type (the quotes are required to distinguish it from CHAR(n))&lt;br /&gt;
is a specialized datatype that can store exactly one byte.  It is found in&lt;br /&gt;
the system catalogs but its use in user tables is generally discouraged.&lt;br /&gt;
&lt;br /&gt;
=== How do I create a serial/auto-incrementing field? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL supports a SERIAL data type. Actually, this isn't quite&lt;br /&gt;
a real type.  It's a shorthand for creating an integer column that&lt;br /&gt;
is fed from a sequence.&lt;br /&gt;
&lt;br /&gt;
For example, this:&lt;br /&gt;
 CREATE TABLE person (&lt;br /&gt;
     id SERIAL,&lt;br /&gt;
     name TEXT&lt;br /&gt;
 );&lt;br /&gt;
is automatically translated into this:&lt;br /&gt;
 CREATE SEQUENCE person_id_seq;&lt;br /&gt;
 CREATE TABLE person (&lt;br /&gt;
     id INTEGER NOT NULL DEFAULT nextval('person_id_seq'),&lt;br /&gt;
     name TEXT&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
The automatically created sequence is named ''table''_''serialcolumn''_seq,&lt;br /&gt;
where ''table'' and ''serialcolumn'' are the names of the table and SERIAL&lt;br /&gt;
column, respectively. See the CREATE SEQUENCE manual page for more&lt;br /&gt;
information about sequences.&lt;br /&gt;
&lt;br /&gt;
There is also BIGSERIAL, which is like SERIAL except that the resulting&lt;br /&gt;
column is of type BIGINT instead of INTEGER.  Use this type if you think&lt;br /&gt;
that you might need more than 2 billion serial values over the lifespan&lt;br /&gt;
of the table.&lt;br /&gt;
&lt;br /&gt;
=== How do I get the value of a SERIAL insert? ===&lt;br /&gt;
  &lt;br /&gt;
The simplest way is to retrieve the assigned SERIAL value with&lt;br /&gt;
RETURNING. Using the example table in the previous question, it would look like this:&lt;br /&gt;
 INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;&lt;br /&gt;
&lt;br /&gt;
You can also call nextval() and use that value in the INSERT, or call&lt;br /&gt;
currval() after the INSERT.&lt;br /&gt;
&lt;br /&gt;
=== Doesn't currval() lead to a race condition with other users? ===&lt;br /&gt;
  &lt;br /&gt;
No. currval() returns the latest sequence value assigned by your session,&lt;br /&gt;
independently of what is happening in other sessions.&lt;br /&gt;
&lt;br /&gt;
=== Why are there gaps in the numbering of my sequence/SERIAL column? Why aren't my sequence numbers reused on transaction abort? ===&lt;br /&gt;
  &lt;br /&gt;
To improve concurrency, sequence values are given out to running&lt;br /&gt;
transactions on-demand; the sequence object is not kept locked but is&lt;br /&gt;
immediately available for another transaction to get another sequence&lt;br /&gt;
value. This causes gaps in numbering from aborted transactions.&lt;br /&gt;
&lt;br /&gt;
=== What is an OID? ===&lt;br /&gt;
  &lt;br /&gt;
If a table is created WITH OIDS, each row includes an OID column that is automatically filled in during INSERT.&lt;br /&gt;
OIDs are sequentially assigned 4-byte integers.  Initially they are unique&lt;br /&gt;
across the entire installation. However, the OID counter wraps around at 4 billion,&lt;br /&gt;
and after that OIDs may be duplicated.&lt;br /&gt;
&lt;br /&gt;
It is possible to prevent duplication of OIDs within a single table by&lt;br /&gt;
creating a unique index on the OID column (but note that the WITH OIDS&lt;br /&gt;
clause doesn't by itself create such an index).&lt;br /&gt;
The system checks the index to see if a newly&lt;br /&gt;
generated OID is already present, and if so generates a new OID and&lt;br /&gt;
repeats.  This works well so long as no OID-containing table has&lt;br /&gt;
more than a small fraction of 4 billion rows. &lt;br /&gt;
&lt;br /&gt;
PostgreSQL uses OIDs for object identifiers in the system catalogs,&lt;br /&gt;
where the size limit is unlikely to be a problem.&lt;br /&gt;
&lt;br /&gt;
To uniquely number rows in user tables, it is best to use SERIAL&lt;br /&gt;
rather than an OID column, or BIGSERIAL if the table is expected to&lt;br /&gt;
have more than 2 billion entries over its lifespan.&lt;br /&gt;
&lt;br /&gt;
=== What is a CTID? ===&lt;br /&gt;
&lt;br /&gt;
CTIDs identify specific physical rows by their block and&lt;br /&gt;
offset positions within a table.&lt;br /&gt;
They are used by index entries to point to physical rows.&lt;br /&gt;
A logical row's CTID changes when it is updated, so the CTID&lt;br /&gt;
cannot be used as a long-term row identifier.  But it is sometimes&lt;br /&gt;
useful to identify a row within a transaction when no competing&lt;br /&gt;
update is expected.&lt;br /&gt;
&lt;br /&gt;
=== Why do I get the error &amp;quot;ERROR: Memory exhausted in AllocSetAlloc()&amp;quot;? ===&lt;br /&gt;
  &lt;br /&gt;
You probably have run out of virtual memory on your system, or your&lt;br /&gt;
kernel has a low limit for certain resources. Try this before starting&lt;br /&gt;
the server:&lt;br /&gt;
 ulimit -d 262144&lt;br /&gt;
 limit datasize 256m&lt;br /&gt;
&lt;br /&gt;
Depending on your shell, only one of these may succeed, but it will&lt;br /&gt;
set your process data segment limit much higher and perhaps allow the&lt;br /&gt;
query to complete. This command applies to the current process, and&lt;br /&gt;
all subprocesses created after the command is run. If you are having a&lt;br /&gt;
problem with the SQL client because the backend is returning too much&lt;br /&gt;
data, try it before starting the client.&lt;br /&gt;
&lt;br /&gt;
=== How do I tell what PostgreSQL version I am running? ===&lt;br /&gt;
  &lt;br /&gt;
Run this query: SELECT version();&lt;br /&gt;
&lt;br /&gt;
=== Is there a way to leave an audit trail of database operations? ===&lt;br /&gt;
&lt;br /&gt;
There's nothing built-in, but it's not too difficult to build such&lt;br /&gt;
facilities yourself.&lt;br /&gt;
&lt;br /&gt;
Simple example right in the official docs:&lt;br /&gt;
http://www.postgresql.org/docs/8.3/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-AUDIT-EXAMPLE&lt;br /&gt;
&lt;br /&gt;
Project targeting this feature:  http://pgfoundry.org/projects/tablelog/&lt;br /&gt;
&lt;br /&gt;
Background information and other sample implementations: &lt;br /&gt;
http://it.toolbox.com/blogs/database-soup/simple-data-auditing-19014&lt;br /&gt;
http://www.go4expert.com/forums/showthread.php?t=7252&lt;br /&gt;
http://www.alberton.info/postgresql_table_audit.html&lt;br /&gt;
&lt;br /&gt;
=== How do I create a column that will default to the current time? ===&lt;br /&gt;
  &lt;br /&gt;
Use CURRENT_TIMESTAMP:&lt;br /&gt;
 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );&lt;br /&gt;
&lt;br /&gt;
=== How do I perform an outer join? ===&lt;br /&gt;
  &lt;br /&gt;
PostgreSQL supports outer joins using the SQL standard syntax. Here&lt;br /&gt;
are two examples:&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
 SELECT *&lt;br /&gt;
 FROM t1 LEFT OUTER JOIN t2 USING (col);&lt;br /&gt;
&lt;br /&gt;
These identical queries join t1.col to t2.col, and also return any&lt;br /&gt;
unjoined rows in t1 (those with no match in t2). A RIGHT join would&lt;br /&gt;
add unjoined rows of t2. A FULL join would return the matched rows&lt;br /&gt;
plus all unjoined rows from t1 and t2. The word OUTER is optional and&lt;br /&gt;
is assumed in LEFT, RIGHT, and FULL joins. Ordinary joins are called&lt;br /&gt;
INNER joins.&lt;br /&gt;
&lt;br /&gt;
=== How do I perform queries using multiple databases? ===&lt;br /&gt;
  &lt;br /&gt;
There is no way to query a database other than the current one.&lt;br /&gt;
Because PostgreSQL loads database-specific system catalogs, it is&lt;br /&gt;
uncertain how a cross-database query should even behave.&lt;br /&gt;
&lt;br /&gt;
contrib/dblink allows cross-database queries using function calls. Of&lt;br /&gt;
course, a client can also make simultaneous connections to different&lt;br /&gt;
databases and merge the results on the client side.&lt;br /&gt;
&lt;br /&gt;
=== How do I return multiple rows or columns from a function? ===&lt;br /&gt;
  &lt;br /&gt;
It is easy using set-returning functions,&lt;br /&gt;
[[Return more than one row of data from PL/pgSQL functions]].&lt;br /&gt;
&lt;br /&gt;
=== Why do I get &amp;quot;relation with OID ##### does not exist&amp;quot; errors when accessing temporary tables in PL/PgSQL functions? ===&lt;br /&gt;
  &lt;br /&gt;
In PostgreSQL versions &amp;lt; 8.3, PL/PgSQL caches function scripts, and an&lt;br /&gt;
unfortunate side effect is that if a PL/PgSQL function accesses a&lt;br /&gt;
temporary table, and that table is later dropped and recreated, and&lt;br /&gt;
the function called again, the function will fail because the cached&lt;br /&gt;
function contents still point to the old temporary table. The solution&lt;br /&gt;
is to use EXECUTE for temporary table access in PL/PgSQL. This will&lt;br /&gt;
cause the query to be reparsed every time.&lt;br /&gt;
&lt;br /&gt;
This problem does not occur in PostgreSQL 8.3 and later.&lt;br /&gt;
&lt;br /&gt;
=== What replication solutions are available? ===&lt;br /&gt;
  &lt;br /&gt;
Though &amp;quot;replication&amp;quot; is a single term, there are several technologies&lt;br /&gt;
for doing replication, with advantages and disadvantages for each.&lt;br /&gt;
Our documentation contains a good introduction to this topic at&lt;br /&gt;
http://www.postgresql.org/docs/8.3/static/high-availability.html and a&lt;br /&gt;
grid listing replication software and features is at&lt;br /&gt;
[[Replication, Clustering, and Connection Pooling]]&lt;br /&gt;
&lt;br /&gt;
Master/slave replication allows a single master to receive read/write&lt;br /&gt;
queries, while slaves can only accept read/SELECT queries. The most&lt;br /&gt;
popular freely available master-slave PostgreSQL replication solution&lt;br /&gt;
is Slony-I.&lt;br /&gt;
&lt;br /&gt;
Multi-master replication allows read/write queries to be sent to&lt;br /&gt;
multiple replicated computers. This capability also has a severe&lt;br /&gt;
impact on performance due to the need to synchronize changes between&lt;br /&gt;
servers. PGCluster is the most popular such solution freely available&lt;br /&gt;
for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
There are also proprietary and hardware-based replication solutions&lt;br /&gt;
available supporting a variety of replication models.&lt;br /&gt;
&lt;br /&gt;
=== Is possible to create a shared-storage postgresql server cluster? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL does not support clustering using [[Shared_Storage|shared storage]] on a SAN, SCSI backplane,&lt;br /&gt;
iSCSI volume, or other shared media. Such &amp;quot;RAC-style&amp;quot; clustering isn't supported.&lt;br /&gt;
Only replication-based clustering is currently supported.&lt;br /&gt;
&lt;br /&gt;
See [[Replication, Clustering, and Connection Pooling]] information for details.&lt;br /&gt;
&lt;br /&gt;
[[Shared_Storage|Shared-storage]] 'failover' is possible, but it is not safe to have more than one&lt;br /&gt;
postmaster running and accessing the data store at the same time. Heartbeat and&lt;br /&gt;
[http://en.wikipedia.org/wiki/STONITH STONITH] or some other hard-disconnect option are recommended.&lt;br /&gt;
&lt;br /&gt;
=== Why are my table and column names not recognized in my query? Why is capitalization not preserved? ===&lt;br /&gt;
  &lt;br /&gt;
The most common cause of unrecognized names is the use of&lt;br /&gt;
double-quotes around table or column names during table creation. When&lt;br /&gt;
double-quotes are used, table and column names (called identifiers)&lt;br /&gt;
are stored case-sensitive, meaning you must use double-quotes when&lt;br /&gt;
referencing the names in a query. Some interfaces, like pgAdmin,&lt;br /&gt;
automatically double-quote identifiers during table creation. So, for&lt;br /&gt;
identifiers to be recognized, you must either:&lt;br /&gt;
&lt;br /&gt;
* Avoid double-quoting identifiers when creating tables&lt;br /&gt;
* Use only lowercase characters in identifiers&lt;br /&gt;
* Double-quote identifiers when referencing them in queries&lt;br /&gt;
&lt;br /&gt;
=== I lost the database password.  What can I do to recover it? ===&lt;br /&gt;
&lt;br /&gt;
You can't.  However, you can reset it to something else.  To do this, you&lt;br /&gt;
&lt;br /&gt;
* edit pg_hba.conf to allow ''trust'' authorization temporarily&lt;br /&gt;
* Reload the config file (pg_ctl reload)&lt;br /&gt;
* Connect and issue ALTER ROLE / PASSWORD to set the new password&lt;br /&gt;
* edit pg_hba.conf again and restore the previous settings&lt;br /&gt;
* Reload the config file again&lt;br /&gt;
&lt;br /&gt;
=== Does PostgreSQL have stored procedures? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL doesn't. However PostgreSQL have very powerful functions and user-defined functions capabilities that can do most things that other RDBMS stored routines (procedures and functions) can do and in many cases more.&lt;br /&gt;
&lt;br /&gt;
These functions can be of different types and can be implemented in several programming languages.&lt;br /&gt;
(Refer to documentation for more details. [http://www.postgresql.org/docs/current/static/xfunc.html User-Defined Functions])&lt;br /&gt;
&lt;br /&gt;
PostgreSQL functions can be invoked in many ways. If you want to invoke a function as you would call a stored procedure in other RDBMS (typically a function with side-effects but whose result you don't care for example because it returns void), one option would be to use [http://www.postgresql.org/docs/current/static/plpgsql.html PL/pgSQL Language] for your procedure and the [http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT PERFORM] command. Example:&lt;br /&gt;
 PERFORM theNameOfTheFunction(arg1, arg2);&lt;br /&gt;
&lt;br /&gt;
Note that invoking instead:&lt;br /&gt;
 SELECT theNameOfTheFunction(arg1, arg2);&lt;br /&gt;
would produce a result even if the function returns void (this result would be one row containing a void value).&lt;br /&gt;
&lt;br /&gt;
[http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT PERFORM] could thus be used to discard this unuseful result.&lt;br /&gt;
&lt;br /&gt;
The main limitations on Pg's stored functions - as compared to true stored procedures - are:&lt;br /&gt;
&lt;br /&gt;
* inability to return multiple result sets&lt;br /&gt;
* no support for autonomous transactions (&amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;COMMIT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ROLLBACK&amp;lt;/code&amp;gt; within a function)&lt;br /&gt;
* no support for the SQL-standard &amp;lt;code&amp;gt;CALL&amp;lt;/code&amp;gt; syntax, though the ODBC and JDBC drivers will translate calls for you.&lt;br /&gt;
&lt;br /&gt;
=== Why don't BEGIN, ROLLBACK and COMMIT work in stored procedures/functions? ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL doesn't support autonomous transactions in its stored functions. Like all PostgreSQL queries, stored functions always run in a transaction and cannot operate outside a transaction.&lt;br /&gt;
&lt;br /&gt;
If you need a stored procedure to manage transactions, you can look into the dblink interface or do the work from a client-side script instead. In some cases you can do what you need to using [http://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING exception blocks in PL/PgSQL], because each BEGIN/EXCEPTION/END block creates a subtransaction.&lt;br /&gt;
&lt;br /&gt;
=== Why is &amp;quot;SELECT count(*) FROM bigtable;&amp;quot; slow? ===&lt;br /&gt;
&lt;br /&gt;
It can't be answered directly from an index. PostgreSQL has to check the visibility for each record, so it&lt;br /&gt;
forces a sequential scan of the entire table.  If you want, you can keep track of the number of rows yourself with triggers, but beware that this will slow down write access to the table.&lt;br /&gt;
&lt;br /&gt;
You can get an estimation.  The reltuples column in [http://www.postgresql.org/docs/current/static/catalog-pg-class.html pg_class] contains the information from the latest [http://www.postgresql.org/docs/current/static/sql-analyze.html ANALYZE] of the table.  On a large table this is often accurate to within a few thousandths of a percent, which is accurate enough for many purposes.&lt;br /&gt;
 &lt;br /&gt;
An &amp;quot;exact&amp;quot; count is often not exact for very long, anyway; due to [http://www.postgresql.org/docs/current/static/mvcc-intro.html MVCC] concurrency, the count will be accurate as of the moment the SELECT count(*) query (or, for stricter [http://www.postgresql.org/docs/current/static/transaction-iso.html transaction isolation] levels, its transaction) ''started'', and may well be out-of-date by the time the query completes.  In a transaction mix where the table is being modified, two count(*) executions which return at the same moment might have different values, if a modifying transaction committed between their start times.&lt;br /&gt;
&lt;br /&gt;
For more information, see [[Slow Counting]].&lt;br /&gt;
&lt;br /&gt;
=== Why is my query much slower when run as a prepared query? ===&lt;br /&gt;
&lt;br /&gt;
When PostgreSQL has the full query with all parameters known by planning time, it can use statistics in the table to find out if the values used in the query are very common or very uncommon in a column. This lets it change the way it fetches the data to be more efficient, as it knows to expect lots or very few results from a certain part of the query. For example, it might choose an sequential scan instead of doing an index scan if you search for 'active=y' and it knows that 99% of the records in the table have 'active=y', because in this case a sequential scan will be much faster.&lt;br /&gt;
&lt;br /&gt;
In a prepared query, PostgreSQL doesn't have the value of all parameters when it's creating the plan. It has to try to pick a &amp;quot;safe&amp;quot; plan that should work fairly well no matter what value you supply as the parameter when you execute the prepared query. Unfortunately, this plan might not be very appropriate if the value you supply is vastly more common, or vastly less common, than is average for some randomly selected values in the table.&lt;br /&gt;
&lt;br /&gt;
If you suspect this issue is affecting you, start by using the [http://www.postgresql.org/docs/current/static/sql-explain.html EXPLAIN] command to compare the slow and fast queries. Look at the output of &amp;lt;code&amp;gt;EXPLAIN SELECT query...&amp;lt;/code&amp;gt; and compare it to the result of &amp;lt;code&amp;gt;PREPARE query... ; EXPLAIN EXECUTE query...&amp;lt;/code&amp;gt; to see if the plans are notably different. &amp;lt;code&amp;gt;EXPLAIN ANALYZE&amp;lt;/code&amp;gt; may give you more information, such as row count estimates and counts.&lt;br /&gt;
&lt;br /&gt;
Usually people having this problem are trying to use prepared queries as a security measure to prevent SQL injection, rather than as a performance tuning option for expensive-to-plan queries frequently executed with a variety of different parameters. Those people should consider using client-side prepared statements if their client interface (eg PgJDBC) supports it.&lt;br /&gt;
&lt;br /&gt;
At present, PostgreSQL does not offer a way to request re-planning of a prepared statement using a particular set of parameter values; doing so somewhat defeats the purpose of server-side prepared statements. Running a statistics check to see if a particular parameter value is notably outside the norm and automatically re-planning in that case has been discussed, but not agreed upon or implemented as yet.&lt;br /&gt;
&lt;br /&gt;
See [[Using_EXPLAIN]]. If you're going to ask for help on the mailing lists, please read the [[Guide to reporting problems]].&lt;br /&gt;
&lt;br /&gt;
=== Why is my query much slower when run in a function than standalone? ===&lt;br /&gt;
&lt;br /&gt;
See [[FAQ#Why is my query much slower when run as a prepared query?]]. Queries in PL/PgSQL functions are prepared and cached, so they execute in much the same way as if you'd &amp;lt;code&amp;gt;PREPARE&amp;lt;/code&amp;gt;d then &amp;lt;code&amp;gt;EXECUTE&amp;lt;/code&amp;gt;d the query yourself.&lt;br /&gt;
&lt;br /&gt;
If you're having really severe issues with this that improving the table statistics or adjusting your query don't help with, you can work around it by forcing PL/PgSQL to re-prepare your query at every execution. To do this, use the &amp;lt;code&amp;gt;EXECUTE ... USING&amp;lt;/code&amp;gt; statement in PL/PgSQL to supply your query as a textual string. Alternately, the [http://www.postgresql.org/docs/current/static/functions-string.html quote_literal or quote_nullable] functions may be used to escape parameters substituted into query text.&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ]]&lt;/div&gt;</summary>
		<author><name>Dfetter</name></author>	</entry>

	</feed>