<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gsmith</id>
	<title>PostgreSQL wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.postgresql.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gsmith"/>
	<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/wiki/Special:Contributions/Gsmith"/>
	<updated>2026-06-09T21:00:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=TPC-H&amp;diff=39638</id>
		<title>TPC-H</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=TPC-H&amp;diff=39638"/>
		<updated>2024-07-18T19:31:27Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Update to cover progress in core and commercial work&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&#039;s possible to run the TPC-H data set on PostgreSQL without having a formal testing kit, as demonstrated by the [[DBT-3]] project&#039;s work to provide a full kit.  Commercial database vendors are famously so focused on this benchmark 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;
PostgreSQL is still missing some features needed to seriously compete on this benchmark.  The parallel query features added in PostgreSQL 9.6 and later helped pull down run times for several queries, see EDB&#039;s [https://wiki.postgresql.org/images/9/92/Parallel-query-in-postgresql.pdf Parallel Query in PostgreSQL] and [https://www.2ndquadrant.com/en/blog/tpc-h-performance-since-postgresql-8-3/ TPC-H performance 8.3-13]. &lt;br /&gt;
&lt;br /&gt;
Columnar storage with compression is a well known way to accelerate the TPC-H queries.  As covered below, Greenplum&#039;s PostgreSQL fork claimed some improved results against PG 8.4.  Crunchy claims large improvements over PG 16 with their commercial columnar [https://www.crunchydata.com/blog/running-tcp-h-queries-on-iceberg-tables-from-postgresql Iceberg based extensions].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Early reference notes about the benchmark:&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;
* [https://web.archive.org/web/20110406233644/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&#039;s needed to do well on TPC-H&lt;br /&gt;
* [https://web.archive.org/web/20100212084437/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;br /&gt;
* [http://www.slideshare.net/jkshah/postgresql-and-benchmarks PostgreSQL and Benchmarks] TPC-H, TPC-E, and EAStress 2004 review (2008)&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=BinaryFilesInDB&amp;diff=35537</id>
		<title>BinaryFilesInDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=BinaryFilesInDB&amp;diff=35537"/>
		<updated>2020-11-20T01:43:31Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Cleaned up intro.  Added some pros and cons, mainly around filesystem access and WAL streaming.  Put BLOB last as the text itself doesn&amp;#039;t recommend it.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Storing Binary files in the Database==&lt;br /&gt;
&lt;br /&gt;
New users to PostgreSQL often ask on the PostgreSQL mailing lists how/if to store binary files like images, Word documents, spreadsheets, HTML, PDF, compressed archives, or even code in the database.  There are two prevailing schools of thought on that, each having pluses and minus detailed below:&lt;br /&gt;
&lt;br /&gt;
* Save the binary file to the regular filesystem, then write metadata and some sort of symbolic link in the database to its location.&lt;br /&gt;
* Store the large binary file of unstructured data directly in a database field.&lt;br /&gt;
&lt;br /&gt;
Caveat: many people come to this page looking for PostgreSQL&#039;s equivalent of the MySLQ &amp;quot;BLOB*&amp;quot; data types.  The equivalent in Postgres is BYTEA.  For details on PostgreSQL&#039;s &amp;quot;binary large object&amp;quot; (which are quite different from MySQL BLOB&#039;s and provide random seeking, etc), see below.&lt;br /&gt;
&lt;br /&gt;
==Methods:==&lt;br /&gt;
&lt;br /&gt;
===Storing the large binary* file aka unstructured data streams in a database.===&lt;br /&gt;
Postgres along with other databases offer similar basic structures. &lt;br /&gt;
* Storing binary data using [https://www.postgresql.org/docs/current/datatype-binary.html bytea] or [https://www.postgresql.org/docs/current/datatype-character.html text] data types&lt;br /&gt;
** Pluses&lt;br /&gt;
*** Storing and Accessing entry utilizes the same interface when accessing any other data type or record. &lt;br /&gt;
*** No need to track OID of a &amp;quot;large object&amp;quot; you create&lt;br /&gt;
** Minus &lt;br /&gt;
*** bytea and text data type both use [https://www.postgresql.org/docs/current/storage-toast.html TOAST] (details [[TOAST|here]])&lt;br /&gt;
**** limited to 1G per entry &lt;br /&gt;
**** 4 Billion (&amp;gt; 2KB) entries per table [[TOAST|max]].&lt;br /&gt;
*** Need to escape/encode binary data before sending to DB then do the reverse after retrieving the data &lt;br /&gt;
*** Memory requirements on the server can be steep even on a small record set.&lt;br /&gt;
* BLOB binary large object see [http://www.postgresql.org/docs/current/static/largeobjects.html Large Object Support]&lt;br /&gt;
** Pluses &lt;br /&gt;
*** limited 4TB (PostgreSQL 9.3+) per entry, &amp;amp; 4 Billion per database&lt;br /&gt;
*** Can stream, and seek over entries ( can reduce memory requirements on DB server and client)&lt;br /&gt;
*** no encoding or escaping required.&lt;br /&gt;
** Minuses &lt;br /&gt;
*** must use different interface from what is normally used to access BLOBs. &lt;br /&gt;
*** Need to track OID. Normally a separate table with additional meta data is used to describe what each OID is.&lt;br /&gt;
*** (8.4 and  &amp;lt;8.4) No access controls in database.&lt;br /&gt;
*** Sometimes [http://www.postgresql.org/message-id/20150129142450.b83ce5d0652c39791292d0d5@potentialtech.com advised against] (basically you only need them if your entry is so large you need/want to seek and read bits and pieces of it at a time).&lt;br /&gt;
&lt;br /&gt;
Database storage has some common characteristics whichever specific storage you pick:&lt;br /&gt;
* Pluses overall&lt;br /&gt;
** Security and access control is simplified &lt;br /&gt;
** version controlling is easier. &lt;br /&gt;
** ACID&lt;br /&gt;
** Files saved into a master database will stream to standby replicas automatically.&lt;br /&gt;
** Backups are easier no need to track external files&lt;br /&gt;
* Minus overall&lt;br /&gt;
** Performance hit storing files in database.&lt;br /&gt;
** Memory requirements higher, for Database &lt;br /&gt;
** Backups can take significantly longer &lt;br /&gt;
** Access to files to external applications is complicated. Normally a temporary file is copied to the client to access and modify the file then needs to be copied back.&lt;br /&gt;
&lt;br /&gt;
===Storing Meta data and symbolic link in the database to where a Binary file is located ===&lt;br /&gt;
* Pluses &lt;br /&gt;
** Performance accessing binary file skips DB access layer.&lt;br /&gt;
** Number of files limited only by file system&lt;br /&gt;
** Size limited by file system&lt;br /&gt;
* Minuses &lt;br /&gt;
** The database user needs permissions to write outside of the database.  That&#039;s not normally an option in hosted PostgreSQL environments.&lt;br /&gt;
** Need to develop an interface to keep track of externally attached files&lt;br /&gt;
** external files and database can get out of sync&lt;br /&gt;
*** binary files can have missing entries in the database&lt;br /&gt;
*** database having entries to external files that&#039;s been deleted or moved by users or other events out of control of the database.&lt;br /&gt;
** Security settings between file system and database are independent from each other. The application may need to may need multiple security logins to access all resources. This is dependent on security needs of the application, and methods used for access control. There are several methods to create a single log on infrastructure.&lt;br /&gt;
** Multiple points of failure depending on complexity of the network.&lt;br /&gt;
&lt;br /&gt;
==When should files be stored in the database?==&lt;br /&gt;
&lt;br /&gt;
The common suggestion here is when the files have to be [http://en.wikipedia.org/wiki/ACID ACID]. &lt;br /&gt;
&lt;br /&gt;
Example: Photos taken during a Quality Inspection process: &lt;br /&gt;
&lt;br /&gt;
A normal/ordinary record in a database would consist of a Inspector, time stamp of inspection, process used to inspect the part, was the part accepted or rejected, and the parts serial number. In this scenario photos are also taken showing the part inspected. The photos are a integral piece of the inspection record keeping process. &lt;br /&gt;
&lt;br /&gt;
The photos being a critical piece making up the record/inspection report should not to be stored separately. Consider if the photos being stored on file sever are moved to new location as part of upgrade, the link to the record is bad if it was not updated. So now the inspection record by itself is worth less as it lost the piece it is describing and the photos are worthless without the record describing them. So the two pieces must stay together to have any value as a inspection report. &lt;br /&gt;
&lt;br /&gt;
When storing the photos outside the database, there is no easy way to guarantee atomicity, consistency, isolation and durability of the photos. Storing the photos in the database is the only practical solution where the programmer can guarantee rules are followed in the future.  The file data will automatically replicate and flow to database backups.  And since writing to arbitrary files on the database server requires extra trust, saving to the database may be the only option available or considered safe by your PostgreSQL administrator.&lt;br /&gt;
&lt;br /&gt;
=What is the best way to store the files in the Database?=&lt;br /&gt;
&lt;br /&gt;
There are three methods to choose from in PostgreSQL BLOB, bytea or text data type. &lt;br /&gt;
&lt;br /&gt;
The main author of this article has changed to using bytea exclusively now that Python and pl/Python make it easy to use bytea vs text type.&lt;br /&gt;
&lt;br /&gt;
===bytea===&lt;br /&gt;
*data storage requirements are the same as the object being stored in the file system&lt;br /&gt;
*Standard SQL statements to insert, update, delete, and select the object&lt;br /&gt;
*How easy is it to get the data in and out depends on the programming tools.  Python &amp;amp; .Net have the easiest automatic casting to and from languages type to postgres type (depends on db driver). Other languages database access layers require escaping or casting in a separate step before additional processing can be done. &lt;br /&gt;
*Server side tools tools to encode or decode into other [https://www.postgresql.org/docs/current/functions-string.html formats]&lt;br /&gt;
&lt;br /&gt;
===text===&lt;br /&gt;
*data storage requirements can be 30% more required space than if the file stored in the file system&lt;br /&gt;
*Standard SQL statements to insert, update, delete, and select the object&lt;br /&gt;
*always has to be encoded and decoded into some format such as (not a complete list)&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Base64 Base64] probably the most common encoding method for binary files due to email.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Uuencode uuencoding]&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Quoted-printable Quoted Printable]&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Ascii85 ASCII85]&lt;br /&gt;
this can add significant overhead. &lt;br /&gt;
*Server side tools to encode or decode into other [https://www.postgresql.org/docs/current/functions-string.html formats]&lt;br /&gt;
&lt;br /&gt;
===BLOB aka Large Objects===&lt;br /&gt;
*Completely different interface has to be use, read through [https://www.postgresql.org/docs/current/largeobjects.html Large-Objects] documentation to have a full understanding. &lt;br /&gt;
*Does have advantage of being able to seek over data and stream data out.&lt;br /&gt;
*data storage requirements are the same as if saved in the file system&lt;br /&gt;
*limited  [https://www.postgresql.org/docs/11/lo-funcs.html server side tools] to manipulate the objects.&lt;br /&gt;
&lt;br /&gt;
===What Meta Data should be stored in a database?===&lt;br /&gt;
here is a basic list what should be recorded in the database along side the binary file&lt;br /&gt;
*original file name&lt;br /&gt;
*data type&lt;br /&gt;
**this is needed to tell us what kinda of binary file is stored in the database &lt;br /&gt;
**the author suggest following the [http://en.wikipedia.org/wiki/Internet_media_type Internet Media Type] it makes it easier to use the same information for a website or attaching to email.&lt;br /&gt;
*long description &lt;br /&gt;
*date added&lt;br /&gt;
&lt;br /&gt;
==When is it bad idea to store binary files in the database?==&lt;br /&gt;
&lt;br /&gt;
Very large files (100meg+), where performance is critical to the application. The database layer adds a lot of overhead and complexity that may not be required.&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=29300</id>
		<title>Monitoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=29300"/>
		<updated>2017-01-31T21:52:19Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Shrink the 3 paragraphs of okmeter text to the normal size expected on this page.  Remove the excited ad copy as part of that.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL builtin &amp;amp; contrib ==&lt;br /&gt;
&lt;br /&gt;
=== Statistics collector ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL collects lots of data on its own and offers it via the &amp;lt;tt&amp;gt;pg_stat(io)_&amp;lt;/tt&amp;gt; system views&lt;br /&gt;
&lt;br /&gt;
* Official documentation on the [http://www.postgresql.org/docs/current/static/monitoring-stats.html Statistics Collector]&lt;br /&gt;
* [http://www.varlena.com/GeneralBits/107.php Interpreting pg_stat Views]&lt;br /&gt;
&lt;br /&gt;
=== contrib extensions ===&lt;br /&gt;
&lt;br /&gt;
The following extensions offer access to Postgres internals which may be of interest or collect additional information. Most of them are shipped with Postgres (the &amp;lt;tt&amp;gt;-contrib&amp;lt;/tt&amp;gt; packages may need to be installed) and can be activated via the [http://www.postgresql.org/docs/current/static/sql-createextension.html extension interface].&lt;br /&gt;
&lt;br /&gt;
==== pg_stat_statements ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgstatstatements.html pg_stat_statements]&amp;lt;/tt&amp;gt; tracks all queries that are executed on the server and records average runtime per query &amp;quot;class&amp;quot; among other parameters.&lt;br /&gt;
&lt;br /&gt;
==== pg_stat_plans ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/2ndQuadrant/pg_stat_plans pg_stat_plans]&amp;lt;/tt&amp;gt; extends on pg_stat_statements and records query plans for all executed quries. This is very helpful when you&#039;re experiencing performance regressions due to inefficient query plans due to changed parameters or table sizes.&lt;br /&gt;
&lt;br /&gt;
==== pgstattuple ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgstattuple.html pgstattuple]&amp;lt;/tt&amp;gt; can generate statistics for tables and indexes, showing how much space in each table &amp;amp; index is consumed by live tuples, deleted tuples as well as how much unused space is available in each relation.&lt;br /&gt;
&lt;br /&gt;
==== pg_buffercache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgbuffercache.html pg_buffercache]&amp;lt;/tt&amp;gt; gives you introspection into Postgres&#039; [http://www.postgresql.org/docs/current/static/runtime-config-resource.html#GUC-SHARED-BUFFERS shared buffers], showing how many pages of which relations are currently held in the cache.&lt;br /&gt;
&lt;br /&gt;
== External projects ==&lt;br /&gt;
&lt;br /&gt;
=== CLI tools ===&lt;br /&gt;
&lt;br /&gt;
==== pg_view ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://tech.zalando.com/getting-a-quick-view-of-your-postgresql-stats/ pg_view]&amp;lt;/tt&amp;gt; is a Python-based tool to quickly get information about running databases and resources used by them as well as correlate running queries and why they might be slow.&lt;br /&gt;
&lt;br /&gt;
==== pg_activity ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/julmon/pg_activity pg_activity]&amp;lt;/tt&amp;gt; is a htop like application for PostgreSQL server activity monitoring, written in Python.&lt;br /&gt;
&lt;br /&gt;
==== pgstats ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/gleu/pgstats pgstats]&amp;lt;/tt&amp;gt; is a command line tool written in C which can sample various PostgreSQL informations. It also provides a tool to generate CSV files to graph the pgstats metrics.&lt;br /&gt;
=== Checkers === &lt;br /&gt;
&lt;br /&gt;
==== check_postgres ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://bucardo.org/wiki/Check_postgres check_postgres]&amp;lt;/tt&amp;gt; is a command line tool which is designed to be run from software like Icinga, MRTG or as a standalone tool. It can monitor many aspects of the database and trigger warnings when thresholds are violated.&lt;br /&gt;
&lt;br /&gt;
=== Interfaces &amp;amp; collectors ===&lt;br /&gt;
&lt;br /&gt;
These tools either offer an interface to PostgreSQL monitoring-relevant data or can aggregate and prepare them for other systems.&lt;br /&gt;
&lt;br /&gt;
==== pgsnmpd ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://pgsnmpd.projects.postgresql.org/ pgsnmpd]&amp;lt;/tt&amp;gt; can run as a standalone SNMP server and implements the [http://www.faqs.org/rfcs/rfc1697.html RFC 1697 MIB] which is generic RDBMS [http://en.wikipedia.org/wiki/Management_information_base MIB]&lt;br /&gt;
&lt;br /&gt;
This is useful for network management systems which are limited to SNMP protocol.&lt;br /&gt;
&lt;br /&gt;
==== pganalyze-collector ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/pganalyze/pganalyze-collector pganalyze-collector]&amp;lt;/tt&amp;gt; is a tool which collects &amp;lt;tt&amp;gt;pg_stat_plans&amp;lt;/tt&amp;gt; query information as well as various performance-relevant database parameters and converts them into a JSON structure for easy ingestion in other systems.&lt;br /&gt;
&lt;br /&gt;
=== Generic monitoring solutions with plugins ===&lt;br /&gt;
&lt;br /&gt;
====Datadog====&lt;br /&gt;
[http://www.datadoghq.com/ Datadog] is a commercial saas that collects postgres metrics on connections, transactions, row crud operations, locks, temp files, bgwriter, index usage, replication status, memory, disk, cpu and lets you visualize and alert on those metrics alongside your other system and application metrics.&lt;br /&gt;
&lt;br /&gt;
==== Munin ====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Plugins developed in Perl are included in the Core [http://munin-monitoring.org/ Munin] Distribution. The following plugins are included by default: &amp;lt;tt&amp;gt;postgres_bgwriter, postgres_locks_, postgres_tuples_, postgres_cache_, postgres_querylength_, postgres_users, postgres_checkpoints, postgres_scans_, postgres_xlog, postgres_connections_, postgres_size_, postgres_connections_db, postgres_transactions_&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://aouyar.github.com/PyMunin/ PyMunin] includes a Multigraph Munin Plugin written in Python that implements the following graphs: &amp;lt;tt&amp;gt;pg_connections, pg_diskspace, pg_blockreads, pg_xact, pg_tup_read, pg_tup_write, pg_blockreads_detail, pg_xact_commit_detail, pg_xact_rollback_detail, pg_tup_return_detail, pg_tup_fetch_detail, pg_tup_delete_detail, pg_tup_update_detail, pg_tup_insert_detail&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detailed setup instructions for common Linux platforms can be found at [http://highperfpostgres.com/guides/postgresql-monitoring-with-munin/ highperfpostgres.com]&lt;br /&gt;
&lt;br /&gt;
==== Zabbix ====&lt;br /&gt;
&lt;br /&gt;
[http://pg-monz.github.io/pg_monz/index-en.html pg_monz] is a [http://www.zabbix.com/ Zabbix] monitoring template for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
[http://cavaliercoder.github.io/libzbxpgsql/ libzbxpgsql] is a [http://www.zabbix.com/ Zabbix] monitoring template and native agent module for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
==== NewRelic ====&lt;br /&gt;
&lt;br /&gt;
[http://newrelic.com/ NewRelic] is a commercial SaaS application monitoring solution which offers a [https://newrelic.com/plugins/enterprisedb-corporation/30 PostgreSQL plugin] maintained by EnterpriseDB.&lt;br /&gt;
&lt;br /&gt;
==== Cacti ====&lt;br /&gt;
&lt;br /&gt;
There has been work done on building a Postgres template for [http://www.cacti.net/ Cacti], Details can be found at the [[Cacti]] page.&lt;br /&gt;
&lt;br /&gt;
====Okmeter====&lt;br /&gt;
[http://okmeter.io/ Okmeter.io] is a commercial SaaS that collects a whole lot of PostgreSQL status and operational data:  over 50 types of metrics on connections, transactions, table CRUD operations, locks, bgwriter, index usage and ops, replication, autovacuum. Also, query timings, disk and CPU usage by queries from pg_stat_statements, and system metrics — CPU, memory, fd and disk usage per process, socket connections per port and tcp status.  Collecting the data requires minimal configuration, and it can be used to create visualization dashboards and alert on metrics.&lt;br /&gt;
&lt;br /&gt;
=== Postgres-centric monitoring solutions ===&lt;br /&gt;
&lt;br /&gt;
==== EnterpriseDB Postgres Enterprise Manager ====&lt;br /&gt;
&lt;br /&gt;
[http://www.enterprisedb.com/products-services-training/products/postgres-enterprise-manager Postgres Enterprise Manager] monitors, alerts, manages and tunes local and remote large scale Postgres deployments from a single graphical console. Out of the box features include: server auto-discovery, point and click management of database objects, 225+ pre-configured database alerts by SMTP/SNMP, custom alerts, global At-a-Glance monitoring dashboards, Performance monitoring dashboards, custom dashboards, an Audit Manager, Postgres Expert best practice configuration recommendations, a Log Manager, a Log Analyzer Expert, a SQL Profiler, and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
==== pganalyze ====&lt;br /&gt;
&lt;br /&gt;
[https://pganalyze.com/ pganalyze] is a commercial SaaS offering which focuses on performance monitoring and automated tuning suggestions.&lt;br /&gt;
&lt;br /&gt;
==== pgwatch ====&lt;br /&gt;
&lt;br /&gt;
[http://www.cybertec.at/en/products/pgwatch-cybertec-enterprise-postgresql-monitor/ pgwatch] is a PHP web application which offers interactive graphs for relevant Postgres data.&lt;br /&gt;
&lt;br /&gt;
==== pg_statsinfo &amp;amp; pg_stats_reporter ====&lt;br /&gt;
&lt;br /&gt;
[http://pgstatsinfo.projects.pgfoundry.org/ pg_statsinfo] is a Postgres extension that collects lots of performance-relevant information inside the Postgres server which then can be aggregated by pg_stats_reporter instances which provide a web interface to the collected data. Both are FOSS software maintained by NTT.&lt;br /&gt;
&lt;br /&gt;
==== PGObserver ====&lt;br /&gt;
&lt;br /&gt;
[http://zalando.github.io/PGObserver/ PGObserver] is a Python &amp;amp; Java-based Postgres monitoring solution developed by Zalando. It was developed with a focus on stored procedure performance but extended well beyond that. &lt;br /&gt;
&lt;br /&gt;
==== pgCluu ====&lt;br /&gt;
&lt;br /&gt;
[http://pgcluu.darold.net/ pgCluu] is a Perl-based monitoring solution which uses psql and [http://en.wikipedia.org/wiki/Sar_(Unix) sar] to collect information about Postgres servers and render comprehensive performance stats.&lt;br /&gt;
&lt;br /&gt;
==== PoWA ==== &lt;br /&gt;
&lt;br /&gt;
[http://dalibo.github.io/powa/ PoWA] is a PostgreSQL Workload Analyzer that gathers performance stats and provides real-time charts and graphs to help monitor and tune your PostgreSQL servers. It relies on extensions such as pg_stat_statements, pg_qualstats, pg_stat_kcache, pg_track_settings and HypoPG, and can help you optimize you database easily.&lt;br /&gt;
&lt;br /&gt;
==== OPM: Open PostgreSQL Monitoring ==== &lt;br /&gt;
&lt;br /&gt;
[http://opm.io Open PostgreSQL Monitoring (OPM)] is a free software suite designed to help you manage your PostgreSQL servers. It&#039;s a flexible tool that will follow the activity of each instance. It can gather stats, display dashboards and send warnings when something goes wrong. The long-term goal of the project is to provide similar features to those of Oracle Grid Control or SQL Server Management Studio.&lt;br /&gt;
&lt;br /&gt;
==== pgAnalytics ==== &lt;br /&gt;
&lt;br /&gt;
[http://pganalytics.io pgAnalytics] is a comercial SaaS developed by Dextra. pgAnalytics collects snapshots from PostgreSQL statistics, log files and backups. Linux and Windows statistics are gathered to provide a better understand about whole PostgreSQL environment. Batch process are triggered to looking for errors or things that can be improved, sending alert emails. Try a [http://pganalytics.io/demo demo].&lt;br /&gt;
&lt;br /&gt;
[[Category:Monitoring|!]]&lt;br /&gt;
[[Category:Performance]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=29299</id>
		<title>Monitoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=29299"/>
		<updated>2017-01-31T21:46:19Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Move okmeter to the bottom of its section, below the much more popular/mature tools there.  Remove the second entry added to spam it across multiple sections.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL builtin &amp;amp; contrib ==&lt;br /&gt;
&lt;br /&gt;
=== Statistics collector ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL collects lots of data on its own and offers it via the &amp;lt;tt&amp;gt;pg_stat(io)_&amp;lt;/tt&amp;gt; system views&lt;br /&gt;
&lt;br /&gt;
* Official documentation on the [http://www.postgresql.org/docs/current/static/monitoring-stats.html Statistics Collector]&lt;br /&gt;
* [http://www.varlena.com/GeneralBits/107.php Interpreting pg_stat Views]&lt;br /&gt;
&lt;br /&gt;
=== contrib extensions ===&lt;br /&gt;
&lt;br /&gt;
The following extensions offer access to Postgres internals which may be of interest or collect additional information. Most of them are shipped with Postgres (the &amp;lt;tt&amp;gt;-contrib&amp;lt;/tt&amp;gt; packages may need to be installed) and can be activated via the [http://www.postgresql.org/docs/current/static/sql-createextension.html extension interface].&lt;br /&gt;
&lt;br /&gt;
==== pg_stat_statements ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgstatstatements.html pg_stat_statements]&amp;lt;/tt&amp;gt; tracks all queries that are executed on the server and records average runtime per query &amp;quot;class&amp;quot; among other parameters.&lt;br /&gt;
&lt;br /&gt;
==== pg_stat_plans ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/2ndQuadrant/pg_stat_plans pg_stat_plans]&amp;lt;/tt&amp;gt; extends on pg_stat_statements and records query plans for all executed quries. This is very helpful when you&#039;re experiencing performance regressions due to inefficient query plans due to changed parameters or table sizes.&lt;br /&gt;
&lt;br /&gt;
==== pgstattuple ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgstattuple.html pgstattuple]&amp;lt;/tt&amp;gt; can generate statistics for tables and indexes, showing how much space in each table &amp;amp; index is consumed by live tuples, deleted tuples as well as how much unused space is available in each relation.&lt;br /&gt;
&lt;br /&gt;
==== pg_buffercache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://www.postgresql.org/docs/current/static/pgbuffercache.html pg_buffercache]&amp;lt;/tt&amp;gt; gives you introspection into Postgres&#039; [http://www.postgresql.org/docs/current/static/runtime-config-resource.html#GUC-SHARED-BUFFERS shared buffers], showing how many pages of which relations are currently held in the cache.&lt;br /&gt;
&lt;br /&gt;
== External projects ==&lt;br /&gt;
&lt;br /&gt;
=== CLI tools ===&lt;br /&gt;
&lt;br /&gt;
==== pg_view ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://tech.zalando.com/getting-a-quick-view-of-your-postgresql-stats/ pg_view]&amp;lt;/tt&amp;gt; is a Python-based tool to quickly get information about running databases and resources used by them as well as correlate running queries and why they might be slow.&lt;br /&gt;
&lt;br /&gt;
==== pg_activity ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/julmon/pg_activity pg_activity]&amp;lt;/tt&amp;gt; is a htop like application for PostgreSQL server activity monitoring, written in Python.&lt;br /&gt;
&lt;br /&gt;
==== pgstats ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/gleu/pgstats pgstats]&amp;lt;/tt&amp;gt; is a command line tool written in C which can sample various PostgreSQL informations. It also provides a tool to generate CSV files to graph the pgstats metrics.&lt;br /&gt;
=== Checkers === &lt;br /&gt;
&lt;br /&gt;
==== check_postgres ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://bucardo.org/wiki/Check_postgres check_postgres]&amp;lt;/tt&amp;gt; is a command line tool which is designed to be run from software like Icinga, MRTG or as a standalone tool. It can monitor many aspects of the database and trigger warnings when thresholds are violated.&lt;br /&gt;
&lt;br /&gt;
=== Interfaces &amp;amp; collectors ===&lt;br /&gt;
&lt;br /&gt;
These tools either offer an interface to PostgreSQL monitoring-relevant data or can aggregate and prepare them for other systems.&lt;br /&gt;
&lt;br /&gt;
==== pgsnmpd ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[http://pgsnmpd.projects.postgresql.org/ pgsnmpd]&amp;lt;/tt&amp;gt; can run as a standalone SNMP server and implements the [http://www.faqs.org/rfcs/rfc1697.html RFC 1697 MIB] which is generic RDBMS [http://en.wikipedia.org/wiki/Management_information_base MIB]&lt;br /&gt;
&lt;br /&gt;
This is useful for network management systems which are limited to SNMP protocol.&lt;br /&gt;
&lt;br /&gt;
==== pganalyze-collector ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;[https://github.com/pganalyze/pganalyze-collector pganalyze-collector]&amp;lt;/tt&amp;gt; is a tool which collects &amp;lt;tt&amp;gt;pg_stat_plans&amp;lt;/tt&amp;gt; query information as well as various performance-relevant database parameters and converts them into a JSON structure for easy ingestion in other systems.&lt;br /&gt;
&lt;br /&gt;
=== Generic monitoring solutions with plugins ===&lt;br /&gt;
&lt;br /&gt;
====Datadog====&lt;br /&gt;
[http://www.datadoghq.com/ Datadog] is a commercial saas that collects postgres metrics on connections, transactions, row crud operations, locks, temp files, bgwriter, index usage, replication status, memory, disk, cpu and lets you visualize and alert on those metrics alongside your other system and application metrics.&lt;br /&gt;
&lt;br /&gt;
==== Munin ====&lt;br /&gt;
&lt;br /&gt;
PostgreSQL Plugins developed in Perl are included in the Core [http://munin-monitoring.org/ Munin] Distribution. The following plugins are included by default: &amp;lt;tt&amp;gt;postgres_bgwriter, postgres_locks_, postgres_tuples_, postgres_cache_, postgres_querylength_, postgres_users, postgres_checkpoints, postgres_scans_, postgres_xlog, postgres_connections_, postgres_size_, postgres_connections_db, postgres_transactions_&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://aouyar.github.com/PyMunin/ PyMunin] includes a Multigraph Munin Plugin written in Python that implements the following graphs: &amp;lt;tt&amp;gt;pg_connections, pg_diskspace, pg_blockreads, pg_xact, pg_tup_read, pg_tup_write, pg_blockreads_detail, pg_xact_commit_detail, pg_xact_rollback_detail, pg_tup_return_detail, pg_tup_fetch_detail, pg_tup_delete_detail, pg_tup_update_detail, pg_tup_insert_detail&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detailed setup instructions for common Linux platforms can be found at [http://highperfpostgres.com/guides/postgresql-monitoring-with-munin/ highperfpostgres.com]&lt;br /&gt;
&lt;br /&gt;
==== Zabbix ====&lt;br /&gt;
&lt;br /&gt;
[http://pg-monz.github.io/pg_monz/index-en.html pg_monz] is a [http://www.zabbix.com/ Zabbix] monitoring template for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
[http://cavaliercoder.github.io/libzbxpgsql/ libzbxpgsql] is a [http://www.zabbix.com/ Zabbix] monitoring template and native agent module for PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
==== NewRelic ====&lt;br /&gt;
&lt;br /&gt;
[http://newrelic.com/ NewRelic] is a commercial SaaS application monitoring solution which offers a [https://newrelic.com/plugins/enterprisedb-corporation/30 PostgreSQL plugin] maintained by EnterpriseDB.&lt;br /&gt;
&lt;br /&gt;
==== Cacti ====&lt;br /&gt;
&lt;br /&gt;
There has been work done on building a Postgres template for [http://www.cacti.net/ Cacti], Details can be found at the [[Cacti]] page.&lt;br /&gt;
&lt;br /&gt;
====Okmeter====&lt;br /&gt;
[http://okmeter.io/ Okmeter.io] is a commercial SaaS that collects a whole lot of PostgreSQL status and operational data — over 50 types of metrics on connections, transactions, table crud operations, locks, bgwriter, index usage and ops, replication, autovacuum. Also, query timings, disk and CPU usage by queries from pg_stat_statements, and system metrics — CPU, memory, fd and disk usage per process, socket connections per port and tcp status. &lt;br /&gt;
&lt;br /&gt;
Once installed okmeter agent will auto-detect and start to monitor every PG instance without much of configuration. It will automatically create visualization dashboards with charts for all these stats and metrics. It allow you to configure alerts based on these metrics — for example on current number of auto-vacuum workers or replication lag. &lt;br /&gt;
&lt;br /&gt;
Although Okmeter is a generic monitoring service, Okmeter PostgreSQL plugin was developed with guidance and feedback from PostgreSQL-Consulting experts. It is very detailed yet meaningful with regard to PostgreSQL metrics it is as Postgres-aware as Postgres-centric monitoring solutions.&lt;br /&gt;
&lt;br /&gt;
=== Postgres-centric monitoring solutions ===&lt;br /&gt;
&lt;br /&gt;
==== EnterpriseDB Postgres Enterprise Manager ====&lt;br /&gt;
&lt;br /&gt;
[http://www.enterprisedb.com/products-services-training/products/postgres-enterprise-manager Postgres Enterprise Manager] monitors, alerts, manages and tunes local and remote large scale Postgres deployments from a single graphical console. Out of the box features include: server auto-discovery, point and click management of database objects, 225+ pre-configured database alerts by SMTP/SNMP, custom alerts, global At-a-Glance monitoring dashboards, Performance monitoring dashboards, custom dashboards, an Audit Manager, Postgres Expert best practice configuration recommendations, a Log Manager, a Log Analyzer Expert, a SQL Profiler, and Index Advisor.&lt;br /&gt;
&lt;br /&gt;
==== pganalyze ====&lt;br /&gt;
&lt;br /&gt;
[https://pganalyze.com/ pganalyze] is a commercial SaaS offering which focuses on performance monitoring and automated tuning suggestions.&lt;br /&gt;
&lt;br /&gt;
==== pgwatch ====&lt;br /&gt;
&lt;br /&gt;
[http://www.cybertec.at/en/products/pgwatch-cybertec-enterprise-postgresql-monitor/ pgwatch] is a PHP web application which offers interactive graphs for relevant Postgres data.&lt;br /&gt;
&lt;br /&gt;
==== pg_statsinfo &amp;amp; pg_stats_reporter ====&lt;br /&gt;
&lt;br /&gt;
[http://pgstatsinfo.projects.pgfoundry.org/ pg_statsinfo] is a Postgres extension that collects lots of performance-relevant information inside the Postgres server which then can be aggregated by pg_stats_reporter instances which provide a web interface to the collected data. Both are FOSS software maintained by NTT.&lt;br /&gt;
&lt;br /&gt;
==== PGObserver ====&lt;br /&gt;
&lt;br /&gt;
[http://zalando.github.io/PGObserver/ PGObserver] is a Python &amp;amp; Java-based Postgres monitoring solution developed by Zalando. It was developed with a focus on stored procedure performance but extended well beyond that. &lt;br /&gt;
&lt;br /&gt;
==== pgCluu ====&lt;br /&gt;
&lt;br /&gt;
[http://pgcluu.darold.net/ pgCluu] is a Perl-based monitoring solution which uses psql and [http://en.wikipedia.org/wiki/Sar_(Unix) sar] to collect information about Postgres servers and render comprehensive performance stats.&lt;br /&gt;
&lt;br /&gt;
==== PoWA ==== &lt;br /&gt;
&lt;br /&gt;
[http://dalibo.github.io/powa/ PoWA] is a PostgreSQL Workload Analyzer that gathers performance stats and provides real-time charts and graphs to help monitor and tune your PostgreSQL servers. It relies on extensions such as pg_stat_statements, pg_qualstats, pg_stat_kcache, pg_track_settings and HypoPG, and can help you optimize you database easily.&lt;br /&gt;
&lt;br /&gt;
==== OPM: Open PostgreSQL Monitoring ==== &lt;br /&gt;
&lt;br /&gt;
[http://opm.io Open PostgreSQL Monitoring (OPM)] is a free software suite designed to help you manage your PostgreSQL servers. It&#039;s a flexible tool that will follow the activity of each instance. It can gather stats, display dashboards and send warnings when something goes wrong. The long-term goal of the project is to provide similar features to those of Oracle Grid Control or SQL Server Management Studio.&lt;br /&gt;
&lt;br /&gt;
==== pgAnalytics ==== &lt;br /&gt;
&lt;br /&gt;
[http://pganalytics.io pgAnalytics] is a comercial SaaS developed by Dextra. pgAnalytics collects snapshots from PostgreSQL statistics, log files and backups. Linux and Windows statistics are gathered to provide a better understand about whole PostgreSQL environment. Batch process are triggered to looking for errors or things that can be improved, sending alert emails. Try a [http://pganalytics.io/demo demo].&lt;br /&gt;
&lt;br /&gt;
[[Category:Monitoring|!]]&lt;br /&gt;
[[Category:Performance]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Reviewing_a_Patch&amp;diff=28820</id>
		<title>Reviewing a Patch</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Reviewing_a_Patch&amp;diff=28820"/>
		<updated>2016-12-21T18:26:47Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add quick intro.  Link to new review talk from David Steele.  Date the talks for context.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
PostgreSQL development is organized into [[CommitFest]] periods that need plenty of reviewers to help with all the submissions.  Many people feel that they&#039;re not qualified to do a full review of patches submitted to PostgreSQL.  But review includes many different tasks, and even if you can&#039;t do all of them you can help the project by taking on the earlier phases.  If you can apply a patch and you can use the new feature, you&#039;re already qualified to start reviewing it.  &lt;br /&gt;
&lt;br /&gt;
The eventual committer will do their own review before the patch goes into the codebase.  The task of a reviewer is to take off load from committers by catching simple problems. The reviewer&#039;s job is not necessarily to guarantee some level of quality, but just to report any problems they are able to find.  That task is done if you think the patch is ready for in-depth review from a committer. See [http://archives.postgresql.org/pgsql-hackers/2009-07/msg01103.php this patch review] as one example of the output a thorough review might produce. Reviews for other patches might, of course, contain different sections or for that matter, look completely different.&lt;br /&gt;
&lt;br /&gt;
See also [[Media:11_eggyknap-patch-review.pdf|Josh Tolley&#039;s presentation]] (2009) for a tongue-in-cheek but not inaccurate description of who is welcome, and [http://www.pgcon.org/2011/schedule/events/368.en.html Review of Patch Reviewing] (2011) or [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit] (2016) for more serious looks at the material that&#039;s covered here.&lt;br /&gt;
&lt;br /&gt;
Tactical points:&lt;br /&gt;
&lt;br /&gt;
* If a commitfest is currently in progress, it is available [https://commitfest.postgresql.org/action/commitfest_view/inprogress here].&lt;br /&gt;
* Every commitfest ought to have a commitfest manager that you can ask for help picking a patch or on procedural matters.&lt;br /&gt;
** The current commitfest manager is: (vacant)&lt;br /&gt;
* You don&#039;t have to ask for permission to sign yourself up.&lt;br /&gt;
* Please sign up as soon as you know that you plan to do the review.  (Some people hold back on signing up until they have actually done the review.  Please don&#039;t do that; it doesn&#039;t help us plan our reviewing resources.)&lt;br /&gt;
* On the other hand, we ask that initial reviews are sent in within about five days, to avoid &amp;quot;blocking&amp;quot; reviewing spots.  But it&#039;s OK to send in a partial review or ask for more time.  Just keep communicating.&lt;br /&gt;
* Reviews and other development communications should generally be done via the [http://www.postgresql.org/list/pgsql-hackers/ pgsql-hackers] mailing list.&lt;br /&gt;
* Send reviews as replies to the email containing the patch. Try to keep the email threading intact. Don&#039;t start a new thread for the review, or chances are the original author won&#039;t see it.&lt;br /&gt;
&lt;br /&gt;
Phases a patch review generally goes through include:&lt;br /&gt;
&lt;br /&gt;
== Submission review (skills needed: patch, English comprehension) ==&lt;br /&gt;
&lt;br /&gt;
* Is the patch in a patch format which has context? (eg: [http://en.wikipedia.org/wiki/Diff#Context_format context diff format])&lt;br /&gt;
** Patches in &#039;normal&#039; or &#039;plain&#039; diff formats, which only show the lines changed and no context, are not acceptable.&lt;br /&gt;
** Ideally, submitters should choose either context (diff -c) format or unified (diff -u) format based on which makes the submitter&#039;s patch easier to read.&lt;br /&gt;
* Does it apply cleanly to the current git master?&lt;br /&gt;
* Does it include reasonable tests, necessary doc patches, etc?&lt;br /&gt;
&lt;br /&gt;
== Usability review (skills needed: test-fu, ability to find and read spec) ==  &lt;br /&gt;
&lt;br /&gt;
Read what the patch is supposed to do, and consider:&lt;br /&gt;
&lt;br /&gt;
* Does the patch actually implement that? &lt;br /&gt;
* Do we want that? &lt;br /&gt;
* Do we already have it? &lt;br /&gt;
* Does it follow SQL spec, or the community-agreed behavior? &lt;br /&gt;
* Does it include pg_dump support (if applicable)?&lt;br /&gt;
* Are there dangers? &lt;br /&gt;
* Have all the bases been covered?&lt;br /&gt;
&lt;br /&gt;
== Feature test (skills needed: patch, configure, make, pipe errors to log) ==&lt;br /&gt;
&lt;br /&gt;
Apply the patch, compile it and test:&lt;br /&gt;
&lt;br /&gt;
* Does the feature work as advertised?&lt;br /&gt;
* Are there corner cases the author has failed to consider?&lt;br /&gt;
* Are there any assertion failures or crashes?&lt;br /&gt;
**Reviews should be done with the &#039;&#039;configure&#039;&#039; options&lt;br /&gt;
&#039;&#039;--enable-cassert&#039;&#039; and &#039;&#039;--enable-debug&#039;&#039; turned on; see [[Working with git]] for a full example.  These will help find issues with the code that might otherwise be missed.  But note a copy of PostgreSQL built using these parameters will be substantially slower than one built without them.  If you&#039;re working on something performance-related, such as testing whether a patch slows anything down, be sure to build without these flags before testing execution speed.  Some, but not all, of the penalty of &#039;&#039;--enable-cassert&#039;&#039; can be turned off at server start time by putting &#039;&#039;debug_assertions = false&#039;&#039; in your postgresql.conf.  See [http://www.postgresql.org/docs/current/static/runtime-config-developer.html Developer Options] for more details about that setting; it defaults to true in builds done with &#039;&#039;--enable-cassert&#039;&#039;.  Also note that while &#039;&#039;--enable-debug&#039;&#039; shouldn&#039;t have any performance penalty when building with &#039;&#039;gcc&#039;&#039;, it definitely does with most other compilers.&lt;br /&gt;
&lt;br /&gt;
== Performance review (skills needed: ability to time performance) ==&lt;br /&gt;
&lt;br /&gt;
* Does the patch slow down simple tests? &lt;br /&gt;
* If it claims to improve performance, does it?&lt;br /&gt;
* Does it slow down other things?&lt;br /&gt;
&lt;br /&gt;
== Coding review (skills needed: guideline comparison, experience with portability issues, minor C-reading skills) ==&lt;br /&gt;
&lt;br /&gt;
Read the changes to the code in detail and consider:&lt;br /&gt;
&lt;br /&gt;
* Does it follow the project [http://developer.postgresql.org/pgdocs/postgres/source.html coding guidelines]? &lt;br /&gt;
* Are there portability issues? &lt;br /&gt;
* Will it work on Windows/BSD etc? &lt;br /&gt;
* Are the comments sufficient and accurate?&lt;br /&gt;
* Does it do what it says, correctly?&lt;br /&gt;
* Does it produce compiler warnings?&lt;br /&gt;
* Can you make it crash?&lt;br /&gt;
&lt;br /&gt;
== Architecture review (skills needed: experience with whole-PostgreSQL-project architecture) ==&lt;br /&gt;
&lt;br /&gt;
Consider the changes to the code in the context of the project as a whole:&lt;br /&gt;
&lt;br /&gt;
* Is everything done in a way that fits together coherently with other features/modules? &lt;br /&gt;
* Are there interdependencies that can cause problems?&lt;br /&gt;
&lt;br /&gt;
== Review review ==&lt;br /&gt;
&lt;br /&gt;
* Did the reviewer cover all the things that kind of reviewer is supposed to do?&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=TPC-H&amp;diff=27397</id>
		<title>TPC-H</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=TPC-H&amp;diff=27397"/>
		<updated>2016-04-15T21:56:14Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Change broken links to archive.org, add Jignesh&amp;#039;s talk&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&#039;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&#039;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;
* [https://web.archive.org/web/20110406233644/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&#039;s needed to do well on TPC-H&lt;br /&gt;
* [https://web.archive.org/web/20100212084437/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;br /&gt;
* [http://www.slideshare.net/jkshah/postgresql-and-benchmarks PostgreSQL and Benchmarks] TPC-H, TPC-E, and EAStress 2004 review (2008)&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=May_2015_Fsync_Permissions_Bug&amp;diff=25455</id>
		<title>May 2015 Fsync Permissions Bug</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=May_2015_Fsync_Permissions_Bug&amp;diff=25455"/>
		<updated>2015-07-13T16:15:13Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add warning to check symlinks and make a backup before erasing anything&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=May 2015 fsync Permissions Bug FAQ=&lt;br /&gt;
&lt;br /&gt;
On May 22, 2015, the PostgreSQL project [http://www.postgresql.org/about/news/1587/ released a set of updates] to all supported versions of PostgreSQL. One of the fixes included in this batch of updates forced fsyncing of all PostgreSQL files on a restart after a crash. This fix was added to prevent certain kinds of data corruption which can occur if a system hosting a database has several failures in a row.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this fix causes issues with some users&#039; PostgreSQL setups due to file permissions issues, which can cause PostgreSQL to refuse to restart after an unexpected shutdown, or when restoring from a binary backup (PITR).  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This issue is slated to be fixed in the 2015-06-04 Update Release.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Who is affected by this bug?==&lt;br /&gt;
&lt;br /&gt;
Users who:&lt;br /&gt;
&lt;br /&gt;
# applied the 9.4.2, 9.3.7, 9.2.11, 9.1.16 and/or 9.0.20 PostgreSQL updates&lt;br /&gt;
# have one or more files or directories, or symlinks to one or more files or directories, not owned or writeable by the &amp;quot;postgres&amp;quot; user (or other installation owner) under the postgres data directory (PGDATA).&lt;br /&gt;
&lt;br /&gt;
Note that condition 2 is common to SSL-enabled Debian and Ubuntu installations of PostgreSQL 9.1, 9.0, and earlier, but may affect other users as well.  Most users on other platforms are not affected, as all files and links under PGDATA are owned by the &amp;quot;postgres&amp;quot; user by default.&lt;br /&gt;
&lt;br /&gt;
==What are the symptoms?==&lt;br /&gt;
&lt;br /&gt;
If you experience the bug, PostgreSQL will refuse to restart after a crash, or a restore from binary backup, with an error message similar to the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 * Starting PostgreSQL 9.1 database server&lt;br /&gt;
 * The PostgreSQL server failed to start. Please check the log output:&lt;br /&gt;
 2015-05-26 03:27:20 UTC [331-1] LOG:  database system was interrupted; last known up at 2015-05-21 19:56:58 UTC&lt;br /&gt;
 2015-05-26 03:27:20 UTC [331-2] FATAL:  could not open file &amp;quot;/etc/ssl/certs/ssl-cert-snakeoil.pem&amp;quot;: Permission denied&lt;br /&gt;
 2015-05-26 03:27:20 UTC [330-1] LOG:  startup process (PID 331) exited with exit code 1&lt;br /&gt;
 2015-05-26 03:27:20 UTC [330-2] LOG:  aborting startup due to startup process failure&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information, see [http://www.postgresql.org/message-id/20150525142657.4686.35151@wrigleys.postgresql.org the original bug report].&lt;br /&gt;
&lt;br /&gt;
==I&#039;ve hit this bug and I can&#039;t restart Postgres. What do I do?==&lt;br /&gt;
&lt;br /&gt;
As a temporary workaround, change the permissions on any symlinked files to being writable by the Postgres user.  For example, on Ubuntu, with PostgreSQL 9.1, the following should work:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;WARNING:  Make sure these configuration files are symbolic links before executing these commands!  If someone has customized the server.crt or server.key file, you can erase them by following these steps.  It&#039;s a good idea to make a backup of the server.crt and server.key files before removing them.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 (as root)&lt;br /&gt;
 # go to PGDATA directory&lt;br /&gt;
 cd /var/lib/postgresql/9.1/main &lt;br /&gt;
 ls -l server.crt server.key&lt;br /&gt;
 &lt;br /&gt;
 # confirm both of those files are symbolic links&lt;br /&gt;
 # to files in /etc/ssl before going further&lt;br /&gt;
 &lt;br /&gt;
 # remove symlinks to SSL certs&lt;br /&gt;
 rm server.crt&lt;br /&gt;
 rm server.key &lt;br /&gt;
 &lt;br /&gt;
 # copy the SSL certs to the local directory&lt;br /&gt;
 cp /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt&lt;br /&gt;
 cp /etc/ssl/private/ssl-cert-snakeoil.key server.key&lt;br /&gt;
 &lt;br /&gt;
 # set permissions on ssl certs&lt;br /&gt;
 # and postgres ownership on everything else&lt;br /&gt;
 # just in case&lt;br /&gt;
 chown postgres *&lt;br /&gt;
 chmod 640 server.crt server.key&lt;br /&gt;
 &lt;br /&gt;
 service postgresql start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to adapt the above example to your specific circumstances, but that should give you a general idea of what to do.  The requirement is that the postgres user must have write access to everything in PGDATA or symlinked from PGDATA.&lt;br /&gt;
&lt;br /&gt;
==Should I not apply the updates?==&lt;br /&gt;
&lt;br /&gt;
The 9.4.2 and 9.3.7 updates fix a serious bug which causes unrecoverable data loss under some circumstances.  As such, the PostgreSQL project considers a temporary workaround involving file permissions to be a less serious risk than the fixed bugs, and recommends applying the updates once you&#039;ve verified and changed file permissions, if required.&lt;br /&gt;
&lt;br /&gt;
Other users who are not at risk for the fsync issue are also recommended to apply the update at the next downtime.&lt;br /&gt;
&lt;br /&gt;
==Will you be fixing it soon?==&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL project expects to release another update very soon which addresses the file permissions issue.  The expected release date for this update is June 4.&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2015_Developer_Unconference&amp;diff=24743</id>
		<title>PgCon 2015 Developer Unconference</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2015_Developer_Unconference&amp;diff=24743"/>
		<updated>2015-05-27T06:20:07Z</updated>

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

		<summary type="html">&lt;p&gt;Gsmith: Add lightning talk section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PGConf NYC 2014 Talks =&lt;br /&gt;
&lt;br /&gt;
== Conference Website ==&lt;br /&gt;
&lt;br /&gt;
http://nyc.pgconf.us/2014&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday April 3, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Keynotes ===&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/images/9/9f/PostgreSQL_Keynote_-_GS.pdf Increase Enterprise PostgreSQL Adoption at Firms Like Goldman Sachs in Financial Services]&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon A&amp;amp;B ===&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/confs/PGDAY_NYC_2014.pdf PostgreSQL for Developers]&lt;br /&gt;
* [http://excoventures.com/talks/misc/arin-ha-pgsql.pptx.pdf Building a High-Availability PostgreSQL Cluster]&lt;br /&gt;
* [http://nbviewer.ipython.org/gist/nyamada/9946705 Using Postgres for append-only immutable data]&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:FlexiblePostgreSQLConfiguration.pdf Flexible PostgreSQL Configuration]&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon C ===&lt;br /&gt;
* [http://snowman.net/slides/pgsecurity-pgconfnyc14_20140403.pdf Intro to PostgreSQL Security]&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Achieving_PCI_Compliace_PgConfNYC2014.pdf Achieving PCI compliance with Postgres]&lt;br /&gt;
* [http://www.slideshare.net/mason_s/geographically-distributed-postgresql Geographically Distributed PostgreSQL]&lt;br /&gt;
&lt;br /&gt;
=== Empire Room ===&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Pgconfnyc2014_whenpgcantyoucan.pdf When PostgreSQL Can&#039;t, You Can]&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday April 4, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Keynotes ===&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon A&amp;amp;B ===&lt;br /&gt;
* [http://momjian.us/main/writings/pgsql/central.pdf Making Postgres Central in Your Data Center]&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon C ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/PGExperts/fail-over-failback Fail Over, Fail Back]&lt;br /&gt;
&lt;br /&gt;
=== Empire Room ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/dwsteele/conference/releases/tag/release%2FDatabaseValidationAndVersioning-PGConfNYC2014 Database Validation and Versioning]&lt;br /&gt;
* [http://www.joeconway.com/presentations/plr-PGConfNYC2014.pdf Easy Statistical Analysis in PostgreSQL with PL/R]&lt;br /&gt;
* [http://www.slideshare.net/gavinmroy/integrating-postgresql-with-rabbitmq Integrating PostgreSQL with RabbitMQ]&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Eav-pgconfnyc2014.pdf An Adventure in Data Modeling: The Entity-Attribute-Value Data Model]&lt;br /&gt;
&lt;br /&gt;
=== Lightning talks ===&lt;br /&gt;
* Coming soon!&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PGConf_NYC_2014_Talks&amp;diff=22095</id>
		<title>PGConf NYC 2014 Talks</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PGConf_NYC_2014_Talks&amp;diff=22095"/>
		<updated>2014-04-08T14:54:28Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add Flexible postgresql.conf slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PGConf NYC 2014 Talks =&lt;br /&gt;
&lt;br /&gt;
== Conference Website ==&lt;br /&gt;
&lt;br /&gt;
http://nyc.pgconf.us/2014&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday April 3, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Keynotes ===&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/images/9/9f/PostgreSQL_Keynote_-_GS.pdf Increase Enterprise PostgreSQL Adoption at Firms Like Goldman Sachs in Financial Services]&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon A&amp;amp;B ===&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/confs/PGDAY_NYC_2014.pdf PostgreSQL for Developers]&lt;br /&gt;
* [http://excoventures.com/talks/misc/arin-ha-pgsql.pptx.pdf Building a High-Availability PostgreSQL Cluster]&lt;br /&gt;
* [http://nbviewer.ipython.org/gist/nyamada/9946705 Using Postgres for append-only immutable data]&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:FlexiblePostgreSQLConfiguration.pdf Flexible PostgreSQL Configuration]&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon C ===&lt;br /&gt;
* [http://snowman.net/slides/pgsecurity-pgconfnyc14_20140403.pdf Intro to PostgreSQL Security]&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Achieving_PCI_Compliace_PgConfNYC2014.pdf Achieving PCI compliance with Postgres]&lt;br /&gt;
* [http://www.slideshare.net/mason_s/geographically-distributed-postgresql Geographically Distributed PostgreSQL]&lt;br /&gt;
&lt;br /&gt;
=== Empire Room ===&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Pgconfnyc2014_whenpgcantyoucan.pdf When PostgreSQL Can&#039;t, You Can]&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday April 4, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Keynotes ===&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon A&amp;amp;B ===&lt;br /&gt;
* [http://momjian.us/main/writings/pgsql/central.pdf Making Postgres Central in Your Data Center]&lt;br /&gt;
&lt;br /&gt;
=== Grand Ballroom Salon C ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/PGExperts/fail-over-failback Fail Over, Fail Back]&lt;br /&gt;
&lt;br /&gt;
=== Empire Room ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/dwsteele/conference/releases/tag/release%2FDatabaseValidationAndVersioning-PGConfNYC2014 Database Validation and Versioning]&lt;br /&gt;
* [http://www.joeconway.com/presentations/plr-PGConfNYC2014.pdf Easy Statistical Analysis in PostgreSQL with PL/R]&lt;br /&gt;
* [http://www.slideshare.net/gavinmroy/integrating-postgresql-with-rabbitmq Integrating PostgreSQL with RabbitMQ]&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Eav-pgconfnyc2014.pdf An Adventure in Data Modeling: The Entity-Attribute-Value Data Model]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:FlexiblePostgreSQLConfiguration.pdf&amp;diff=22094</id>
		<title>File:FlexiblePostgreSQLConfiguration.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:FlexiblePostgreSQLConfiguration.pdf&amp;diff=22094"/>
		<updated>2014-04-08T14:52:08Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Flexible PostgreSQL Configuration - Greg Smith - Crunchy Data Solutions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Flexible PostgreSQL Configuration - Greg Smith - Crunchy Data Solutions&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{The PostgreSQL Licence}}&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=20760</id>
		<title>Monitoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Monitoring&amp;diff=20760"/>
		<updated>2013-09-13T13:03:05Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to new Munin setup article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Statistics collector ==&lt;br /&gt;
&lt;br /&gt;
* Official documentation on the [http://www.postgresql.org/docs/current/static/monitoring-stats.html Statistics Collector]&lt;br /&gt;
* [http://www.varlena.com/GeneralBits/107.php Interpreting pg_stat Views]&lt;br /&gt;
&lt;br /&gt;
== Monitoring PostgreSQL with [http://munin-monitoring.org Munin]  ==&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL Plugins developed in Perl are included in the Core Munin Distribution. The following plugins are included by default: postgres_bgwriter, postgres_locks_, postgres_tuples_, postgres_cache_, postgres_querylength_, postgres_users, postgres_checkpoints, postgres_scans_, postgres_xlog, postgres_connections_, postgres_size_, postgres_connections_db, postgres_transactions_.&lt;br /&gt;
* [http://aouyar.github.com/PyMunin/ PyMunin - Multigraph Munin Plugins in Python] - PyMunin includes a Multigraph Munin Plugin for PostgreSQL that implements the following graphs: pg_connections, pg_diskspace, pg_blockreads, pg_xact, pg_tup_read, pg_tup_write, pg_blockreads_detail, pg_xact_commit_detail, pg_xact_rollback_detail, pg_tup_return_detail, pg_tup_fetch_detail, pg_tup_delete_detail, pg_tup_update_detail, pg_tup_insert_detail.&lt;br /&gt;
* [http://highperfpostgres.com/guides/postgresql-monitoring-with-munin/ PostgreSQL Monitoring With Munin].  Detailed setup instructions for common Linux platforms.&lt;br /&gt;
&lt;br /&gt;
== Cacti ==&lt;br /&gt;
&lt;br /&gt;
* [[Cacti]]&lt;br /&gt;
&lt;br /&gt;
== SNMP agent ==&lt;br /&gt;
&lt;br /&gt;
Useful for network management systems which are limited to SNMP protocol.&lt;br /&gt;
&lt;br /&gt;
* [http://pgsnmpd.projects.postgresql.org/ pgsnmpd] implements [http://www.faqs.org/rfcs/rfc1697.html RFC 1697 MIB] which is generic RDBMS MIB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Monitoring|!]]&lt;br /&gt;
[[Category:Performance]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Submitting_a_Patch&amp;diff=20465</id>
		<title>Submitting a Patch</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Submitting_a_Patch&amp;diff=20465"/>
		<updated>2013-07-22T22:30:30Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Update &amp;quot;Mutual Review Obligations&amp;quot; with more details about a properly offsetting review&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Initial patch design ==&lt;br /&gt;
&lt;br /&gt;
If you have a trivial patch that serves an obvious need, you may be able to write the patch and submit it directly to the [http://archives.postgresql.org/pgsql-hackers/ pgsql-hackers] mailing list without having its design reviewed first.  But in general, a non-trivial change should be discussed (potentially before the code is even written) on the [http://archives.postgresql.org/pgsql-hackers/ pgsql-hackers] list before being submitted as a patch.&lt;br /&gt;
&lt;br /&gt;
For general coding style guidelines, see the [[Developer FAQ]] and the [http://developer.postgresql.org/pgdocs/postgres/source.html PostgreSQL Coding Conventions].&lt;br /&gt;
&lt;br /&gt;
=== Design your interface first ===&lt;br /&gt;
&lt;br /&gt;
Ask yourself these questions: &lt;br /&gt;
&lt;br /&gt;
* Will the user interact with this new feature? if so, how? &lt;br /&gt;
* What is the syntax? Have ideas, and the ability to defend technical decisions you believe strongly in.&lt;br /&gt;
* What are the exact semantics/behaviors?&lt;br /&gt;
* Are there any backward compatibility issues? &lt;br /&gt;
* Get community buy-in at this level of detail before you start coding. But not necessarily consensus.&lt;br /&gt;
* Write an opening paragraph to your email to the -hackers list that answers these questions:&lt;br /&gt;
**This is the kind of problem I&#039;m trying to solve&lt;br /&gt;
**This is what it is doing right now&lt;br /&gt;
**This is what it will do.&lt;br /&gt;
&lt;br /&gt;
Mostly, get someone from the community involved in your ideas as early as possible so that you can even get half-baked ideas vetted early, rather than creating something in a vacuum.  Similarly, it&#039;s easier to make progress and keep patches focused if you concentrate on the smallest portion of the idea you can execute perfectly.  Resist the temptation to build a giant patch all at once, as those are much less likely to be reviewed usefully and therefore committed.  You should take a look at how your patch will eventually be [[Reviewing a Patch|reviewed]], so you can make sure that review is likely to succeed.&lt;br /&gt;
&lt;br /&gt;
=== Save us the trouble of reformatting your code ===&lt;br /&gt;
&lt;br /&gt;
Please read [http://developer.postgresql.org/pgdocs/postgres/source.html PostgreSQL Coding Conventions]. Also, follow the style of the adjacent code!  [http://archives.postgresql.org/pgsql-hackers/2009-08/msg01001.php Suggestions from Tom] clarify some of the trickier situations you might run into.  [[Creating Clean Patches]] provides a walkthrough of how to do self-review and improvement of your patches to fix code formatting issues.&lt;br /&gt;
&lt;br /&gt;
Naming things is important, and when in doubt, ask someone else to help you with names. We tend to use [http://en.wikipedia.org/wiki/CamelCase CamelCase] or underscores: thisStyleIsOkay or this_is_okay_too.&lt;br /&gt;
&lt;br /&gt;
Generally, try to blend in with the surrounding code. Do not use #ifdef&#039;s to enable your changes. Comments are for clarification and to explain the &#039;&#039;why&#039;&#039; question, not for delineating your code from the surroundings nor to re-state what the code is doing.&lt;br /&gt;
&lt;br /&gt;
Please remove any spurious whitespace.  &#039;&#039;git diff --color&#039;&#039; makes them stand out like a sore thumb, in red.&lt;br /&gt;
&lt;br /&gt;
== Patch submission==&lt;br /&gt;
&lt;br /&gt;
Once you believe your patch is complete, please read through the complete patch that you will be sending to the mailing list.  Consider what format the patch is in (should be either context or unified) and if it&#039;s easy to read.  Ensure that the patch didn&#039;t mistakenly include unintended changes (such as whitespace changes, test code, #ifdef 0&#039;d out blocks, etc).  The patch should then be submitted via e-mail to the [http://archives.postgresql.org/pgsql-hackers/ pgsql-hackers] mailing list.  At that time, or after you wait for initial feedback, you should also add it to the page for the next [https://commitfest.postgresql.org/ CommitFest].  &lt;br /&gt;
&lt;br /&gt;
Normally changes should be submitted as a single patch that includes every file touched.  If the patch is large and can be logically separated into distinct and separately commit-able sections for easier review, with a clear order they get applied in described when applicable, that can be more straightforward for reviewers to work with for more complicated patches. Patches must be in a format which provides context (eg: [http://en.wikipedia.org/wiki/Diff#Context_format Context Diff]); &#039;normal&#039; or &#039;plain&#039; diff formats are not acceptable.  Ideally, patch authors should choose the context (diff -c) format or unified (diff -u) format based on which format makes their patch easier to read. See [[Working_with_Git#Context_diffs_with_Git|Working with git]] and [[Creating Clean Patches]] for ways to do this well. [http://petereisentraut.blogspot.com/2009/09/how-to-submit-patch-by-email.html How to submit a patch by email] for more details about mailing in patches.  If you&#039;re a new submitter, the suggestion there about using your judgment on patch formatting is not a recommended practice however--you should be using the standard context  diff format.&lt;br /&gt;
 &lt;br /&gt;
Please note that PostgreSQL uses a BSD/MIT-style license for its code. By posting a patch to the public PostgreSQL mailing lists, you are giving the PostgreSQL Global Development Group the non-revocable right to distribute your patch under the [http://www.postgresql.org/about/licence/ PostgreSQL license].&lt;br /&gt;
&lt;br /&gt;
Please include all of the following information with each patch submitted&lt;br /&gt;
&lt;br /&gt;
* Project name.&lt;br /&gt;
* Uniquely identifiable file name, so we can tell difference between your v1 and v24.&lt;br /&gt;
* What the patch does in a short paragraph.&lt;br /&gt;
* Whether the patch is for discussion or for application (see WIP notes below)&lt;br /&gt;
* Which branch the patch is against (ordinarily this will be &#039;&#039;master&#039;&#039;).  For more on branches in PostgreSQL, see [[Working_with_Git#Using_Back_Branches|Using Back Branches]].&lt;br /&gt;
* Whether it compiles and tests successfully, so we know nothing obvious is broken.&lt;br /&gt;
* Whether it contains any platform-specific items and if so, has it been tested on other platforms.&lt;br /&gt;
* Confirm that the patch includes [[Regression test authoring|regression tests]] to check the new feature actually works as described.&lt;br /&gt;
* Include documentation on how to use the new feature, including examples.  See the [http://www.postgresql.org/docs/current/static/docguide.html documentation documentation] for more information.&lt;br /&gt;
* Describe the effect your patch has on performance, if any.  &lt;br /&gt;
* Try to include a few lines about why you chose to do things particular ways, rather than let your reviewer guess what was happening. This can be done as code comments, but it might also be an additional reviewers&#039; guide, or additions to a README file in one of the code directories.&lt;br /&gt;
* If your patch addresses a [[Todo]] item, please give the name of the Todo item in your email.  This is so that the reviewers will know that the item needs to be marked as done if your patch is applied.&lt;br /&gt;
&lt;br /&gt;
It is helpful for early patches, ones not intended to be of commit quality, to be labeled clearly as such so that the appropriate style of review is done.  The abbreviation WIP (&amp;quot;Work in Progress&amp;quot;) is the standard shorthand to attach to patches intended for review not as a commit candidate, but for design feedback.  Labeling your patch as a WIP on your e-mail subject line and on the matching description in the CF application will advise reviewers to focus more on the general approach, rather than on things like coding style that can normally be ignored in the early portion of a patch&#039;s lifecycle.&lt;br /&gt;
&lt;br /&gt;
=== Reasons your patch might be returned ===&lt;br /&gt;
&lt;br /&gt;
Submitting the patch is just the first step towards getting it committed. Very few patches are committed exactly as originally submitted, even those submitted by experienced professional developers. For any non-trivial patch you should plan for at least 3 versions before final acceptance.&lt;br /&gt;
&lt;br /&gt;
There are a few common reasons patches are returned without getting the review consideration the submitter was hoping for:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The fastest way to get your patch rejected is to make unrelated changes&#039;&#039;&#039;.  Reformatting lines that haven&#039;t changed, changing unrelated comments you felt were poorly worded, touching code not necessary to your change, etc. Each patch should have the minimum set of changes required to work robustly.  If you do not follow the code formatting suggestions above, expect your patch to be returned to you with the feedback of &amp;quot;follow the code conventions&amp;quot;, quite likely without any other review.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Consider how the patch would be reviewed&#039;&#039;&#039;.  The things a reviewer will evaluate are listed in [[Reviewing a Patch]].  You should look at this list and consider if you will pass it before submission.  We recommend that new code contributors first spend time doing review, so that you will already be familiar with this list and process.  The review guidelines are used because they work; doing your own self-review before submitting your patch is recommended.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance gain is claimed without test case&#039;&#039;&#039;.  Performance patches are fun to write but hard to validate.  If the patch is intended to improve performance, it&#039;s a good idea to include some reproducible tests to demonstrate the improvement.  If a reviewer cannot duplicate your claimed performance improvement in a short period of time, it&#039;s very likely your patch will be returned.  Do not expect that a reviewer is going to find your performance feature so interesting that they will build an entire test suite to prove it works.  You should have done that as part of patch validation, and included the necessary framework for testing with the submission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Did not include documentation or regression tests&#039;&#039;&#039;.  Any patch without these two items is automatically considered a WIP one--you might get review of your patch, but do not expect it to be committed.  See [[Regression test authoring]] for more information about how to write these tests.  Documenting the design at a high level in your submission e-mail is also recommended.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failed to address earlier criticisms of this design&#039;&#039;&#039;.  Many patches try to do things that have been tried or considered before, where the earlier discussion found a problem with the obvious approach.  Not saying how your new submission addresses those issues suggests you have the same problems.  The [[Todo|todo list]] is a good source for finding past discussion of ideas for patches.&lt;br /&gt;
&lt;br /&gt;
The objective of all of these suggested items is to ensure that the reviewer&#039;s time is not wasted. You spent time writing the code, but that does &#039;&#039;&#039;not&#039;&#039;&#039; mean you can demand time, energy and interest from a reviewer. Follow these guidelines and become familiar with the review process.  Make it easy on yourself and others so that your patch is accepted quickly, easily and with good humor on all sides.&lt;br /&gt;
&lt;br /&gt;
The presentation [http://www.pgcon.org/2011/schedule/events/303.en.html How To Get Your PostgreSQL Patch Accepted] provides some additional suggestions for how to submit a patch that will be considered more seriously.&lt;br /&gt;
&lt;br /&gt;
=== Submission timing ===&lt;br /&gt;
&lt;br /&gt;
To improve the odds of the right discussion of your patch or idea happening, pay attention to what the community work cycle is.  If for example you send in a brand new idea in the beta phase, don&#039;t be surprised if no one is paying attention because they are focused on release work.  Come back when the beta is done, please!&lt;br /&gt;
&lt;br /&gt;
PostgreSQL development is organized with periodic [[CommitFest|CommitFests]], which are periods where new development halts in order to focus on patch review and committing.  It&#039;s best if you can avoid sending in a new patch during the occasional weeks when there is an active CommitFest; you can check the schedule via the [https://commitfest.postgresql.org/ CommitFest application].  If your schedule doesn&#039;t allow waiting until an active CommitFest is over, you should explicitly label your submission as intended for the next CommitFest, not the current one, so that it&#039;s clear it&#039;s not intended to be part of the active review process.&lt;br /&gt;
&lt;br /&gt;
== Patch review and commit ==&lt;br /&gt;
&lt;br /&gt;
There&#039;s basically three different workflows a patch can follow after it&#039;s been submitted that lead to it being commited:&lt;br /&gt;
&lt;br /&gt;
Workflow A:&lt;br /&gt;
# You post patch to pgsql-hackers&lt;br /&gt;
# A committer picks it up immediately and commits it.&lt;br /&gt;
&lt;br /&gt;
Workflow B:&lt;br /&gt;
# You post a patch to pgsql-hackers&lt;br /&gt;
# You add the patch to the [http://commitfest.postgresql.org/action/commitfest_view/open open commitfest] queue&lt;br /&gt;
# A committer picks up the patch from the queue, and commits it&lt;br /&gt;
&lt;br /&gt;
Workflow C:&lt;br /&gt;
# You post a patch to pgsql-hackers&lt;br /&gt;
# Bruce adds the patch to a list of unapplied patches&lt;br /&gt;
# At the beginning of the next commit fest, Alvaro (with the help from others, I hope) goes through the list, and adds the patch to the [http://commitfest.postgresql.org/action/commitfest_view/open open commitfest] queue&lt;br /&gt;
# A [[Committers|committer]] picks up the patch from the queue, and commits it&lt;br /&gt;
&lt;br /&gt;
At any of these stages, your patch might instead be rejected for technical, style, or other reasons.  These rejections will normally come with feedback on whether an improved version of that patch would be more acceptable.  In those cases, you should consider updating your patch based on that feedback and re-submit.&lt;br /&gt;
&lt;br /&gt;
== Mutual Review Offset Obligations ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is a community project which relies on peer review.  Each patch submitter to a CommitFest is expected to review at least one other patch.  Ideally the patch selected for mutual review will be of similar size and/or scope to the one submitted.  Someone who submits a feature that&#039;s thousands of lines long can&#039;t just review a tiny submission by someone else and expect the community to be satisfied.  The idea is similar to the &amp;quot;offset&amp;quot; concept used for balancing gas emissions.&lt;br /&gt;
&lt;br /&gt;
This policy permits the project to review, accept, reject, or return feedback on each patch in a timely fashion.  Few other open source projects provide such a guarantee for processing submissions.  Failure to participate in the review process means the PostgreSQL community can&#039;t promise you review and feedback of your own patches.  Actively reviewing another patch during the CommitFest also helps keeps contributors engaged, so that they can process feedback on their submission.  Very few submissions are committed without first going through feedback and revisions during a CommitFest.&lt;br /&gt;
&lt;br /&gt;
For paid contributors to PostgreSQL, this policy means that you should make it clear to your sponsor that doing patch review is an obligation.  When time is budgeted and the schedule laid out for developing a new feature for submission to the PostgreSQL project, that should include review resources for another feature as a necessary part of its overhead.&lt;br /&gt;
&lt;br /&gt;
== Followup on submissions ==&lt;br /&gt;
&lt;br /&gt;
=== How do you get someone to respond to you? ===&lt;br /&gt;
&lt;br /&gt;
You&#039;ve sent an email to -hackers and no one has responded. What do you do?&lt;br /&gt;
&lt;br /&gt;
* Make sure you&#039;ve added your patch to the [http://commitfest.postgresql.org/action/commitfest_view/open open commitfest] queue.&lt;br /&gt;
* Start out by reviewing a patch or responding to email on the lists. Even if it is unrelated to what you&#039;re doing.&lt;br /&gt;
* Start with submitting a patch that is small and uncontroversial to help them understand you, and to get you familiar with the overall process.&lt;br /&gt;
* People are more willing to listen and work with someone who is already contributing.&lt;br /&gt;
* Also, in our community -- if no one objects, then there is implicit approval. Within reason!&lt;br /&gt;
&lt;br /&gt;
Participating in community is a process, not a single event.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch updates ===&lt;br /&gt;
&lt;br /&gt;
When submitting a new version of a previously submitted patch, you should do a few additional things:&lt;br /&gt;
&lt;br /&gt;
* Uniquely identify the new version, usually done via an incremented suffix on the name of the patch.  First review would be &#039;&#039;mypatch-v1.patch&#039;&#039;, second &#039;&#039;mypatch-v2.patch&#039;&#039;, etc.  Using the &amp;quot;.patch&amp;quot; extension allows some reviewers to more easily read it in their code editor.&lt;br /&gt;
&lt;br /&gt;
* Make sure it&#039;s easy to find any earlier discussion of the patch.  Don&#039;t expect that everyone will still be able to find previous submissions on their own.  Either fully duplicate the information about the patch from your original messages, or provide a clear link to the earlier message via the [http://archives.postgresql.org/pgsql-hackers/ archives].  Note that you can link to your earlier post using the e-mail message ID of what you sent earlier, perhaps by checking your sent e-mail for it.  That type of link is preferred because links to the archive by message number might sometimes get renumbered.  See [[Template:MessageLink]] for more details.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Reliable_Writes&amp;diff=20065</id>
		<title>Reliable Writes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Reliable_Writes&amp;diff=20065"/>
		<updated>2013-06-09T02:45:55Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to plug pull test page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Databases have many levels of read and write caches they use.  There&#039;s the database&#039;s own dedicated memory (shared_buffers), the operating system cache, potentially a disk controller cache (typical on a RAID card), and caches on each individual hard drive.  PostgreSQL expects some of these caches to work effectively in order to obtain good performance.  But periodically, the database issues a synchronous write request:  requesting that something must be committed to disk before the database can proceed.  If any of those writes say they are successful to the database, but the data is not really safe, database corruption can be expected if there is a server crash for any reason.  Software bug, power outage, UPS failure, accidentally unplugging the server, any of these things can lead to a corrupted database that will not start normally if your system has unsafe writes.&lt;br /&gt;
&lt;br /&gt;
There is a good diagram of how all these levels of caching fit together at [http://momjian.us/main/writings/pgsql/hw_selection.pdf  Database Hardware Selection Guidelines] (PDF, Bruce Momjian)&lt;br /&gt;
&lt;br /&gt;
The recommended way to test reliability of all the caches on a server is with [http://highperfpostgres.com/disk-plug-pull-testing/ Disk Plug Pull Testing].  A plug pull test that fails is always accurate, but passing such a test cannot guarantee unsafe writes are impossible.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
This page lists articles about this topic that include a mix of theory and practical recommendations about how to setup a reliable system that doesn&#039;t have this sort of problem after a crash:&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/wal-reliability.html Reliability]:  from the official documentation&lt;br /&gt;
* [https://www.packtpub.com/sites/default/files/0301OS-Chapter-2-Database-Hardware.pdf Database Hardware] (PDF):  Chapter on general hardware selection, introduces write-back vs. write-through caching terminology and notes about issues with SSD writes. (Greg Smith)&lt;br /&gt;
* [https://www.packtpub.com/article/server-configuration-tuning-postgresql Server Configuration Tuning]:  lists things to be aware of when setting wal_sync_method, as well as warnings about settings changes that can make your server unsafe--fsync, full_page_writes, and synchronous_commit  (Greg Smith)&lt;br /&gt;
* [http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm Tuning PostgreSQL WAL Synchronization]:  background about the topic of drives that handle writes unsafely and how this impacts PostgreSQL writes. (Greg Smith)&lt;br /&gt;
&lt;br /&gt;
== Known problem hardware ==&lt;br /&gt;
&lt;br /&gt;
* The first and second generation Intel SSD drives such as the Intel X25-E will write unsafely, and this behavior is impossible to fix without serious impact to both the speed and longevity of the drive.  See [http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/ SSD, XFS, LVM, fsync, write cache, barrier and lost transactions] (Vadim Tkachenko) for an introduction.  Their consumer drives such as the X-25-M G2 have been reported to be [http://evanjones.ca/intel-ssd-durability.html even worse] (Evan Jones).  The 3rd generation Intel 320 and 710 series drives do not have any of these problems, having added a capacitor to provide battery-backup for flushing the drive cache when power drops.&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]][[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Planet_PostgreSQL&amp;diff=20061</id>
		<title>Planet PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Planet_PostgreSQL&amp;diff=20061"/>
		<updated>2013-06-06T18:37:51Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add &amp;quot;Can I offer free or discounted products to people?&amp;quot;&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&#039;s possible to login to the administration interface and hide an individual entry.  If you realize you&#039;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&#039;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&#039;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&#039;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;
=== Can I offer free or discounted products to people? ===&lt;br /&gt;
&lt;br /&gt;
Not as your only post content.  An article that otherwise meets the standards here, by providing useful information to readers with no interest in the commercial product mentioned, might also include some commercial offer like a free product in them.  But promotions like product giveaways or providing a discount to blog readers are not acceptable on their own.  You might consider the offer itself informative, but the moderators of the Planet feed will usually judge it to be advertisement.  Blog entries offering to give away something for free or at a reduced cost are very likely to be flagged as a violation of 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>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2013_Developer_Meeting&amp;diff=19822</id>
		<title>PgCon 2013 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2013_Developer_Meeting&amp;diff=19822"/>
		<updated>2013-05-22T22:06:45Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Moar goals and resources!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 22nd May, 2013 near the University of Ottawa, prior to pgCon 2013. In order to keep the numbers manageable, this meeting is &#039;&#039;&#039;by invitation only&#039;&#039;&#039;. Unfortunately it is quite possible that we&#039;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;
Please note that this year the attendee numbers have been kept low in order to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.3 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&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 8:30AM to 5PM, and will be in the &amp;quot;Red Experience&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 (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Josh Berkus (secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Peter Eisentraut&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Andres Freund&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Alexander Korotkov&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Fujii Masao&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (chair)&lt;br /&gt;
* Simon Riggs&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;
* 9.4 Commitfest schedule and Commitfest tools.&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/Parallel_Query_Execution Parallel Query Execution] (Bruce, Noah)&lt;br /&gt;
* logical changeset generation review &amp;amp; integration (Andres)&lt;br /&gt;
* utilization of upcoming non-volatile RAM device (Kaigai)&lt;br /&gt;
* pluggable plan/exec nodes (Kaigai)&lt;br /&gt;
** to offload targetlist calculation, sorting, aggregates, ...&lt;br /&gt;
* [[GIN generalization]] (Alexander)&lt;br /&gt;
* An Extensibility Roadmap (dim) (http://pgsql.tapoueh.org/temp/extensibility.pdf) (15 min)&lt;br /&gt;
* Representing severity - derive severity from SQLSTATE (Peter Geoghegan - see http://www.postgresql.org/message-id/CA+TgmoZEjq7va+SfDZQwk6E4emEWThENNyxfqEGhB3iuoT1OJw@mail.gmail.com) (10 min)&lt;br /&gt;
* Error logging infrastructure - store normalized statistics about errors in a circular buffer (Peter Geoghegan). Arguably this could be discussed alongside SQLSTATE item. (10 min)&lt;br /&gt;
* Failback with backup (Fujii Masao - related discussion is: http://www.postgresql.org/message-id/CAF8Q-Gxg3PQTf71NVECe-6OzRaew5pWhk7yQtbJgWrFu513s+Q@mail.gmail.com)&lt;br /&gt;
* Volume Management (Stephen Frost - wiki page will be forthcoming before the meeting)&lt;br /&gt;
* AXLE Project - Big data analytics for Postgres (Simon Riggs) - an overview of the feature plan, how project works and what community can expect (15 min)&lt;br /&gt;
* Incremental maintenance of materialized views (Kevin) - differential REFRESH and infrastructure for &#039;&#039;counting&#039;&#039; algorithm (30 min)&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:30 - 08:45&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:45&lt;br /&gt;
|Parallel Query Execution&lt;br /&gt;
|Bruce/Noah&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:45 - 10:15&lt;br /&gt;
|Pluggable plan/exec nodes&lt;br /&gt;
|KaiGai&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|10:15 - 10:30&lt;br /&gt;
|Volume Management&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;
|-&lt;br /&gt;
|10:45 - 11:00&lt;br /&gt;
|Utilization of upcoming non-volatile RAM devices&lt;br /&gt;
|KaiGai&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:00 - 11:30&lt;br /&gt;
|Logical changeset generation review &amp;amp; integration&lt;br /&gt;
|Andres&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:30 - 11:40&lt;br /&gt;
|Representing severity&lt;br /&gt;
|Peter G.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:40 - 11:50&lt;br /&gt;
|Error logging infrastructure&lt;br /&gt;
|Peter G.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:50 - 12:30&lt;br /&gt;
|Incremental maintenance of materialized views&lt;br /&gt;
|Kevin&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;
&lt;br /&gt;
|-&lt;br /&gt;
|13:30 - 14:15&lt;br /&gt;
|GIN generalization&lt;br /&gt;
|Alexander&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:15 - 14:30&lt;br /&gt;
|An Extensibility Roadmap&lt;br /&gt;
|Dimitri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:30 - 15:00&lt;br /&gt;
|Failback with backup&lt;br /&gt;
|Fujii&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;
|-&lt;br /&gt;
|15:15 - 15:45&lt;br /&gt;
|9.4 Commitfest schedule and tools&lt;br /&gt;
|Josh&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15:45 - 16:45&lt;br /&gt;
|Goals, priorities, and resources for 9.4&lt;br /&gt;
|All&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&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;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Attending:&lt;br /&gt;
&lt;br /&gt;
* Dave Page, EnterpriseDB&lt;br /&gt;
* Andres Freund, 2ndQuadrant&lt;br /&gt;
* Kevin Grittner, EnterpriseDB&lt;br /&gt;
* Dimitri Fontaine, 2ndQuadrant&lt;br /&gt;
* Andrew Dunstan, PostgreSQL Experts&lt;br /&gt;
* Noah Misch, EnterpriseDB&lt;br /&gt;
* Bruce Momjian, EnterpriseDB&lt;br /&gt;
* Fujii Masao, NTT Data&lt;br /&gt;
* Tom Lane, Salesforce&lt;br /&gt;
* Magnus Hagander, Redpill Linpro&lt;br /&gt;
* Robert Haas, EnterpriseDB&lt;br /&gt;
* Josh Berkus, PostgreSQL Experts&lt;br /&gt;
* Kaigai Kohei, NEC&lt;br /&gt;
* Jeff Davis, Teradata&lt;br /&gt;
* Alexander Korotkov&lt;br /&gt;
* Peter Geoghegan, Heroku&lt;br /&gt;
* Peter Eisentraut, Meetme&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
&lt;br /&gt;
=== Parallelism ===&lt;br /&gt;
&lt;br /&gt;
Bruce Momjian is looking at where Postgres is and hardware changes, and it&#039;s time to look at parallelism.  Unlike the Windows port and pgUpgrade, there&#039;s no clear &amp;quot;done&amp;quot; with Parallelism.  We&#039;re going to have to do a lot of small things, but not one big feature.  Concern anout code cleanliness and stability.  What is going to have to happen is that we&#039;ll attack one small thing, and build the infrastructure for parallelism.&lt;br /&gt;
&lt;br /&gt;
Robert Haas is talking about EnterpriseDB&#039;s commitment to parallelism.  The two things EDB wants is materialized views and parallel query.  The way we&#039;re approaching this is the same way as 2Q approached logical replication for the last release cycle.  We&#039;re doing this as a company, and we have buy-in from our management.  So far there&#039;s a wiki page on parallel sort and Noah&#039;s posted some stuff to pgsql-hackers.  The first part is to get a credible worker system in place, and then we can tackle parallelising particular things.&lt;br /&gt;
&lt;br /&gt;
Stephen Frost pointed out that users are currently ad-hoc implementing parallelism in their middleware code.  Bruce said that there was a basic set of steps for all parallel tasks.  There&#039;s a false sense that threads automatically give you infrastructure for parallelism.  Bruce doesn&#039;t think that&#039;s true.  Having the worker/marshalling stuff sprinkles all over the code would be really bad, so we want central infrastructure.&lt;br /&gt;
&lt;br /&gt;
Jeff Davis pointed out that there were different approaches to parallelism.  One is &amp;quot;cluster parallelism&amp;quot;.  Do we know what approaches were taking?  Cluster parallelism involves making the parallel tasks according to data partitions.  It&#039;s popular in data warehousing.  Robert Haas doesn&#039;t expect to get that far in one release cycle.&lt;br /&gt;
&lt;br /&gt;
Haas: People come up with great ideas for PostgreSQL, and they do two things: either they figure out how to do it without modifing the query planner, or they fail.  So we looked at index building, which wouldn&#039;t require dealing with the query planner.  But the general problem of parallel query planning, we have to solve harder problems.  I don&#039;t want to get bogged down in those sorts of questions at the outset, because there&#039;s a bunch of stuff to get done to execute parallel jobs in general.&lt;br /&gt;
&lt;br /&gt;
Josh Berkus suggested implementing a framework for parallel function execution because then users could implement parallel code for themselves. It would help the Geo folks.  Noah thinks this is possible today, but isn&#039;t specific how.  Tom argues against exposing it to users in early iterations because the API will change.&lt;br /&gt;
&lt;br /&gt;
There&#039;s a few things you need:&lt;br /&gt;
* and efficient way for passing data to the parallel backends, probably using a shared memory facility, because sockets are too slow.&lt;br /&gt;
* some logic for starting and stopping worker processes.  Custom background workers aren&#039;t quite what we need for this.  Also different from Autovacuum, which is a bit kludgy.&lt;br /&gt;
* you need to be able to do stuff in the worker processes as if they were the parent process.  They need to share the parent worker&#039;s state, and there are a lot of state things which are not shared.  If the master takes new snapshots or acquires extra XIDs, not sure how to share that.  Some things will need to be prohibited in parallel mode.  Threads don&#039;t solve this.  Syscache lookups are also a problem, but we need them.&lt;br /&gt;
&lt;br /&gt;
Noah wants to target parallel sort, specifically parallel memory sort.  This hits a lot of the areas we need to tackle to make parallelism work in general.  We need a cost model as well.  How are we going to mark the functions which are safe to run in a parallel worker.  We don&#039;t want to just call functions *_parallel because that will change.  Maybe there will be an internal column in pgproc, as a short-term solution.&lt;br /&gt;
&lt;br /&gt;
Peter E. asked about timeline.  For 9.4, we want to at least have an index build which runs a user-specified amount of parallelism.  It needs to be reasonably fast.&lt;br /&gt;
&lt;br /&gt;
Peter G. asked about having a cost model for parallelism.  Right now we don&#039;t have costing for how long it takes to sort things based on the number of rows.  Sorting a text column in bad collation can be 1000X as expensive as sorting integers, for example.  We might pick a single operator and make that the cost reference operator.  Perfect costing isn&#039;t possible, but we can do some approximates.  The initial operations we choose for parallelism will be very long operations.  Startup costs are too high otherwise.  We&#039;re not going to parallelize something that&#039;s 200ms.  Something that takes 10s or a minute or a couple minutes.&lt;br /&gt;
&lt;br /&gt;
Haas thinks that a lot of people will be appalled for starting up a parallel worker.  That can be optimized later.  It&#039;s OK for the initial version to be unoptimized.  Even if it takes a full second to start up a new backend, there are sorting tasks which take large numbers of seconds.  Those are existing issues which we&#039;ll hammer on as we get into this space; we may fix starting up a new connection speed in the process.&lt;br /&gt;
&lt;br /&gt;
Josh pointed out that taking a hour to build an index, it&#039;s probably an external sort.  Noah posted a patch to allow larger internal sorts, over 1GB.  Andrew pointed out that a process model would tie us to certain large operations.  Threads would add a lot of overhead to everything, though.  We&#039;d have to rewrite palloc.  Haas things we can get the minimum unit down to something fairly small.  Andrew pointed out that on windows process creation is very expensive.  Haas doesn&#039;t want rewrite the entire internal infrastructure.&lt;br /&gt;
&lt;br /&gt;
With Threads, everything is shared by default, with processes, everything is unshared by default.  The process model and explicit sharing is a shorter path from where we are currently.  Parallelism helps with CPU-bound processes, but not IO.  Josh argued with Kevin that there are some types of storage where this isn&#039;t true.  Kevin just pointed out that if the resource you&#039;re using the most of isn&#039;t bottlenecked, then it&#039;s not helpful to parallelize.  Haas pointed out that parallelizing seq scan on a single rotating disk won&#039;t help, as opposed to parallelizing scan from memory, which would be much faster.  Our cost model isn&#039;t up to this; we might even have to have a recheck model where the executor notices things are slow and switches approaches.&lt;br /&gt;
&lt;br /&gt;
Bruce pointed out how Informix switched to threads between 5 and 7 and it killed the database.  Parallelism will take Postgres into new markets.&lt;br /&gt;
&lt;br /&gt;
Andrew pointed out that prefork backends will help us form new connections if we can get it to work.  Haas pointed out that we&#039;re going to have to cut nonessential issues to avoid taking forever.&lt;br /&gt;
&lt;br /&gt;
=== Pluggable plan/exec nodes ===&lt;br /&gt;
&lt;br /&gt;
Kaigai is working on GPU execution.  When he worked on writable FDW, pseudo-column approach for foreign scan node returning an already computed value, but that was rejected, because the scan plan needs to return the data structure as its definition.  So Kaigai wants to add an API to add a plan node to the exeuction node, allowing executor to run extension code during query execution.  When plan tree tries to scan large table with sequential scan, and the target list has a complex calculation, we can have a pseudo-column which does this calculation on a GPU.&lt;br /&gt;
&lt;br /&gt;
Kaigai is talking about planner and executor.  Haas doesn&#039;t understand how we would have pluggable planner nodes, as opposed to executor nodes.  How would you allow it generate completely new types of plan nodes?  We can replace existing plan nodes, but new types of nodes would require a new extensibility infrastructure.  To do this, we need two new infrastructures to inject plan nodes and executor nodes.  But Kaigai is mainly focused on is replacing existing scans and sort nodes.  He didn&#039;t investigate the difficulty on planner extension yet.&lt;br /&gt;
&lt;br /&gt;
Peter E. pointed out that 65% of the work will be the ability to add new nodes at all.  Replacement will be MUCH easier.  However, the ability to add new nodes would be very useful to PostgreSQL in general.  Tom thinks that it could be done.  Haas pointed out that we have a lot of wierd optimizations about what plan node connects to which other plan node.  Tom doesn&#039;t think that we have that many. Noah says we&#039;ll probably use a hook.&lt;br /&gt;
&lt;br /&gt;
For a new executor node we have a dispatch table, it&#039;s easy.  Plan nodes could use a jump table too.  Right now we have function volatility markers; for nodes we&#039;ll need the same thing.  But that&#039;s a problem only for expression nodes.&lt;br /&gt;
&lt;br /&gt;
This was discussed in the cluster meeting.  PostgresXC wanted pluggable nodes for cluster scan, as do some other people.  So a general pluggability infrastructure would be good.  If we have pluggable scan nodes, we can plug in cluster scan as well as GPU scan.&lt;br /&gt;
&lt;br /&gt;
Jeff Davis pointed out that range join could be our first pluggable node.  Haas pointed out that opclass support requirements might make it difficult; there are easier cases.  Range join might need to be hardcoded.  Pluggable planner stuff is hard.&lt;br /&gt;
&lt;br /&gt;
This would also maybe get people who fork Postgres to stay closer to the core project and implement extensions instead of having an incompatible fork which then doesn&#039;t work with others.&lt;br /&gt;
&lt;br /&gt;
=== Volume Management ===&lt;br /&gt;
&lt;br /&gt;
Right now we have tablespaces.  Having some more automation around using them would help.  Like we want the indexes on a separate tablespace from the heap; there ought to be automation for this.  Somebody hacked up something like this ... maybe Depesz, in 2007.&lt;br /&gt;
&lt;br /&gt;
Haas asked if having indexes on a separate volume was actually faster.  Frost asserted that it was.  Josh brought up that with new small fast storage there&#039;s reasons to want stuff to move around again.  Also, index-only scans.  If I only have one column, then I can do index-only scans, so I want to put the index on faster storage.  Josh pointed out that indexes-separate worked back when at OSDL.&lt;br /&gt;
&lt;br /&gt;
Stephen Frost pointed out that they have pairs of drives, with a whole lot of pairs.  Stephen asked about whether or not we&#039;ll ever have things like Oracle Volumes.  Kevin said that that configuration works on raw devices, but not so much on complex filesystems.  FRost says that for specific workloads, it really works to parallelize everything for massive joins.&lt;br /&gt;
&lt;br /&gt;
Several people asserted that modern RAID is fairly efficient.  Josh asked if any default automated rules would work for a general class.&lt;br /&gt;
&lt;br /&gt;
Frost explained Oracle Volumes.  They can be used to go to raw drives.  Volumes are disks or drives or files.  You can have multiple volumes under a single tablespace, and Oracle will manage them together.  Do we want to do that?  Maybe we should just use LVM.&lt;br /&gt;
&lt;br /&gt;
There&#039;s also some other things we could do with volumes, like compressed volumes.  Noah has seen tablespaces abused 5 times as much as used properly.  We should be careful that what we&#039;re adding is really useful.  People want things like encrypted &amp;amp; compressed tablespaces.  Every time something like this comes up, Tom or someone says &amp;quot;use a filesystem which provides that.&amp;quot;  There are some advantages to having the database do that, but there&#039;s a lot of development effort.&lt;br /&gt;
&lt;br /&gt;
Noah suggested that event triggers would do this.  Frost says that they already have code, they want to simplify it.  Josh points out that there aren&#039;t simple rules for this; most DWs don&#039;t have rules which are as simple as &amp;quot;indexes go here, tables go there&amp;quot;.  A lot of this is misplaced Oracle knowledge.  Josh brought up the backup issue again.&lt;br /&gt;
&lt;br /&gt;
=== Utilization of upcoming non-volatile RAM devices ===&lt;br /&gt;
&lt;br /&gt;
Kagai is just presenting an idea and asking for opinions.  Wants to consider the impact of these new devices.  Wants to boost the performance to write the transaction logs.  Once we have mmaped to the nvram device, then we can consider that completion of log writing.  Non-volatile ram will be exposed as main memory.  There are Linux patches which allows mmaping to these devices.  Once we have these devices, it dramatically reduces the overhead to write the transaction log.&lt;br /&gt;
&lt;br /&gt;
Kaigai said that this topic comes from the forks on ram storage devices.  We wanted improvement of row-writing performance.  Also appliable for general fast SSD storage.  Wants to add fork around row-writing and create extensions where we maybe have nvram and mmapped region for the xlog.&lt;br /&gt;
&lt;br /&gt;
Josh points out that this dovetails with transactional memory, which allows lock exchange for multiple K of data and multiple instruction. Like we might not need as much from the WAL.  Others disputed that.&lt;br /&gt;
&lt;br /&gt;
Kaigai wants to implement this for the write-ahead log.  Then later we can look at the heap.  NVRam has limited write cycles, so we don&#039;t want to use it for main storage.  &lt;br /&gt;
&lt;br /&gt;
=== Logical changeset generation review &amp;amp; integration ===&lt;br /&gt;
&lt;br /&gt;
Andres gave a progress report on current status of the changeset generation patch.  It&#039;s mostly done, but we need to integrate it and it needs substantial review.  He needs someone to help, not from 2Q -- someone independant.  How can he proceed to get the pieces into core?&lt;br /&gt;
&lt;br /&gt;
Haas suggested that they could swap for review on parallel query.  The patch is currently about 12,000 lines.  Peter G says he can take a shot at it, but he wants someone else.&lt;br /&gt;
&lt;br /&gt;
Frost asked how much was additional stuff there is vs. changes to existing behavior.  There&#039;s new kinds of TOAST tuples.  There&#039;s mapping relfilenode back to the OID, which is controversial.  Andres says that it&#039;s safe the way they do it, and if it&#039;s broken in logical replication then it&#039;s already broken in Hot Standby, so we should fix it.  There&#039;s some changes to heapam.c, like preventing full page writes from removing the tuple contents.&lt;br /&gt;
&lt;br /&gt;
Haas points out that Heikki objects to most of the functionality in core.  Andres says that he can reduce complexity in some areas.  Noah says that having zero implications for nonusers it can&#039;t possibly work.  If it&#039;s a good thing, we&#039;re going to have to accept some code complexity cost to do it.&lt;br /&gt;
&lt;br /&gt;
The write-ahead log currently is designed to do crash recovery.  We&#039;ve pushed that for hot standby and PITR, but this is pushing it even further, we&#039;re adding another level of pain.  TOAST tuples are a good example of this; how we crash recover them doesn&#039;t work for logical replication.  To what extent do we use the WAL format we have now, and how much do we modify it?  What&#039;s the performance cost?&lt;br /&gt;
&lt;br /&gt;
Some things don&#039;t need much intervention.  But we have to look up stuff in the catalogs, and do catalog time travel to figure out what the object references mean.  Peter E asked about simply creating a completely separate log for logical replication.  Andres says that the tried this, but it had a huge extra cost, because you have to add a whole bunch of extra data to it.  That would double synchronous writes, at least.  So are we not going to investigate this?  The logical replication stream would need to include catalog updates.&lt;br /&gt;
&lt;br /&gt;
Haas points out that the kludges for this aren&#039;t as bad as hot standby.  Magnus points out that MySQL has to do 2PC between the binlog and the innodb log.  But a lot of people are going to want this feature.&lt;br /&gt;
&lt;br /&gt;
Steve Singer has written 80% of the code for basing Slony on LCR.  2Q is also working on their own replicated solution for this.&lt;br /&gt;
&lt;br /&gt;
So the other modification we need to deal with xmin for pg_catalog and user tables differently.  But this had some benefits for general Postgres efficiency.  Can we split this up at all?  The earlier patches can be reviewed separately.&lt;br /&gt;
&lt;br /&gt;
One other thing we devised for this is logical replication slots.  You need to know where readers last left off.  We could maybe use this for binary replication as well.  You can decode on a hot standby, not just on a master.  Primary key updates are handled.  We only have the TOAST tuples if they change, though.  We have before images, but they have some limitations.  Kevin asked about rolling backwards to an earlier state.&lt;br /&gt;
&lt;br /&gt;
Haas will review some of the patch, but not the whole thing.  We had the same issue with streaming replication, not enough reviewers.  Haas would like to get it done early in the first commitfest. Andres will submit but is not sure we can commit it in the first round.&lt;br /&gt;
&lt;br /&gt;
=== Representing Severity ===&lt;br /&gt;
&lt;br /&gt;
Peter G. agitated about that there&#039;s no principled way to discover whether a &amp;quot;severe&amp;quot; error occurs, such as corruption from errors in xlog.c.  There&#039;s no way that DBAs can confirm that an error of particular severity has occured, except grepping for particular strings.  There&#039;s multiple distinctions here.  Such as there are various &amp;quot;can&#039;t happen&amp;quot; errors which our developers want to see as soon as possible. Heroku also wants to bring errors to the attention of the lists automatically.  The tail-n-mail approach is not scalable.&lt;br /&gt;
&lt;br /&gt;
Haas&#039;s object is whether it&#039;s possible to agree on categorization about whether or not something is severe.  We have hundreds of ereports, so we need a very simple categorization scheme which everyone can agree on.  Tom points out that &amp;quot;can&#039;t happen&amp;quot; and &amp;quot;severe&amp;quot; aren&#039;t necessarily the same thing.  Maybe we could use SQLSTATE and tweak some things.  Everyone thinks this is the way to go.&lt;br /&gt;
&lt;br /&gt;
It would be very useful to be able to filter the volume of logging too.  We need to log sqlstate though.  We might in addition put the severity concept into the log.  We&#039;d have to clean up how we use SQLSTATE too.  We could supply some default filters, but users would need to tweak them.  Filtering the log is a separate feature from fixing the SQLSTATE.  That can be done later.&lt;br /&gt;
&lt;br /&gt;
=== Error Logging Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
Peter G: As a complimentary feature, it would be great to be able to store errors in a circular buffer available, like pg_stat_statements.  Peter E is doing a presentation related to this tommorrow using logging hooks.  You can already do this.&lt;br /&gt;
&lt;br /&gt;
Peter E argues against doing more aggregated views like pg_stat_statements, because it doesn&#039;t provide historical or granular data.  With logging hooks, you can build this more granularly.  It already exists in 9.2.  The average DBA can&#039;t write code in C, logging hooks allow you to work around this, you can get log data in JSON.  Peter E argued against having a hardcoded system for this.&lt;br /&gt;
&lt;br /&gt;
Josh pointed out the efficiency argument.  Robert pointed out the usefulness of &amp;quot;last message repeated 351 times&amp;quot;.  Peter G envisaged doing pg_stat_errors as a contrib module.  This could be build on logging hooks.  Dimitri pointed out that you can also do this with FDWs and CSV logs.  Some discussion about how does Oracle Enterprise Manager do this?  PEM uses CSV logs.&lt;br /&gt;
&lt;br /&gt;
Discussion about alternative approaches ensued.&lt;br /&gt;
&lt;br /&gt;
Heroku can feed back some information about errors using log aggregation.  Frost would love to have performance information from Heroku.&lt;br /&gt;
&lt;br /&gt;
=== Incremental Maintenance of Matviews ===&lt;br /&gt;
&lt;br /&gt;
Kevin: Matching other DBs who have matviews will require a 5 year plan.  We have a foundation in 9.3, you can declare a view, and it&#039;s materialized.  It&#039;s just a foundation at this point.  For 9.4, we want the first level of incremental maintenance.  We can&#039;t get all the optimizations in, we just want to make the infractructure for the simplest cases in there.&lt;br /&gt;
&lt;br /&gt;
For the first commitfest, I want a transactional REFRESH using the approach on the lists.  There will always be cases where incremental maintenance won&#039;t work.  So we want transactional refres first, so that we can analyze whether it pays to update using the delta.  If every row is touched, that&#039;s a loser.  So we want to fall back to the full refresh if the delta is too large.&lt;br /&gt;
&lt;br /&gt;
He won&#039;t speculate on what we can get into each subsequent release.  Planning to use the counting algorithm, it&#039;s very well established.  Will only handle the simple cases at first, and will work through complex cases and see how far they get.&lt;br /&gt;
&lt;br /&gt;
Need a new system column, count_t, which counts the number of ways a give tuple can be derived from source data.  It&#039;s a kind of reference count.  There&#039;s a completely different algo for recursive views.   Handling NOT EXISTS is a separate implementation too.&lt;br /&gt;
&lt;br /&gt;
What he wants to get in these first releases is how to implement the count_t column, how to implement other stuff in the first commitfest.  Then the other CFs can be refinements.  Peter E points out that count could overflow.  The new column will be added only for new matviews which are specified as &amp;quot;incremental&amp;quot;.  We&#039;ll probably have other stratgies for incremental update, and it&#039;ll only be used by the counting strategy.  You&#039;d have to do an ALTER table to change that.&lt;br /&gt;
&lt;br /&gt;
Thinking of doing the incremental change as synchronous in the transaction.  Initially will not work for async maintenance.  You need a delta with a count which can be plus or minus, you need a snapshot for before and after the change.  You need to generate the deltas with each change to the base table, but you don&#039;t need to update the matview immediately.  &lt;br /&gt;
&lt;br /&gt;
There was discussion about how this applies to expensive, infrequently updated materialized views.&lt;br /&gt;
&lt;br /&gt;
The extra column would only be present in incremental materialized views and the deltas.  There would also need conditional code in execution nodes which know how to handle the column.  Haas questioned if there was some way we could add a non-system column.  How do the executor nodes know not to display the system column.  It&#039;s not like SELinux because it wouldn&#039;t be present in every table.&lt;br /&gt;
&lt;br /&gt;
Maybe we need a general notion of invisible columns.  That would be generally useful.  Then we could have extra state information.  Bucardo could use it.  A lot of things want to hide columns from &amp;quot;select *&amp;quot;.  We should add this concept.  &lt;br /&gt;
&lt;br /&gt;
There was discussion about having stable system views.  This change will break things like the ODBC driver, because it gets the list of columns from pg_attribute.  We can start with just matviews.  But right now drivers assume that anything with a positive attnum is visible.  But there&#039;s no patch for logical column numbers now.  Alvaro has a patch for it, it&#039;s complete but it&#039;s bitrotted.  This is just like attisdropped; it broke a lot of things.  Alvaro might update it, he&#039;s not sure he&#039;ll have time.  But we have to get this done in CF1.&lt;br /&gt;
&lt;br /&gt;
If the next version is 10.0, though, we could break things.  So maybe it&#039;s a good time.&lt;br /&gt;
&lt;br /&gt;
=== Lunch Notes ===&lt;br /&gt;
&lt;br /&gt;
Robert suggested getting rid of the v2 protocol in the next version.  He thinks there&#039;s hacks in COPY which slow it down and are required for support of v2.  But people want to see numbers on that.  v2 is also used for JDBC, but that&#039;s to fix the plan cache issue which is fixed in 9.2.  We need to see concrete improvements, though, and then there&#039;d be an easy switch.  We also should know what drivers are using v2, like pygresql.&lt;br /&gt;
&lt;br /&gt;
=== GIN generalization ===&lt;br /&gt;
&lt;br /&gt;
Alexander talked about general advances in GIN.  Many people use external full text search because it&#039;s faster. One of the reasons GIN is slower is that it&#039;s used only for filtering, forcing the executor to page all of the results, and ranking.  And it doesn&#039;t do LIMIT.&lt;br /&gt;
&lt;br /&gt;
So how the extended indexing solution works: there&#039;s positional information, so that we can calculate relevance.  So there&#039;s now a structure to add extra infromation to the vector for any additional information.  We can extract positions of words.  To keep the index small we&#039;re using run-length compression.  The index is then about the same size as the uncompressed index, with a lot of extra information.&lt;br /&gt;
&lt;br /&gt;
The problem is that we use the infrastructure from KNN.  GIN declares that it can do ORDER BY with an operator, so you can get ORDER BY and filtering from the same index.  Noah asked what ordering operator he&#039;s talking about.  GIN calculates distance on item vectors, and then sorts by an array, and then executes gin_get_tuple(), which is new.  It can then return them one-by-one for sorting.  It&#039;s kind of like KNN, but it works differently, but it&#039;s much cheaper than getting the tuple from the heap.  We need to tell the planner that we can return the original tuple from the index.&lt;br /&gt;
&lt;br /&gt;
This will be a new operator class.  And we modify the operator classes for tsvector.&lt;br /&gt;
&lt;br /&gt;
Peter E asked for applications outside tsearch.  Alexander said that it would also work for similarity searches.  Can also be used for regex index.  You can build a regex, index it, and then search for text strings which match that regex.&lt;br /&gt;
&lt;br /&gt;
Andres pointed out an alternate method for doing this, but it requires improvements to the planner.  Haas encouraged maybe taking this approach. If we assume that the planner can get an expression from the index, then we need sorting before we go into the heap.  That&#039;s going to be hard.  That&#039;s a real issue for any steps which happen between checking the index and the heap.  You could see tuples which aren&#039;t visible.  This might not be a problem for the GIN case, but it&#039;s liable to be a problem for the general case.&lt;br /&gt;
&lt;br /&gt;
Maybe this is related to bitmap indexes.  Btree operators need to be able to deal with invisible tuples, so this isn&#039;t new.&lt;br /&gt;
&lt;br /&gt;
Discussion of implementation methods ensued.  There was question about what doesn&#039;t work in KNN-Gist infrastructure.  Like it doesn&#039;t work without a WHERE clause.  But this could be generalized.  This will break amproc, but it&#039;s not like anyone makes access methods outside of core.  Maybe we should get rid of pg_am and just have a jump table, pg_am just isn&#039;t really useful.  We can&#039;t drop it because the oids there are used as keys elsewhere, and there&#039;s really not much cost.&lt;br /&gt;
&lt;br /&gt;
Another infrastructure question is that currently GIN only has to know one data type.  Now when we introduce additional information, we need to know datatypes.  SP-GIst needs 3 datatypes.  That&#039;s why we have spgist_config.  For GIN we&#039;ll need a new configuration method to return this datatype.  So there&#039;s a question of breaking older stuff.  Can you support both opclasses?  Storage parameter would define it, so it would appear in conflict.&lt;br /&gt;
&lt;br /&gt;
This should probably be GIN2 with new access methods, etc.  We&#039;ll be changing the storage format of GIN indexes.  But that would require supporting the original GIN indefinitely.  We could bump the version number on the GIN node page.  Two choices: write the code so that it supports the old format, or add a whole new access method.  Are we changing the operators or the access methods?  Changes are mostly in GIN, a lot less in the operator class.  Peter E pointed out that the compression could be a separate feature.  Alexander says that the the change is not easily separable because of some of the performance optimizations.&lt;br /&gt;
&lt;br /&gt;
There was more implementation discussion about the methods for doing online upgrade if we change GIN.  Rewriting on selects is out.  In general we want to deprecate the old GIN, but we&#039;ll need a couple versions to do it.&lt;br /&gt;
&lt;br /&gt;
Frost raised the idea of general infrastructure to support upgrade-in-place.  Like we could have a flag in pg_class.  But several people dismissed this idea as not really helpful.&lt;br /&gt;
&lt;br /&gt;
=== An Extensibility Roadmap ===&lt;br /&gt;
&lt;br /&gt;
See slides linked from this page.&lt;br /&gt;
&lt;br /&gt;
We&#039;ve already did some extensibility with create extension and create event trigger.  Now I need the extension templates.  I want reviewers and committers to understand where I want to go.&lt;br /&gt;
&lt;br /&gt;
DDL Execution Plans is after that ... like EXPLAIN ALTER TABLE.  Dimitri wants CREATE EXTENSION to fetch code from the internet.  But core doesn&#039;t want that, so Dimitri wants to do that using extension templates and event triggers.  Then he wants a PL/C language which compiles on-the-fly.  This would allow creating extensions from source dynamically.  But the source is in a place only root has access to.&lt;br /&gt;
&lt;br /&gt;
Dimitri wants extensions to follow replication.  There&#039;s some security issues with that.  There&#039;s issue with having such things like downloading in core and having it not suck.  There&#039;s a lot of reliability issues.  Haas isn&#039;t keen on the whole idea.  But Dimitri doesn&#039;t want to code all of the extension features in C.  But this is already a problem with external PLs.&lt;br /&gt;
&lt;br /&gt;
Dimitri wants to be able to build full set of extensions using only a PostgreSQL connection and superuser access.  Josh talked about the developer-push issue.  But there&#039;s security issues with arbitrary C code, so a lot of people have issues with it.  Peter G suggested we could somehow sandbox the C code.  Haas says that this is possible, but you need kernel-level help.&lt;br /&gt;
&lt;br /&gt;
Josh says 3 problems: developer push, relication, and backup.  But what if we solved it for non-C cases, but not C cases?  Some people thing it would be useful.  Extension Templates for packaged user code would be very useful for in-house code, so it can be packaged as an extension.&lt;br /&gt;
&lt;br /&gt;
=== Failback with Backup ===&lt;br /&gt;
&lt;br /&gt;
Fujii hears complaints from users: why do we need to take a full snapshot for failback?  If the database is very large, this can take a long time.  Three problems: timeline ID mismatch, WAL record mismatch, database inconsistency.&lt;br /&gt;
&lt;br /&gt;
Timeline ID: we can&#039;t start the old master as a replica because of the timeline ID.  This is resolved now in 9.3.&lt;br /&gt;
&lt;br /&gt;
WAL Record Inconsistency: if the master crashes after writing a WAL record but not sending it to the standby, then it has WAL records the standby doesn&#039;t have.  We can resolve this by removing all WAL records in the old master before starting it up in standby mode.  Old master will then try to start recovery, and them start replication to retrieve the WAL records.  One problem: last checkpoint record may not be replicated to the standby.  Could we make the checkpointer wait for replication?  If the Standby goes offline checkpoint would hang.&lt;br /&gt;
&lt;br /&gt;
Frost asked how large of a user problem this is?  People cited examples.&lt;br /&gt;
&lt;br /&gt;
Haas suggested a holdback for datafile sync.  Magnus pointed out that if we distinguish between failover and switchover.  So we could have failback only for switchover circumstances.  Jeff pointed out that you have to break replication and resync standbys after upgrade.  He also thinks that we can use the WAL to help a diff between datafiles.  Controlled switchover would fix the upgrade case too maybe.&lt;br /&gt;
&lt;br /&gt;
We could create a list of dirty blocks from the WAL.  But there are a lot of special cases which would prevent rollback.  &lt;br /&gt;
&lt;br /&gt;
Database inconsistency can happen if the master crashes.  There can be some missing database changes.  One solution is implementing undo logic, but that&#039;s very very difficult.  Fujii&#039;s approach would be to add some write points to the master.  Before the master writes the database to the disk, it writes the WAL to disk.  It could wait for replication of WAL before writing to the LSN.   Except for hint bits.  And what if the replica goes away?&lt;br /&gt;
&lt;br /&gt;
Fujii wants to solve both controlled switchover case as well as the crash &amp;amp; failover case.  The controlled swithover case is a lot easier to solve.  You could freeze out existing connections, finish writes, and then switch over.  There&#039;s a lot of similar ideas in Oracle QS.&lt;br /&gt;
&lt;br /&gt;
Josh suggested that the crash case isn&#039;t any different if we&#039;re already in synch rep.  Others disagreed.  Haas suggested that we could use Andres&#039; infrastructure of slots for replication.  Noah suggested that we could delay hint bit application until we&#039;re after walflushlocation. Maybe we should only solve this for controlled switchover.&lt;br /&gt;
&lt;br /&gt;
Jeff: for checksums, we already store the first modified record after the checkpoint.  We could store very abbreviated information the WAL for checkpoints. There would be some significant cost for hint bits on a seq scan.  If you want to be able to turn the WAL log into an undo log.  You only have to copy certain pages.  You could log only the first change since the last checkpoint.  &lt;br /&gt;
&lt;br /&gt;
=== 9.4 Commitfest schedule and tools ===&lt;br /&gt;
&lt;br /&gt;
The CF schedule will be the same as last year. This time do what we said we&#039;d do, not what we actually did.  So include the triage periods etc.  Josh will run first CF.&lt;br /&gt;
&lt;br /&gt;
Discussion about patch development during commitfest.  Ending a commitfest takes a lot of work.  There&#039;s a lot of work for moving stuff along.  We could make a commitment that -hackers will not argue with the CF manager.  Josh also wants to have a commitfest assistant.  He called for volunteers.  The author ought to be the one to take the patch out, it shouldn&#039;t wait on the CFM.  Each patch deserves one solid review per CF, but not more than one.&lt;br /&gt;
&lt;br /&gt;
Kevin points out that the biggest issue is finding reviewers and getting the reviewers to do the review.  Josh asked if having reviewers put their name down is actually helpful.  Maybe we need to be really aggressive about taking names off.  There&#039;s a big difference between Noah doing a review and some new reviewer doing a review.  Josh suggested clearing reviewer after 5 days.  Frost suggested removing them earlier.  Maybe more tightly tying them to the archives would be good.&lt;br /&gt;
&lt;br /&gt;
Lots of discussion ensued.&lt;br /&gt;
&lt;br /&gt;
We should tell people to not put their names down until they are ready to start reviewing.  The 10K line patches are not the problem, the 10 line patches are.&lt;br /&gt;
&lt;br /&gt;
Josh discussed replacing the CF tool, either with Gerrit or Reviewboard or something new.  Frost suggested Github.  Josh discussed some issues for reviewers.  Discussion ensued, but not recorded because the secretary was speaking.  Josh also wants automated patch build.  Other people suggested automated apply.&lt;br /&gt;
&lt;br /&gt;
Josh will develop a spec for a new tool.  He will run it past the CF managers for comment.  Then post it to -hackers for comment.  Haas is skeptical about 3rd-party tools.  He hates git stuff.  Frost discussed using forks in github.  We should be able to track a git branch in the tool.&lt;br /&gt;
&lt;br /&gt;
=== Goals, priorities, and resources for 9.4 ===&lt;br /&gt;
&lt;br /&gt;
* Dave hopes to start writing pgAdmin4 this year.&lt;br /&gt;
* Kevin will work on materialized views.&lt;br /&gt;
* Dimitri: Extension templates and event triggers.&lt;br /&gt;
* Andrew: most JSON work is complete, the rest can be extensions.  Wants to work on grouping sets.&lt;br /&gt;
* Noah working on EDB features (see above), and bug fixes.&lt;br /&gt;
* Bruce is working on pgPool to make it better and more usable, maintainable and debugged.&lt;br /&gt;
* Fujii is working on PostgreSQL replication.  Would also like to work on pg_trigram for Japanese.&lt;br /&gt;
* Simon (via Skype) Tablesample patch, COPY tuning, and security reviews (SEPostres).&lt;br /&gt;
* Tom will take an interest in pluggable storage.  Maybe also Autonomous transactions.&lt;br /&gt;
* Magnus will work on a new CF tool.  Also more improvements to pgbasebackup.&lt;br /&gt;
* Haas will be working on side issues on matviews and parallel query as they come up.&lt;br /&gt;
* Josh will be working on new CF tool.  With time/funding will work on automated testing.&lt;br /&gt;
* Kaigai will work on row-level security.  Also GPU stuff.&lt;br /&gt;
* Jeff will be working on convincing Robert to remove pdallvisible.  Also corruption detection.  And Range JOIN, or inclusion constriants.&lt;br /&gt;
* Alexander will work on new GIN.&lt;br /&gt;
* Peter G will be working on error stuff (per above).  Also wants to work on fixing archiving falling behind and panic shutdown.  Also doing a little bit of work on upsert.&lt;br /&gt;
* Andres will be doing logical replication.&lt;br /&gt;
* Peter E has the transforms feature outstanding. And wants to move the documentation to XML.  Wants to improve test coverage.&lt;br /&gt;
* Frost will be doing pg infrastructure.  Wants to help with CFs.  Also fix some stuff with optimizer.&lt;br /&gt;
* Greg Smith is working on autovacuum style I/O limits for other statements.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Development_information&amp;diff=19816</id>
		<title>Development information</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Development_information&amp;diff=19816"/>
		<updated>2013-05-22T16:07:02Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to 2013 developer meeting page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
This area includes developer-targeted documentation regarding aspects of PostgreSQL development.  Please visit the [http://www.postgresql.org/developer developer area] of the PostgreSQL website for more general information about the development of PostgreSQL.  You can find most developers in [irc://irc.freenode.net/postgresql #postgresql on freenode]. A list of IRC nick names with their respective real world names can be found [[IRC2RWNames | here]].&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL 9.3 - Active Development==&lt;br /&gt;
* [[PostgreSQL 9.3 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.3 Open Items]]&lt;br /&gt;
&lt;br /&gt;
==Development Process==&lt;br /&gt;
* [[Todo|Todo list]]&lt;br /&gt;
* [[Todo:Contents|Unofficial Todo Detail]]&lt;br /&gt;
* [[Submitting a Patch]]&lt;br /&gt;
* [[Reviewing a Patch]]&lt;br /&gt;
* [[RRReviewers|Round-robin Patch Review]]&lt;br /&gt;
* [[Running a CommitFest]]&lt;br /&gt;
* [[Committing with Git]]&lt;br /&gt;
&lt;br /&gt;
== Developer Resources ==&lt;br /&gt;
* [[Developer FAQ]]&lt;br /&gt;
* [[Regression test authoring]]&lt;br /&gt;
* [[HowToBetaTest|HOWTO Alpha and Beta Test PostgreSQL]]&lt;br /&gt;
* [[Working with Git]]&lt;br /&gt;
* [[Working with CVS]] (obsolete)&lt;br /&gt;
* [[Working with Eclipse]]&lt;br /&gt;
* [[Fixing shift/reduce conflicts in Bison]]&lt;br /&gt;
* [[PL Matrix|Procedural Language Matrix]]&lt;br /&gt;
* [http://www.postgresql.org/about/featurematrix Feature Matrix]&lt;br /&gt;
* [http://www.postgresql.org/developer/coding PostgreSQL Coding]&lt;br /&gt;
* [http://developer.postgresql.org/pgdocs/postgres/index.html Development docs] (updated every 5 minutes)&lt;br /&gt;
* [[Project Hosting]]&lt;br /&gt;
* [http://www.pgcon.org/2010/schedule/attachments/142_HackingWithUDFs.pdf Exposing PostgreSQL Internals with UDFs (2010)]&lt;br /&gt;
&lt;br /&gt;
== Projects and Planning ==&lt;br /&gt;
* [http://commitfest.postgresql.org/action/commitfest_view/open Open CommitFest] - New patch submissions for 9.3&lt;br /&gt;
* [https://commitfest.postgresql.org/ CommitFest]&lt;br /&gt;
* [[PostgreSQL 8.4]]&lt;br /&gt;
* [[PgCon 2013 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2012 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2011 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2010 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2009 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2008 Developer Meeting]]&lt;br /&gt;
* [[Development projects]] - links to individual projects&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL Past Development==&lt;br /&gt;
* [[PostgreSQL 9.2 Open Items]]&lt;br /&gt;
* [[PostgreSQL 9.2 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.1 Open Items]]&lt;br /&gt;
* [[PostgreSQL 9.1 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.0 Open Items]]&lt;br /&gt;
* [[85AlphaFeatures|PostgreSQL 9.0 Alpha Release Feature List]]&lt;br /&gt;
&lt;br /&gt;
[[Category:CommitFest]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Development_information&amp;diff=19778</id>
		<title>Development information</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Development_information&amp;diff=19778"/>
		<updated>2013-05-19T05:35:45Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Eclipse documentation doesn&amp;#039;t just cover cvs now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
This area includes developer-targeted documentation regarding aspects of PostgreSQL development.  Please visit the [http://www.postgresql.org/developer developer area] of the PostgreSQL website for more general information about the development of PostgreSQL.  You can find most developers in [irc://irc.freenode.net/postgresql #postgresql on freenode]. A list of IRC nick names with their respective real world names can be found [[IRC2RWNames | here]].&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL 9.3 - Active Development==&lt;br /&gt;
* [[PostgreSQL 9.3 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.3 Open Items]]&lt;br /&gt;
&lt;br /&gt;
==Development Process==&lt;br /&gt;
* [[Todo|Todo list]]&lt;br /&gt;
* [[Todo:Contents|Unofficial Todo Detail]]&lt;br /&gt;
* [[Submitting a Patch]]&lt;br /&gt;
* [[Reviewing a Patch]]&lt;br /&gt;
* [[RRReviewers|Round-robin Patch Review]]&lt;br /&gt;
* [[Running a CommitFest]]&lt;br /&gt;
* [[Committing with Git]]&lt;br /&gt;
&lt;br /&gt;
== Developer Resources ==&lt;br /&gt;
* [[Developer FAQ]]&lt;br /&gt;
* [[Regression test authoring]]&lt;br /&gt;
* [[HowToBetaTest|HOWTO Alpha and Beta Test PostgreSQL]]&lt;br /&gt;
* [[Working with Git]]&lt;br /&gt;
* [[Working with CVS]] (obsolete)&lt;br /&gt;
* [[Working with Eclipse]]&lt;br /&gt;
* [[Fixing shift/reduce conflicts in Bison]]&lt;br /&gt;
* [[PL Matrix|Procedural Language Matrix]]&lt;br /&gt;
* [http://www.postgresql.org/about/featurematrix Feature Matrix]&lt;br /&gt;
* [http://www.postgresql.org/developer/coding PostgreSQL Coding]&lt;br /&gt;
* [http://developer.postgresql.org/pgdocs/postgres/index.html Development docs] (updated every 5 minutes)&lt;br /&gt;
* [[Project Hosting]]&lt;br /&gt;
* [http://www.pgcon.org/2010/schedule/attachments/142_HackingWithUDFs.pdf Exposing PostgreSQL Internals with UDFs (2010)]&lt;br /&gt;
&lt;br /&gt;
== Projects and Planning ==&lt;br /&gt;
* [http://commitfest.postgresql.org/action/commitfest_view/open Open CommitFest] - New patch submissions for 9.3&lt;br /&gt;
* [https://commitfest.postgresql.org/ CommitFest]&lt;br /&gt;
* [[PostgreSQL 8.4]]&lt;br /&gt;
* [[PgCon 2012 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2011 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2010 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2009 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2008 Developer Meeting]]&lt;br /&gt;
* [[Development projects]] - links to individual projects&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL Past Development==&lt;br /&gt;
* [[PostgreSQL 9.2 Open Items]]&lt;br /&gt;
* [[PostgreSQL 9.2 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.1 Open Items]]&lt;br /&gt;
* [[PostgreSQL 9.1 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.0 Open Items]]&lt;br /&gt;
* [[85AlphaFeatures|PostgreSQL 9.0 Alpha Release Feature List]]&lt;br /&gt;
&lt;br /&gt;
[[Category:CommitFest]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Working_with_Eclipse&amp;diff=19777</id>
		<title>Working with Eclipse</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Working_with_Eclipse&amp;diff=19777"/>
		<updated>2013-05-19T05:34:55Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Intro to adding include files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Developing with Eclipse ==&lt;br /&gt;
&lt;br /&gt;
This page explains how to get quickly started if you want to use Eclipse to develop PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Used software for this manual:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;OS: Ubuntu 8.4&amp;lt;br/&amp;gt;&lt;br /&gt;
Editor: Eclipse Helios&amp;lt;br/&amp;gt;&lt;br /&gt;
Versioning: CVS&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The manual has been tested on an Ubuntu Live Version to make sure that no required Software is already installed. &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;!!Important: An internet connection is required&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
(Remark: If you haven’t installed Ubuntu yet, we recommend the following Link: http://www.ubuntu.com/desktop/get-ubuntu/download )&lt;br /&gt;
&lt;br /&gt;
== Install version control software ==&lt;br /&gt;
&lt;br /&gt;
The preferred way to get PostgreSQL source code is to use the git version control software.  This tutorial will also cover using the older cvs program.  You only need one program, git or cvs, not both.&lt;br /&gt;
&lt;br /&gt;
=== Install git ===&lt;br /&gt;
&lt;br /&gt;
Start Ubuntu Software Center:  &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
To install git you should go to the magnifier on the right top side of the application, and enter &#039;&#039;&#039;&amp;quot;git&amp;quot;&#039;&#039;&#039;. From the results choose &#039;&#039;&#039;&amp;quot;fast, scalable, distributed revision control&amp;quot;&#039;&#039;&#039; and click on the &#039;&#039;&#039;Install&#039;&#039;&#039; button (if git is not already installed).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install CVS ===&lt;br /&gt;
&lt;br /&gt;
Start Ubuntu Software Center:  &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:03_Open_SW_Center.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
To install CVS you should go to the magnifier on the right top side of the application, and enter &#039;&#039;&#039;&amp;quot;cvs&amp;quot;&#039;&#039;&#039;. From the results choose &#039;&#039;&#039;&amp;quot;Concurrent Versions System&amp;quot;&#039;&#039;&#039; and click on the &#039;&#039;&#039;Install&#039;&#039;&#039; button (if CVS is not already installed).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:04_Install_CVS.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Open terminal ==&lt;br /&gt;
&lt;br /&gt;
Through &#039;&#039;Applications » Accessories » Terminal&#039;&#039; you can open a new terminal:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:01_Open_Terminal.png]]&lt;br /&gt;
&lt;br /&gt;
== Install PostgreSQL source code   ===&lt;br /&gt;
&lt;br /&gt;
Now you can download the latest version of the source code, so you can edit it locally in your computer.  Again you need to follow one of the cvs or git instruction sets, but not both.&lt;br /&gt;
&lt;br /&gt;
=== Download with git ===&lt;br /&gt;
&lt;br /&gt;
In the previous terminal, if you haven’t closed it (otherwise repeat step &#039;&#039;&#039;1. Open terminal&#039;&#039;&#039;, and don’t close it until the end of the installation), you can make a copy with the following commands:&lt;br /&gt;
&lt;br /&gt;
     mkdir project&lt;br /&gt;
     cd project&lt;br /&gt;
     clone git://git.postgresql.org/git/postgresql.git&lt;br /&gt;
     mv postgres pgsql&lt;br /&gt;
&lt;br /&gt;
You can find more detailed information about setting up your own repository at [[Working with git]].  The cloned directory here is renamed to &amp;quot;pgsql&amp;quot; to match the cvs examples below.  You can leave it as postgres instead, and just modify the rest of the examples below to use that name.&lt;br /&gt;
&lt;br /&gt;
=== Download PostgreSQL source code - CVS ===&lt;br /&gt;
&lt;br /&gt;
In our example the CVSROOT is &#039;&#039;&#039;&#039;&#039;pgrepo&#039;&#039;&#039;&#039;&#039; (you can choose also an other name), and is located under Home&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The command mkdir creates a new folder (&#039;&#039;&#039;pgrepo&#039;&#039;&#039;) and makes a new environment variable that links to this folder:&lt;br /&gt;
       mkdir pgrepo&lt;br /&gt;
       export CVSROOT=$HOME/pgrepo&lt;br /&gt;
&lt;br /&gt;
The next command downloads with &#039;&#039;rsync&#039;&#039; the source code. This can take several minutes:&lt;br /&gt;
       rsync --progress -avzCH --delete anoncvs.postgresql.org::pgsql-cvs $CVSROOT&lt;br /&gt;
&lt;br /&gt;
[[Image:02_Download_repository.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy with CVS  ===&lt;br /&gt;
&lt;br /&gt;
With &#039;&#039;&#039;CVS&#039;&#039;&#039; (Concurrent Version Control) you can make a versioned copy of the folder &#039;&#039;&#039;pgrepo&#039;&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
=== Use CVS ===&lt;br /&gt;
&lt;br /&gt;
In the previous terminal, if you haven’t closed it (otherwise repeat step &#039;&#039;&#039;1. Open terminal&#039;&#039;&#039;, and don’t close it until the end of the installation), you can make a copy with the following commands:&lt;br /&gt;
&lt;br /&gt;
     mkdir project&lt;br /&gt;
     cd project&lt;br /&gt;
     cvs co pgsql&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; Execute these commands one layer above pgrepo, for instance in Home in our example!&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:05_checkout_project.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can find more detailed information about setting up your own repository here [[Working with CVS]].&lt;br /&gt;
&lt;br /&gt;
== Configure source code  ==&lt;br /&gt;
&lt;br /&gt;
=== Install components with Software-Center ===&lt;br /&gt;
&lt;br /&gt;
You need the following Software, and you can download them through Software Center (&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;libreadline5-dev&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:06_Download_readline.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;zlib1g-dev&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:07_Dowload_zlib.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;bison (YACC)&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:08_Dowload_bison.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;flex&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:09_Download_flex.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You simply have to type the names of the software in the search area, and install them. This is the list of the required Software:&amp;lt;br/&amp;gt;&lt;br /&gt;
1. &#039;&#039;libreadline5-dev&#039;&#039;, 2. &#039;&#039;zlib1g-dev&#039;&#039;, 3. &#039;&#039;bison (YACC)&#039;&#039;, 4.  &#039;&#039;flex&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Configure in the terminal ===&lt;br /&gt;
&lt;br /&gt;
Switch back to the terminal and execute the following commands:&lt;br /&gt;
&lt;br /&gt;
     cd pgsql&lt;br /&gt;
     ./configure --prefix=$HOME/project --enable-depend --enable-cassert --enable-debug&lt;br /&gt;
&lt;br /&gt;
[[Image:10_Configure.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Download Eclipse  ==&lt;br /&gt;
&lt;br /&gt;
=== Install JDK for Eclipse ===&lt;br /&gt;
&lt;br /&gt;
To see the PostgreSQL source code in an organized manner we will install Eclipse on the computer. &amp;lt;br/&amp;gt;&lt;br /&gt;
(Remark: You can use any other development tool also, but this manual explains the usage with Eclipse).&lt;br /&gt;
&lt;br /&gt;
First of all you need the &#039;&#039;&amp;quot;OpenJDK Java 6 Runtime&amp;quot;&#039;&#039; for Eclipse, which you can also download in the Software-Center. &amp;lt;br/&amp;gt;&lt;br /&gt;
Start Software Center Center (&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;) or switch to the opened window and search for java. Choose &#039;&#039;&amp;quot;OpenJDK Java 6 Runtime”&#039;&#039; and click &#039;&#039;&#039;Install&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:11_Download_JDK.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download Eclipse ===&lt;br /&gt;
&lt;br /&gt;
You can download Eclipse from the following link: http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliosr&lt;br /&gt;
&lt;br /&gt;
It’s important that you choose a &#039;&#039;&#039;Helios Version&#039;&#039;&#039;, which supports&#039;&#039;&#039; C/C++&#039;&#039;&#039;. Open the Folder in your file browser, where the tar file is. In this example: &#039;&#039;ubuntu » Downloads&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:12_Downloaded_eclispe.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extract and start ===&lt;br /&gt;
&lt;br /&gt;
Right click on the Package and choose &#039;&#039;&amp;quot;Extract Here&amp;quot;&#039;&#039; from the menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:13_Extract_eclipse.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Now enter the extracted Folder and double-click the file &amp;quot;eclipse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:14_Launch_eclispe.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set up Workspace ===&lt;br /&gt;
&lt;br /&gt;
You should set up a workspace, where the software stores your projects:&lt;br /&gt;
&lt;br /&gt;
After starting the program you will be prompted to select a folder for your workspace. We will choose the recommended path, but you can change it if you browse for an other folder. If you have chosen your Folder click &#039;&#039;&#039;&#039;&#039;&amp;quot;OK&amp;quot;&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:15_Worspace.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The program ===&lt;br /&gt;
&lt;br /&gt;
Now you see the welcome-page of Eclipse, where you can choose tutorials, if you are not familiar with Eclipse. To continue the manual choose the arrow on the right to open your Workbench (the defaults layout of the program). &lt;br /&gt;
&lt;br /&gt;
[[Image:16_Workbech.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will import the PostgreSQL code in this workbench.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:17_Layout.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Import ==&lt;br /&gt;
&lt;br /&gt;
In this step we will import the project. Select in the left top of the program &#039;&#039;&amp;quot;File  » Import &amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
[[Image:18_Import.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the new window select &#039;&#039;&amp;quot;C/C++  »  Existing Code as Makefile Project&amp;quot;&#039;&#039; and click the &#039;&#039;&#039;&#039;&#039;&amp;quot;next&amp;quot;&#039;&#039;&#039;&#039;&#039; button:&lt;br /&gt;
&lt;br /&gt;
[[Image:19_Makefileproject.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the next window click browse, and choose the &#039;&#039;&#039;pgsql&#039;&#039;&#039; folder.&lt;br /&gt;
&#039;&#039;&amp;quot;Language&amp;quot;&#039;&#039; is &#039;&#039;&#039;&amp;quot;C&amp;quot;&#039;&#039;&#039; and &#039;&#039;&amp;quot;Toolchain for Indexer Settings&amp;quot;&#039;&#039; select &#039;&#039;&#039;&amp;quot;Linux GCC&amp;quot;&#039;&#039;&#039;. At the end click &#039;&#039;&#039;finish&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:20_Import_finish.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Make&amp;quot;&#039;&#039; will start automatically (this can take several minutes). If every components work well you should have the following message in you console: &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&amp;quot;All of PostgreSQL successfully made, Ready to install&amp;quot;&#039;&#039;&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Furthermore you can see the Project &#039;&#039;&#039;&amp;quot;pgsql&amp;quot;&#039;&#039;&#039; on the left side of your workbench in the project explorer view.&lt;br /&gt;
&lt;br /&gt;
[[Image:21_Make.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding make targets ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Open the Make Target view ===&lt;br /&gt;
&lt;br /&gt;
If this you can’t find this view, simply click on the Button in the left bottom to add the.&lt;br /&gt;
&lt;br /&gt;
[[Image:35_Add_view.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:22_Make_target.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add Target ===&lt;br /&gt;
&lt;br /&gt;
In the &#039;&#039;Make-Target-view&#039;&#039; right click on the project name and select &#039;&#039;&amp;quot;New&amp;quot;&#039;&#039;. In the new window &#039;&#039;&amp;quot;Create Make Target&amp;quot;&#039;&#039; type at &#039;&#039;&amp;quot;Target name:&amp;quot;&#039;&#039; &#039;&#039;&#039;&amp;quot;install”&#039;&#039;&#039; and click &#039;&#039;&#039;&amp;quot;OK&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:23_Make_install.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was successful in the &#039;&#039;Make-Target-view&#039;&#039; at the end of the list a green dot appears with the label install. Double-click this, so you start the installation of PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
[[Image:24_Launch_install.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the installation was successful in the console you can read:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;“PostgreSQL installation complete&amp;quot;.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:25_Installed.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Launch initdb in the terminal ==&lt;br /&gt;
&lt;br /&gt;
Switch back to the terminal and change to the path &#039;&#039;&amp;quot;ubuntu/project/pgsql&amp;quot;&#039;&#039;. Before starting initdb you should set some environment variables. &lt;br /&gt;
&lt;br /&gt;
      export PATH=$HOME/project/bin:$PATH&lt;br /&gt;
      export PGDATA=DemoDir&lt;br /&gt;
      initdb&lt;br /&gt;
&lt;br /&gt;
[[Image:26_initdb.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Run Configurations in Eclipse ==&lt;br /&gt;
&lt;br /&gt;
Switch back to Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Select the Project Explorer view. If you can’t see it, add it with the button in the left bottom.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the Project Explorer view right click on the Projektname (pgsql), and select &amp;quot;Run As » Run Configurations&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:27_Run_as.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In this Window you can add a configuration:&lt;br /&gt;
&lt;br /&gt;
[[Image:28_new_launch_configuration.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Double-click &#039;&#039;&amp;quot;C/C++ Application&amp;quot;&#039;&#039; so a subfolder is created with the name &#039;&#039;&amp;quot;pgsql-Default&amp;quot;&#039;&#039;. Now fill in the form on the right side. At &#039;&#039;&amp;quot;C/C++ Application:&amp;quot;&#039;&#039; the path: &#039;&#039;&#039;&amp;quot;src/backend/postgres&amp;quot;&#039;&#039;&#039; and project should be: &#039;&#039;&#039;&amp;quot;pgsql&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:29_main.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to the tab &#039;&#039;&amp;quot;Arguments&amp;quot;&#039;&#039;. At &#039;&#039;&amp;quot;Program arguments&amp;quot;&#039;&#039; type the arguments  &#039;&#039;&#039;&amp;quot;-D DemoDir&amp;quot;&#039;&#039;&#039; and click the &#039;&#039;&#039;&amp;quot;Apply&amp;quot;&#039;&#039;&#039; button. Click &#039;&#039;&#039;&amp;quot;Run&amp;quot;&#039;&#039;&#039; to start the program.&lt;br /&gt;
&lt;br /&gt;
[[Image:30_arguments.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see following logs in your console:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LOG: database system was shut down at (current date and time) UTC&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;LOG: database system is ready to accept connections&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;LOG: autovacuum launcher started&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
[[Image:31_DB_feedback.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That means, the installation was successful and the server is running!&lt;br /&gt;
&lt;br /&gt;
== Add include files ==&lt;br /&gt;
&lt;br /&gt;
When looking at source code files, you will see compiler errors saying that include files were not found.  To fix this, you need to add and include directory to properties.  From the menus, choose Project/Properties/ C/C++ General / Paths and Symbols/Includes.  Add an Include directory.  Click on Workspace.  Choose &amp;lt;project&amp;gt;/src/include and hit enter.  Allow an index rebuild.&lt;br /&gt;
&lt;br /&gt;
== Debugging PostgreSQL from Eclipse ==&lt;br /&gt;
# Make sure gdb is installed on your machine&lt;br /&gt;
# Right click on the project in the Project Explorer window and select &#039;Debug As -&amp;gt; C/C++ Application&#039;&amp;lt;br&amp;gt;[[Image:elipse_pg_debug1.png|Debug in Eclipse]]&lt;br /&gt;
# Select &#039;postgres&#039; as the binary to execute&amp;lt;br&amp;gt;[[Image:elipse_pg_debug2.png|Debug in Eclipse]]&lt;br /&gt;
# If you don&#039;t have PGDATA set in the environment Eclipse is running in, you can tune the command line arguments in Run/Debug Configurations so that Postgres can start properly&amp;lt;br&amp;gt;[[Image:elipse_pg_debug3.png|Debug in Eclipse]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tip: You can do a &#039;make install&#039; and make your arguments points to that installed directory.&lt;br /&gt;
&lt;br /&gt;
== Debugging with child processes ==&lt;br /&gt;
&lt;br /&gt;
When you start debugging process by using the project default, it can only debug the postmaster process.  When clients connect to the database, the postmaster process forks child processes, each of which is actually postgres backend process responsible for the response to the client.  You might want gdb to be able to access the forked processes too.  Here&#039;s how to set that up:&lt;br /&gt;
&lt;br /&gt;
# Debug Perspective =&amp;gt; Run =&amp;gt; Debug Configuration&lt;br /&gt;
# On left side of menu you can see &amp;quot;C/C++ Attach to Application&amp;quot;&lt;br /&gt;
# Right click on &amp;quot;C/C++ Attach to Application&amp;quot; and create new debug configuration,&lt;br /&gt;
# Set Project,  Build Configuration as &amp;quot;Use Active&amp;quot; , C/C++ Application as &amp;quot;postgres&amp;quot; executable path,&lt;br /&gt;
# Start postmaster &amp;amp; one instant of postgresql client (for creating one new postgres),&lt;br /&gt;
# Click on Debug which will show current process list,&lt;br /&gt;
# Select forked &amp;quot;postgres&amp;quot; process you want to debug&lt;br /&gt;
# Put breakpoint in your function,&lt;br /&gt;
&lt;br /&gt;
== Create and open Database ==&lt;br /&gt;
&lt;br /&gt;
To see, that the installation is completely working you can do the followings to test the database.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Switch to the terminal, and change to the path &#039;&#039;&amp;quot;ubuntu/project/pgsql&amp;quot;&#039;&#039;. Execute the command:&lt;br /&gt;
      psql -l &lt;br /&gt;
This will list you all available database.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
To create your own database simply type the following:&lt;br /&gt;
    createdb DemoDB&lt;br /&gt;
&lt;br /&gt;
If you execute the list-database again (psql -l) you can see your database, &amp;quot;DemoDB&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Image:32_List_DBs.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can login to your database with:&lt;br /&gt;
    psql DemoDB&lt;br /&gt;
&lt;br /&gt;
[[Image:33_enter_DB.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Now you can create tables, relationships and much more. You can fully access your database. To exit your database type: &lt;br /&gt;
   /q&lt;br /&gt;
&lt;br /&gt;
== Terminate the program ==&lt;br /&gt;
The server is available until you click on the red rectangle in the console of Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
If the stop was successful you will see the following log in the console:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LOG: received smart shutdown request&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:34_DB_terminate.png]]&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Working_with_Eclipse&amp;diff=19776</id>
		<title>Working with Eclipse</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Working_with_Eclipse&amp;diff=19776"/>
		<updated>2013-05-19T05:31:53Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add in a basic git workflow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Developing with Eclipse ==&lt;br /&gt;
&lt;br /&gt;
This page explains how to get quickly started if you want to use Eclipse to develop PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Used software for this manual:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;OS: Ubuntu 8.4&amp;lt;br/&amp;gt;&lt;br /&gt;
Editor: Eclipse Helios&amp;lt;br/&amp;gt;&lt;br /&gt;
Versioning: CVS&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The manual has been tested on an Ubuntu Live Version to make sure that no required Software is already installed. &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;!!Important: An internet connection is required&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
(Remark: If you haven’t installed Ubuntu yet, we recommend the following Link: http://www.ubuntu.com/desktop/get-ubuntu/download )&lt;br /&gt;
&lt;br /&gt;
== Install version control software ==&lt;br /&gt;
&lt;br /&gt;
The preferred way to get PostgreSQL source code is to use the git version control software.  This tutorial will also cover using the older cvs program.  You only need one program, git or cvs, not both.&lt;br /&gt;
&lt;br /&gt;
=== Install git ===&lt;br /&gt;
&lt;br /&gt;
Start Ubuntu Software Center:  &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
To install git you should go to the magnifier on the right top side of the application, and enter &#039;&#039;&#039;&amp;quot;git&amp;quot;&#039;&#039;&#039;. From the results choose &#039;&#039;&#039;&amp;quot;fast, scalable, distributed revision control&amp;quot;&#039;&#039;&#039; and click on the &#039;&#039;&#039;Install&#039;&#039;&#039; button (if git is not already installed).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install CVS ===&lt;br /&gt;
&lt;br /&gt;
Start Ubuntu Software Center:  &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:03_Open_SW_Center.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
To install CVS you should go to the magnifier on the right top side of the application, and enter &#039;&#039;&#039;&amp;quot;cvs&amp;quot;&#039;&#039;&#039;. From the results choose &#039;&#039;&#039;&amp;quot;Concurrent Versions System&amp;quot;&#039;&#039;&#039; and click on the &#039;&#039;&#039;Install&#039;&#039;&#039; button (if CVS is not already installed).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:04_Install_CVS.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Open terminal ==&lt;br /&gt;
&lt;br /&gt;
Through &#039;&#039;Applications » Accessories » Terminal&#039;&#039; you can open a new terminal:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:01_Open_Terminal.png]]&lt;br /&gt;
&lt;br /&gt;
== Install PostgreSQL source code   ===&lt;br /&gt;
&lt;br /&gt;
Now you can download the latest version of the source code, so you can edit it locally in your computer.  Again you need to follow one of the cvs or git instruction sets, but not both.&lt;br /&gt;
&lt;br /&gt;
=== Download with git ===&lt;br /&gt;
&lt;br /&gt;
In the previous terminal, if you haven’t closed it (otherwise repeat step &#039;&#039;&#039;1. Open terminal&#039;&#039;&#039;, and don’t close it until the end of the installation), you can make a copy with the following commands:&lt;br /&gt;
&lt;br /&gt;
     mkdir project&lt;br /&gt;
     cd project&lt;br /&gt;
     clone git://git.postgresql.org/git/postgresql.git&lt;br /&gt;
     mv postgres pgsql&lt;br /&gt;
&lt;br /&gt;
You can find more detailed information about setting up your own repository at [[Working with git]].  The cloned directory here is renamed to &amp;quot;pgsql&amp;quot; to match the cvs examples below.  You can leave it as postgres instead, and just modify the rest of the examples below to use that name.&lt;br /&gt;
&lt;br /&gt;
=== Download PostgreSQL source code - cvs ===&lt;br /&gt;
&lt;br /&gt;
In our example the CVSROOT is &#039;&#039;&#039;&#039;&#039;pgrepo&#039;&#039;&#039;&#039;&#039; (you can choose also an other name), and is located under Home&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The command mkdir creates a new folder (&#039;&#039;&#039;pgrepo&#039;&#039;&#039;) and makes a new environment variable that links to this folder:&lt;br /&gt;
       mkdir pgrepo&lt;br /&gt;
       export CVSROOT=$HOME/pgrepo&lt;br /&gt;
&lt;br /&gt;
The next command downloads with &#039;&#039;rsync&#039;&#039; the source code. This can take several minutes:&lt;br /&gt;
       rsync --progress -avzCH --delete anoncvs.postgresql.org::pgsql-cvs $CVSROOT&lt;br /&gt;
&lt;br /&gt;
[[Image:02_Download_repository.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy with CVS  ===&lt;br /&gt;
&lt;br /&gt;
With &#039;&#039;&#039;CVS&#039;&#039;&#039; (Concurrent Version Control) you can make a versioned copy of the folder &#039;&#039;&#039;pgrepo&#039;&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
=== Use CVS ===&lt;br /&gt;
&lt;br /&gt;
In the previous terminal, if you haven’t closed it (otherwise repeat step &#039;&#039;&#039;1. Open terminal&#039;&#039;&#039;, and don’t close it until the end of the installation), you can make a copy with the following commands:&lt;br /&gt;
&lt;br /&gt;
     mkdir project&lt;br /&gt;
     cd project&lt;br /&gt;
     cvs co pgsql&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; Execute these commands one layer above pgrepo, for instance in Home in our example!&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:05_checkout_project.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can find more detailed information about setting up your own repository here [[Working with CVS]].&lt;br /&gt;
&lt;br /&gt;
== Configure source code  ==&lt;br /&gt;
&lt;br /&gt;
=== Install components with Software-Center ===&lt;br /&gt;
&lt;br /&gt;
You need the following Software, and you can download them through Software Center (&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;libreadline5-dev&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:06_Download_readline.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;zlib1g-dev&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:07_Dowload_zlib.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;bison (YACC)&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:08_Dowload_bison.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;flex&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:09_Download_flex.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You simply have to type the names of the software in the search area, and install them. This is the list of the required Software:&amp;lt;br/&amp;gt;&lt;br /&gt;
1. &#039;&#039;libreadline5-dev&#039;&#039;, 2. &#039;&#039;zlib1g-dev&#039;&#039;, 3. &#039;&#039;bison (YACC)&#039;&#039;, 4.  &#039;&#039;flex&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Configure in the terminal ===&lt;br /&gt;
&lt;br /&gt;
Switch back to the terminal and execute the following commands:&lt;br /&gt;
&lt;br /&gt;
     cd pgsql&lt;br /&gt;
     ./configure --prefix=$HOME/project --enable-depend --enable-cassert --enable-debug&lt;br /&gt;
&lt;br /&gt;
[[Image:10_Configure.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Download Eclipse  ==&lt;br /&gt;
&lt;br /&gt;
=== Install JDK for Eclipse ===&lt;br /&gt;
&lt;br /&gt;
To see the PostgreSQL source code in an organized manner we will install Eclipse on the computer. &amp;lt;br/&amp;gt;&lt;br /&gt;
(Remark: You can use any other development tool also, but this manual explains the usage with Eclipse).&lt;br /&gt;
&lt;br /&gt;
First of all you need the &#039;&#039;&amp;quot;OpenJDK Java 6 Runtime&amp;quot;&#039;&#039; for Eclipse, which you can also download in the Software-Center. &amp;lt;br/&amp;gt;&lt;br /&gt;
Start Software Center Center (&#039;&#039;Applications » Ubuntu Software Center&#039;&#039;) or switch to the opened window and search for java. Choose &#039;&#039;&amp;quot;OpenJDK Java 6 Runtime”&#039;&#039; and click &#039;&#039;&#039;Install&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:11_Download_JDK.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download Eclipse ===&lt;br /&gt;
&lt;br /&gt;
You can download Eclipse from the following link: http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliosr&lt;br /&gt;
&lt;br /&gt;
It’s important that you choose a &#039;&#039;&#039;Helios Version&#039;&#039;&#039;, which supports&#039;&#039;&#039; C/C++&#039;&#039;&#039;. Open the Folder in your file browser, where the tar file is. In this example: &#039;&#039;ubuntu » Downloads&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:12_Downloaded_eclispe.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extract and start ===&lt;br /&gt;
&lt;br /&gt;
Right click on the Package and choose &#039;&#039;&amp;quot;Extract Here&amp;quot;&#039;&#039; from the menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:13_Extract_eclipse.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Now enter the extracted Folder and double-click the file &amp;quot;eclipse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:14_Launch_eclispe.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Set up Workspace ===&lt;br /&gt;
&lt;br /&gt;
You should set up a workspace, where the software stores your projects:&lt;br /&gt;
&lt;br /&gt;
After starting the program you will be prompted to select a folder for your workspace. We will choose the recommended path, but you can change it if you browse for an other folder. If you have chosen your Folder click &#039;&#039;&#039;&#039;&#039;&amp;quot;OK&amp;quot;&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:15_Worspace.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The program ===&lt;br /&gt;
&lt;br /&gt;
Now you see the welcome-page of Eclipse, where you can choose tutorials, if you are not familiar with Eclipse. To continue the manual choose the arrow on the right to open your Workbench (the defaults layout of the program). &lt;br /&gt;
&lt;br /&gt;
[[Image:16_Workbech.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will import the PostgreSQL code in this workbench.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:17_Layout.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Import ==&lt;br /&gt;
&lt;br /&gt;
In this step we will import the project. Select in the left top of the program &#039;&#039;&amp;quot;File  » Import &amp;quot;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
[[Image:18_Import.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the new window select &#039;&#039;&amp;quot;C/C++  »  Existing Code as Makefile Project&amp;quot;&#039;&#039; and click the &#039;&#039;&#039;&#039;&#039;&amp;quot;next&amp;quot;&#039;&#039;&#039;&#039;&#039; button:&lt;br /&gt;
&lt;br /&gt;
[[Image:19_Makefileproject.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the next window click browse, and choose the &#039;&#039;&#039;pgsql&#039;&#039;&#039; folder.&lt;br /&gt;
&#039;&#039;&amp;quot;Language&amp;quot;&#039;&#039; is &#039;&#039;&#039;&amp;quot;C&amp;quot;&#039;&#039;&#039; and &#039;&#039;&amp;quot;Toolchain for Indexer Settings&amp;quot;&#039;&#039; select &#039;&#039;&#039;&amp;quot;Linux GCC&amp;quot;&#039;&#039;&#039;. At the end click &#039;&#039;&#039;finish&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:20_Import_finish.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Make&amp;quot;&#039;&#039; will start automatically (this can take several minutes). If every components work well you should have the following message in you console: &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&amp;quot;All of PostgreSQL successfully made, Ready to install&amp;quot;&#039;&#039;&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Furthermore you can see the Project &#039;&#039;&#039;&amp;quot;pgsql&amp;quot;&#039;&#039;&#039; on the left side of your workbench in the project explorer view.&lt;br /&gt;
&lt;br /&gt;
[[Image:21_Make.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding make targets ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Open the Make Target view ===&lt;br /&gt;
&lt;br /&gt;
If this you can’t find this view, simply click on the Button in the left bottom to add the.&lt;br /&gt;
&lt;br /&gt;
[[Image:35_Add_view.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:22_Make_target.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add Target ===&lt;br /&gt;
&lt;br /&gt;
In the &#039;&#039;Make-Target-view&#039;&#039; right click on the project name and select &#039;&#039;&amp;quot;New&amp;quot;&#039;&#039;. In the new window &#039;&#039;&amp;quot;Create Make Target&amp;quot;&#039;&#039; type at &#039;&#039;&amp;quot;Target name:&amp;quot;&#039;&#039; &#039;&#039;&#039;&amp;quot;install”&#039;&#039;&#039; and click &#039;&#039;&#039;&amp;quot;OK&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:23_Make_install.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was successful in the &#039;&#039;Make-Target-view&#039;&#039; at the end of the list a green dot appears with the label install. Double-click this, so you start the installation of PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
[[Image:24_Launch_install.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the installation was successful in the console you can read:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;“PostgreSQL installation complete&amp;quot;.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:25_Installed.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Launch initdb in the terminal ==&lt;br /&gt;
&lt;br /&gt;
Switch back to the terminal and change to the path &#039;&#039;&amp;quot;ubuntu/project/pgsql&amp;quot;&#039;&#039;. Before starting initdb you should set some environment variables. &lt;br /&gt;
&lt;br /&gt;
      export PATH=$HOME/project/bin:$PATH&lt;br /&gt;
      export PGDATA=DemoDir&lt;br /&gt;
      initdb&lt;br /&gt;
&lt;br /&gt;
[[Image:26_initdb.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Run Configurations in Eclipse ==&lt;br /&gt;
&lt;br /&gt;
Switch back to Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Select the Project Explorer view. If you can’t see it, add it with the button in the left bottom.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In the Project Explorer view right click on the Projektname (pgsql), and select &amp;quot;Run As » Run Configurations&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:27_Run_as.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
In this Window you can add a configuration:&lt;br /&gt;
&lt;br /&gt;
[[Image:28_new_launch_configuration.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Double-click &#039;&#039;&amp;quot;C/C++ Application&amp;quot;&#039;&#039; so a subfolder is created with the name &#039;&#039;&amp;quot;pgsql-Default&amp;quot;&#039;&#039;. Now fill in the form on the right side. At &#039;&#039;&amp;quot;C/C++ Application:&amp;quot;&#039;&#039; the path: &#039;&#039;&#039;&amp;quot;src/backend/postgres&amp;quot;&#039;&#039;&#039; and project should be: &#039;&#039;&#039;&amp;quot;pgsql&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:29_main.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to the tab &#039;&#039;&amp;quot;Arguments&amp;quot;&#039;&#039;. At &#039;&#039;&amp;quot;Program arguments&amp;quot;&#039;&#039; type the arguments  &#039;&#039;&#039;&amp;quot;-D DemoDir&amp;quot;&#039;&#039;&#039; and click the &#039;&#039;&#039;&amp;quot;Apply&amp;quot;&#039;&#039;&#039; button. Click &#039;&#039;&#039;&amp;quot;Run&amp;quot;&#039;&#039;&#039; to start the program.&lt;br /&gt;
&lt;br /&gt;
[[Image:30_arguments.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see following logs in your console:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LOG: database system was shut down at (current date and time) UTC&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;LOG: database system is ready to accept connections&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;LOG: autovacuum launcher started&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
[[Image:31_DB_feedback.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That means, the installation was successful and the server is running!&lt;br /&gt;
&lt;br /&gt;
== Debugging PostgreSQL from Eclipse ==&lt;br /&gt;
# Make sure gdb is installed on your machine&lt;br /&gt;
# Right click on the project in the Project Explorer window and select &#039;Debug As -&amp;gt; C/C++ Application&#039;&amp;lt;br&amp;gt;[[Image:elipse_pg_debug1.png|Debug in Eclipse]]&lt;br /&gt;
# Select &#039;postgres&#039; as the binary to execute&amp;lt;br&amp;gt;[[Image:elipse_pg_debug2.png|Debug in Eclipse]]&lt;br /&gt;
# If you don&#039;t have PGDATA set in the environment Eclipse is running in, you can tune the command line arguments in Run/Debug Configurations so that Postgres can start properly&amp;lt;br&amp;gt;[[Image:elipse_pg_debug3.png|Debug in Eclipse]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tip: You can do a &#039;make install&#039; and make your arguments points to that installed directory.&lt;br /&gt;
&lt;br /&gt;
== Debugging with child processes ==&lt;br /&gt;
&lt;br /&gt;
When you start debugging process by using the project default, it can only debug the postmaster process.  When clients connect to the database, the postmaster process forks child processes, each of which is actually postgres backend process responsible for the response to the client.  You might want gdb to be able to access the forked processes too.  Here&#039;s how to set that up:&lt;br /&gt;
&lt;br /&gt;
# Debug Perspective =&amp;gt; Run =&amp;gt; Debug Configuration&lt;br /&gt;
# On left side of menu you can see &amp;quot;C/C++ Attach to Application&amp;quot;&lt;br /&gt;
# Right click on &amp;quot;C/C++ Attach to Application&amp;quot; and create new debug configuration,&lt;br /&gt;
# Set Project,  Build Configuration as &amp;quot;Use Active&amp;quot; , C/C++ Application as &amp;quot;postgres&amp;quot; executable path,&lt;br /&gt;
# Start postmaster &amp;amp; one instant of postgresql client (for creating one new postgres),&lt;br /&gt;
# Click on Debug which will show current process list,&lt;br /&gt;
# Select forked &amp;quot;postgres&amp;quot; process you want to debug&lt;br /&gt;
# Put breakpoint in your function,&lt;br /&gt;
&lt;br /&gt;
== Create and open Database ==&lt;br /&gt;
&lt;br /&gt;
To see, that the installation is completely working you can do the followings to test the database.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Switch to the terminal, and change to the path &#039;&#039;&amp;quot;ubuntu/project/pgsql&amp;quot;&#039;&#039;. Execute the command:&lt;br /&gt;
      psql -l &lt;br /&gt;
This will list you all available database.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
To create your own database simply type the following:&lt;br /&gt;
    createdb DemoDB&lt;br /&gt;
&lt;br /&gt;
If you execute the list-database again (psql -l) you can see your database, &amp;quot;DemoDB&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Image:32_List_DBs.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can login to your database with:&lt;br /&gt;
    psql DemoDB&lt;br /&gt;
&lt;br /&gt;
[[Image:33_enter_DB.png]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Now you can create tables, relationships and much more. You can fully access your database. To exit your database type: &lt;br /&gt;
   /q&lt;br /&gt;
&lt;br /&gt;
== Terminate the program ==&lt;br /&gt;
The server is available until you click on the red rectangle in the console of Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
If the stop was successful you will see the following log in the console:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LOG: received smart shutdown request&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:34_DB_terminate.png]]&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=User:Gsmith&amp;diff=19477</id>
		<title>User:Gsmith</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=User:Gsmith&amp;diff=19477"/>
		<updated>2013-04-30T21:11:44Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Update my profile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Greg Smith is a consultant for for [http://www.2ndquadrant.com 2ndQuadrant], regular hacker of new features starting with [http://www.postgresql.org/docs/8.3/static/release-8-3.html PostgreSQL 8.3], and the author of [http://www.packtpub.com/postgresql-90-high-performance/book PostgreSQL 9.0 High Performance].  His blog and current articles can be found at [http://highperfpostgres.com/ High Performance PostgreSQL].&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Submitting_a_Patch&amp;diff=19476</id>
		<title>Submitting a Patch</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Submitting_a_Patch&amp;diff=19476"/>
		<updated>2013-04-30T20:51:22Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to the PostgreSQL license and clarify it&amp;#039;s not quite standard BSD or MIT.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Initial patch design ==&lt;br /&gt;
&lt;br /&gt;
If you have a trivial patch that serves an obvious need, you may be able to write the patch and submit it directly to the [http://archives.postgresql.org/pgsql-hackers/ pgsql-hackers] mailing list without having its design reviewed first.  But in general, a non-trivial change should be discussed (potentially before the code is even written) on the [http://archives.postgresql.org/pgsql-hackers/ pgsql-hackers] list before being submitted as a patch.&lt;br /&gt;
&lt;br /&gt;
For general coding style guidelines, see the [[Developer FAQ]] and the [http://developer.postgresql.org/pgdocs/postgres/source.html PostgreSQL Coding Conventions].&lt;br /&gt;
&lt;br /&gt;
=== Design your interface first ===&lt;br /&gt;
&lt;br /&gt;
Ask yourself these questions: &lt;br /&gt;
&lt;br /&gt;
* Will the user interact with this new feature? if so, how? &lt;br /&gt;
* What is the syntax? Have ideas, and the ability to defend technical decisions you believe strongly in.&lt;br /&gt;
* What are the exact semantics/behaviors?&lt;br /&gt;
* Are there any backward compatibility issues? &lt;br /&gt;
* Get community buy-in at this level of detail before you start coding. But not necessarily consensus.&lt;br /&gt;
* Write an opening paragraph to your email to the -hackers list that answers these questions:&lt;br /&gt;
**This is the kind of problem I&#039;m trying to solve&lt;br /&gt;
**This is what it is doing right now&lt;br /&gt;
**This is what it will do.&lt;br /&gt;
&lt;br /&gt;
Mostly, get someone from the community involved in your ideas as early as possible so that you can even get half-baked ideas vetted early, rather than creating something in a vacuum.  Similarly, it&#039;s easier to make progress and keep patches focused if you concentrate on the smallest portion of the idea you can execute perfectly.  Resist the temptation to build a giant patch all at once, as those are much less likely to be reviewed usefully and therefore committed.  You should take a look at how your patch will eventually be [[Reviewing a Patch|reviewed]], so you can make sure that review is likely to succeed.&lt;br /&gt;
&lt;br /&gt;
=== Save us the trouble of reformatting your code ===&lt;br /&gt;
&lt;br /&gt;
Please read [http://developer.postgresql.org/pgdocs/postgres/source.html PostgreSQL Coding Conventions]. Also, follow the style of the adjacent code!  [http://archives.postgresql.org/pgsql-hackers/2009-08/msg01001.php Suggestions from Tom] clarify some of the trickier situations you might run into.  [[Creating Clean Patches]] provides a walkthrough of how to do self-review and improvement of your patches to fix code formatting issues.&lt;br /&gt;
&lt;br /&gt;
Naming things is important, and when in doubt, ask someone else to help you with names. We tend to use [http://en.wikipedia.org/wiki/CamelCase CamelCase] or underscores: thisStyleIsOkay or this_is_okay_too.&lt;br /&gt;
&lt;br /&gt;
Generally, try to blend in with the surrounding code. Do not use #ifdef&#039;s to enable your changes. Comments are for clarification and to explain the &#039;&#039;why&#039;&#039; question, not for delineating your code from the surroundings nor to re-state what the code is doing.&lt;br /&gt;
&lt;br /&gt;
Please remove any spurious whitespace.  &#039;&#039;git diff --color&#039;&#039; makes them stand out like a sore thumb, in red.&lt;br /&gt;
&lt;br /&gt;
== Patch submission==&lt;br /&gt;
&lt;br /&gt;
Once you believe your patch is complete, please read through the complete patch that you will be sending to the mailing list.  Consider what format the patch is in (should be either context or unified) and if it&#039;s easy to read.  Ensure that the patch didn&#039;t mistakenly include unintended changes (such as whitespace changes, test code, #ifdef 0&#039;d out blocks, etc).  The patch should then be submitted via e-mail to the [http://archives.postgresql.org/pgsql-hackers/ pgsql-hackers] mailing list.  At that time, or after you wait for initial feedback, you should also add it to the page for the next [https://commitfest.postgresql.org/ CommitFest].  &lt;br /&gt;
&lt;br /&gt;
Normally changes should be submitted as a single patch that includes every file touched.  If the patch is large and can be logically separated into distinct and separately commit-able sections for easier review, with a clear order they get applied in described when applicable, that can be more straightforward for reviewers to work with for more complicated patches. Patches must be in a format which provides context (eg: [http://en.wikipedia.org/wiki/Diff#Context_format Context Diff]); &#039;normal&#039; or &#039;plain&#039; diff formats are not acceptable.  Ideally, patch authors should choose the context (diff -c) format or unified (diff -u) format based on which format makes their patch easier to read. See [[Working_with_Git#Context_diffs_with_Git|Working with git]] and [[Creating Clean Patches]] for ways to do this well. [http://petereisentraut.blogspot.com/2009/09/how-to-submit-patch-by-email.html How to submit a patch by email] for more details about mailing in patches.  If you&#039;re a new submitter, the suggestion there about using your judgment on patch formatting is not a recommended practice however--you should be using the standard context  diff format.&lt;br /&gt;
 &lt;br /&gt;
Please note that PostgreSQL uses a BSD/MIT-style license for its code. By posting a patch to the public PostgreSQL mailing lists, you are giving the PostgreSQL Global Development Group the non-revocable right to distribute your patch under the [http://www.postgresql.org/about/licence/ PostgreSQL license].&lt;br /&gt;
&lt;br /&gt;
Please include all of the following information with each patch submitted&lt;br /&gt;
&lt;br /&gt;
* Project name.&lt;br /&gt;
* Uniquely identifiable file name, so we can tell difference between your v1 and v24.&lt;br /&gt;
* What the patch does in a short paragraph.&lt;br /&gt;
* Whether the patch is for discussion or for application (see WIP notes below)&lt;br /&gt;
* Which branch the patch is against (ordinarily this will be &#039;&#039;master&#039;&#039;).  For more on branches in PostgreSQL, see [[Working_with_Git#Using_Back_Branches|Using Back Branches]].&lt;br /&gt;
* Whether it compiles and tests successfully, so we know nothing obvious is broken.&lt;br /&gt;
* Whether it contains any platform-specific items and if so, has it been tested on other platforms.&lt;br /&gt;
* Confirm that the patch includes [[Regression test authoring|regression tests]] to check the new feature actually works as described.&lt;br /&gt;
* Include documentation on how to use the new feature, including examples.  See the [http://www.postgresql.org/docs/current/static/docguide.html documentation documentation] for more information.&lt;br /&gt;
* Describe the effect your patch has on performance, if any.  &lt;br /&gt;
* Try to include a few lines about why you chose to do things particular ways, rather than let your reviewer guess what was happening. This can be done as code comments, but it might also be an additional reviewers&#039; guide, or additions to a README file in one of the code directories.&lt;br /&gt;
* If your patch addresses a [[Todo]] item, please give the name of the Todo item in your email.  This is so that the reviewers will know that the item needs to be marked as done if your patch is applied.&lt;br /&gt;
&lt;br /&gt;
It is helpful for early patches, ones not intended to be of commit quality, to be labeled clearly as such so that the appropriate style of review is done.  The abbreviation WIP (&amp;quot;Work in Progress&amp;quot;) is the standard shorthand to attach to patches intended for review not as a commit candidate, but for design feedback.  Labeling your patch as a WIP on your e-mail subject line and on the matching description in the CF application will advise reviewers to focus more on the general approach, rather than on things like coding style that can normally be ignored in the early portion of a patch&#039;s lifecycle.&lt;br /&gt;
&lt;br /&gt;
=== Reasons your patch might be returned ===&lt;br /&gt;
&lt;br /&gt;
Submitting the patch is just the first step towards getting it committed. Very few patches are committed exactly as originally submitted, even those submitted by experienced professional developers. For any non-trivial patch you should plan for at least 3 versions before final acceptance.&lt;br /&gt;
&lt;br /&gt;
There are a few common reasons patches are returned without getting the review consideration the submitter was hoping for:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The fastest way to get your patch rejected is to make unrelated changes&#039;&#039;&#039;.  Reformatting lines that haven&#039;t changed, changing unrelated comments you felt were poorly worded, touching code not necessary to your change, etc. Each patch should have the minimum set of changes required to work robustly.  If you do not follow the code formatting suggestions above, expect your patch to be returned to you with the feedback of &amp;quot;follow the code conventions&amp;quot;, quite likely without any other review.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Consider how the patch would be reviewed&#039;&#039;&#039;.  The things a reviewer will evaluate are listed in [[Reviewing a Patch]].  You should look at this list and consider if you will pass it before submission.  We recommend that new code contributors first spend time doing review, so that you will already be familiar with this list and process.  The review guidelines are used because they work; doing your own self-review before submitting your patch is recommended.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Performance gain is claimed without test case&#039;&#039;&#039;.  Performance patches are fun to write but hard to validate.  If the patch is intended to improve performance, it&#039;s a good idea to include some reproducible tests to demonstrate the improvement.  If a reviewer cannot duplicate your claimed performance improvement in a short period of time, it&#039;s very likely your patch will be returned.  Do not expect that a reviewer is going to find your performance feature so interesting that they will build an entire test suite to prove it works.  You should have done that as part of patch validation, and included the necessary framework for testing with the submission.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Did not include documentation or regression tests&#039;&#039;&#039;.  Any patch without these two items is automatically considered a WIP one--you might get review of your patch, but do not expect it to be committed.  See [[Regression test authoring]] for more information about how to write these tests.  Documenting the design at a high level in your submission e-mail is also recommended.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failed to address earlier criticisms of this design&#039;&#039;&#039;.  Many patches try to do things that have been tried or considered before, where the earlier discussion found a problem with the obvious approach.  Not saying how your new submission addresses those issues suggests you have the same problems.  The [[Todo|todo list]] is a good source for finding past discussion of ideas for patches.&lt;br /&gt;
&lt;br /&gt;
The objective of all of these suggested items is to ensure that the reviewer&#039;s time is not wasted. You spent time writing the code, but that does &#039;&#039;&#039;not&#039;&#039;&#039; mean you can demand time, energy and interest from a reviewer. Follow these guidelines and become familiar with the review process.  Make it easy on yourself and others so that your patch is accepted quickly, easily and with good humor on all sides.&lt;br /&gt;
&lt;br /&gt;
The presentation [http://www.pgcon.org/2011/schedule/events/303.en.html How To Get Your PostgreSQL Patch Accepted] provides some additional suggestions for how to submit a patch that will be considered more seriously.&lt;br /&gt;
&lt;br /&gt;
=== Submission timing ===&lt;br /&gt;
&lt;br /&gt;
To improve the odds of the right discussion of your patch or idea happening, pay attention to what the community work cycle is.  If for example you send in a brand new idea in the beta phase, don&#039;t be surprised if no one is paying attention because they are focused on release work.  Come back when the beta is done, please!&lt;br /&gt;
&lt;br /&gt;
PostgreSQL development is organized with periodic [[CommitFest|CommitFests]], which are periods where new development halts in order to focus on patch review and committing.  It&#039;s best if you can avoid sending in a new patch during the occasional weeks when there is an active CommitFest; you can check the schedule via the [https://commitfest.postgresql.org/ CommitFest application].  If your schedule doesn&#039;t allow waiting until an active CommitFest is over, you should explicitly label your submission as intended for the next CommitFest, not the current one, so that it&#039;s clear it&#039;s not intended to be part of the active review process.&lt;br /&gt;
&lt;br /&gt;
== Patch review and commit ==&lt;br /&gt;
&lt;br /&gt;
There&#039;s basically three different workflows a patch can follow after it&#039;s been submitted that lead to it being commited:&lt;br /&gt;
&lt;br /&gt;
Workflow A:&lt;br /&gt;
# You post patch to pgsql-hackers&lt;br /&gt;
# A committer picks it up immediately and commits it.&lt;br /&gt;
&lt;br /&gt;
Workflow B:&lt;br /&gt;
# You post a patch to pgsql-hackers&lt;br /&gt;
# You add the patch to the [http://commitfest.postgresql.org/action/commitfest_view/open open commitfest] queue&lt;br /&gt;
# A committer picks up the patch from the queue, and commits it&lt;br /&gt;
&lt;br /&gt;
Workflow C:&lt;br /&gt;
# You post a patch to pgsql-hackers&lt;br /&gt;
# Bruce adds the patch to a list of unapplied patches&lt;br /&gt;
# At the beginning of the next commit fest, Alvaro (with the help from others, I hope) goes through the list, and adds the patch to the [http://commitfest.postgresql.org/action/commitfest_view/open open commitfest] queue&lt;br /&gt;
# A [[Committers|committer]] picks up the patch from the queue, and commits it&lt;br /&gt;
&lt;br /&gt;
At any of these stages, your patch might instead be rejected for technical, style, or other reasons.  These rejections will normally come with feedback on whether an improved version of that patch would be more acceptable.  In those cases, you should consider updating your patch based on that feedback and re-submit.&lt;br /&gt;
&lt;br /&gt;
== Followup on submissions ==&lt;br /&gt;
&lt;br /&gt;
=== How do you get someone to respond to you? ===&lt;br /&gt;
&lt;br /&gt;
You&#039;ve sent an email to -hackers and no one has responded. What do you do?&lt;br /&gt;
&lt;br /&gt;
* Make sure you&#039;ve added your patch to the [http://commitfest.postgresql.org/action/commitfest_view/open open commitfest] queue.&lt;br /&gt;
* Start out by reviewing a patch or responding to email on the lists. Even if it is unrelated to what you&#039;re doing.&lt;br /&gt;
* Start with submitting a patch that is small and uncontroversial to help them understand you, and to get you familiar with the overall process.&lt;br /&gt;
* People are more willing to listen and work with someone who is already contributing.&lt;br /&gt;
* Also, in our community -- if no one objects, then there is implicit approval. Within reason!&lt;br /&gt;
&lt;br /&gt;
Participating in community is a process, not a single event.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch updates ===&lt;br /&gt;
&lt;br /&gt;
When submitting a new version of a previously submitted patch, you should do a few additional things:&lt;br /&gt;
&lt;br /&gt;
* Uniquely identify the new version, usually done via an incremented suffix on the name of the patch.  First review would be &#039;&#039;mypatch-v1.patch&#039;&#039;, second &#039;&#039;mypatch-v2.patch&#039;&#039;, etc.  Using the &amp;quot;.patch&amp;quot; extension allows some reviewers to more easily read it in their code editor.&lt;br /&gt;
&lt;br /&gt;
* Make sure it&#039;s easy to find any earlier discussion of the patch.  Don&#039;t expect that everyone will still be able to find previous submissions on their own.  Either fully duplicate the information about the patch from your original messages, or provide a clear link to the earlier message via the [http://archives.postgresql.org/pgsql-hackers/ archives].  Note that you can link to your earlier post using the e-mail message ID of what you sent earlier, perhaps by checking your sent e-mail for it.  That type of link is preferred because links to the archive by message number might sometimes get renumbered.  See [[Template:MessageLink]] for more details.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Development_Plan&amp;diff=18602</id>
		<title>PostgreSQL 9.3 Development Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Development_Plan&amp;diff=18602"/>
		<updated>2012-11-16T07:13:32Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Fix wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The timeline for the PostgreSQL 9.3 development cycle was initially planned at the [[PgCon 2012 Developer Meeting]].  The schedule is based on the [[PostgreSQL 9.2 Development Plan|9.2 timeline]] moved forward one year, with some optimizations based on developer feedback.&lt;br /&gt;
&lt;br /&gt;
* June 1, 2012: branch off 9.2, committing into head/trunk/master for 9.3 can begin.&lt;br /&gt;
* June 15, 2012 - July 15, 2012: [https://commitfest.postgresql.org/action/commitfest_view?id=14 commit fest 1].  Primarily for contributors who are not involved in preparing the 9.2 release.&lt;br /&gt;
* September 15, 2012 - October 15, 2012: [https://commitfest.postgresql.org/action/commitfest_view?id=15 commit fest 2]&lt;br /&gt;
* November 15, 2012 - December 15, 2012: [https://commitfest.postgresql.org/action/commitfest_view?id=16 commit fest 3]&lt;br /&gt;
** Dec 8-15 Final feature planning week&lt;br /&gt;
* January 15, 2013 - February 15, 2013: [https://commitfest.postgresql.org/action/commitfest_view?id=17 commit fest 4]&lt;br /&gt;
** Final Triage: Feb 1–7 &lt;br /&gt;
* Around February 20, 2013: 9.3 alpha release&lt;br /&gt;
* Possibly more alpha releases&lt;br /&gt;
* Beta releases&lt;br /&gt;
* Release candidates&lt;br /&gt;
* Release&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Development_Plan&amp;diff=18601</id>
		<title>PostgreSQL 9.3 Development Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Development_Plan&amp;diff=18601"/>
		<updated>2012-11-16T07:12:57Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Update dates for 9.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The timeline for the PostgreSQL 9.3 development cycle was initially planned at the [[PgCon 2012 Developer Meeting]].  The schedule is based on the [[PostgreSQL 9.2 Development Plan|9.2 timeline]] moved forward one year, with some optimizations from on developer feedback.&lt;br /&gt;
&lt;br /&gt;
* June 1, 2012: branch off 9.2, committing into head/trunk/master for 9.3 can begin.&lt;br /&gt;
* June 15, 2012 - July 15, 2012: [https://commitfest.postgresql.org/action/commitfest_view?id=14 commit fest 1].  Primarily for contributors who are not involved in preparing the 9.2 release.&lt;br /&gt;
* September 15, 2012 - October 15, 2012: [https://commitfest.postgresql.org/action/commitfest_view?id=15 commit fest 2]&lt;br /&gt;
* November 15, 2012 - December 15, 2012: [https://commitfest.postgresql.org/action/commitfest_view?id=16 commit fest 3]&lt;br /&gt;
** Dec 8-15 Final feature planning week&lt;br /&gt;
* January 15, 2013 - February 15, 2013: [https://commitfest.postgresql.org/action/commitfest_view?id=17 commit fest 4]&lt;br /&gt;
** Final Triage: Feb 1–7 &lt;br /&gt;
* Around February 20, 2013: 9.3 alpha release&lt;br /&gt;
* Possibly more alpha releases&lt;br /&gt;
* Beta releases&lt;br /&gt;
* Release candidates&lt;br /&gt;
* Release&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Development_information&amp;diff=18600</id>
		<title>Development information</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Development_information&amp;diff=18600"/>
		<updated>2012-11-16T06:28:36Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Update to show 9.3 is active&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
This area includes developer-targeted documentation regarding aspects of PostgreSQL development.  Please visit the [http://www.postgresql.org/developer developer area] of the PostgreSQL website for more general information about the development of PostgreSQL.  You can find most developers in [irc://irc.freenode.net/postgresql #postgresql on freenode]. A list of IRC nick names with their respective real world names can be found [[IRC2RWNames | here]].&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL 9.3 - Active Development==&lt;br /&gt;
* [[PostgreSQL 9.3 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.3 Open Items]]&lt;br /&gt;
&lt;br /&gt;
==Development Process==&lt;br /&gt;
* [[Todo|Todo list]]&lt;br /&gt;
* [[Todo:Contents|Unofficial Todo Detail]]&lt;br /&gt;
* [[Submitting a Patch]]&lt;br /&gt;
* [[Reviewing a Patch]]&lt;br /&gt;
* [[RRReviewers|Round-robin Patch Review]]&lt;br /&gt;
* [[Running a CommitFest]]&lt;br /&gt;
* [[Committing with Git]]&lt;br /&gt;
&lt;br /&gt;
== Developer Resources ==&lt;br /&gt;
* [[Developer FAQ]]&lt;br /&gt;
* [[Regression test authoring]]&lt;br /&gt;
* [[HowToBetaTest|HOWTO Alpha and Beta Test PostgreSQL]]&lt;br /&gt;
* [[Working with Git]]&lt;br /&gt;
* [[Working with CVS]] (obsolete)&lt;br /&gt;
* [[Working with Eclipse]] (using CVS)&lt;br /&gt;
* [[Fixing shift/reduce conflicts in Bison]]&lt;br /&gt;
* [[PL Matrix|Procedural Language Matrix]]&lt;br /&gt;
* [http://www.postgresql.org/about/featurematrix Feature Matrix]&lt;br /&gt;
* [http://www.postgresql.org/developer/coding PostgreSQL Coding]&lt;br /&gt;
* [http://developer.postgresql.org/pgdocs/postgres/index.html Development docs] (updated every 5 minutes)&lt;br /&gt;
* [[Project Hosting]]&lt;br /&gt;
* [http://www.pgcon.org/2010/schedule/attachments/142_HackingWithUDFs.pdf Exposing PostgreSQL Internals with UDFs (2010)]&lt;br /&gt;
&lt;br /&gt;
== Projects and Planning ==&lt;br /&gt;
* [http://commitfest.postgresql.org/action/commitfest_view/open Open CommitFest] - New patch submissions for 9.3&lt;br /&gt;
* [https://commitfest.postgresql.org/ CommitFest]&lt;br /&gt;
* [[PostgreSQL 8.4]]&lt;br /&gt;
* [[PgCon 2012 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2011 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2010 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2009 Developer Meeting]]&lt;br /&gt;
* [[PgCon 2008 Developer Meeting]]&lt;br /&gt;
* [[Development projects]] - links to individual projects&lt;br /&gt;
&lt;br /&gt;
==PostgreSQL Past Development==&lt;br /&gt;
* [[PostgreSQL 9.2 Open Items]]&lt;br /&gt;
* [[PostgreSQL 9.2 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.1 Open Items]]&lt;br /&gt;
* [[PostgreSQL 9.1 Development Plan]]&lt;br /&gt;
* [[PostgreSQL 9.0 Open Items]]&lt;br /&gt;
* [[85AlphaFeatures|PostgreSQL 9.0 Alpha Release Feature List]]&lt;br /&gt;
&lt;br /&gt;
[[Category:CommitFest]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Development_Plan&amp;diff=18599</id>
		<title>PostgreSQL 9.3 Development Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Development_Plan&amp;diff=18599"/>
		<updated>2012-11-16T06:27:01Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Create 9.3 plan based on 9.2 plan plus developer meeting notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The timeline for the PostgreSQL 9.3 development cycle was initially planned at the [[PgCon 2012 Developer Meeting]].  The schedule is based on the [[PostgreSQL 9.2 Development Plan|9.2 timeline]] moved forward one year, with some optimizations from on developer feedback.&lt;br /&gt;
&lt;br /&gt;
* June 1, 2012: branch off 9.2, committing into head/trunk/master for 9.3 can begin.&lt;br /&gt;
* June 15, 2011 - July 15, 2011: [https://commitfest.postgresql.org/action/commitfest_view?id=14 commit fest 1].  Primarily for contributors who are not involved in preparing the 9.2 release.&lt;br /&gt;
* September 15, 2011 - October 15, 2011: [https://commitfest.postgresql.org/action/commitfest_view?id=15 commit fest 2]&lt;br /&gt;
* November 15, 2011 - December 15, 2011: [https://commitfest.postgresql.org/action/commitfest_view?id=16 commit fest 3]&lt;br /&gt;
** Dec 8-15 Final feature planning week&lt;br /&gt;
* January 15, 2012 - February 15, 2012: [https://commitfest.postgresql.org/action/commitfest_view?id=17 commit fest 4]&lt;br /&gt;
** Final Triage: Feb 1–7 &lt;br /&gt;
* Around February 20, 2012: 9.2alpha release&lt;br /&gt;
* Followed by possibly more alpha releases&lt;br /&gt;
* Beta&lt;br /&gt;
* Release candidates&lt;br /&gt;
* Release&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Open_Items&amp;diff=18598</id>
		<title>PostgreSQL 9.3 Open Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_9.3_Open_Items&amp;diff=18598"/>
		<updated>2012-11-16T06:19:13Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Created 9.3 open items page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Planning ==&lt;br /&gt;
See the [[PostgreSQL 9.3 Development Plan]].&lt;br /&gt;
&lt;br /&gt;
== Blockers for 9.3 ==&lt;br /&gt;
&lt;br /&gt;
== Not Blockers for 9.3 ==&lt;br /&gt;
&lt;br /&gt;
== Meta-Issues ==&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
== Long-term Issues ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Postgres_Open_2012&amp;diff=18510</id>
		<title>Postgres Open 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Postgres_Open_2012&amp;diff=18510"/>
		<updated>2012-11-01T16:29:54Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add link to &amp;quot;Query Logging and Workload Analysis&amp;quot; talk&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Slides for talks will be linked here!&lt;br /&gt;
&lt;br /&gt;
== Monday September 17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Pg_security_20120917.odp PostgreSQL AuthN / AuthZ]&lt;br /&gt;
* [https://wiki.postgresql.org/images/8/86/PostgreSQL_on_ZFS.pdf PostgreSQL on ZFS]&lt;br /&gt;
&lt;br /&gt;
== Tuesday September 18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/images/7/73/Range-types-pgopen-2012.pdf Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same]&lt;br /&gt;
* [[Media:PGXC_Scalability_PGOpen2012.pdf|Scaling out by distributing and replicating data in Postgres-XC]]&lt;br /&gt;
* PostgreSQL When It&#039;s Not Your Job&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/fotolog.pdf Large Scale MySQL Migration to PostgreSQL]&lt;br /&gt;
* Choosing a logical replication system: Slony vs Bucardo&lt;br /&gt;
* Temporal Database Demo&lt;br /&gt;
&lt;br /&gt;
* [http://www.setspace.com/~jmscott/pgopen-2012-ams-talk.pdf 12 Calm Years of PostgreSQL in Critical Messaging]&lt;br /&gt;
* [https://speakerdeck.com/u/jacobian/p/the-first-postsql-database PostgreSQL in the cloud: Theory and Practice]&lt;br /&gt;
* [http://www.hagander.net/talks/Backup%20strategies.pdf PostgreSQL Backup Strategies]&lt;br /&gt;
&lt;br /&gt;
* This Is PostGIS&lt;br /&gt;
* [http://plv8-pgopen.herokuapp.com Embracing the Web with JSON and PLV8]&lt;br /&gt;
* How Akiban Implemented a New Database Compatible with the PostgreSQL Protocol&lt;br /&gt;
&lt;br /&gt;
* [[Media:Ha_postgres.pdf|High Availability with PostgreSQL and Pacemaker]]&lt;br /&gt;
* [[Media:Logging_pgopen_withnotes.pdf|Logging: Not Just for Lumberjacks]]&lt;br /&gt;
* [http://stuff.coffeecode.net/2012/pgopen_fulltext/pgsql-fulltext-intro.html Full-text search - seek and ye shall find]&lt;br /&gt;
&lt;br /&gt;
=== Lightning Talks ===&lt;br /&gt;
&lt;br /&gt;
[http://keithf4.com/sites/keithf4.com/files/pgjobmon_pgopen2012.pdf I wonder if my function works? (pg_jobmon)]&lt;br /&gt;
&lt;br /&gt;
== Wednesday September 19 ==&lt;br /&gt;
&lt;br /&gt;
* [http://pgexperts.com/document.html?id=54 Super Jumbo Deluxe], plus [http://pgexperts.com/presentations.html more presentations here]&lt;br /&gt;
* [[Media:OO_approach.pdf|An object oriented approach to data driven software development]]&lt;br /&gt;
* TransLattice Elastic Database Architecture Deep Dive&lt;br /&gt;
&lt;br /&gt;
* [http://www.pateldenish.com/2012/04/deploying-maximum-ha-architecture-with-postgresql.html Deploying maximum HA architecture with Postgres] , for pg_reorg [http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=p90xyourdatabase-13010796913746-phpapp02&amp;amp;stripped_title=p90-x-your-database p90x talk]&lt;br /&gt;
* [https://docs.google.com/presentation/pub?id=1xKixOq3NP0OjQyXpL46woSDel-LzXxtbjDVOJX-holw&amp;amp;start=false&amp;amp;loop=false Scaling Postgres with some help from Redis]&lt;br /&gt;
* Retail DDL&lt;br /&gt;
* [http://2ndquadrant.com/media/cms_page_media/59/BeyondQueryLogging.pdf Query Logging and Workload Analysis] (link is to updated version titled &amp;quot;Beyond Query Logging&amp;quot;)&lt;br /&gt;
* [[Media:Postgres-xc-sharednothing-pgopen2012.pdf|A Shared-nothing cluster system: Postgres-XC]]&lt;br /&gt;
* [http://jkshah.blogspot.com/2012/09/pgopen-2012-dvdstore-benchmark-and.html DVDStore Benchmark and PostgreSQL]&lt;br /&gt;
&lt;br /&gt;
* Performance Improvements in PostgreSQL 9.2&lt;br /&gt;
* [http://2ndquadrant.com/media/cms_page_media/59/CommitBatching.pdf A Batch of Commit Batching]&lt;br /&gt;
* [http://momjian.us/main/presentations/features.html#cte Programming the SQL Way with Common Table Expressions]&lt;br /&gt;
&lt;br /&gt;
* [https://speakerdeck.com/u/randommood/p/postgres-is-the-new-default Postgres is the new default – how we transitioned our platform at Engine Yard and why you should too]&lt;br /&gt;
* Leveraging PLV8 in Javascript-heavy Web Applications&lt;br /&gt;
* [http://keithf4.com/sites/keithf4.com/files/pgextractor_pgopen2012.pdf PG Extractor - A smarter pg_dump]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Postgres_Open_2012&amp;diff=18342</id>
		<title>Postgres Open 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Postgres_Open_2012&amp;diff=18342"/>
		<updated>2012-10-09T18:40:47Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add Commit Batching talk slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Slides for talks will be linked here!&lt;br /&gt;
&lt;br /&gt;
== Monday September 17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:Pg_security_20120917.odp PostgreSQL AuthN / AuthZ]&lt;br /&gt;
&lt;br /&gt;
== Tuesday September 18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/images/7/73/Range-types-pgopen-2012.pdf Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same]&lt;br /&gt;
* Scaling out by distributing and replicating data in Postgres-XC&lt;br /&gt;
* PostgreSQL When It&#039;s Not Your Job&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/fotolog.pdf Large Scale MySQL Migration to PostgreSQL]&lt;br /&gt;
* Choosing a logical replication system: Slony vs Bucardo&lt;br /&gt;
* Temporal Database Demo&lt;br /&gt;
&lt;br /&gt;
* [http://www.setspace.com/~jmscott/pgopen-2012-ams-talk.pdf 12 Calm Years of PostgreSQL in Critical Messaging]&lt;br /&gt;
* [https://speakerdeck.com/u/jacobian/p/the-first-postsql-database PostgreSQL in the cloud: Theory and Practice]&lt;br /&gt;
* [http://www.hagander.net/talks/Backup%20strategies.pdf PostgreSQL Backup Strategies]&lt;br /&gt;
&lt;br /&gt;
* This Is PostGIS&lt;br /&gt;
* [http://plv8-pgopen.herokuapp.com Embracing the Web with JSON and PLV8]&lt;br /&gt;
* How Akiban Implemented a New Database Compatible with the PostgreSQL Protocol&lt;br /&gt;
&lt;br /&gt;
* [[Media:Ha_postgres.pdf|High Availability with PostgreSQL and Pacemaker]]&lt;br /&gt;
* [[Media:Logging_pgopen_withnotes.pdf|Logging: Not Just for Lumberjacks]]&lt;br /&gt;
* [http://stuff.coffeecode.net/2012/pgopen_fulltext/pgsql-fulltext-intro.html Full-text search - seek and ye shall find]&lt;br /&gt;
&lt;br /&gt;
=== Lightning Talks ===&lt;br /&gt;
&lt;br /&gt;
[http://keithf4.com/sites/keithf4.com/files/pgjobmon_pgopen2012.pdf I wonder if my function works? (pg_jobmon)]&lt;br /&gt;
&lt;br /&gt;
== Wednesday September 19 ==&lt;br /&gt;
&lt;br /&gt;
* [http://pgexperts.com/document.html?id=54 Super Jumbo Deluxe], plus [http://pgexperts.com/presentations.html more presentations here]&lt;br /&gt;
* [[Media:OO_approach.pdf|An object oriented approach to data driven software development]]&lt;br /&gt;
* TransLattice Elastic Database Architecture Deep Dive&lt;br /&gt;
&lt;br /&gt;
* [http://www.pateldenish.com/2012/04/deploying-maximum-ha-architecture-with-postgresql.html Deploying maximum HA architecture with Postgres] , for pg_reorg [http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=p90xyourdatabase-13010796913746-phpapp02&amp;amp;stripped_title=p90-x-your-database p90x talk]&lt;br /&gt;
* [https://docs.google.com/presentation/pub?id=1xKixOq3NP0OjQyXpL46woSDel-LzXxtbjDVOJX-holw&amp;amp;start=false&amp;amp;loop=false Scaling Postgres with some help from Redis]&lt;br /&gt;
* Retail DDL&lt;br /&gt;
&lt;br /&gt;
* Query Logging and Workload Analysis&lt;br /&gt;
* A Shared-nothing cluster system: Postgres-XC&lt;br /&gt;
* [http://jkshah.blogspot.com/2012/09/pgopen-2012-dvdstore-benchmark-and.html DVDStore Benchmark and PostgreSQL]&lt;br /&gt;
&lt;br /&gt;
* Performance Improvements in PostgreSQL 9.2&lt;br /&gt;
* [[Media:CommitBatching.pdf|A Batch of Commit Batching]]&lt;br /&gt;
* [http://momjian.us/main/presentations/features.html#cte Programming the SQL Way with Common Table Expressions]&lt;br /&gt;
&lt;br /&gt;
* [https://speakerdeck.com/u/randommood/p/postgres-is-the-new-default Postgres is the new default – how we transitioned our platform at Engine Yard and why you should too]&lt;br /&gt;
* Leveraging PLV8 in Javascript-heavy Web Applications&lt;br /&gt;
* [http://keithf4.com/sites/keithf4.com/files/pgextractor_pgopen2012.pdf PG Extractor - A smarter pg_dump]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16993</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16993"/>
		<updated>2012-05-16T16:16:32Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add what developers want section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is &#039;&#039;&#039;by invitation only&#039;&#039;&#039;. Unfortunately it is quite possible that we&#039;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;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&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 8:30AM to 5PM, and will be in the &amp;quot;Red Experience&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 (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Shigeru Hanada&lt;br /&gt;
* Hitoshi Harada&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&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;
* Agree CommitFest schedule for 9.3 (Strawman from Simon)&lt;br /&gt;
** CF1 June 15, 2012 - 1 month&lt;br /&gt;
** CF2 Sep 15, 2012 - 1 month&lt;br /&gt;
** CF3 Nov 15, 2012 - 1 month&lt;br /&gt;
** CF4 Jan 15, 2013 - 2 months&lt;br /&gt;
* Queuing [Dimitri, Kevin]&lt;br /&gt;
** Description: efficient and transactional queuing is a very common need for application using databases, and could help implementing some internal features&lt;br /&gt;
** Goals: get an agreement that core is the right place where to solve that problem, and what parts of it we want in core exactly&lt;br /&gt;
* Materialized views [Kevin]&lt;br /&gt;
** Description: Declarative materialized views are a frequently requested feature, but means many things to many people.  It&#039;s not likely that an initial implementation will address everything.  We need a base set of functionality on which to build.&lt;br /&gt;
** Goals: Reach consensus on what a minimum feature set for commit would be.&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
** Description: to solve partitioning, we need to agree on a global approach&lt;br /&gt;
** Goals: agreeing on SE as a basis for better partitioning, having a &amp;quot;GO&amp;quot; on working on SE&lt;br /&gt;
* MERGE: Challenges and priorities [Peter G]&lt;br /&gt;
** Description: Implementing the MERGE statement for 9.3. It is envisaged specifically as an atomic &amp;quot;upsert&amp;quot; operation.&lt;br /&gt;
** Goals: To get buy-in on various aspects of the feature&#039;s development, and, ideally, to secure reviewer resources or other support. Because of the complexity of the feature, early interest from reviewers is preferable.&lt;br /&gt;
* Row-level Access Control and SELinux [KaiGai]&lt;br /&gt;
** Security label on user tables&lt;br /&gt;
** Dynamic expandable enum data types&lt;br /&gt;
** Enforcement of triggers by extension&lt;br /&gt;
* Enhancement of FDW at v9.3 [KaiGai]&lt;br /&gt;
** Writable foreign tables&lt;br /&gt;
** Stuffs to be pushed down (Join, Aggregate, Sort, ...)&lt;br /&gt;
** Inheritance of foreign/regular tables&lt;br /&gt;
** Constraint (PK/FK) &amp;amp; Trigger support.&lt;br /&gt;
* Type registry [Andrew]&lt;br /&gt;
** Provide for known OIDs for non-builtin types, and possibly for their IO functions too&lt;br /&gt;
** Would make it possible to write code in core or in extension X that handles a type defined in extension Y.&lt;br /&gt;
* Ending CommitFests in a timely fashion, especially the last one.  Avoiding a crush of massive feature patches at the end of the cycle.  Handling big patches that aren&#039;t quite ready yet.  Getting more people to help with patch review. [Robert]&lt;br /&gt;
* What Developers Want [Josh]&lt;br /&gt;
** Description: a top-5 list of features and obstacles to developer adoption of PostgreSQL (with slides)&lt;br /&gt;
** Goal: to set priorities for some features aimed at application users&lt;br /&gt;
* In-Place Upgrades &amp;amp; Checksums [Greg Smith, Simon]&lt;br /&gt;
** Description:  Revisit in-place upgrades of the page format, now that pg_upgrade is available and multiple checksum implementations needing it have been proposed.&lt;br /&gt;
** Goal:  Nail down some incremental milestones for 9.3 development to aim at.&lt;br /&gt;
* Autonomous Transactions [Simon]&lt;br /&gt;
** Overview of idea, relationship to stored procedures&lt;br /&gt;
** Feedback, buy-in and/or alternatives&lt;br /&gt;
* Parallel Query [Bruce Momjian]&lt;br /&gt;
** Hope to get buy-in for what parallel operations we are hoping to add in upcoming releases&lt;br /&gt;
* Report from Clustering Meeting [Josh] (10 min)&lt;br /&gt;
** Description: to summarize the discussions of the cluster-hackers meeting from the previous day&lt;br /&gt;
** Goal: inter-team synchronization.  Possibly, decisions requested on specific in-core features.&lt;br /&gt;
* Double Write Buffers [Simon]&lt;br /&gt;
** Is anyone committing to do that for 9.3?&lt;br /&gt;
&lt;br /&gt;
* Goals, priorities, and resources for 9.3 [All]&lt;br /&gt;
** For roadmap and planning purposes, set expectations and coordinate work schedules for 9.3.  Confirm who is doing what, identify interested reviewers at start, and check for gaps.&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:30 - 08:45&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:15&lt;br /&gt;
|Autonomous transactions&lt;br /&gt;
|Simon Riggs&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:15 - 09:40&lt;br /&gt;
|[[Queuing]]&lt;br /&gt;
|Dimitri Fontaine/Kevin Grittner&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:40 - 09:50&lt;br /&gt;
|Report from the Clustering Meeting&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:50 - 10:10&lt;br /&gt;
|Type registry&lt;br /&gt;
|Andrew Dunstan&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|10:10 - 10:30&lt;br /&gt;
|Access control and SELinux&lt;br /&gt;
|KaiGai Kohei&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;
|-&lt;br /&gt;
|10:45 - 11:15&lt;br /&gt;
|Enhancement of FDWs in 9.3&lt;br /&gt;
|KaiGai Kohei&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:15 - 11:30&lt;br /&gt;
|What developers want&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:30 - 12:00&lt;br /&gt;
|Parallel Query&lt;br /&gt;
|Bruce Momjian&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|12:00 - 12:30&lt;br /&gt;
|MERGE: Challenges and priorities&lt;br /&gt;
|Peter Geoghegan&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;
&lt;br /&gt;
|-&lt;br /&gt;
|13:30 - 14:00&lt;br /&gt;
|Materialised views&lt;br /&gt;
|Kevin Grittner&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:00 - 14:20&lt;br /&gt;
|In place upgrades and checksums&lt;br /&gt;
|Simon Riggs/Greg Smith&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:20 - 14:45&lt;br /&gt;
|Partitioning and segment exclusion&lt;br /&gt;
|Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:45 - 15:00&lt;br /&gt;
|Commitfest Schedule&lt;br /&gt;
|All&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;
|-&lt;br /&gt;
|15:15 - 15:40&lt;br /&gt;
|Commitfest management&lt;br /&gt;
|Robert Haas&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15:40 - 16:45&lt;br /&gt;
|Goals, priorities, and resources for 9.3&lt;br /&gt;
|All&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&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;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;br /&gt;
&lt;br /&gt;
== 2012 Developer Meeting Minutes ==&lt;br /&gt;
&lt;br /&gt;
Started with introductions.&lt;br /&gt;
&lt;br /&gt;
=== Autonomous Transactions ===&lt;br /&gt;
&lt;br /&gt;
Simon brought this to get some feedback on the idea.  Autonomous transactions (ATX) are a transaction inside a transaction ... a new top-level transaction.  In Oracle, it&#039;s not just one new transaction, it&#039;s a whole new context which can submit multiple new transactions.  There is no connection between parent and child transactions, which can result in new types of deadlocks.&lt;br /&gt;
&lt;br /&gt;
Each new transaction context would allocate a new pg_exec from a pg_proc call.  Implementation is straightforwards, just have to handle locking.  Allows us to implement stored procedures in an interesting way.  If we treat a stored procedure as an autonomous transaction, then this solves some problems.  We can put COMMIT&amp;lt; ROLLBACK, other things in stored procedures.  &lt;br /&gt;
&lt;br /&gt;
Tom suggested that ATX don&#039;t need to conflict with parent transaction locks.  Noah pointed out some issues with that.  We&#039;d need to have a switch for Stored Procedures in order to indicate they are autonomous, like using CREATE STORED PROCEDURE.  We&#039;d be using an additional client slot for each ATX, which could be a problem.  Oracle&#039;s limit on ATX is 70 per connection, which seems like a lot.  Maybe we should try to hold them all to a single session like it was a subtransaction.   Not sure if we can do this, Simons will need to take a look at is.&lt;br /&gt;
&lt;br /&gt;
ATX also need to eventually be able to run utility commands, like VACUUM and CREATE INDEX CONCURRENTLY.  &lt;br /&gt;
&lt;br /&gt;
=== Queueing ===&lt;br /&gt;
&lt;br /&gt;
Ultimately the materialized views will need some kind of queueing.  Once we have queueing in core, it could be generally useful.  CLUSTER CONCURRENTLY would need it, or application queues will need queueing structure.  We might want to have it exposed at the SQL level.  You put things in the queue, and at commit, others can see it.  LISTEN/NOTIFY is sort of a queue, but is only one item and vanishes if you&#039;re not listening.&lt;br /&gt;
&lt;br /&gt;
Like a table, but access semantics are different.  Would need logged/unlogged queues.  Some discussion about how queues are different from tables.  Haas wondered about whether what we need for interal queues are the same as what users need for user-visible queues.&lt;br /&gt;
&lt;br /&gt;
Queue-tables also need different performance characteristics.    We don&#039;t need queues so much as we need deferred action.  We also need background processes which wake up and check the queue.  Queues could be built on top of tables.  Discussion about uses, designs for queues ensued.&lt;br /&gt;
&lt;br /&gt;
We need a really clear design spec for how queues would work.  There are specific performance improvements we want for queueing, but they&#039;re likely to be just improvements on table performance.  The idea is to have a generalized API instead of reinventing a bunch of times.&lt;br /&gt;
&lt;br /&gt;
Next steps is to collect use cases. [[Queueing|Kevin &amp;amp; Dimitri will collect use cases on a wiki page]], to design an API.  Performance optimization needs to look at access pattern.  Simon pointed out that this works similar to fact tables where you want to move stuff forward constantly. Users might not use queues as pure FIFO.&lt;br /&gt;
&lt;br /&gt;
Unlinking segments works for deleting from the beginning of a table but indexes could be a problem.  Block numbers could be a practical problem, we might need wraparound, or reset-to-zero.&lt;br /&gt;
&lt;br /&gt;
=== Report on Clustering Meeting ===&lt;br /&gt;
&lt;br /&gt;
See [[PgCon2012CanadaClusterSummit|minutes]].&lt;br /&gt;
&lt;br /&gt;
=== Type Registry ===&lt;br /&gt;
&lt;br /&gt;
WIP idea.  Hstores aren&#039;t build in, so they get an arbitrary OID, which causes issues with writing generic code.  Looking up they type name is expensive.  It would be nice to have a registry for types where people writing extensions are allocated an OID.  Andrew gave example of hacking Postgres to support upgrading from the optional JSON type in 9.1 to the built-in type in 9.2.&lt;br /&gt;
&lt;br /&gt;
We need to expose the pg_upgrade stuff as well, set_binary_upgrade.  Should we use something other than and OID?  We need the OIDs for upgrade and for drivers.  Driver identicalness isn&#039;t the same as pg_upgradability, so we might want two different switches for that.  Maybe we should have a new OID if you change the storage of a type?&lt;br /&gt;
&lt;br /&gt;
What&#039;s the criterion for allocating an OID?  We&#039;ll need some kind of judgement.  We&#039;ll also need to block off the OID reserved space into sections.  People generally found this to be a good idea.  Andrew will create a wiki page and follow-up.  We could just do this for contrib, but that&#039;s not really a good idea.&lt;br /&gt;
&lt;br /&gt;
We could have CREATE TYPE ... WITH OID = ###, for base types only.  The folks who want it for ENUM etc. are just replication/clustering authors.  There was discussion of other approaches to handling these problems.  Users will create types with OIDs which conflict.&lt;br /&gt;
&lt;br /&gt;
=== Access Control and SE-Linux ===&lt;br /&gt;
&lt;br /&gt;
Several components: to add security around user tables.  Second, to add additional conditions around user queries.  Third, a condition around new tuples which are inserted.  Fourth, we should have ENUMs to represent user-defined security labels.  Did some performance testing on the last part, having labels as OIDs was much faster and closer to non-SE performance.&lt;br /&gt;
&lt;br /&gt;
There&#039;s concurrency issues around seeing new labels -- we&#039;d have a huge issue with inserting the labels into the system table.  Creating a new label could be a downtime event; we can have a utility command, and we can require users to create a new label first manually.   But what happens if the new label isn&#039;t there?   Should error just like a constraint.&lt;br /&gt;
&lt;br /&gt;
Is there a way to query SE-linux to get all of the security labels?  That&#039;s hard, because it&#039;s four fields.  The last field is an issue for prediction.  There&#039;s a lot of value in having row-level security be completely type-agnosic; we just have a string and we don&#039;t care what&#039;s in it.&lt;br /&gt;
&lt;br /&gt;
An SE Label consists of: user, row field, type field, and (something inaudible).  That last part is a kind of bitmap.  Do we actually need that part, though?    What&#039;s multi-category security, will we support that?  How many different labels would you have on a specific table?&lt;br /&gt;
&lt;br /&gt;
The idea of row-level security is to force quals on people.  Currently it&#039;s not transparent.  The discussion on labels needs to continue elsewhere.&lt;br /&gt;
&lt;br /&gt;
Also we need to address FK and PK implementation for security labels.&lt;br /&gt;
&lt;br /&gt;
=== What Developers want ===&lt;br /&gt;
&lt;br /&gt;
PostgreSQL is becoming the default for many web applications like Ruby and Django.  But there are plenty of users complaints.  They don&#039;t show up on the PostgreSQL mailing lists.  The developer complaints are on stackoverflow, forums for virtual hosting companies, and application specific lists like ORM/framework layers.&lt;br /&gt;
&lt;br /&gt;
Two categories of developer comments:  blockers that cause to use another tool, and enhancers that would expand the market into new areas.  Many of these are available features, but they seem to hard to use.&lt;br /&gt;
&lt;br /&gt;
==== Blockers ====&lt;br /&gt;
&lt;br /&gt;
1.  Installation onto developer laptops (Windows / OS X)&lt;br /&gt;
* Re-installs problematic in Windows&lt;br /&gt;
* Reinstall of Redis is the competitor here, it is a closer to a true one-click installer.&lt;br /&gt;
* People use Redis because it&#039;s &amp;quot;easy to install&amp;quot;, while PostgreSQL ran into one of multiple problems (reported on lists like pgsql-general)&lt;br /&gt;
* postgres.app is aiming at simplifying things for Mac developers, is in beta&lt;br /&gt;
* Kevin:  also seen issues with Rails + Rake, lots of questions on Stackoverflow.&lt;br /&gt;
2.  Complexity of configuring PostgreSQL, i.e. postgresql.conf&lt;br /&gt;
* Shared memory issues on the Mac&lt;br /&gt;
** Could use POSIX shared memory instead Sys V&lt;br /&gt;
* Need a configuration generator and hints for settings that are set incorrectly&lt;br /&gt;
**Example:  need to increase size of the transaction log with pg_xlog having X GB of space.  Math to determine settings like checkpoint_segements given a GB target is complicated.&lt;br /&gt;
3.  Better analysis and troubleshooting&lt;br /&gt;
* Expose everything via SQL, i.e. autovacuum ; no parsing logs.&lt;br /&gt;
* EXPLAIN needs to be easier to understand, suggest what needs to be done when planner mistakes are made.&lt;br /&gt;
* Freeze a stable query plan needed for some apps.&lt;br /&gt;
4.  Easier to understand replication&lt;br /&gt;
* External projects that try to help are often less maintained/robust/documented than core&lt;br /&gt;
* Same thing is true for pooling projects&lt;br /&gt;
5. Better pg_upgrade&lt;br /&gt;
* More trustworthy&lt;br /&gt;
* Handle version upgrades across large clusters&lt;br /&gt;
* Deliver on &amp;lt;5 minutes promise.  Can take a long time for statistics ANALYZE.  Needs to save/restore that instead.&lt;br /&gt;
6. MERGE UPSERT&lt;br /&gt;
&lt;br /&gt;
=== Enabling features to broaden userbase ===&lt;br /&gt;
&lt;br /&gt;
1. Finish JSON support&lt;br /&gt;
* Most popular new feature on news sites LWN etc. since 9.0 replication&lt;br /&gt;
* Some people want simple document storage like NoSQL, but with PostgreSQl reliability&lt;br /&gt;
* Needs indexing performance improvements&lt;br /&gt;
* More extract from JSON features&lt;br /&gt;
* Schemaless PostgreSQL is possible with JSON or hstore, but it&#039;s not obvious that&#039;s true.&lt;br /&gt;
2.  Better extensions&lt;br /&gt;
* Packaging for popular extensions on popular &lt;br /&gt;
* Extensions should follow replication; move .so to standby?  Lots of resistance to that idea.&lt;br /&gt;
* Better visibility of extensions, and extension aggregators like PGXN.&lt;br /&gt;
3.  Client language queries&lt;br /&gt;
* Straight from, say, Python to a parse tree&lt;br /&gt;
* SQL Server/.Net does move in this direction for C#&lt;br /&gt;
* Competition here is the non-relational databases&lt;br /&gt;
4.  Built-in sharding&lt;br /&gt;
* PL/Proxy:  must find it, minimal docs, questions around support situation&lt;br /&gt;
* Target user base here doesn&#039;t like SQL or functions much either&lt;br /&gt;
* Base on writable FDW?&lt;br /&gt;
* Borrow ideas from notable sharded PostgreSQL deployments?&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16810</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16810"/>
		<updated>2012-05-10T03:29:25Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Rearrange to put longer &amp;quot;Goals..&amp;quot; section at end&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is &#039;&#039;&#039;by invitation only&#039;&#039;&#039;. Unfortunately it is quite possible that we&#039;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;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&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;Red Experience&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 (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Shigeru Hanada&lt;br /&gt;
* Hitoshi Harada&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&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;
* Agree CommitFest schedule for 9.3 (Strawman from Simon)&lt;br /&gt;
** CF1 June 15, 2012 - 1 month&lt;br /&gt;
** CF2 Sep 15, 2012 - 1 month&lt;br /&gt;
** CF3 Nov 15, 2012 - 1 month&lt;br /&gt;
** CF4 Jan 15, 2013 - 2 months&lt;br /&gt;
* Queuing [Dimitri, Kevin]&lt;br /&gt;
** Description: efficient and transactional queuing is a very common need for application using databases, and could help implementing some internal features&lt;br /&gt;
** Goals: get an agreement that core is the right place where to solve that problem, and what parts of it we want in core exactly&lt;br /&gt;
* Materialized views [Kevin]&lt;br /&gt;
** Description: Declarative materialized views are a frequently requested feature, but means many things to many people.  It&#039;s not likely that an initial implementation will address everything.  We need a base set of functionality on which to build.&lt;br /&gt;
** Goals: Reach consensus on what a minimum feature set for commit would be.&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
** Description: to solve partitioning, we need to agree on a global approach&lt;br /&gt;
** Goals: agreeing on SE as a basis for better partitioning, having a &amp;quot;GO&amp;quot; on working on SE&lt;br /&gt;
* MERGE: Challenges and priorities [Peter G]&lt;br /&gt;
** Description: Implementing the MERGE statement for 9.3. It is envisaged specifically as an atomic &amp;quot;upsert&amp;quot; operation.&lt;br /&gt;
** Goals: To get buy-in on various aspects of the feature&#039;s development, and, ideally, to secure reviewer resources or other support. Because of the complexity of the feature, early interest from reviewers is preferable.&lt;br /&gt;
* Row-level Access Control and SELinux [KaiGai]&lt;br /&gt;
** Security label on user tables&lt;br /&gt;
** Dynamic expandable enum data types&lt;br /&gt;
** Enforcement of triggers by extension&lt;br /&gt;
* Enhancement of FDW at v9.3 [KaiGai]&lt;br /&gt;
** Writable foreign tables&lt;br /&gt;
** Stuffs to be pushed down (Join, Aggregate, Sort, ...)&lt;br /&gt;
** Inheritance of foreign/regular tables&lt;br /&gt;
** Constraint (PK/FK) &amp;amp; Trigger support.&lt;br /&gt;
* Type registry [Andrew]&lt;br /&gt;
** Provide for known OIDs for non-builtin types, and possibly for their IO functions too&lt;br /&gt;
** Would make it possible to write code in core or in extension X that handles a type defined in extension Y.&lt;br /&gt;
* Ending CommitFests in a timely fashion, especially the last one.  Avoiding a crush of massive feature patches at the end of the cycle.  Handling big patches that aren&#039;t quite ready yet.  Getting more people to help with patch review. [Robert]&lt;br /&gt;
* What Developers Want [Josh]&lt;br /&gt;
** Description: a top-5 list of features and obstacles to developer adoption of PostgreSQL (with slides)&lt;br /&gt;
** Goal: to set priorities for some features aimed at application users&lt;br /&gt;
* In-Place Upgrades &amp;amp; Checksums [Greg Smith, Simon]&lt;br /&gt;
** Description:  Revisit in-place upgrades of the page format, now that pg_upgrade is available and multiple checksum implementations needing it have been proposed.&lt;br /&gt;
** Goal:  Nail down some incremental milestones for 9.3 development to aim at.&lt;br /&gt;
* Autonomous Transactions [Simon]&lt;br /&gt;
** Overview of idea, relationship to stored procedures&lt;br /&gt;
** Feedback, buy-in and/or alternatives&lt;br /&gt;
* Parallel Query [Bruce Momjian]&lt;br /&gt;
** Hope to get buy-in for what parallel operations we are hoping to add in upcoming releases&lt;br /&gt;
* Report from Clustering Meeting [Josh] (10 min)&lt;br /&gt;
** Description: to summarize the discussions of the cluster-hackers meeting from the previous day&lt;br /&gt;
** Goal: inter-team synchronization.  Possibly, decisions requested on specific in-core features.&lt;br /&gt;
* Double Write Buffers [Simon]&lt;br /&gt;
** Is anyone committing to do that for 9.3?&lt;br /&gt;
&lt;br /&gt;
* Goals, priorities, and resources for 9.3 [All]&lt;br /&gt;
** For roadmap and planning purposes, set expectations and coordinate work schedules for 9.3.  Confirm who is doing what, identify interested reviewers at start, and check for gaps.&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:30 - 08:45&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:15&lt;br /&gt;
|Autonomous transactions&lt;br /&gt;
|Simon Riggs&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:15 - 09:40&lt;br /&gt;
|Queuing&lt;br /&gt;
|Dimitri Fontaine/Kevin Grittner&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:40 - 09:50&lt;br /&gt;
|Report from the Clustering Meeting&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:50 - 10:10&lt;br /&gt;
|Type registry&lt;br /&gt;
|Andrew Dunstan&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|10:10 - 10:30&lt;br /&gt;
|Access control and SELinux&lt;br /&gt;
|KaiGai Kohei&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;
|-&lt;br /&gt;
|10:45 - 11:15&lt;br /&gt;
|Enhancement of FDWs in 9.3&lt;br /&gt;
|KaiGai Kohei&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:15 - 11:30&lt;br /&gt;
|What developers want&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:30 - 12:00&lt;br /&gt;
|Parallel Query&lt;br /&gt;
|Bruce Momjian&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|12:00 - 12:30&lt;br /&gt;
|MERGE: Challenges and priorities&lt;br /&gt;
|Peter Geoghegan&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;
&lt;br /&gt;
|-&lt;br /&gt;
|13:30 - 14:00&lt;br /&gt;
|Materialised views&lt;br /&gt;
|Kevin Grittner&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:00 - 14:20&lt;br /&gt;
|In place upgrades and checksums&lt;br /&gt;
|Simon Riggs/Greg Smith&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:20 - 14:45&lt;br /&gt;
|Partitioning and segment exclusion&lt;br /&gt;
|Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:45 - 15:00&lt;br /&gt;
|Commitfest Schedule&lt;br /&gt;
|All&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;
|-&lt;br /&gt;
|15:15 - 15:40&lt;br /&gt;
|Commitfest management&lt;br /&gt;
|Robert Haas&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15:40 - 16:45&lt;br /&gt;
|Goals, priorities, and resources for 9.3&lt;br /&gt;
|All&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&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;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16713</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16713"/>
		<updated>2012-05-04T21:50:25Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add description/goal to upgrade discussion proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is &#039;&#039;&#039;by invitation only&#039;&#039;&#039;. Unfortunately it is quite possible that we&#039;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;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&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;Red Experience&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 (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Shigeru Hanada&lt;br /&gt;
* Hitoshi Harada&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&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;
* Priorities for 9.3 [All]&lt;br /&gt;
** Description: discuss what people are working on and what&#039;s likely to be in 9.3.&lt;br /&gt;
** Goals: set expectations and coordinate work schedules for 9.3.&lt;br /&gt;
* Queuing [Dimitri, Kevin]&lt;br /&gt;
* Materialized views [Dimitri, Kevin]&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
* The MERGE statement: Challenges and priorities [Peter G]&lt;br /&gt;
* Row-level Access Control and SELinux [KaiGai]&lt;br /&gt;
** Security label on user tables&lt;br /&gt;
** Dynamic expandable enum data types&lt;br /&gt;
** Enforcement of triggers by extension&lt;br /&gt;
* Enhancement of FDW at v9.3 [KaiGai]&lt;br /&gt;
** Writable foreign tables&lt;br /&gt;
** Stuffs to be pushed down (Join, Aggregate, Sort, ...)&lt;br /&gt;
** Inheritance of foreign/regular tables&lt;br /&gt;
** Constraint (PK/FK) &amp;amp; Trigger support.&lt;br /&gt;
* Ending CommitFests in a timely fashion, especially the last one.  Avoiding a crush of massive feature patches at the end of the cycle.  Handling big patches that aren&#039;t quite ready yet.  Getting more people to help with patch review. [Robert]&lt;br /&gt;
* What Developers Want [Josh]&lt;br /&gt;
** Description: a top-5 list of features and obstacles to developer adoption of PostgreSQL (with slides)&lt;br /&gt;
** Goal: to set priorities for some features aimed at application users&lt;br /&gt;
* In-Place Upgrades &amp;amp; Checksums [Greg Smith, Simon]&lt;br /&gt;
** Description:  Revisit in-place upgrades of the page format, now that pg_upgrade is available and multiple checksum implementations needing it have been proposed.&lt;br /&gt;
** Goal:  Nail down some incremental milestones for 9.3 development to aim at.&lt;br /&gt;
* Autonomous Subtransactions [Simon]&lt;br /&gt;
* Parallel Query [Bruce Momjian]&lt;br /&gt;
* Report from Clustering Meeting [Josh] (10 min)&lt;br /&gt;
** Description: to summarize the discussions of the cluster-hackers meeting from the previous day&lt;br /&gt;
** Goal: inter-team synchronization.  Possibly, decisions requested on specific in-core features.&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon2012CanadaClusterSummit&amp;diff=16641</id>
		<title>PgCon2012CanadaClusterSummit</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon2012CanadaClusterSummit&amp;diff=16641"/>
		<updated>2012-04-27T18:24:34Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Added Greg Smith&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 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;
=== Project Reports: 5 minutes from each project ===&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 -- Steve or Chris&lt;br /&gt;
* Stado -- Jim&lt;br /&gt;
&lt;br /&gt;
=== Technical Issues of common interest ===&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;
* 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;
* Command Triggers - Dimitri&lt;br /&gt;
* Detecting database change caused by triggers and cascade operations - Tatsuo&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&lt;br /&gt;
# David Wheeler&lt;br /&gt;
# Josh Berkus, moderator&lt;br /&gt;
# Tetsuo Sakata, Postgres-XC&lt;br /&gt;
# Ahsan Hadi, Postgres-XC&lt;br /&gt;
# Andres Freund, Bi-Directional Replication&lt;br /&gt;
# Greg Smith, Bi-Directional Replication&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>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon2012CanadaInCoreReplicationMeeting&amp;diff=16635</id>
		<title>PgCon2012CanadaInCoreReplicationMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon2012CanadaInCoreReplicationMeeting&amp;diff=16635"/>
		<updated>2012-04-27T13:33:12Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Going to this meeting&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;
* Greg Smith&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>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16606</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16606"/>
		<updated>2012-04-25T19:09:39Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Topic suggestions from Greg and Simon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is &#039;&#039;&#039;by invitation only&#039;&#039;&#039;. Unfortunately it is quite possible that we&#039;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;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&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;Red Experience&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 (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Shigeru Hanada&lt;br /&gt;
* Hitoshi Harada&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&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;
* Queuing [Dimitri, Kevin]&lt;br /&gt;
* Materialized views [Dimitri, Kevin]&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
* The MERGE statement: Challenges, priorities and implementation [Peter G]&lt;br /&gt;
* Row-level Access Control and SELinux [KaiGai]&lt;br /&gt;
** Security label on user tables&lt;br /&gt;
** Dynamic expandable enum data types&lt;br /&gt;
** Enforcement of triggers by extension&lt;br /&gt;
* Enhancement of FDW at v9.3 [KaiGai]&lt;br /&gt;
** Writable foreign tables&lt;br /&gt;
** Stuffs to be pushed down (Join, Aggregate, Sort, ...)&lt;br /&gt;
** Inheritance of foreign/regular tables&lt;br /&gt;
** Constraint (PK/FK) &amp;amp; Trigger support.&lt;br /&gt;
* Ending CommitFests in a timely fashion, especially the last one.  Avoiding a crush of massive feature patches at the end of the cycle.  Handling big patches that aren&#039;t quite ready yet.  Getting more people to help with patch review. [Robert]&lt;br /&gt;
* What Developers Want [Josh]&lt;br /&gt;
** a top-5 list of features and obstacles to developer adoption of PostgreSQL (with slides)&lt;br /&gt;
* In-Place Upgrades &amp;amp; Checksums [Greg Smith, Simon]&lt;br /&gt;
* Future of In-Core Replication [Simon]&lt;br /&gt;
* Autonomous Subtransactions [Simon]&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Streaming_Replication&amp;diff=16478</id>
		<title>Streaming Replication</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Streaming_Replication&amp;diff=16478"/>
		<updated>2012-04-03T23:12:32Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Reroute users away from this developer page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Streaming Replication&#039;&#039;&#039; (SR) provides the capability to continuously ship and&lt;br /&gt;
apply the [http://www.postgresql.org/docs/current/static/wal.html WAL XLOG] records to some number of standby servers in order to keep them current.&lt;br /&gt;
&lt;br /&gt;
This feature was added to PostgreSQL 9.0.  The discussion below is a developer oriented one that contains some out of data information.  Users of this feature should use the documentation for the feature or a setup tutorial instead:&lt;br /&gt;
&lt;br /&gt;
* [[Binary Replication Tutorial]] provides an introduction to using this replication feature.&lt;br /&gt;
* [http://www.postgresql.org/docs/9.1/static/warm-standby.html 9.0 Replication Documentation]&lt;br /&gt;
* [http://www.postgresql.org/docs/9.0/static/warm-standby.html 9.1 Replication Documentation]&lt;br /&gt;
&lt;br /&gt;
= Project =&lt;br /&gt;
SR was developed for inclusion in PostgreSQL 9.0 by NTT OSS Center. The lead developer is [mailto:masao.fujii@gmail.com Masao Fujii].  [http://www.pgcon.org/2008/schedule/events/76.en.html Synchronous Log Shipping Replication Presentation] introduces the early design of the feature.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== Users Overview ==&lt;br /&gt;
* &#039;&#039;&#039;Log-shipping&#039;&#039;&#039;&lt;br /&gt;
** XLOG records generated in the primary are periodically shipped to the standby via the network.&lt;br /&gt;
** In the existing warm standby, only records in a filled file are shipped, what&#039;s referred to as file-based log-shipping.  In SR, XLOG records in partially-filled XLOG file are shipped too, implementing record-based log-shipping.  This means the window for data loss in SR is usually smaller than in warm standby, unless the warm standby was also configured for record-based shipping (which is complicated to setup).&lt;br /&gt;
** The content of XLOG files written to the standby are exactly the same as those on the primary. XLOG files shipped can be used for a normal recovery and PITR.&lt;br /&gt;
* &#039;&#039;&#039;Multiple standbys&#039;&#039;&#039;&lt;br /&gt;
** More than one standby can establish a connection to the primary for SR. XLOG records are concurrently shipped to all these standbys. The delay/death of a standby does not harm log-shipping to other standbys.&lt;br /&gt;
** The maximum number of standbys can be specified as a GUC variable.&lt;br /&gt;
* &#039;&#039;&#039;Continuous recovery&#039;&#039;&#039;&lt;br /&gt;
** The standby continuously replays XLOG records shipped without using pg_standby.&lt;br /&gt;
** XLOG records shipped are replayed as soon as possible without waiting until XLOG file has been filled. The combination of [[Hot Standby]] and SR would make the latest data inserted into the primary visible in the standby almost immediately.&lt;br /&gt;
** The standby periodically removes old XLOG files which are no longer needed for recovery, to prevent excessive disk usage.&lt;br /&gt;
* &#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
** The start of log-shipping does not interfere with any query processing on the primary.&lt;br /&gt;
** The standby can be started in various conditions.&lt;br /&gt;
*** If there are XLOG files in archive directory and restore_command is supplied, at first those files are replayed. Then the standby requests XLOG records following the last applied one to the primary. This prevents XLOG files already present in the standby from being shipped again. Similarly, XLOG files in pg_xlog are also replayed before starting log-shipping.&lt;br /&gt;
*** If there is no XLOG files on the standby, the standby requests XLOG records following the starting XLOG location of recovery (the redo starting location).&lt;br /&gt;
* &#039;&#039;&#039;Connection settings and authentication&#039;&#039;&#039;&lt;br /&gt;
** A user can configure the same settings as a normal connection to a connection for SR (e.g., keepalive, pg_hba.conf).&lt;br /&gt;
* &#039;&#039;&#039;Activation&#039;&#039;&#039;&lt;br /&gt;
** The standby can keep waiting for activation as long as a user likes. This prevents the standby from being automatically brought up by failure of recovery or network outage.&lt;br /&gt;
* &#039;&#039;&#039;Progress report&#039;&#039;&#039;&lt;br /&gt;
** The primary and standby report the progress of log-shipping in PS display.&lt;br /&gt;
* &#039;&#039;&#039;Graceful shutdown&#039;&#039;&#039;&lt;br /&gt;
** When smart/fast shutdown is requested, the primary waits to exit until XLOG records have been sent to the standby, up to the shutdown checkpoint record.&lt;br /&gt;
&lt;br /&gt;
== Restrictions ==&lt;br /&gt;
* &#039;&#039;&#039;Synchronous log-shipping&#039;&#039;&#039;&lt;br /&gt;
** Currently SR supports only asynchronous log-shipping. The commit command might return a &amp;quot;success&amp;quot; to a client before the corresponding XLOG records are shipped to the standby.&lt;br /&gt;
* &#039;&#039;&#039;Replication beyond timeline&#039;&#039;&#039;&lt;br /&gt;
** A user has to get a fresh backup whenever making the old standby catch up.&lt;br /&gt;
* &#039;&#039;&#039;Clustering&#039;&#039;&#039;&lt;br /&gt;
** Postgres doesn&#039;t provide any clustering feature.&lt;br /&gt;
&lt;br /&gt;
== How to Use ==&lt;br /&gt;
* &#039;&#039;&#039;1.&#039;&#039;&#039; Install postgres in the primary and standby server as usual.  This requires only &#039;&#039;configure&#039;&#039;, &#039;&#039;make&#039;&#039; and &#039;&#039;make install&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;2.&#039;&#039;&#039; Create the initial database cluster in the primary server as usual, using &#039;&#039;initdb&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;3.&#039;&#039;&#039; Set up connections and authentication so that the standby server can successfully connect to the &#039;&#039;replication&#039;&#039; pseudo-database on the primary.&lt;br /&gt;
 $ $EDITOR postgresql.conf&lt;br /&gt;
 &lt;br /&gt;
 listen_addresses = &#039;192.168.0.10&#039;&lt;br /&gt;
 &lt;br /&gt;
 $ $EDITOR pg_hba.conf&lt;br /&gt;
 &lt;br /&gt;
 # The standby server must have superuser access privileges.&lt;br /&gt;
 host  replication  postgres  192.168.0.20/22  trust&lt;br /&gt;
* &#039;&#039;&#039;4.&#039;&#039;&#039; Set up the streaming replication related parameters on the primary server.&lt;br /&gt;
 $ $EDITOR postgresql.conf&lt;br /&gt;
 &lt;br /&gt;
 # To enable read-only queries on a standby server, wal_level must be set to&lt;br /&gt;
 # &amp;quot;hot_standby&amp;quot;. But you can choose &amp;quot;archive&amp;quot; if you never connect to the&lt;br /&gt;
 # server in standby mode.&lt;br /&gt;
 wal_level = hot_standby&lt;br /&gt;
 &lt;br /&gt;
 # Set the maximum number of concurrent connections from the standby servers.&lt;br /&gt;
 max_wal_senders = 5&lt;br /&gt;
 &lt;br /&gt;
 # To prevent the primary server from removing the WAL segments required for&lt;br /&gt;
 # the standby server before shipping them, set the minimum number of segments&lt;br /&gt;
 # retained in the pg_xlog directory. At least wal_keep_segments should be&lt;br /&gt;
 # larger than the number of segments generated between the beginning of&lt;br /&gt;
 # online-backup and the startup of streaming replication. If you enable WAL&lt;br /&gt;
 # archiving to an archive directory accessible from the standby, this may&lt;br /&gt;
 # not be necessary.&lt;br /&gt;
 wal_keep_segments = 32&lt;br /&gt;
 &lt;br /&gt;
 # Enable WAL archiving on the primary to an archive directory accessible from&lt;br /&gt;
 # the standby. If wal_keep_segments is a high enough number to retain the WAL&lt;br /&gt;
 # segments required for the standby server, this is not necessary.&lt;br /&gt;
 archive_mode    = on&lt;br /&gt;
 archive_command = &#039;cp %p /path_to/archive/%f&#039;&lt;br /&gt;
* &#039;&#039;&#039;5.&#039;&#039;&#039; Start postgres on the primary server.&lt;br /&gt;
* &#039;&#039;&#039;6.&#039;&#039;&#039; Make a base backup by copying the primary server&#039;s data directory to the standby server.&lt;br /&gt;
 $ psql -c &amp;quot;SELECT pg_start_backup(&#039;label&#039;, true)&amp;quot;&lt;br /&gt;
 $ rsync -a ${PGDATA}/ standby:/srv/pgsql/standby/ --exclude postmaster.pid&lt;br /&gt;
 $ psql -c &amp;quot;SELECT pg_stop_backup()&amp;quot;&lt;br /&gt;
* &#039;&#039;&#039;7.&#039;&#039;&#039; Set up replication-related parameters, connections and authentication in the standby server like the primary, so that the standby might work as a primary after failover.&lt;br /&gt;
* &#039;&#039;&#039;8.&#039;&#039;&#039; Enable read-only queries on the standby server. But if wal_level is &#039;&#039;archive&#039;&#039; on the primary, leave hot_standby unchanged (i.e., off).&lt;br /&gt;
 $ $EDITOR postgresql.conf&lt;br /&gt;
 &lt;br /&gt;
 hot_standby = on&lt;br /&gt;
* &#039;&#039;&#039;9.&#039;&#039;&#039; Create a recovery command file in the standby server; the following parameters are required for streaming replication.&lt;br /&gt;
 $ $EDITOR recovery.conf&lt;br /&gt;
 # Note that recovery.conf must be in $PGDATA directory.&lt;br /&gt;
 &lt;br /&gt;
 # Specifies whether to start the server as a standby. In streaming replication,&lt;br /&gt;
 # this parameter must to be set to on.&lt;br /&gt;
 standby_mode          = &#039;on&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Specifies a connection string which is used for the standby server to connect&lt;br /&gt;
 # with the primary.&lt;br /&gt;
 primary_conninfo      = &#039;host=192.168.0.10 port=5432 user=postgres&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Specifies a trigger file whose presence should cause streaming replication to&lt;br /&gt;
 # end (i.e., failover).&lt;br /&gt;
 trigger_file = &#039;/path_to/trigger&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Specifies a command to load archive segments from the WAL archive. If&lt;br /&gt;
 # wal_keep_segments is a high enough number to retain the WAL segments&lt;br /&gt;
 # required for the standby server, this may not be necessary. But&lt;br /&gt;
 # a large workload can cause segments to be recycled before the standby&lt;br /&gt;
 # is fully synchronized, requiring you to start again from a new base backup.&lt;br /&gt;
 restore_command = &#039;cp /path_to/archive/%f &amp;quot;%p&amp;quot;&#039;&lt;br /&gt;
* &#039;&#039;&#039;10.&#039;&#039;&#039; Start postgres in the standby server. It will start streaming replication.&lt;br /&gt;
* &#039;&#039;&#039;11.&#039;&#039;&#039; You can calculate the replication lag by comparing the current WAL write location on the primary with the last WAL location received/replayed by the standby. They can be retrieved using &#039;&#039;pg_current_xlog_location&#039;&#039; on the primary and the &#039;&#039;pg_last_xlog_receive_location&#039;&#039;/&#039;&#039;pg_last_xlog_replay_location&#039;&#039; on the standby, respectively.&lt;br /&gt;
 $ psql -c &amp;quot;SELECT pg_current_xlog_location()&amp;quot; -h192.168.0.10 (primary host)&lt;br /&gt;
  pg_current_xlog_location &lt;br /&gt;
 --------------------------&lt;br /&gt;
  0/2000000&lt;br /&gt;
 (1 row)&lt;br /&gt;
 &lt;br /&gt;
 $ psql -c &amp;quot;select pg_last_xlog_receive_location()&amp;quot; -h192.168.0.20 (standby host)&lt;br /&gt;
  pg_last_xlog_receive_location &lt;br /&gt;
 -------------------------------&lt;br /&gt;
  0/2000000&lt;br /&gt;
 (1 row)&lt;br /&gt;
 &lt;br /&gt;
 $ psql -c &amp;quot;select pg_last_xlog_replay_location()&amp;quot; -h192.168.0.20 (standby host)&lt;br /&gt;
  pg_last_xlog_replay_location &lt;br /&gt;
 ------------------------------&lt;br /&gt;
  0/2000000&lt;br /&gt;
 (1 row)&lt;br /&gt;
* &#039;&#039;&#039;12.&#039;&#039;&#039; You can also check the progress of streaming replication by using &#039;&#039;ps&#039;&#039; command.&lt;br /&gt;
 # The displayed LSNs indicate the byte position that the standby server has&lt;br /&gt;
 # written up to in the xlogs.&lt;br /&gt;
 [primary] $ ps -ef | grep sender&lt;br /&gt;
 postgres  6879  6831  0 10:31 ?        00:00:00 postgres: wal sender process postgres 127.0.0.1(44663) streaming 0/2000000&lt;br /&gt;
 &lt;br /&gt;
 [standby] $ ps -ef | grep receiver&lt;br /&gt;
 postgres  6878  6872  1 10:31 ?        00:00:01 postgres: wal receiver process   streaming 0/2000000&lt;br /&gt;
* How to do failover&lt;br /&gt;
** Create the trigger file in the standby after the primary fails.&lt;br /&gt;
* How to stop the primary or the standby server&lt;br /&gt;
** Shut down it as usual (&#039;&#039;pg_ctl stop&#039;&#039;).&lt;br /&gt;
* How to restart streaming replication after failover&lt;br /&gt;
** Repeat the operations from &#039;&#039;&#039;6th&#039;&#039;&#039;; making a fresh backup, some configurations and starting the original primary as the standby. The primary server doesn&#039;t need to be stopped during these operations.&lt;br /&gt;
* How to restart streaming replication after the standby fails&lt;br /&gt;
** Restart postgres in the standby server after eliminating the cause of failure.&lt;br /&gt;
* How to disconnect the standby from the primary&lt;br /&gt;
** Create the trigger file in the standby while the primary is running. Then the standby would be brought up.&lt;br /&gt;
* How to re-synchronize the stand-alone standby after isolation&lt;br /&gt;
** Shut down the standby as usual. And repeat the operations from &#039;&#039;&#039;6th&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
== v9.0 ==&lt;br /&gt;
&lt;br /&gt;
Moved to [[PostgreSQL_9.0_Open_Items]]&lt;br /&gt;
&lt;br /&gt;
=== Committed ===&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01455.php Retrying from archive and some refactoring around Read/FetchRecord().] - [http://archives.postgresql.org/pgsql-committers/2010-01/msg00395.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg02601.php SR wrongly treats the WAL-boundary.] - [http://archives.postgresql.org/pgsql-committers/2010-01/msg00396.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01715.php Adjust SR for some later changes about wal-skipping.] - [http://archives.postgresql.org/pgsql-committers/2010-01/msg00399.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg00024.php VACUUM FULL unexpectedly writes an XLOG UNLOGGED record.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00038.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01754.php Add a message type header.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00037.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01536.php Documentation: Add a new &amp;quot;Replication&amp;quot; chapter.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00115.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg00350.php Failed assertion during recovery of partial WAL file.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00124.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg00712.php A PANIC error might occur in the standby because of a partially-filled archived WAL file.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00137.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg00330.php Improve the standby messages.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00140.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01672.php pq_getbyte_if_available() is not working because the win32 socket emulation layer simply wasn&#039;t designed to deal with non-blocking sockets.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00198.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01488.php Walsender might emit unfit messages.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00239.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01236.php Streaming replication on win32, still broken.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00270.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg00992.php Create new section for recovery.conf.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00295.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01824.php Assertion failure in walreceiver.] - [http://archives.postgresql.org/pgsql-committers/2010-02/msg00356.php commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01717.php Forbid a startup of walsender during recovery, and emit a suitable message? Or allow walsender to be started also during recovery?] - [http://archives.postgresql.org/message-id/20100316090955.9A5107541D0@cvs.postgresql.org commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01003.php How do we clean down the archive without using pg_standby?] - [http://archives.postgresql.org/message-id/20100318091718.BC14D7541D0@cvs.postgresql.org commit]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2010-02/msg01510.php File-based log shipping without pg_standby doesn&#039;t replay the WAL files in pg_xlog.] - [http://archives.postgresql.org/pgsql-committers/2010-03/msg00356.php commit]&lt;br /&gt;
&lt;br /&gt;
== v9.1 ==&lt;br /&gt;
=== Synchronization capability ===&lt;br /&gt;
* Introduce the replication mode which can control how long transaction commit waits for replication before the commit command returns a &amp;quot;success&amp;quot; to a client. The valid modes are &#039;&#039;async&#039;&#039;, &#039;&#039;recv&#039;&#039; and &#039;&#039;fsync&#039;&#039;.&lt;br /&gt;
** &#039;&#039;async&#039;&#039; doesn&#039;t make transaction commit wait for replication, i.e., asynchronous replication.&lt;br /&gt;
** &#039;&#039;recv&#039;&#039; or &#039;&#039;fsync&#039;&#039; makes transaction commit wait for XLOG to be received or fsynced by the standby, respectively.&lt;br /&gt;
** (&#039;&#039;apply&#039;&#039; makes transaction commit wait for XLOG to be replayed by the standby. This mode will be supported in v9.2 or later)&lt;br /&gt;
** The replication mode is specified in recovery.conf of the standby as well as other parameters for replication.&lt;br /&gt;
*** The startup process reads the replication mode from recovery.conf and shares it to walreceiver via new shared-memory variable.&lt;br /&gt;
*** Walreceiver also shares it to walsender by using the replication handshake message (existing protocol needs to be extended).&lt;br /&gt;
** Based on the replication mode, walreceiver sends the reply meaning that replication is done up to the specified location to the primary.&lt;br /&gt;
*** In async, walreceiver doesn&#039;t need to send any reply other than end-of-replication message.&lt;br /&gt;
*** In recv or fsync, walreceiver sends the reply just after receiving or flushing XLOG, respectively.&lt;br /&gt;
*** New message type for the reply needs to be defined. The reply is sent as CopyData message.&lt;br /&gt;
** Walreceiver writes all the outstanding XLOG to disk before shutting down.&lt;br /&gt;
** Walsender receives the reply from the standby, updates the location of the last record replicated, and announces completion of replication.&lt;br /&gt;
*** New shared-memory variable to keep that location is required.&lt;br /&gt;
** When processing the commit command, backend waits for XLOG to be replicated to only the standbys which are in the recv or fsync replication mode.&lt;br /&gt;
*** Also smart shutdown waits for XLOG of shutdown checkpoint to be replicated.&lt;br /&gt;
* Required optimization&lt;br /&gt;
** Walsender should send outstanding XLOG without waiting wal_sender_delay.&lt;br /&gt;
*** When processing the commit command, backend signals walsender to send outstanding XLOG immediately.&lt;br /&gt;
** Backend should exit the wait loop as soon as the reply arrives at the primary.&lt;br /&gt;
*** When receiving the reply, walsender signals backends to get up from the sleep and determine whether to exit the wait loop by checking the location of the last XLOG replicated.&lt;br /&gt;
*** Only backends waiting for XLOG to be replicated up to the location contained in the reply are sent the signal.&lt;br /&gt;
** Walsender waits for the signal from backends and the reply from the standby at the same time, by using select/poll.&lt;br /&gt;
** Walsender reads XLOG from not only disk but also shared memory (wal buffers).&lt;br /&gt;
** Walreceiver should flush XLOG file only when XLOG file is switched or the related page is flushed.&lt;br /&gt;
*** When startup process or bgwriter flushes the buffer page, it checks whether the related XLOG has already been flushed via shared memory (location of the last XLOG flushed).&lt;br /&gt;
*** It flushes the buffer page, if XLOG file has already been flushed.&lt;br /&gt;
*** It signals walreceiver to flush XLOG file immediately and waits for the flush to complete, if XLOG file has not been flushed yet.&lt;br /&gt;
** While the standby is catching up with the primary, those servers should ignore the replication mode and perform asynchronous replication.&lt;br /&gt;
*** After those servers have almost gotten into synchronization, they perform replication based on the specified replication mode.&lt;br /&gt;
*** New replication states like &#039;catching-up&#039;, &#039;sync&#039;, etc need to be defined, and the state machine for them is required on both servers.&lt;br /&gt;
*** Current replication state can be monitored on both servers via SQL.&lt;br /&gt;
* Required timeout&lt;br /&gt;
** Add new parameter replication_timeout which is the maximum time to wait until XLOG is replicated to the standby.&lt;br /&gt;
** Add new parameter (replication_timeout_action) to specify the reaction to replication_timeout.&lt;br /&gt;
&lt;br /&gt;
== Future release ==&lt;br /&gt;
* &#039;&#039;&#039;Synchronization capability&#039;&#039;&#039;&lt;br /&gt;
** Introduce the synchronization mode which can control how long transaction commit waits for replication before the commit command returns a &amp;quot;success&amp;quot; to a client. The valid modes are &#039;&#039;async&#039;&#039;, &#039;&#039;recv&#039;&#039;, &#039;&#039;fsync&#039;&#039; and &#039;&#039;apply&#039;&#039;.&lt;br /&gt;
*** &#039;&#039;async&#039;&#039; doesn&#039;t make transaction commit wait for replication, i.e., asynchronous replication.&lt;br /&gt;
*** &#039;&#039;recv&#039;&#039;, &#039;&#039;fsync&#039;&#039; and &#039;&#039;apply&#039;&#039; makes transaction commit wait for XLOG records to be received, fsynced and applied on the standby, respectively.&lt;br /&gt;
** Change walsender to be able to read XLOG from not only the disk but also shared memory.&lt;br /&gt;
** Add new parameter replication_timeout which is the maximum time to wait until XLOG records are replicated to the standby.&lt;br /&gt;
** Add new parameter (replication_timeout_action) to specify the reaction to replication_timeout.&lt;br /&gt;
* &#039;&#039;&#039;Monitoring&#039;&#039;&#039;&lt;br /&gt;
** Provide the capability to check the progress and gap of streaming replication via one query. A collaboration of HS and SR is necessary to provide that capability on the standby side.&lt;br /&gt;
** Provide the capability to check if the specified repliation is in progress via a query. Also more detailed status information might be necessary, e.g, the standby is catching up now, has already gotten into sync, and so on.&lt;br /&gt;
** Change the stats collector to collect the statistics information about replication, e.g., average delay of replication time.&lt;br /&gt;
** Develop the tool to calculate the latest XLOG position from XLOG files. This is necessary to check the gap of replication after the server fails.&lt;br /&gt;
** Also develop the tool to extract the user-readable contents from XLOG files. This is necessary to see the contents of the gap, and manually restore them.&lt;br /&gt;
* &#039;&#039;&#039;Easy to Use&#039;&#039;&#039;&lt;br /&gt;
** Introduce the parameters like:&lt;br /&gt;
*** replication_halt_timeout - replication will halt if no data has been sent for this much time.&lt;br /&gt;
*** replication_halt_segments - replication will halt if number of WAL files in pg_xlog exceeds this threshold.&lt;br /&gt;
*** These parameters allow us to avoid disk overflow.&lt;br /&gt;
** Add new feature which transfers also base backup via the direct connection between the primary and the standby.&lt;br /&gt;
** Add new hooks like walsender_hook and walreceiver_hook to cooperate with the add-on program for compression like pglesslog.&lt;br /&gt;
** Provide a graceful termination of replication via a query on the primary. On the standby, a trigger file mechanism already provides that capability.&lt;br /&gt;
** Support replication beyond timeline. The timeline history files need to be shipped from the primary to the standby.&lt;br /&gt;
* &#039;&#039;&#039;Robustness&#039;&#039;&#039;&lt;br /&gt;
** Support keepalive in libpq. This is useful for a client and the standby to detect a failure of the primary immediately.&lt;br /&gt;
** [http://archives.postgresql.org/pgsql-hackers/2010-01/msg01536.php New privilege for replication.]&lt;br /&gt;
*** Currently superuser privilege is required when the standby connects to the primary. But there is the complaint that we should add new privilege for replication and use it instead of superuser because current approach is not good for security.&lt;br /&gt;
* &#039;&#039;&#039;Miscellaneous&#039;&#039;&#039;&lt;br /&gt;
** Standalone walreceiver tool, which connects to the primary, continuously receives and writes XLOG records, independently from postgres server.&lt;br /&gt;
** Cascade streaming replication. Allow walsender to send XLOG to another standby during recovery.&lt;br /&gt;
** WAL archiving during recovery.&lt;br /&gt;
&lt;br /&gt;
[[Category:Replication]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Binary_Replication_Tutorial&amp;diff=16477</id>
		<title>Binary Replication Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Binary_Replication_Tutorial&amp;diff=16477"/>
		<updated>2012-04-03T23:11:21Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to full documentation&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&#039;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;
&#039;&#039;&#039;Work in progress: only 40% complete&#039;&#039;&#039;&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&#039;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&#039;t have to worry about changes being made to it.&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.1/static/warm-standby.html 9.0 Replication Documentation]&lt;br /&gt;
* [http://www.postgresql.org/docs/9.0/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 = &#039;*&#039;&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&#039;s &#039;&#039;&#039;data directory&#039;&#039;&#039; (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 = &#039;on&#039;&lt;br /&gt;
  primary_conninfo = &#039;host=192.168.0.1&#039;&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&#039;t get out of sync. (Messages will be logged about not being able to connect to the primary server, that&#039;s OK.)&lt;br /&gt;
&lt;br /&gt;
6. Start the master.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Is taking down the master for long enough to copy the files too long?&#039;&#039;&#039;  Then you need the 10-minute version.&lt;br /&gt;
&lt;br /&gt;
== Starting Replication with only a Quick Master Restart ==&lt;br /&gt;
&lt;br /&gt;
What we&#039;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&#039;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&#039;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&#039;t close the file yet.  You&#039;ll need to set two other variables.  The first is checkpoint_segments, which increases the size of your write-ahead-log (WAL).  Unless you&#039;ve already done so, you&#039;re going to need to increase this, which is usually a good idea for performance anyway.  You want it to be big enough to not get used up in 15 or 20 minutes.  If you don&#039;t have a clear idea of that, here&#039;s some reasonable values, based on how busy and how large your database is.  Also, 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&#039;t &#039;&#039;have&#039;&#039; to increase checkpoint_segments in order to increase wal_keep_segments, but it&#039;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&#039;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&#039;ll need to try again.  First step, you need to tell the master you&#039;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(&#039;clone&#039;,true);&lt;br /&gt;
&lt;br /&gt;
Note that the string you use as a backup label doesn&#039;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&#039;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&#039;ve done this quickly enough, then the standby should catch up with the master and you should be replicating. If not, you&#039;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&#039;t work, you&#039;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&#039;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&#039;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&#039; 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&#039;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&#039;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&#039;re not going to cover it here.&lt;br /&gt;
&lt;br /&gt;
Instead, we&#039;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&#039;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&#039;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&#039;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&#039;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&#039;s never been done before may require a restart (sorry, working on it), and will certainly require a reload.  You&#039;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 = &#039;some command&#039;&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&#039;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&#039;ve restarted or reloaded, check the master&#039;s logs to make sure archiving is working.  If it&#039;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&#039;s setup, and doesn&#039;t really change no matter what archive copying strategy you&#039;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&#039;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&#039;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&#039;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 = &#039;cp -f /var/lib/postgresql/data/archive/%f %p &amp;lt;/dev/null&#039;&lt;br /&gt;
  restore_command = &#039;cp -f /shares/walarchive/%f %p &amp;lt;/dev/null&#039;&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&#039;s additional modules or &amp;quot;contrib&amp;quot;, and use it instead:&lt;br /&gt;
&lt;br /&gt;
  restore_command = &#039;pg_standby /shares/walarchive/%f %p %r&#039;&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&#039;re ready to clone the master database.  At this point, it&#039;s a simple process:&lt;br /&gt;
&lt;br /&gt;
# As superuser, issue the command &amp;quot;SELECT pg_start_backup(&#039;backup&#039;);&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&#039;re done with the cloning, you should see output similar to the below:&lt;br /&gt;
&lt;br /&gt;
This means that you&#039;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 = &#039;/var/lib/postgresql/data/failover&#039;&lt;br /&gt;
&lt;br /&gt;
Then, when it&#039;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&#039;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&#039;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>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Homebrew&amp;diff=16476</id>
		<title>Homebrew</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Homebrew&amp;diff=16476"/>
		<updated>2012-04-03T22:35:46Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to Lion issue fixing docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://mxcl.github.com/homebrew/ Homebrew] is a package manager for Mac OS X that builds software from its source code.  It includes a version of PostgreSQL packaged by what it refers to as a formula.  This type of installation might be preferred by people who are comfortable using the command line to install programs, such as software developers.&lt;br /&gt;
&lt;br /&gt;
Notes on Homebrew:&lt;br /&gt;
&lt;br /&gt;
* [http://russbrooks.com/2010/11/25/install-postgresql-9-on-os-x Install PostgreSQL 9 on OS X] (2010-11-25) - Easy install using Homebrew package manager.&lt;br /&gt;
* [http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/ Brew Install Postgresql on OS X Lion] - Resolving conflicts with the built-in PostgreSQL libraries shipping with OS X 10.7 &#039;Lion&#039;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2012-04/msg00010.php Discussion comparing Homebrew and EDB OS X installers]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Homebrew&amp;diff=16474</id>
		<title>Homebrew</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Homebrew&amp;diff=16474"/>
		<updated>2012-04-03T22:18:45Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://mxcl.github.com/homebrew/ Homebrew] is a package manager for Mac OS X that builds software from its source code.  It includes a version of PostgreSQL packaged by what it refers to as a formula.  This type of installation might be preferred by people who are comfortable using the command line to install programs, such as software developers.&lt;br /&gt;
&lt;br /&gt;
Notes on Homebrew:&lt;br /&gt;
&lt;br /&gt;
* [http://russbrooks.com/2010/11/25/install-postgresql-9-on-os-x Install PostgreSQL 9 on OS X] (2010-11-25) - Easy install using Homebrew package manager.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2012-04/msg00010.php Discussion comparing Homebrew and EDB OS X installers]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Homebrew&amp;diff=16473</id>
		<title>Homebrew</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Homebrew&amp;diff=16473"/>
		<updated>2012-04-03T22:01:54Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: New page on Homebrew package manager&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://mxcl.github.com/homebrew/ Homebrew] is a package manager for Mac OS X that builds software from its source code.  It includes a version of PostgreSQL packaged by what it refers to as a recipe.  This type of installation might be preferred by people who are comfortable using the command line to install programs, such as software developers.&lt;br /&gt;
&lt;br /&gt;
Notes on Homebrew:&lt;br /&gt;
&lt;br /&gt;
* [http://russbrooks.com/2010/11/25/install-postgresql-9-on-os-x Install PostgreSQL 9 on OS X] (2010-11-25) - Easy install using Homebrew package manager.&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2012-04/msg00010.php Discussion comparing Homebrew and EDB OS X installers]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon2012CanadaClusterSummit&amp;diff=16341</id>
		<title>PgCon2012CanadaClusterSummit</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon2012CanadaClusterSummit&amp;diff=16341"/>
		<updated>2012-02-29T06:04:14Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Fixed bullet formatting, clickable e-mail address&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 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;
=== Project Reports: 5 minutes from each project ===&lt;br /&gt;
* Hot Standby/Binary Replication -- Peter or Simon&lt;br /&gt;
* pgPoolII -- Tatsuo&lt;br /&gt;
* PostgresXC -- Koichi&lt;br /&gt;
* Slony -- Steve or Jan&lt;br /&gt;
* Your Project Here&lt;br /&gt;
&lt;br /&gt;
=== Technical Issues of common interest ===&lt;br /&gt;
* SSI in cluster/replication&lt;br /&gt;
* Parser export&lt;br /&gt;
* Managing consistent views of data&lt;br /&gt;
* Fault detection and handling&lt;br /&gt;
* Node addition/removal&lt;br /&gt;
* Configuration and operation&lt;br /&gt;
* Cursor in replication/multi master&lt;br /&gt;
* Your Issue Here&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;
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>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16300</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgCon_2012_Developer_Meeting&amp;diff=16300"/>
		<updated>2012-02-20T20:48:22Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add myself to the developer&amp;#039;s meeting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is &#039;&#039;&#039;by invitation only&#039;&#039;&#039;. Unfortunately it is quite possible that we&#039;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;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&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;Red Experience&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 (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&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;
* Write Scalability (Scale up, scale out) [Dimitri]&lt;br /&gt;
* Queuing [Dimitri]&lt;br /&gt;
* Materialized views [Dimitri]&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&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;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&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;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Detailed_installation_guides&amp;diff=16149</id>
		<title>Detailed installation guides</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Detailed_installation_guides&amp;diff=16149"/>
		<updated>2012-01-10T22:18:32Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to official Debian page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Any UNIX-Like Platform ==&lt;br /&gt;
&lt;br /&gt;
* [[Manual Setup at the Command Line]]&lt;br /&gt;
&lt;br /&gt;
== General Linux ==&lt;br /&gt;
&lt;br /&gt;
* Gentoo: [http://www.gentoo.org/doc/en/postgres-howto.xml PostgreSQL Guide] (2007-04-25)&lt;br /&gt;
* Linux: [http://www.designmagick.com/article/2/Starting-Out/Installing-PostgreSQL Installing Apache, PostgreSQL, and PHP on Linux] by Chris Smith (2006-02-07)&lt;br /&gt;
* [[PostgreSQL and SELinux]]&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PostgreSQL_Tutorials Installation of Postgres Plus Standard Server v8.3 Tutorial for Linux]&lt;br /&gt;
&lt;br /&gt;
=== Debian/Ubuntu Linux ===&lt;br /&gt;
&lt;br /&gt;
Debian based installs have a somewhat unique design that allows multiple database clusters to be managed independently.  This allows running both multiple database instances as well as multiple versions more easily than other packaging schemes.&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.debian.org/PostgreSql Debian PostgreSQL Wiki].  As pointed out there, really detailed documentation is available on the server at &#039;&#039;/usr/share/doc/postgresql-common/README.Debian.gz&#039;&#039; ; you should copy this file to another directory and run &#039;&#039;gunzip README.Debian.gz&#039;&#039; if you&#039;d like a readable version.&lt;br /&gt;
*[http://www.stuartellis.eu/articles/postgresql-setup/ Using PostgreSQL on Debian and Ubuntu] (2009)&lt;br /&gt;
*[http://russbrooks.com/2009/5/25/install-ubuntu-9-04-server-edition-rails-php-passenger-postgresql-and-mysql Install Ubuntu 9.04 Server Edition, Rails, PHP, Passenger, PostgreSQL, and MySQL] - the &amp;quot;database&amp;quot; section here is a concise guide to the standard PostgreSQL installation work most systems need to password-protected remote access, and it also covers installing the server side tools for pgAdmin (2009-05-25)&lt;br /&gt;
*[http://hocuspokus.net/2008/05/install-postgresql-on-ubuntu-804 Install PostgreSQL on Ubuntu 8.04] (2008-05-14)&lt;br /&gt;
*[http://www.ubuntugeek.com/howto-setup-database-server-with-postgresql-and-pgadmin3.html Howto setup Database Server With postgresql and pgadmin3] (has a nice intro to general postgresql.conf/pg_hba.conf info applicable to all distributions)&lt;br /&gt;
*[http://www.debianhelp.co.uk/postgresql.htm PostgreSQL Database Server Configuration in Debian]&lt;br /&gt;
*[http://www.elsn.org/main/postgresql/ Using the PostgreSQL Database Server]&lt;br /&gt;
*[http://www.progsoc.org/~wildfire/notes/postgresql-cluster.html postgresql clustering and Debian]&lt;br /&gt;
*[http://debian-user.blogspot.com/2008/02/upgrading-to-postgresql-83-in-debian.html Upgrading to PostgreSQL 8.3 in Debian from 7.4]&lt;br /&gt;
&lt;br /&gt;
=== RedHat/Fedora/CentOS ===&lt;br /&gt;
* [[YUM Installation]]&lt;br /&gt;
* [[PostgreSQL on RedHat Linux]]&lt;br /&gt;
&lt;br /&gt;
== FreeBSD ==&lt;br /&gt;
* FreeBSD: [http://www.b1c1l1.com/blog/2011/01/01/upgrading-postgresql-on-freebsd/ Upgrading PostgreSQL on FreeBSD] (2011-01-01)&lt;br /&gt;
* FreeBSD: [http://jasonk2600.wordpress.com/2010/01/11/installing-postgresql-on-freebsd/ Installing PostgreSQL on FreeBSD] (2010-01-11)&lt;br /&gt;
* FreeBSD: [http://www.freebsddiary.org/postgresql.php PostgreSQL Installation on FreeBSD] (2002-08-24)&lt;br /&gt;
* FreeBSD: [http://www.freebsddiary.org/postgresql-perl.php PostgreSQL and Perl on FreeBSD] (2000-12-26)&lt;br /&gt;
&lt;br /&gt;
== MacOS ==&lt;br /&gt;
&lt;br /&gt;
* MacOS X: [http://russbrooks.com/2010/11/25/install-postgresql-9-on-os-x Install PostgreSQL 9 on OS X] (2010-11-25) - Easy install using Homebrew package manager.&lt;br /&gt;
* MacOS X: [http://facility9.com/2010/02/15/installing-postgresql-on-mac-os-x Installing PostgreSQL on Mac OS X (an alternative guide using EnterpriseDB) by Jeremiah Peschka] (2010-02-15)&lt;br /&gt;
* MacOS X: [http://www.macdevcenter.com/pub/a/mac/2002/06/07/postgresql.html PostgreSQL on MacOS X (another alternative guide) by Michael Brewer] (2002-07-06)&lt;br /&gt;
* MacOS X: [http://developer.apple.com/internet/opensource/postgres.html PostgreSQL on Mac OS X]&lt;br /&gt;
&lt;br /&gt;
== Solaris ==&lt;br /&gt;
&lt;br /&gt;
* Solaris 10: [[:Image:pg_8.2.1_deployment_v1.0.pdf|PostgreSQL 8.2.1 on Solaris 10 – Deployment Guidelines]] by Chris Drawater (2007-01-15)&lt;br /&gt;
* Solaris 10: [http://www.holindis.co.uk/ Related documents for J2EE, Tomcat, and Oracle migrations] by Chris Drawater (2007-01-15)&lt;br /&gt;
* [[:Image:Pg81onsolaris10.pdf|PostgreSQL 8.1 on Solaris 10 - Deployment Guidelines]] (160KB - PDF)&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
[[Running &amp;amp; Installing PostgreSQL On Native Windows]]&lt;br /&gt;
&lt;br /&gt;
== Alternative to manual installation ==&lt;br /&gt;
&lt;br /&gt;
Some users may prefer to skip manual installation by using a pre-integrated [[TurnKey PostgreSQL | PostgreSQL software appliance]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Administration]][[Category:Install]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Project_Hosting&amp;diff=16145</id>
		<title>Project Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Project_Hosting&amp;diff=16145"/>
		<updated>2012-01-10T21:41:54Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Added bitbucket to the options list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostgreSQL provides several way to integrate with [http://www.postgresql.org/docs/9.0/interactive/external-projects.html External Projects], both inside and outside of the core database itself.  The PostgreSQL Development Group (PGDG) provides some resources toward hosting PostgreSQL projects.&lt;br /&gt;
&lt;br /&gt;
The current home for many PostgreSQL projects is [http://pgfoundry.org/ PgFoundry], a free resource provided by the PGDG.  PgFoundry provides projects with a full set of resources, including version control, mailing lists with archives, and bug tracking.  The only source code management (SCM) repository type supported is CVS.  Because many projects want more modern SCM options, some existing and new projects have instead hosted their resources at other places.  An upgrade to PgFoundry is not expected, and the PGDG is exploring a plan to eventually shut the site down.  New projects should consider an alternative hosting site.&lt;br /&gt;
&lt;br /&gt;
Some add-on projects are considered critical to PostgreSQL adoption.  One such category are drivers for popular programming languages that are not shipped with the database itself (JDBC, ODBC, others).  Critical projects can request space on [http://git.postgresql.org git.postgresql.org] along with a [http://www.postgresql.org/community/lists/ mailing list].&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ github] is a popular site for hosting projects using the git SCM.  It provides some basic project tools such as an issue tracker.  There is a [https://github.com/postgres-mirror PostgreSQL mirror at github] you can fork to easily create patches against the database source code.  github doesn&#039;t provide a good way to provide project documentation, source releases (AKA tarballs), or any sort of mailing list for the project.  Some projects have combined github for the main project hosting with [http://groups.google.com Google groups] to provide an archived mailing list.&lt;br /&gt;
&lt;br /&gt;
Other sites that are possible places to host a PostgreSQL related project at include:&lt;br /&gt;
* [http://sourceforge.net/ sourceforge]&lt;br /&gt;
* [http://code.google.com/ Google code]&lt;br /&gt;
* [https://launchpad.net/ Launchpad]&lt;br /&gt;
* [https://bitbucket.org/ bitbucket]&lt;br /&gt;
&lt;br /&gt;
Each of these sites has a different mix of features it supports.  Support for the preferred SCM of the developer is often the first thing considered, since some of these sites only support one of them.  For example, github only handles git, and Launchpad only supports Bazaar.&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Pgfoundry&amp;diff=16144</id>
		<title>Pgfoundry</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Pgfoundry&amp;diff=16144"/>
		<updated>2012-01-10T21:33:59Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to Project Hosting page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;pgfoundry.org&#039;&#039;&#039; is a website hosting various Postgres-related software projects. It is the successor to [[gborg]], and runs using [http://gforge.org GForge], an open source collaborative software development tool.&lt;br /&gt;
&lt;br /&gt;
Web site: [http://pgfoundry.org pgfoundry.org]&lt;br /&gt;
&lt;br /&gt;
See [[Project Hosting]] for more information about what pgfoundry provides, and alternatives to it.&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Events&amp;diff=15992</id>
		<title>Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Events&amp;diff=15992"/>
		<updated>2011-12-19T19:38:07Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Added Postgres Open 2012&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;
&#039;&#039;&#039;Upcoming PostgreSQL Events Listing&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Event&#039;&#039;&#039; || &#039;&#039;&#039;Web Page&#039;&#039;&#039; || &#039;&#039;&#039;Date&#039;&#039;&#039; || &#039;&#039;&#039;Country&#039;&#039;&#039; || &#039;&#039;&#039;City&#039;&#039;&#039; || &#039;&#039;&#039;Activities&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM 2012]] || [http://www.fosdem.org/2012/ FOSDEM &#039;12] || February 04-05, 2011 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| PGWest 2012 || [https://www.postgresqlconference.org/ PostgreSQL West 2012] || June 26-29, 2012 || USA || Denver, CO || 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;
&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;
&#039;&#039;&#039;Previous PostgreSQL Events Listing&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Event&#039;&#039;&#039; || &#039;&#039;&#039;Web Page&#039;&#039;&#039; || &#039;&#039;&#039;Date&#039;&#039;&#039; || &#039;&#039;&#039;Country&#039;&#039;&#039; || &#039;&#039;&#039;City&#039;&#039;&#039; || &#039;&#039;&#039;Activities&#039;&#039;&#039;&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 &#039;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 &#039;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&#039;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>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Events&amp;diff=15991</id>
		<title>Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Events&amp;diff=15991"/>
		<updated>2011-12-19T19:32:55Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Add PGWest 2012&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;
&#039;&#039;&#039;Upcoming PostgreSQL Events Listing&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Event&#039;&#039;&#039; || &#039;&#039;&#039;Web Page&#039;&#039;&#039; || &#039;&#039;&#039;Date&#039;&#039;&#039; || &#039;&#039;&#039;Country&#039;&#039;&#039; || &#039;&#039;&#039;City&#039;&#039;&#039; || &#039;&#039;&#039;Activities&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[FOSDEM 2012]] || [http://www.fosdem.org/2012/ FOSDEM &#039;12] || February 04-05, 2011 || Belgium || Brussels || Booth, Devroom&lt;br /&gt;
|-&lt;br /&gt;
| PGWest 2012 || [https://www.postgresqlconference.org/ PostgreSQL West 2012] || June 26-29, 2012 || USA || Denver, CO || 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;
&#039;&#039;&#039;Previous PostgreSQL Events Listing&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Event&#039;&#039;&#039; || &#039;&#039;&#039;Web Page&#039;&#039;&#039; || &#039;&#039;&#039;Date&#039;&#039;&#039; || &#039;&#039;&#039;Country&#039;&#039;&#039; || &#039;&#039;&#039;City&#039;&#039;&#039; || &#039;&#039;&#039;Activities&#039;&#039;&#039;&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 &#039;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 &#039;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&#039;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>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Archives_Policy&amp;diff=15983</id>
		<title>Archives Policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Archives_Policy&amp;diff=15983"/>
		<updated>2011-12-16T14:11:04Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Added &amp;quot;E-Mail Disclaimers and Licensing&amp;quot; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PostgreSQL [http://www.postgresql.org/community/lists mailing lists] are archived at [http://archives.postgresql.org archives.postgresql.org]. This site is intended to provide an accurate representation of the activity on the lists, and as such &#039;&#039;&#039;will not&#039;&#039;&#039; be modified.&lt;br /&gt;
&lt;br /&gt;
== Why won&#039;t you remove my post? ==&lt;br /&gt;
&lt;br /&gt;
There are a number of reasons why we will not remove or modify messages in the archives:&lt;br /&gt;
&lt;br /&gt;
* We want the archives to accurately represent the history of our public mailing lists.&lt;br /&gt;
* Messages posted to our mailing lists are archived by other organisations outside of our control both directly, and via our Usenet gateway. Removing a message from our archives would only be the tip of the iceberg.&lt;br /&gt;
* Due to the way the archives are stored and occasionally regenerated from archived mailbox files, there is no way to permanently modify a message.&lt;br /&gt;
* Removing a message breaks the numbering system used to access subsequent messages which will break any links on websites or other list messages.&lt;br /&gt;
* We have limited volunteer resources to run the project (and no non-volunteer resources) and would prefer to use those resources to produce a great DBMS than rewrite history.&lt;br /&gt;
&lt;br /&gt;
== E-Mail Disclaimers and Licensing ==&lt;br /&gt;
&lt;br /&gt;
Some companies or organization add footers to outgoing e-mail messages with that group&#039;s e-mail policies, such as this simple example:&lt;br /&gt;
&lt;br /&gt;
* This e-mail is confidential and only for use by the intended recipient.&lt;br /&gt;
&lt;br /&gt;
These disclaimers are incompatible with sending messages to the PostgreSQL mailing lists.  When the mailing list is the &amp;quot;intended recipient&amp;quot;, that includes all of its current subscribers and the archives.  These archives are public, archived, and searchable; they cannot be made confidential.&lt;br /&gt;
&lt;br /&gt;
By choosing to send messages to a PostgreSQL mailing list, you are implicitly granting your permission for that message to be archived in that fashion, regardless of any e-mail disclaimer it might have.  And source code submissions to mailing lists such as &#039;&#039;pgsql-hackers&#039;&#039; are considered submissions to the PostgreSQL project, falling under the project&#039;s [http://www.postgresql.org/about/licence/ PostgreSQL license].  Please make sure you have permission to share information with these lists before sending your message.&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Reliable_Writes&amp;diff=15893</id>
		<title>Reliable Writes</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Reliable_Writes&amp;diff=15893"/>
		<updated>2011-12-01T09:59:09Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Updated to mention Intel 710 drives&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Databases have many levels of read and write caches they use.  There&#039;s the database&#039;s own dedicated memory (shared_buffers), the operating system cache, potentially a disk controller cache (typical on a RAID card), and caches on each individual hard drive.  PostgreSQL expects some of these caches to work effectively in order to obtain good performance.  But periodically, the database issues a synchronous write request:  requesting that something must be committed to disk before the database can proceed.  If any of those writes say they are successful to the database, but the data is not really safe, database corruption can be expected if there is a server crash for any reason.  Software bug, power outage, UPS failure, accidentally unplugging the server, any of these things can lead to a corrupted database that will not start normally if your system has unsafe writes.&lt;br /&gt;
&lt;br /&gt;
There is a good diagram of how all these levels of caching fit together at [http://momjian.us/main/writings/pgsql/hw_selection.pdf  Database Hardware Selection Guidelines] (PDF, Bruce Momjian)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
This page lists articles about this topic that include a mix of theory and practical recommendations about how to setup a reliable system that doesn&#039;t have this sort of problem after a crash:&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.org/docs/current/static/wal-reliability.html Reliability]:  from the official documentation&lt;br /&gt;
* [https://www.packtpub.com/sites/default/files/0301OS-Chapter-2-Database-Hardware.pdf Database Hardware] (PDF):  Chapter on general hardware selection, introduces write-back vs. write-through caching terminology and notes about issues with SSD writes. (Greg Smith)&lt;br /&gt;
* [https://www.packtpub.com/article/server-configuration-tuning-postgresql Server Configuration Tuning]:  lists things to be aware of when setting wal_sync_method, as well as warnings about settings changes that can make your server unsafe--fsync, full_page_writes, and synchronous_commit  (Greg Smith)&lt;br /&gt;
* [http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm Tuning PostgreSQL WAL Synchronization]:  background about the topic of drives that handle writes unsafely and how this impacts PostgreSQL writes. (Greg Smith)&lt;br /&gt;
&lt;br /&gt;
== Known problem hardware ==&lt;br /&gt;
&lt;br /&gt;
* The first and second generation Intel SSD drives such as the Intel X25-E will write unsafely, and this behavior is impossible to fix without serious impact to both the speed and longevity of the drive.  See [http://www.mysqlperformanceblog.com/2009/03/02/ssd-xfs-lvm-fsync-write-cache-barrier-and-lost-transactions/ SSD, XFS, LVM, fsync, write cache, barrier and lost transactions] (Vadim Tkachenko) for an introduction.  Their consumer drives such as the X-25-M G2 have been reported to be [http://evanjones.ca/intel-ssd-durability.html even worse] (Evan Jones).  The 3rd generation Intel 320 and 710 series drives do not have any of these problems, having added a capacitor to provide battery-backup for flushing the drive cache when power drops.&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Advocacy&amp;diff=15867</id>
		<title>Advocacy</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Advocacy&amp;diff=15867"/>
		<updated>2011-11-25T15:28:54Z</updated>

		<summary type="html">&lt;p&gt;Gsmith: Link to Projects Using page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__* [[Events|Upcoming events &amp;amp; conferences]]&lt;br /&gt;
* [[AdvocacyGuides|Guides to promoting PostgreSQL]]&lt;br /&gt;
* [[:Category:Software Ports|Software Ports]]:  Getting PostgreSQL support into applications&lt;br /&gt;
* [[Advocacy/Better|Things Advocacy could be doing better]]&lt;br /&gt;
* [[Postgres| Postgres - Changing the name]]:  Requirements and issues&lt;br /&gt;
&lt;br /&gt;
===PostgreSQL Booths - Conference/Event===&lt;br /&gt;
* [[BoothCheckList|Booth Preparation Checklist]]&lt;br /&gt;
* Organizing [[BoothVols|Booth Volunteers]]&lt;br /&gt;
* [[HowToBooth|How To Booth]] for both Booth Bunnies and Organizers&lt;br /&gt;
* [[BoothDocs|Booth Related Documents]] List&lt;br /&gt;
&lt;br /&gt;
=== Branding Resources===&lt;br /&gt;
* [[Identity Guidelines]], [[Color Palette]]&lt;br /&gt;
* [[Logo]], [[Buttons]], [[Banners]]&lt;br /&gt;
* [[Posters]], [[Rollups]]&lt;br /&gt;
* [[Flyers]], [[Brochures]]&lt;br /&gt;
* [[Surveys]]&lt;br /&gt;
* [http://pgfoundry.org/docman/?group_id=1000089 PgFoundry&#039;s Graphic Project]&lt;br /&gt;
* [[Marketing Blurbs]]&lt;br /&gt;
&lt;br /&gt;
===New release management===&lt;br /&gt;
* [[ReleasePrep|Tasks to do before announcing a release]]&lt;br /&gt;
* [[MajorReleaseTimeline|Major Release Timeline]]&lt;br /&gt;
* [[HowToTranslate|HOWTO Translate The Release]]&lt;br /&gt;
* [[PostgreSQL 8.4]] - History of last completed release&lt;br /&gt;
* [[PostgreSQL 9.0 Press Coverage]]&lt;br /&gt;
&lt;br /&gt;
===Work in Progress===&lt;br /&gt;
* [[UserGroupOperatingManual|PUG Operating Manual]]&lt;br /&gt;
* [[:Category:Advocacy WIP|Advocacy WIP]]&lt;br /&gt;
* [[PgDayManual|Advice on running a PgDay]]&lt;br /&gt;
* [[Short Topic Books]]&lt;br /&gt;
* [[CodeSprint2008|Code Sprint Session at Pg Conference West 2008]]&lt;br /&gt;
* [[Open Source Projects Using PostgreSQL]]&lt;br /&gt;
&lt;br /&gt;
===Other Resources===&lt;br /&gt;
* Education [[Curriculum Development]]&lt;br /&gt;
* [[YourPostgreSQLAddress|Your @postgresql.org e-mail address]]&lt;br /&gt;
* [[HowToRC|How to be a Regional Contact]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Advocacy]]&lt;/div&gt;</summary>
		<author><name>Gsmith</name></author>
	</entry>
</feed>