<?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=Gleu</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=Gleu"/>
	<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/wiki/Special:Contributions/Gleu"/>
	<updated>2026-06-09T14:40:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Foreign_data_wrappers&amp;diff=40070</id>
		<title>Foreign data wrappers</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Foreign_data_wrappers&amp;diff=40070"/>
		<updated>2024-10-23T13:36:58Z</updated>

		<summary type="html">&lt;p&gt;Gleu: this blog doesn&amp;#039;t exist anymore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Foreign Data Wrappers =&lt;br /&gt;
In 2003, a new specification called [[SQL/MED]] (&amp;quot;SQL Management of External Data&amp;quot;) was added to the SQL standard. It is a standardized way of handling access to remote objects from SQL databases. In 2011, PostgreSQL 9.1 was released with read-only support of this standard, and in 2013 write support was added with PostgreSQL 9.3.&lt;br /&gt;
&lt;br /&gt;
There are now a variety of Foreign Data Wrappers (FDW) available which enable PostgreSQL Server to different remote data stores, ranging from other SQL databases through to flat file. This page list some of the wrappers currently available. Another [https://pgxn.org/tag/fdw/ fdw list] can be found at [https://pgxn.org/ the PGXN website].&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that most of these wrappers are &#039;&#039;&#039;not officially supported by the PostgreSQL Global Development Group&#039;&#039;&#039; (PGDG) and that some of these projects are &#039;&#039;&#039;still in Beta&#039;&#039;&#039; version. Use carefully!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generic SQL Database Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|ODBC&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/CartoDB/odbc_fdw  github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|CartoDB took over active development of the ODBC FDW for PG 9.5+&lt;br /&gt;
|-&lt;br /&gt;
|JDBC&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/atris/JDBC_FDW github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Not maintained?&lt;br /&gt;
|-&lt;br /&gt;
|JDBC2&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/heimir-sverrisson/jdbc2_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|JDBC&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/pgspider/jdbc_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/pgspider/jdbc_fdw/blob/main/README.md README]&lt;br /&gt;
|More recent than the above, advertises write support.&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlalchemy.org/ SQL_Alchemy]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#sqlalchemy-foreign-data-wrapper documentation]&lt;br /&gt;
| Can be used to access data stored in any database supported by the sqlalchemy python toolkit.&lt;br /&gt;
|-&lt;br /&gt;
| [https://gdal.org/drivers/vector/index.html GDAL/OGR]&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/pramsey/pgsql-ogr-fdw  GitHub]&lt;br /&gt;
| yum.postgresql.org, apt.postgresql.org, and part of PostGIS windows bundle (application stackbuilder)&lt;br /&gt;
| &lt;br /&gt;
| Can access many kinds of data sources (Relational databases, spreadsheets, CSV files, web feature services, etc). Uses the [https://gdal.org/ GDAL library] which supports hundreds of formats to access the data. Exposes vector data as PostGIS geometry columns if you have PostGIS installed. Works great with both spatial and non-spatial data.&lt;br /&gt;
|-&lt;br /&gt;
| VirtDB&lt;br /&gt;
| Native&lt;br /&gt;
| GPL&lt;br /&gt;
| [https://github.com/virtdb/virtdb-fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A generic FDW to access VirtDB data sources (SAP ERP, Oracle RDBMS)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| APIs (via [https://hub.steampipe.io/plugins Steampipe plugins])&lt;br /&gt;
| Native&lt;br /&gt;
| CLI and FDW extension: AGPL 3.0, Plugins: Apache 2.0&lt;br /&gt;
| [https://github.com/turbot/steampipe CLI on GitHub], [https://github.com/turbot/steampipe-postgres-fdw FDW extension on GitHub]&lt;br /&gt;
| [https://steampipe.io/downloads Steampipe downloads]&lt;br /&gt;
| [https://steampipe.io/docs Steampipe docs], [https://steampipe.io/docs/steampipe_postgres/overview Postgres FDW docs]&lt;br /&gt;
| [https://steampipe.io Steampipe] bundles Postgres with an FDW extension that supports a growing ecosystem of [https://hub.steampipe.io/plugins plugins]. The plugins consume APIs, map them to tables, and enable queries within and across APIs. &lt;br /&gt;
&lt;br /&gt;
The plugins are also available as [https://steampipe.io/blog/2023-12-postgres-extensions unbundled FDWs] for use in any Postgres database.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Specific SQL Database Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.postgresql.org/ PostgreSQL]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://git.postgresql.org/gitweb/?p=postgresql.git;a=tree;f=contrib/postgres_fdw;hb=HEAD  git.postgresql.org]&lt;br /&gt;
|&lt;br /&gt;
|[https://www.postgresql.org/docs/current/postgres-fdw.html  documentation]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.oracle.com/index.html Oracle]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/laurenz/oracle_fdw  github]&lt;br /&gt;
|[https://pgxn.org/dist/oracle_fdw/  PGXN]&lt;br /&gt;
|[http://laurenz.github.io/oracle_fdw/  website]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.mysql.com/ MySQL]&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/EnterpriseDB/mysql_fdw github]&lt;br /&gt;
|[https://pgxn.org/dist/mysql_fdw/ PGXN]&lt;br /&gt;
|[https://www.enterprisedb.com/blog/new-oss-tool-links-postgres-and-mysql example]&lt;br /&gt;
|FDW for MySQL&lt;br /&gt;
|-&lt;br /&gt;
|Informix&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/psoo/informix_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DB2&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/wolfgangbrandl/db2_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.firebirdsql.org/ Firebird]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/ibarwick/firebird_fdw/ github]&lt;br /&gt;
|[https://pgxn.org/dist/firebird_fdw/ PGXN]&lt;br /&gt;
|[https://github.com/ibarwick/firebird_fdw/blob/master/README.md README]&lt;br /&gt;
|version [https://github.com/ibarwick/firebird_fdw/releases/tag/1.3.0 1.3.0] released (2022-12)&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.sqlite.org/index.html SQLite]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/pgspider/sqlite_fdw github]&lt;br /&gt;
|[https://pgxn.org/dist/sqlite_fdw PGXN]&lt;br /&gt;
|[https://github.com/pgspider/sqlite_fdw/blob/master/README.md README]&lt;br /&gt;
|An FDW for SQLite3 (write support and several pushdown optimization)&lt;br /&gt;
|-&lt;br /&gt;
|Sybase / MS SQL Server&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/tds-fdw/tds_fdw github]&lt;br /&gt;
|[https://pgxn.org/dist/tds_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|An FDW for Sybase and Microsoft SQL server&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.monetdb.org/ MonetDB]&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/snaga/monetdb_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NoSQL Database Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|[https://cloud.google.com/bigtable/ BigTable or HBase]&lt;br /&gt;
|[https://github.com/posix4e/rpgffi Native Rust Binding (RPGFFI)]&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/durch/google-bigtable-postgres-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[http://cassandra.apache.org/ Cassandra]&lt;br /&gt;
|[https://multicorn.org/ Multicorn]&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/rankactive/cassandra-fdw Github]&lt;br /&gt;
|[https://rankactive.com/resources/postgresql-cassandra-fdw Rankactive]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Cassandra2&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
|[https://github.com/jaiminpan/cassandra2_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://cassandra.apache.org Cassandra]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
|[https://github.com/wjch-krl/pgCassandra Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://clickhouse.yandex/ ClickHouse]&lt;br /&gt;
|[https://multicorn.org/ Multicorn]&lt;br /&gt;
|BSD&lt;br /&gt;
|[https://github.com/Infinidat/infi.clickhouse_fdw/ Github]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/Infinidat/infi.clickhouse_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://clickhouse.yandex/ ClickHouse]&lt;br /&gt;
|Native&lt;br /&gt;
|Apache&lt;br /&gt;
|[https://github.com/ildus/clickhouse_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/ildus/clickhouse_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://clickhouse.yandex/ ClickHouse]&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/Percona-Lab/clickhousedb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/Percona-Lab/clickhousedb_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://clickhouse.com/ ClickHouse]&lt;br /&gt;
|[https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
|Apache&lt;br /&gt;
|[https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/clickhouse_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|[https://supabase.github.io/wrappers/clickhouse/ documentation]&lt;br /&gt;
|A foreign data wrapper for [https://clickhouse.com/ ClickHouse]&lt;br /&gt;
|-&lt;br /&gt;
|[http://couchdb.apache.org/ CouchDB]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/ZhengYang/couchdb_fdw  Github]&lt;br /&gt;
|[https://pgxn.org/dist/couchdb_fdw/  PGXN]&lt;br /&gt;
|&lt;br /&gt;
| Original version&lt;br /&gt;
|-&lt;br /&gt;
|[http://couchdb.apache.org/ CouchDB]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/golgauth/couchdb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| golgauth version (9.1 - 9.2+ compatible)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/griddb/griddb_nosql GridDB]&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/pgspider/griddb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/pgspider/griddb_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| InfluxDB&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/pgspider/influxdb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/pgspider/influxdb_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka]&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/adjust/kafka_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/adjust/kafka_fdw/blob/master/README.md README]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://fallabs.com/kyototycoon/ Kyoto Tycoon ]&lt;br /&gt;
|Native&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/cloudflare/kt_fdw  Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.mongodb.com/ MongoDB]&lt;br /&gt;
|Native&lt;br /&gt;
|GPL3+&lt;br /&gt;
|[https://github.com/EnterpriseDB/mongo_fdw Github]&lt;br /&gt;
|[https://pgxn.org/dist/mongo_fdw/  PGXN]&lt;br /&gt;
|[https://github.com/EnterpriseDB/mongo_fdw/blob/master/README.md README]&lt;br /&gt;
|EDB version&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.mongodb.com/ MongoDB]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/dwa/mongoose_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mongodb.com/ MongoDB]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/asya999/yam_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Yet Another Postgres FDW for MongoDB&lt;br /&gt;
|-&lt;br /&gt;
|[https://neo4j.com/ Neo4j]&lt;br /&gt;
|[https://multicorn.org/ Multicorn]&lt;br /&gt;
|GPLv3&lt;br /&gt;
|[https://github.com/sim51/neo4j-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/sim51/neo4j-fdw/blob/master/README.adoc README]&lt;br /&gt;
|FWD for Neo4j and also add a Cypher function to Pg&lt;br /&gt;
|-&lt;br /&gt;
|[https://neo4j.com/ Neo4j]&lt;br /&gt;
|Native&lt;br /&gt;
|?&lt;br /&gt;
|[https://github.com/nuko-yokohama/neo4j_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[http://quasar-analytics.org/ Quasar]&lt;br /&gt;
|Native&lt;br /&gt;
|Apache&lt;br /&gt;
|[https://github.com/slamdata/quasar-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://redis.io/ Redis]&lt;br /&gt;
|Native&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|[https://github.com/pg-redis-fdw/redis_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://redis.io/ Redis]&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/nahanni/rw_redis_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://rethinkdb.com/ RethinkDB]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/rotten/rethinkdb-multicorn-postgresql-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
| [https://rethinkdb.com/blog/postgres-foreign-data-wrapper/ blog]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/basho/riak Riak]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/kiskovacs/riak-multicorn-pg-fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/facebook/rocksdb RocksDB]&lt;br /&gt;
| Native&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/vidardb/PostgresForeignDataWrapper Github]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/vidardb/PostgresForeignDataWrapper/blob/master/README.md README]&lt;br /&gt;
| FDW for RocksDB&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/SPARQL SPARQL]&lt;br /&gt;
| [https://github.com/pgsql-io/multicorn2 Multicorn2]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/sjstoelting/sparql_fdwfdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://whitedb.org/ WhiteDB]&lt;br /&gt;
|  Native&lt;br /&gt;
|  MIT&lt;br /&gt;
| [https://github.com/Kentik/wdb_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Triplestore RDF Triplestores (SPARQL endpoints)]&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/jimjonesbr/rdf_fdw Github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A Foreign Data Wrapper to easily access RDF Triplestores via SPARQL, including pushdown of several SQL query clauses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== File Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| CSV&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
|[https://git.postgresql.org/gitweb/?p=postgresql.git;a=tree;f=contrib/file_fdw;hb=HEAD  git.postgresql.org]&lt;br /&gt;
|&lt;br /&gt;
| [https://www.postgresql.org/docs/current/file-fdw.html  documentation]&lt;br /&gt;
| Delivered as an official extension of PostgreSQL 9.1 / [https://www.depesz.com/2011/03/14/waiting-for-9-1-foreign-data-wrapper/  example] /  [http://www.postgresonline.com/journal/archives/250-File-FDW-Family-Part-1-file_fdw.html Another example]&lt;br /&gt;
|-&lt;br /&gt;
| CSV&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#csv-foreign-data-wrapper documentation]&lt;br /&gt;
| Each column defined in the table will be mapped, in order, against columns in the CSV file.&lt;br /&gt;
|-&lt;br /&gt;
| CSV / Text Array&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/adunstan/file_text_array_fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [http://www.postgresonline.com/journal/archives/251-File-FDW-Family-Part-2-file_textarray_fdw-Foreign-Data-Wrapper.html How to]&lt;br /&gt;
| Another CSV wrapper&lt;br /&gt;
|-&lt;br /&gt;
| CSV / Fixed-length&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/adunstan/file_fixed_length_record_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CSV / gzipped&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/dialogbox/py_csvgz_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| PostgreSQL Foreign Data Wrapper for gzipped cvs file&lt;br /&gt;
|-&lt;br /&gt;
| Compressed File&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/gokhankici/compressedfile_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Document Collection&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/ZhengYang/dc_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/ZhengYang/dc_fdw/wiki wiki]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| JSON&lt;br /&gt;
| Native&lt;br /&gt;
| GPL3&lt;br /&gt;
| [https://github.com/nkhorman/json_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://www.citusdata.com/blog/2013/05/30/run-sql-on-json-files-without-any-data-loads/ Example]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Multi-File&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#filesystem-foreign-data-wrapper doc]&lt;br /&gt;
| Access data stored in various files in a filesystem. The files are looked up based on a pattern, and parts of the file&#039;s path are mapped to various columns, as well as the file&#039;s content itself.&lt;br /&gt;
|-&lt;br /&gt;
| Multi CDR&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/theirix/multicdr_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicdr_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Parquet&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/adjust/parquet_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Foreign data wrapper for reading Parquet files using libarrow/libparquet&lt;br /&gt;
|-&lt;br /&gt;
| pg_dump&lt;br /&gt;
| Native&lt;br /&gt;
| New BSD&lt;br /&gt;
| [https://github.com/MeetMe/dump_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Allows querying of data directly against Postgres custom format files created by pg_dump&lt;br /&gt;
|-&lt;br /&gt;
| TAR Files&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/beargiles/tarfile-fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| XLSX&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/polydbms/pg_sheet_fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/polydbms/pg_sheet_fdw/blob/main/README.md README]&lt;br /&gt;
| PG_Sheet allows reading XLSX Sheets via [https://github.com/polydbms/sheetreader-core SheetReader], a fast Excel Sheet reader.&lt;br /&gt;
|-&lt;br /&gt;
| XML&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ZIP Files&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/beargiles/zipfile-fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Geo Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.gdal.org GDAL/OGR]&lt;br /&gt;
|Native&lt;br /&gt;
|MIT&lt;br /&gt;
|[https://github.com/pramsey/pgsql-ogr-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|A wrapper for data sources with a [https://www.gdal.org GDAL/OGR] driver, including databases like Oracle, Informix, SQLite, SQL Server, ODBC as well as file formats like Shape, FGDB, MapInfo, CSV, Excel, OpenOffice, OpenStreetMap PBF and XML, OGC WebServices, [https://www.gdal.org/ogr_formats.html and more] Spatial columns are linked in as PostGIS geometry if PostGIS is installed.&lt;br /&gt;
|-&lt;br /&gt;
| Geocode / GeoJSON&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| GPL&lt;br /&gt;
| [https://github.com/bosth/geofdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| a collection of PostGIS-related foreign data wrappers&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.openstreetmap.org/wiki/PBF_Format Open Street Map PBF]&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/vpikulik/postgres_osm_pbf_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LDAP Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| LDAP&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/guedes/ldap_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/ldap_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
| Allows to query an LDAP server and retrieve data from some pre-configured Organizational Unit&lt;br /&gt;
|-&lt;br /&gt;
| LDAP&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#idldap-foreign-data-wrapper documentation]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Generic Web Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Git&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Git&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/franckverrot/git_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ICAL&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/daamien/Multicorn/blob/master/python/multicorn/icalfdw.py GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://wiki.postgresql.org/images/7/7e/Conferences-write_a_foreign_data_wrapper_in_15_minutes-presentation.pdf pdf]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| IMAP&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#idimap-foreign-data-wrapper documentation]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| RSS&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
| [https://multicorn.org/foreign-data-wrappers/#idrss-foreign-data-wrapper documentation]&lt;br /&gt;
| This fdw can be used to access items from an rss feed.&lt;br /&gt;
|-&lt;br /&gt;
| www&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/cyga/www_fdw/ GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/www_fdw/ PGXN]&lt;br /&gt;
| [https://github.com/cyga/www_fdw/wiki wiki]&lt;br /&gt;
| Allows to query different web services&lt;br /&gt;
|-&lt;br /&gt;
| pgsql-http&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/pramsey/pgsql-http GitHub]&lt;br /&gt;
| Compile&lt;br /&gt;
| &lt;br /&gt;
| Allows to query any http resource using CURL libs. By Paul Ramsey&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Specific Web Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openarchives.org/pmh/ OAI-PMH]&lt;br /&gt;
| Native&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/jimjonesbr/oai_fdw/ GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/jimjonesbr/oai_fdw/blob/main/README.md README]&lt;br /&gt;
| A PostgreSQL Foreign Data Wrapper to access OAI-PMH repositories (Open Archives Initiative Protocol for Metadata Harvesting). This wrapper supports the OAI-PMH 2.0 Protocol.&lt;br /&gt;
|-&lt;br /&gt;
| Cloudsmith.io&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/richyen/cloudsmith_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Database.com&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/metadaddy/Database.com-FDW-for-PostgreSQL GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Dun &amp;amp; Badstreet&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/dpmorel/dnb_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Access to the [https://fr.wikipedia.org/wiki/Data_Universal_Numbering_System Data Universal Numbering System] (DUNS)&lt;br /&gt;
|-&lt;br /&gt;
| DynamoDB&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| GPL&lt;br /&gt;
| [https://github.com/avances123/dynamodb_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| DynamoDB&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/pgspider/dynamodb_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Facebook&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/mrwilson/fb-psql GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Fixer.io&lt;br /&gt;
| based on www_fdw&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/hakanensari/frankfurter GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Google&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/multicorn/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Heroku dataclips&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/petergeoghegan/dataclips_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Keycloak&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/schne324/foreign-keycloak-wrapper GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/foreign-keycloak-wrapper/ PGXN]&lt;br /&gt;
| [https://github.com/schne324/foreign-keycloak-wrapper/blob/master/README.md README]&lt;br /&gt;
| Direct database integration with the [https://www.keycloak.org Keycloak] open-source Identity/Access Management solution.&lt;br /&gt;
|-&lt;br /&gt;
| Mailchimp&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/daamien/mailchimp_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Beta&lt;br /&gt;
|-&lt;br /&gt;
| [http://parseplatform.org/ Parse]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/spacialdb/parse_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| S3&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/umitanuki/s3_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/s3_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| S3&lt;br /&gt;
| [https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/s3_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://supabase.github.io/wrappers/s3/ documentation]&lt;br /&gt;
| A foreign data wrapper for [https://aws.amazon.com/s3/ S3], supports CVS, JSONL, Parquet files and gzip, bzip2, xz, zlib compression.&lt;br /&gt;
|-&lt;br /&gt;
| S3CSV&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| GPL 3&lt;br /&gt;
| [https://github.com/eligoenergy/s3csv_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| This is meant to replace s3_fdw that does is not supported on PostgreSQL version 9.2+&lt;br /&gt;
|-&lt;br /&gt;
| ParquetS3&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/pgspider/parquet_s3_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Foreign data wrapper for reading Parquet files using libarrow/libparquet on Amazon S3 / Minio&lt;br /&gt;
|-&lt;br /&gt;
| Telegram&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/guedes/telegram_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| telegram_fdw is a Telegram BOT implemented using the PostgreSQL foreign data wrapper interface.&lt;br /&gt;
|-&lt;br /&gt;
| Twitter&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/umitanuki/twitter_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/twitter_fdw/ PGXN]&lt;br /&gt;
|&lt;br /&gt;
| A wrapper fetching text messages from Twitter over the Internet and returning a table&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.treasuredata.com/ Treasure Data]&lt;br /&gt;
| Native&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/komamitsu/treasuredata_fdw GitHub]&lt;br /&gt;
| [https://pgxn.org/dist/treasuredata_fdw PGXN]&lt;br /&gt;
|&lt;br /&gt;
| A FDW for Treasure Data internally using a Rust library&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.treasuredata.com/ Treasure Data]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/komamitsu/td-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Google Spreadsheets&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/lincolnturner/gspreadsheet_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Open Weather Map&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/ycku/owmfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A FDW for Open Weather Map (single city)&lt;br /&gt;
|-&lt;br /&gt;
| Airtable&lt;br /&gt;
| [https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/airtable_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://supabase.github.io/wrappers/airtable/ documentation]&lt;br /&gt;
| A foreign data wrapper for [https://airtable.com/ Airtable]&lt;br /&gt;
|-&lt;br /&gt;
| Firebase&lt;br /&gt;
| [https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/firebase_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://supabase.github.io/wrappers/firebase/ documentation]&lt;br /&gt;
| A foreign data wrapper for [https://firebase.google.com/ Firebase]&lt;br /&gt;
|-&lt;br /&gt;
| Logflare&lt;br /&gt;
| [https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/logflare_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://supabase.github.io/wrappers/logflare/ documentation]&lt;br /&gt;
| A foreign data wrapper for [https://logflare.app/ Logflare]&lt;br /&gt;
|-&lt;br /&gt;
| Stripe&lt;br /&gt;
| [https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/stripe_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://supabase.github.io/wrappers/stripe/ documentation]&lt;br /&gt;
| A foreign data wrapper for [https://stripe.com/ Stripe]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Big Data Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|Elasticsearch&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/matthewfranglen/postgres-elasticsearch-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Supports up to PG 15, ES 8.&lt;br /&gt;
|-&lt;br /&gt;
| Google BigQuery&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
|[https://github.com/gabfl/bigquery_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/gabfl/bigquery_fdw/blob/master/docs/README.md Documentation]&lt;br /&gt;
|bigquery_fdw is a BigQuery FDW compatible with PostgreSQL &amp;gt;= 9.5&lt;br /&gt;
|-&lt;br /&gt;
| Google BigQuery&lt;br /&gt;
| [https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/bigquery_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://supabase.github.io/wrappers/bigquery/ documentation]&lt;br /&gt;
| A foreign data wrapper for [https://cloud.google.com/bigquery BigQuery]&lt;br /&gt;
|-&lt;br /&gt;
| file_fdw-gds (Hadoop)&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/wat4dog/pg-file-fdw-gds  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Hadoop file_fdw is a slightly modified version of PostgreSQL 9.3&#039;s file_fdw module.&lt;br /&gt;
|-&lt;br /&gt;
| Hadoop&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://www.openscg.com/bigsql/hadoopfdw/  Bitbucket]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Allows read and write access to HBase as well as to HDFS via Hive.&lt;br /&gt;
|-&lt;br /&gt;
| HDFS&lt;br /&gt;
| Native&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/EnterpriseDB/hdfs_fdw  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hive&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/youngwookim/hive-fdw-for-postgresql   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Used to access Apache Hive tables.&lt;br /&gt;
|-&lt;br /&gt;
| Hive / ORC File&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/gokhankici/orc_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://impala.apache.org/ Impala]&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/lapug/impala_fdw   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://arrow.apache.org/ Apache Arrow]&lt;br /&gt;
| Native&lt;br /&gt;
| GPLv2&lt;br /&gt;
| [https://github.com/heterodb/pg-strom   GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A part of PG-Strom feature; as a columnar data source with support of SSD-to-GPU Direct SQL &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Column-Oriented Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
|Columnar Store&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/citusdata/cstore_fdw  github]&lt;br /&gt;
|[https://www.citusdata.com/blog/2014/04/03/columnar-store-for-analytics/ example]&lt;br /&gt;
|&lt;br /&gt;
|A Columnar Store for PostgreSQL.&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.monetdb.org/ MonetDB]&lt;br /&gt;
|Native&lt;br /&gt;
|&lt;br /&gt;
|[https://github.com/snaga/monetdb_fdw github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GPU Memory Store&lt;br /&gt;
|Native&lt;br /&gt;
|GPL v2&lt;br /&gt;
|[https://github.com/heterodb/pg-strom github]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|FDW to GPU device memory; a part of PG-Strom feature for PL/CUDA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Scientific Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Ambry&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/nmb10/ambryfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ROOT files&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/miguel-branco/root_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| https://root.cern.ch&lt;br /&gt;
|-&lt;br /&gt;
| VCF files (Genotype)&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/smithijk/vcf_fdw_postgresql  GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| https://en.wikipedia.org/wiki/Variant_Call_Format&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operating System Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Docker&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| Expat&lt;br /&gt;
| [https://github.com/paultag/dockerfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Log files&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/rdunklau/logfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| OpenStack / Telemetry&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/CSCfi/telemetry-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| OS Query&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/shish/pgosquery GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Like Facebook&#039;s OSQuery, but for Postgres&lt;br /&gt;
|-&lt;br /&gt;
| Passwd&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/beargiles/passwd-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| reads linux/unix password and group files.&lt;br /&gt;
|-&lt;br /&gt;
| Process&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/Kozea/Multicorn/blob/master/python/multicorn/processfdw.py GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A foreign datawrapper for querying system stats based on [https://libstatgrab.org/ statgrab]&lt;br /&gt;
|-&lt;br /&gt;
| Environment Variables&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/pgsql-tw/envfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| envFDW is a forign data wrapper for processing environment variables&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Exotic Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| faker_fdw&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/guedes/faker_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| faker_fdw is a foreign data wrapper for PostgreSQL that generates fake data.&lt;br /&gt;
|-&lt;br /&gt;
| fdw_fdw&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/daamien/fdw_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| the Meta FDW ! reads this page and returns the list of all the FDW&lt;br /&gt;
|-&lt;br /&gt;
| PPG&lt;br /&gt;
| Native&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/scarbrofair/ppg_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| distributed parallel query engine, based on fdw and hooks of PG&lt;br /&gt;
|-&lt;br /&gt;
| Open Civic Data&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| Expat&lt;br /&gt;
| [https://github.com/paultag/sunlightfdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://www2.meethue.com/en-us/philips-hue-benefits Phillips Hue Lighting Systems]&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/rotten/hue-multicorn-postgresql-fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Random Number&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://github.com/yieldsfalsehood/rng_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A random number generator foreign data wrapper for postgres&lt;br /&gt;
|-&lt;br /&gt;
| Rotfang&lt;br /&gt;
| Native&lt;br /&gt;
| PostgreSQL&lt;br /&gt;
| [https://bitbucket.org/adunstan/rotfang-fdw BitBucket]&lt;br /&gt;
|&lt;br /&gt;
| [https://drive.google.com/file/d/0B3XVAFFWEFN0aURac0dzSFQyZzA/view slides]&lt;br /&gt;
| Advanced random number generator&lt;br /&gt;
|-&lt;br /&gt;
| Template Tables&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/okbob/template_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| PostgreSQL data wrapper for template tables - any DML and SELECT operations are disallowed&lt;br /&gt;
|-&lt;br /&gt;
| VMware vSphere&lt;br /&gt;
| [https://multicorn.org/ Multicorn]&lt;br /&gt;
| MIT&lt;br /&gt;
| [https://github.com/ycku/vspherefdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| A PostgreSQL FDW to query your VMware vSphere service&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example Wrappers ==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!{{Hl2}} |Data Source&lt;br /&gt;
!{{Hl2}} |Type&lt;br /&gt;
!{{Hl2}} |License&lt;br /&gt;
!{{Hl2}} |Code&lt;br /&gt;
!{{Hl2}} |Install&lt;br /&gt;
!{{Hl2}} |Doc&lt;br /&gt;
!{{Hl2}} |Notes&lt;br /&gt;
|-&lt;br /&gt;
| Dummy&lt;br /&gt;
| Native&lt;br /&gt;
| BSD&lt;br /&gt;
| [https://github.com/slaught/dummy_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Readable null FDW for testing&lt;br /&gt;
|-&lt;br /&gt;
| Hello World&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/wikrsh/hello_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hello World&lt;br /&gt;
| [https://supabase.github.io/wrappers/ Wrappers]&lt;br /&gt;
| Apache&lt;br /&gt;
| [https://github.com/supabase/wrappers/tree/main/wrappers/src/fdw/helloworld_fdw GitHub]&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/supabase/wrappers/blob/main/wrappers/src/fdw/helloworld_fdw/ README]&lt;br /&gt;
| A demo foreign data wrapper&lt;br /&gt;
|-&lt;br /&gt;
| Black Hole&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| [https://bitbucket.org/adunstan/blackhole_fdw bitbucket]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| a skeleton FDW pre-populated with relevant excerpts from the documentation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Writing Foreign Database Wrappers=&lt;br /&gt;
&lt;br /&gt;
* [https://multicorn.org/ Multicorn] is an extension that allows you to write FDWs in Python&lt;br /&gt;
* [https://github.com/franckverrot/holycorn Holycorn] is an extension that allows you to write FDWs in Ruby&lt;br /&gt;
* [https://www.postgresql.org/docs/current/fdwhandler.html Documentation: Writing a Foreign Data Wrapper]&lt;br /&gt;
* [https://bitbucket.org/adunstan/blackhole_fdw Black Hole FDW] - a skeleton FDW pre-populated with relevant excerpts from the documentation&lt;br /&gt;
* [https://github.com/nautilebleu/django-fdw django-fdw] A sample project to test django and Postgres Foreign Data Wrapper&lt;br /&gt;
* [https://github.com/supabase/wrappers Wrappers] is a development framework allows you to write FDWs in Rust&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Foreign-data wrapper|!]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=36540</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=36540"/>
		<updated>2021-10-18T13:45:56Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}} &lt;br /&gt;
== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* Liste d&#039;entraide PostgreSQL : http://archives.postgresql.org/pgsql-fr-generale/&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-demarrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] [http://blog.postgresql.fr/public/Doc%20postgresql.pdf PDF] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.3_sous_windows Installation de PostgreSQL 8.3 sous Windows] (par Guillaume Lelarge, le 26/12/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.4_sous_windows Installation de PostgreSQL 8.4 sous Windows] (par Guillaume Lelarge, le 29/12/2009).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2010/06/16/Pr%C3%A9sentation-de-la-version-9.0-de-PostgreSQL2 Présentation de la version 9.0 de PostgreSQL] (par Marc Cousin, le 16/06/2010).&lt;br /&gt;
&lt;br /&gt;
=== Publications ===&lt;br /&gt;
&lt;br /&gt;
==== Livres consacrés à PostgreSQL ====&lt;br /&gt;
&lt;br /&gt;
* [http://www.d-booker.fr/postgresql/187-architecture-et-notions-avancees.html PostgreSQL - Architecture et notions avancées], par Guillaume Lelarge, 2015, maj 2016. ISBN: 978-2-8227-0275-1&lt;br /&gt;
* [http://www.pearson.fr/livre/?GCOI=27440100863920 Bases de données PostgreSQL, gestion des performances], par Gregory Smith, mai 2011. ISBN: 978-2-7440-2483-2.&lt;br /&gt;
* [http://digitbooks.fr/catalogue/9782815001984.html Utiliser PostgreSQL], par Dominique Colombani, avril 2010. ISBN: 978-2-8150-0198-4.&lt;br /&gt;
* [http://editions-ellipses.fr/bases-de-donnees-de-la-modelisation-au-sql-p-7013.html Bases de données, de la modélisation au SQL], par Laurent Audibert, 2009. ISBN: 978-2-7298-5120-0.&lt;br /&gt;
* [http://digitbooks.fr/catalogue/9782815001809.html Installer et débuter avec PostgreSQL], par Dominique Colombani, septembre 2009. ISBN: 978-2-8150-0180-9 .&lt;br /&gt;
* [http://www.editions-eni.fr/Livres/PostgreSQL-Entrainez-vous-a-creer-et-programmer-une-base-de-donnees-relationnelle/.5_3a6222cf-b921-41f5-886c-c989f77ba994_93969b6a-da2e-4218-810b-d4c9d12b087f_98e0171c-08bd-47c6-83f4-4dca76936e90_1_0_d9bd8b5e-f324-473f-b1fc-b41b421c950f.html Entraînez-vous à créer et programmer une base de données relationnelle], François-Marie Colonna, novembre 2008. ISBN: 978-2-7460-4381-7.&lt;br /&gt;
* [http://www.editions-eni.fr/Livres/PostgreSQL---administration-et-exploitation-d-rsquoune-base-de-donnees-2eme-edition-/.5_3a6222cf-b921-41f5-886c-c989f77ba994_93969b6a-da2e-4218-810b-d4c9d12b087f_710d51ac-760b-4aeb-a66a-55d146b69983_1_0_d9bd8b5e-f324-473f-b1fc-b41b421c950f.html PostgreSQL - Administration et exploitation d’une base de données (2ème édition)], par Sébastien Lardière. ISBN: 978-2-7460-3961-2&lt;br /&gt;
&lt;br /&gt;
==== Publications dans [http://www.ed-diamond.com/rubriquemagactu.php?id_rubrique=1&amp;amp;caracteristique=1-2-&amp;amp;caracdisp=2-3- GNU/Linux Magazine France] ====&lt;br /&gt;
* [http://ed-diamond.com/produit.php?ref=lmhs18 Hors-Série 18], « Initiation à la réplication de bases de données » (par Grégoire Lejeune et Stéphane Schildknecht, février 2004) ;&lt;br /&gt;
* [http://ed-diamond.com/produit.php?ref=lmhs18 Hors-Série 18], « Haute-Disponibilité sous PostgreSQL » (par Stéphane Schildknecht, février 2004) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] » (par Guillaume Lelarge, octobre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] » (par Guillaume Lelarge, décembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] » (par Guillaume Lelarge, janvier 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_postgresql_8.4 PostgreSQL 8.4] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_le_projet_postgresql Le projet PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_installation_de_postgresql Installation de PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_rapide_configuration_de_postgresql Rapide configuration de PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_creer_une_base_avec_postgresql Créer une base avec PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpool_le_pooler_multitache pgPool : le pooler multitâche] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgbouncer_un_pooler_simple_mais_efficace pgBouncer : un pooler simple, mais efficace] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_la_replication_par_les_journaux_de_transactions La réplication par les journaux de transactions] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_slony_la_replication_des_donnees_par_trigger Slony : la réplication des données par trigger] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_londiste_la_replicaton_vue_par_skype Londiste : la réplication vue par Skype] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpoolII_la_replication_par_duplication_des_requetes pgPool-II : la réplication par duplication des requêtes] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_une_synthese_et_en_route_vers_le_futur Une synthèse, et en route vers le futur] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs45 Hors-série 45], « [http://www.dalibo.org/hs45_drbd_la_replication_des_blocs_disques DRBD, la réplication des blocs disques] » (par Guillaume Lelarge, décembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmag131 numéro 131], « [http://www.dalibo.org/glmf131_mise_en_place_replication_postgresl_9.0_1 Mise en place de la réplication avec PostgreSQL 9.0 1/2] » (par Guillaume Lelarge, octobre 2010).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmag132 numéro 132], « [http://www.dalibo.org/glmf131_mise_en_place_replication_postgresl_9.0_2 Mise en place de la réplication avec PostgreSQL 9.0 2/2] » (par Guillaume Lelarge, novembre 2010).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmag134 numéro 134], « [http://www.dalibo.org/glmf134_postgresql_les_autres_nouveautes PostgreSQL 9.0, les autres nouveautés] » (par Guillaume Lelarge, janvier 2010).&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/postgresqlfr/pgfr_materials/blob/master/advocacy/confs/Dijon_2005/bdd_os.ppt?raw=true Les bases de données OpenSource] (par Stéphane Schildknecht, décembre 2005) ;&lt;br /&gt;
* [https://github.com/postgresqlfr/pgfr_materials/blob/master/advocacy/confs/Dijon_2005/PostgreSQL.ppt?raw=true Découvrons PostgreSQL]  (par Stéphane Schildknecht, décembre 2005) ;&lt;br /&gt;
* [https://github.com/postgresqlfr/pgfr_materials/blob/master/advocacy/confs/Dijon_2005/bdd_ha.ppt?raw=true Haute-disponibilité et bases de données]  (par Stéphane Schildknecht, décembre 2005) ;&lt;br /&gt;
* [https://github.com/postgresqlfr/pgfr_materials/blob/master/advocacy/confs/Nancy_2008/PostgreSQL.odp?raw=true Découvrons PostgreSQL]  (par Stéphane Schildknecht, décembre 2008) ;&lt;br /&gt;
* [https://github.com/postgresqlfr/pgfr_materials/blob/master/advocacy/confs/Nancy_2008/PostgreSQLfr.odp?raw=true PostgreSQLFr]  (par Stéphane Schildknecht, décembre 2008) ;&lt;br /&gt;
* [https://github.com/postgresqlfr/pgfr_materials/tree/master/advocacy/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [https://github.com/postgresqlfr/pgfr_materials/tree/master/advocacy/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql Haute disponibilité avec PostgreSQL] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;br /&gt;
* [[PG_Day_France_2018|PG Day France 2018]]&lt;br /&gt;
* [https://blog-postgresql.verite.pro/2018/06/29/presentation-pg-icu.html Présentation PostgreSQL avec ICU et icu_ext] (par Daniel Vérité, meetup PG Paris juin 2018)&lt;br /&gt;
[[Category:Français]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=35487</id>
		<title>Performance Analysis Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=35487"/>
		<updated>2020-10-27T13:19:56Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Make it a real bullet list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
= Performance Analysis Tools =&lt;br /&gt;
&lt;br /&gt;
This page is focused on tools for collecting data &amp;lt;i&amp;gt;outside&amp;lt;/i&amp;gt; of PostgreSQL, in order to learn more about the system as a whole, about PostgreSQL&#039;s use of system resources, about things that may be bottlenecks for PostgreSQL&#039;s performance, etc.&lt;br /&gt;
&lt;br /&gt;
Most of the time, the tools PostgreSQL provides internally will be more than adequate for your needs. The most important tool in your toolbox is the SQL &amp;lt;code&amp;gt;[[Using EXPLAIN|EXPLAIN]]&amp;lt;/code&amp;gt; command and its &amp;lt;code&amp;gt;EXPLAIN ANALYZE&amp;lt;/code&amp;gt; alternative. The &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pg_catalog.pg_locks&amp;lt;/code&amp;gt; views are also vital.&lt;br /&gt;
&lt;br /&gt;
You can find a lot of advice about tuning PostgreSQL and the system in the [[:Category:Performance|Performance]] and [[Category:Administration|Administration]] categories of the wiki, and in [http://www.postgresql.org/docs/current/static/ the PostgreSQL manual]. If you&#039;re at a loss, see [[SlowQueryQuestions]].&lt;br /&gt;
&lt;br /&gt;
== System level tools for I/O, CPU and memory usage investigation ==&lt;br /&gt;
&lt;br /&gt;
Tools like `ps&#039; with the `wchan&#039; format specifier, `vmstat&#039;, `top&#039;, `iotop&#039;, `blktrace&#039; + `blkparse&#039;, `btrace&#039;, `sar&#039;, alt-sysrq-t, etc can help you learn much more about what your system is doing and where things are being delayed.&lt;br /&gt;
&lt;br /&gt;
On supported systems (currently Solaris and FreeBSD), `dtrace&#039; is also a powerful tool. PostgreSQL has DTrace hooks to allow you to investigate its internal workings and performance as well as that of the operating system it is running on.&lt;br /&gt;
&lt;br /&gt;
Windows users will want to look into [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor], [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer], and [http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] from the [http://technet.microsoft.com/en-us/sysinternals/default.aspx SysInternals] suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unix/Linux tools ==&lt;br /&gt;
&lt;br /&gt;
=== ps ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;wchan&amp;quot; option is really useful for seeing what a process that&#039;s in &#039;D&#039; state (uninterruptable sleep in kernel system call) is actually doing. eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ps -e -o pid,ppid,wchan:60,cmd | grep post&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to go digging in the kernel sources, use Google, or nut it out to figure what the value shown in the &amp;lt;code&amp;gt;wchan&amp;lt;/code&amp;gt; field means.&lt;br /&gt;
&lt;br /&gt;
=== vmstat ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vmstat&amp;lt;/code&amp;gt; can give you useful overview information about CPU, disk and memory activity at a system wide level. It&#039;s most useful when updating continuously, eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(the number is in seconds).&lt;br /&gt;
&lt;br /&gt;
Output looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ vmstat 1&lt;br /&gt;
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----&lt;br /&gt;
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa&lt;br /&gt;
 0  0   4144 242088 707752 2307192    0    0     0    26   71   73  2  1 97  1&lt;br /&gt;
 0  0   4144 242080 707752 2307220    0    0     0     0  944 1917  2  1 97  0&lt;br /&gt;
 0  0   4144 241956 707752 2307220    0    0     0    64  772 1579  1  1 98  0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== top ===&lt;br /&gt;
&lt;br /&gt;
Like vmstat, gives you some system overview info, though isn&#039;t as useful for disk information. Quite configurable.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be fooled by the &amp;quot;used&amp;quot; and &amp;quot;free&amp;quot; memory values. The &amp;lt;i&amp;gt;real&amp;lt;/i&amp;gt; memory in use is actually (roughly) the value in &amp;quot;used&amp;quot; minus the value in &amp;quot;buffers&amp;quot;, since &amp;quot;buffers&amp;quot; includes the kernel&#039;s disk cache. The kernel will use most of the free memory for disk cache, but will shrink that cache as required to fit other things into memory. After all, truly free memory is wasted memory that does you no good.&lt;br /&gt;
&lt;br /&gt;
=== free ===&lt;br /&gt;
&lt;br /&gt;
Shows free and used memory, system-wide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ free -m&lt;br /&gt;
             total       used       free     shared    buffers     cached&lt;br /&gt;
Mem:          3960       3726        234          0        721       2252&lt;br /&gt;
-/+ buffers/cache:        752       3208&lt;br /&gt;
Swap:         2070          4       2066&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;free&amp;quot; value beside &amp;quot;-/+ buffers/cache&amp;quot; is the one you should generally consider the &amp;quot;real&amp;quot; amount of free memory in the system. The &amp;quot;-m&amp;quot; flag asks for values in megabytes.&lt;br /&gt;
&lt;br /&gt;
=== sar ===&lt;br /&gt;
&lt;br /&gt;
Process accounting. See the man page.&lt;br /&gt;
&lt;br /&gt;
=== gdb ===&lt;br /&gt;
&lt;br /&gt;
Why is a debugger listed in performance analysis tools?&lt;br /&gt;
&lt;br /&gt;
Because sometimes, attaching a debugger to a backend, interrupting the backend periodically to get a backtrace, and then trying to figure out what on earth it&#039;s up to is a helpful way to track down an issue.&lt;br /&gt;
&lt;br /&gt;
See [[Generating a stack trace of a PostgreSQL_backend]]&lt;br /&gt;
&lt;br /&gt;
=== Wireshark, tshark, and tcpdump ===&lt;br /&gt;
&lt;br /&gt;
These tools are for monitoring and analysis of traffic on a network interface. If you can&#039;t figure out what&#039;s keeping your network interface pegged, they might help you figure out what data is being transmitted/received.&lt;br /&gt;
&lt;br /&gt;
=== pktstat ===&lt;br /&gt;
&lt;br /&gt;
A top-like utility for network interfaces. Doesn&#039;t, alas, show process IDs or names, but you can figure those out from source and destination port information. Handy for tracking down a backend that&#039;s flooding the interface with traffic.&lt;br /&gt;
&lt;br /&gt;
== Linux-only tools ==&lt;br /&gt;
&lt;br /&gt;
=== atop ===&lt;br /&gt;
&lt;br /&gt;
[https://www.atoptool.nl/ Atop] is an ASCII full-screen performance monitor for Linux that is capable of reporting the activity of all processes (even if processes have finished during the interval), daily logging of system and process activity for long-term analysis, highlighting overloaded system resources by using colors, etc. At regular intervals, it shows system-level activity related to the CPU, memory, swap, disks (including LVM) and network layers, and for every process (and thread) it shows e.g. the CPU utilization, memory growth, disk utilization, priority, username, state, and exit code.&lt;br /&gt;
&lt;br /&gt;
=== iostat ===&lt;br /&gt;
&lt;br /&gt;
Provides summary information about I/O activity and load on block devices in the system. Doesn&#039;t provide information about what processes are responsible for the load, but produces short and easily read output in real time. Like vmstat, most usefully used in continuous mode, eg &amp;quot;iostat 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See the man page for details.&lt;br /&gt;
&lt;br /&gt;
=== blktrace, blkparse and btrace ===&lt;br /&gt;
&lt;br /&gt;
These are tools to get very low level information about the activity on a given block device, what process(es) are causing that activity, and what they&#039;re doing. It produces a huge amount of information, but can be filtered somewhat. It takes a bit of thought to interpret, but can be great for those &amp;quot;what the hell is thrashing my disk&amp;quot; moments.&lt;br /&gt;
&lt;br /&gt;
Because of the bgwriter and wal writer, it&#039;s not usually easy to see what PostgreSQL backends are keeping a disk busy with &amp;lt;i&amp;gt;writes&amp;lt;/i&amp;gt;. It&#039;s still good for tracking down heavy read loads and figuring out what backend (and, thus, query - via the &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt;) is responsible.&lt;br /&gt;
&lt;br /&gt;
Output looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  9,1    0      246    11.339004193  1383  U   N [postgres] 0&lt;br /&gt;
  9,1    0      247    11.340029833  1383  A   R 118356256 + 96 &amp;lt;- (252,3) 34469792&lt;br /&gt;
  9,1    0      248    11.340030339  1383  Q   R 118356256 + 96 [postgres]&lt;br /&gt;
  9,1    0      249    11.340054022  1383  A   R 118356352 + 128 &amp;lt;- (252,3) 34469888&lt;br /&gt;
  9,1    0      250    11.340054341  1383  Q   R 118356352 + 128 [postgres]&lt;br /&gt;
  9,1    0      251    11.340062014  1383  A   R 118356480 + 32 &amp;lt;- (252,3) 34470016&lt;br /&gt;
  9,1    0      252    11.340062367  1383  Q   R 118356480 + 32 [postgres]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... plus a handy summary at the end.&lt;br /&gt;
&lt;br /&gt;
=== strace ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;strace&amp;lt;/code&amp;gt; is a useful tool that can attach to a process and report all the system calls that process makes, including arguments to those system calls. It&#039;s great for figuring out what files a process opens, or if it&#039;s waiting for something, etc.&lt;br /&gt;
&lt;br /&gt;
Useful interpretation requires some C programming knowledge and some idea about POSIX APIs.&lt;br /&gt;
&lt;br /&gt;
(Note that other systems have similar tools with different names - for example, some BSDs have &amp;lt;code&amp;gt;truss&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== oprofile ===&lt;br /&gt;
&lt;br /&gt;
Probably not useful for general users, but a handy tool if you have something within Pg or a library used by Pg that&#039;s running strangely slowly and you don&#039;t know why.&lt;br /&gt;
&lt;br /&gt;
[[Profiling with OProfile]]&lt;br /&gt;
&lt;br /&gt;
=== alt-sysrq-t ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;magic sysrq key&amp;quot;. Mainly useful for tracking down processes mysteriously stuck in &#039;D&#039; state in the kernel, ie hung in a system call, since it will output a stack trace of the kernel stack for all processes in the system. Mostly used when trying to figure out whether Pg is having problems due to a kernel bug, hardware issue, file system bug, etc.&lt;br /&gt;
&lt;br /&gt;
Must be enabled with &#039;sysctl -w kernel.sysrq=1&#039; before it can be used.&lt;br /&gt;
&lt;br /&gt;
=== DTrace ===&lt;br /&gt;
&lt;br /&gt;
See separate [[DTrace]] page.&lt;br /&gt;
&lt;br /&gt;
== Windows tools ==&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor] ===&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer] ===&lt;br /&gt;
&lt;br /&gt;
===[http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL-centric performance tools ==&lt;br /&gt;
&lt;br /&gt;
=== pgBadger ===&lt;br /&gt;
&lt;br /&gt;
[https://pgbadger.darold.net/ pgBadger] is a PostgreSQL log analyzer build for speed with fully detailed reports from your PostgreSQL log file.&lt;br /&gt;
&lt;br /&gt;
=== PoWA ===&lt;br /&gt;
&lt;br /&gt;
[https://powa.readthedocs.io PoWA] (PostgreSQL Workload Analyzer) is a performance tool for PostgreSQL allowing to collect, aggregate and purge statistics on multiple PostgreSQL instances from various Stats Extensions ([https://www.postgresql.org/docs/current/static/pgstatstatements.html pg_stat_statements],[https://github.com/powa-team/pg_qualstats pg_qualstats],[https://github.com/powa-team/pg_stat_kcache pg_stat_kcache], [https://github.com/postgrespro/pg_wait_sampling/ pg_wait_sampling]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Web tools ==&lt;br /&gt;
&lt;br /&gt;
=== Explain Depesz ===&lt;br /&gt;
&lt;br /&gt;
Paste your explain analyze plan, and see the output. You can click on column headers to let it know which parameter is the most important for you – exclusive node time, inclusive node time, or rowcount mis-estimate.&lt;br /&gt;
&lt;br /&gt;
https://explain.depesz.com/&lt;br /&gt;
&lt;br /&gt;
=== Postgres EXPLAIN Visualiser (Pev) ===&lt;br /&gt;
&lt;br /&gt;
Pev is designed to make Postgres query plans easier to grok. It displays a plan as a tree, with each node representing a step that takes in a row set and produces another. &lt;br /&gt;
&lt;br /&gt;
http://tatiyants.com/pev/&lt;br /&gt;
&lt;br /&gt;
=== Postgres EXPLAIN Visualiser 2 (Pev2) ===&lt;br /&gt;
&lt;br /&gt;
This project is a rewrite of the excellent Postgres Explain Visualizer (pev).&lt;br /&gt;
&lt;br /&gt;
The pev project was initially written in early 2016 but seems to be abandoned since then. There was no activity at all for more than 4 years and counting though there are several issues open and relevant pull requests pending.&lt;br /&gt;
&lt;br /&gt;
The current project has several goals:&lt;br /&gt;
&lt;br /&gt;
* isolate the plan view component and its dependencies in order to use it in any web app with for example the ability to load a plan without requiring any copy-paste from the user,&lt;br /&gt;
* make it work with recent version of JS frameworks,&lt;br /&gt;
* upgrade Bootstrap to a more recent version,&lt;br /&gt;
* use VueJS just for a matter of taste,&lt;br /&gt;
* maintain the project to match upgrades in PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
https://explain.dalibo.com/ (GitHub project on https://github.com/dalibo/pev2/)&lt;br /&gt;
&lt;br /&gt;
=== pgMustard ===&lt;br /&gt;
&lt;br /&gt;
pgMustard visualises EXPLAIN output and gives tips on what to do to speed up your query.&lt;br /&gt;
&lt;br /&gt;
https://www.pgmustard.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Performance]] [[Category:Administration]]&lt;br /&gt;
&lt;br /&gt;
Page originally by --[[User:Ringerc|Ringerc]] 07:26, 26 November 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=35486</id>
		<title>Performance Analysis Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=35486"/>
		<updated>2020-10-27T13:19:11Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add another URL for the pev2 tool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
= Performance Analysis Tools =&lt;br /&gt;
&lt;br /&gt;
This page is focused on tools for collecting data &amp;lt;i&amp;gt;outside&amp;lt;/i&amp;gt; of PostgreSQL, in order to learn more about the system as a whole, about PostgreSQL&#039;s use of system resources, about things that may be bottlenecks for PostgreSQL&#039;s performance, etc.&lt;br /&gt;
&lt;br /&gt;
Most of the time, the tools PostgreSQL provides internally will be more than adequate for your needs. The most important tool in your toolbox is the SQL &amp;lt;code&amp;gt;[[Using EXPLAIN|EXPLAIN]]&amp;lt;/code&amp;gt; command and its &amp;lt;code&amp;gt;EXPLAIN ANALYZE&amp;lt;/code&amp;gt; alternative. The &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pg_catalog.pg_locks&amp;lt;/code&amp;gt; views are also vital.&lt;br /&gt;
&lt;br /&gt;
You can find a lot of advice about tuning PostgreSQL and the system in the [[:Category:Performance|Performance]] and [[Category:Administration|Administration]] categories of the wiki, and in [http://www.postgresql.org/docs/current/static/ the PostgreSQL manual]. If you&#039;re at a loss, see [[SlowQueryQuestions]].&lt;br /&gt;
&lt;br /&gt;
== System level tools for I/O, CPU and memory usage investigation ==&lt;br /&gt;
&lt;br /&gt;
Tools like `ps&#039; with the `wchan&#039; format specifier, `vmstat&#039;, `top&#039;, `iotop&#039;, `blktrace&#039; + `blkparse&#039;, `btrace&#039;, `sar&#039;, alt-sysrq-t, etc can help you learn much more about what your system is doing and where things are being delayed.&lt;br /&gt;
&lt;br /&gt;
On supported systems (currently Solaris and FreeBSD), `dtrace&#039; is also a powerful tool. PostgreSQL has DTrace hooks to allow you to investigate its internal workings and performance as well as that of the operating system it is running on.&lt;br /&gt;
&lt;br /&gt;
Windows users will want to look into [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor], [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer], and [http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] from the [http://technet.microsoft.com/en-us/sysinternals/default.aspx SysInternals] suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unix/Linux tools ==&lt;br /&gt;
&lt;br /&gt;
=== ps ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;wchan&amp;quot; option is really useful for seeing what a process that&#039;s in &#039;D&#039; state (uninterruptable sleep in kernel system call) is actually doing. eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ps -e -o pid,ppid,wchan:60,cmd | grep post&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to go digging in the kernel sources, use Google, or nut it out to figure what the value shown in the &amp;lt;code&amp;gt;wchan&amp;lt;/code&amp;gt; field means.&lt;br /&gt;
&lt;br /&gt;
=== vmstat ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vmstat&amp;lt;/code&amp;gt; can give you useful overview information about CPU, disk and memory activity at a system wide level. It&#039;s most useful when updating continuously, eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(the number is in seconds).&lt;br /&gt;
&lt;br /&gt;
Output looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ vmstat 1&lt;br /&gt;
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----&lt;br /&gt;
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa&lt;br /&gt;
 0  0   4144 242088 707752 2307192    0    0     0    26   71   73  2  1 97  1&lt;br /&gt;
 0  0   4144 242080 707752 2307220    0    0     0     0  944 1917  2  1 97  0&lt;br /&gt;
 0  0   4144 241956 707752 2307220    0    0     0    64  772 1579  1  1 98  0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== top ===&lt;br /&gt;
&lt;br /&gt;
Like vmstat, gives you some system overview info, though isn&#039;t as useful for disk information. Quite configurable.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be fooled by the &amp;quot;used&amp;quot; and &amp;quot;free&amp;quot; memory values. The &amp;lt;i&amp;gt;real&amp;lt;/i&amp;gt; memory in use is actually (roughly) the value in &amp;quot;used&amp;quot; minus the value in &amp;quot;buffers&amp;quot;, since &amp;quot;buffers&amp;quot; includes the kernel&#039;s disk cache. The kernel will use most of the free memory for disk cache, but will shrink that cache as required to fit other things into memory. After all, truly free memory is wasted memory that does you no good.&lt;br /&gt;
&lt;br /&gt;
=== free ===&lt;br /&gt;
&lt;br /&gt;
Shows free and used memory, system-wide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ free -m&lt;br /&gt;
             total       used       free     shared    buffers     cached&lt;br /&gt;
Mem:          3960       3726        234          0        721       2252&lt;br /&gt;
-/+ buffers/cache:        752       3208&lt;br /&gt;
Swap:         2070          4       2066&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;free&amp;quot; value beside &amp;quot;-/+ buffers/cache&amp;quot; is the one you should generally consider the &amp;quot;real&amp;quot; amount of free memory in the system. The &amp;quot;-m&amp;quot; flag asks for values in megabytes.&lt;br /&gt;
&lt;br /&gt;
=== sar ===&lt;br /&gt;
&lt;br /&gt;
Process accounting. See the man page.&lt;br /&gt;
&lt;br /&gt;
=== gdb ===&lt;br /&gt;
&lt;br /&gt;
Why is a debugger listed in performance analysis tools?&lt;br /&gt;
&lt;br /&gt;
Because sometimes, attaching a debugger to a backend, interrupting the backend periodically to get a backtrace, and then trying to figure out what on earth it&#039;s up to is a helpful way to track down an issue.&lt;br /&gt;
&lt;br /&gt;
See [[Generating a stack trace of a PostgreSQL_backend]]&lt;br /&gt;
&lt;br /&gt;
=== Wireshark, tshark, and tcpdump ===&lt;br /&gt;
&lt;br /&gt;
These tools are for monitoring and analysis of traffic on a network interface. If you can&#039;t figure out what&#039;s keeping your network interface pegged, they might help you figure out what data is being transmitted/received.&lt;br /&gt;
&lt;br /&gt;
=== pktstat ===&lt;br /&gt;
&lt;br /&gt;
A top-like utility for network interfaces. Doesn&#039;t, alas, show process IDs or names, but you can figure those out from source and destination port information. Handy for tracking down a backend that&#039;s flooding the interface with traffic.&lt;br /&gt;
&lt;br /&gt;
== Linux-only tools ==&lt;br /&gt;
&lt;br /&gt;
=== atop ===&lt;br /&gt;
&lt;br /&gt;
[https://www.atoptool.nl/ Atop] is an ASCII full-screen performance monitor for Linux that is capable of reporting the activity of all processes (even if processes have finished during the interval), daily logging of system and process activity for long-term analysis, highlighting overloaded system resources by using colors, etc. At regular intervals, it shows system-level activity related to the CPU, memory, swap, disks (including LVM) and network layers, and for every process (and thread) it shows e.g. the CPU utilization, memory growth, disk utilization, priority, username, state, and exit code.&lt;br /&gt;
&lt;br /&gt;
=== iostat ===&lt;br /&gt;
&lt;br /&gt;
Provides summary information about I/O activity and load on block devices in the system. Doesn&#039;t provide information about what processes are responsible for the load, but produces short and easily read output in real time. Like vmstat, most usefully used in continuous mode, eg &amp;quot;iostat 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See the man page for details.&lt;br /&gt;
&lt;br /&gt;
=== blktrace, blkparse and btrace ===&lt;br /&gt;
&lt;br /&gt;
These are tools to get very low level information about the activity on a given block device, what process(es) are causing that activity, and what they&#039;re doing. It produces a huge amount of information, but can be filtered somewhat. It takes a bit of thought to interpret, but can be great for those &amp;quot;what the hell is thrashing my disk&amp;quot; moments.&lt;br /&gt;
&lt;br /&gt;
Because of the bgwriter and wal writer, it&#039;s not usually easy to see what PostgreSQL backends are keeping a disk busy with &amp;lt;i&amp;gt;writes&amp;lt;/i&amp;gt;. It&#039;s still good for tracking down heavy read loads and figuring out what backend (and, thus, query - via the &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt;) is responsible.&lt;br /&gt;
&lt;br /&gt;
Output looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  9,1    0      246    11.339004193  1383  U   N [postgres] 0&lt;br /&gt;
  9,1    0      247    11.340029833  1383  A   R 118356256 + 96 &amp;lt;- (252,3) 34469792&lt;br /&gt;
  9,1    0      248    11.340030339  1383  Q   R 118356256 + 96 [postgres]&lt;br /&gt;
  9,1    0      249    11.340054022  1383  A   R 118356352 + 128 &amp;lt;- (252,3) 34469888&lt;br /&gt;
  9,1    0      250    11.340054341  1383  Q   R 118356352 + 128 [postgres]&lt;br /&gt;
  9,1    0      251    11.340062014  1383  A   R 118356480 + 32 &amp;lt;- (252,3) 34470016&lt;br /&gt;
  9,1    0      252    11.340062367  1383  Q   R 118356480 + 32 [postgres]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... plus a handy summary at the end.&lt;br /&gt;
&lt;br /&gt;
=== strace ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;strace&amp;lt;/code&amp;gt; is a useful tool that can attach to a process and report all the system calls that process makes, including arguments to those system calls. It&#039;s great for figuring out what files a process opens, or if it&#039;s waiting for something, etc.&lt;br /&gt;
&lt;br /&gt;
Useful interpretation requires some C programming knowledge and some idea about POSIX APIs.&lt;br /&gt;
&lt;br /&gt;
(Note that other systems have similar tools with different names - for example, some BSDs have &amp;lt;code&amp;gt;truss&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== oprofile ===&lt;br /&gt;
&lt;br /&gt;
Probably not useful for general users, but a handy tool if you have something within Pg or a library used by Pg that&#039;s running strangely slowly and you don&#039;t know why.&lt;br /&gt;
&lt;br /&gt;
[[Profiling with OProfile]]&lt;br /&gt;
&lt;br /&gt;
=== alt-sysrq-t ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;magic sysrq key&amp;quot;. Mainly useful for tracking down processes mysteriously stuck in &#039;D&#039; state in the kernel, ie hung in a system call, since it will output a stack trace of the kernel stack for all processes in the system. Mostly used when trying to figure out whether Pg is having problems due to a kernel bug, hardware issue, file system bug, etc.&lt;br /&gt;
&lt;br /&gt;
Must be enabled with &#039;sysctl -w kernel.sysrq=1&#039; before it can be used.&lt;br /&gt;
&lt;br /&gt;
=== DTrace ===&lt;br /&gt;
&lt;br /&gt;
See separate [[DTrace]] page.&lt;br /&gt;
&lt;br /&gt;
== Windows tools ==&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor] ===&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer] ===&lt;br /&gt;
&lt;br /&gt;
===[http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL-centric performance tools ==&lt;br /&gt;
&lt;br /&gt;
=== pgBadger ===&lt;br /&gt;
&lt;br /&gt;
[https://pgbadger.darold.net/ pgBadger] is a PostgreSQL log analyzer build for speed with fully detailed reports from your PostgreSQL log file.&lt;br /&gt;
&lt;br /&gt;
=== PoWA ===&lt;br /&gt;
&lt;br /&gt;
[https://powa.readthedocs.io PoWA] (PostgreSQL Workload Analyzer) is a performance tool for PostgreSQL allowing to collect, aggregate and purge statistics on multiple PostgreSQL instances from various Stats Extensions ([https://www.postgresql.org/docs/current/static/pgstatstatements.html pg_stat_statements],[https://github.com/powa-team/pg_qualstats pg_qualstats],[https://github.com/powa-team/pg_stat_kcache pg_stat_kcache], [https://github.com/postgrespro/pg_wait_sampling/ pg_wait_sampling]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Web tools ==&lt;br /&gt;
&lt;br /&gt;
=== Explain Depesz ===&lt;br /&gt;
&lt;br /&gt;
Paste your explain analyze plan, and see the output. You can click on column headers to let it know which parameter is the most important for you – exclusive node time, inclusive node time, or rowcount mis-estimate.&lt;br /&gt;
&lt;br /&gt;
https://explain.depesz.com/&lt;br /&gt;
&lt;br /&gt;
=== Postgres EXPLAIN Visualiser (Pev) ===&lt;br /&gt;
&lt;br /&gt;
Pev is designed to make Postgres query plans easier to grok. It displays a plan as a tree, with each node representing a step that takes in a row set and produces another. &lt;br /&gt;
&lt;br /&gt;
http://tatiyants.com/pev/&lt;br /&gt;
&lt;br /&gt;
=== Postgres EXPLAIN Visualiser 2 (Pev2) ===&lt;br /&gt;
&lt;br /&gt;
This project is a rewrite of the excellent Postgres Explain Visualizer (pev).&lt;br /&gt;
&lt;br /&gt;
The pev project was initially written in early 2016 but seems to be abandoned since then. There was no activity at all for more than 4 years and counting though there are several issues open and relevant pull requests pending.&lt;br /&gt;
&lt;br /&gt;
The current project has several goals:&lt;br /&gt;
&lt;br /&gt;
  * isolate the plan view component and its dependencies in order to use it in any web app with for example the ability to load a plan without requiring any copy-paste from the user,&lt;br /&gt;
  * make it work with recent version of JS frameworks,&lt;br /&gt;
  * upgrade Bootstrap to a more recent version,&lt;br /&gt;
  * use VueJS just for a matter of taste,&lt;br /&gt;
  * maintain the project to match upgrades in PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
https://explain.dalibo.com/ (GitHub project on https://github.com/dalibo/pev2/)&lt;br /&gt;
&lt;br /&gt;
=== pgMustard ===&lt;br /&gt;
&lt;br /&gt;
pgMustard visualises EXPLAIN output and gives tips on what to do to speed up your query.&lt;br /&gt;
&lt;br /&gt;
https://www.pgmustard.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Performance]] [[Category:Administration]]&lt;br /&gt;
&lt;br /&gt;
Page originally by --[[User:Ringerc|Ringerc]] 07:26, 26 November 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=35485</id>
		<title>Performance Analysis Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=35485"/>
		<updated>2020-10-27T12:45:51Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add pev2 tool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
= Performance Analysis Tools =&lt;br /&gt;
&lt;br /&gt;
This page is focused on tools for collecting data &amp;lt;i&amp;gt;outside&amp;lt;/i&amp;gt; of PostgreSQL, in order to learn more about the system as a whole, about PostgreSQL&#039;s use of system resources, about things that may be bottlenecks for PostgreSQL&#039;s performance, etc.&lt;br /&gt;
&lt;br /&gt;
Most of the time, the tools PostgreSQL provides internally will be more than adequate for your needs. The most important tool in your toolbox is the SQL &amp;lt;code&amp;gt;[[Using EXPLAIN|EXPLAIN]]&amp;lt;/code&amp;gt; command and its &amp;lt;code&amp;gt;EXPLAIN ANALYZE&amp;lt;/code&amp;gt; alternative. The &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pg_catalog.pg_locks&amp;lt;/code&amp;gt; views are also vital.&lt;br /&gt;
&lt;br /&gt;
You can find a lot of advice about tuning PostgreSQL and the system in the [[:Category:Performance|Performance]] and [[Category:Administration|Administration]] categories of the wiki, and in [http://www.postgresql.org/docs/current/static/ the PostgreSQL manual]. If you&#039;re at a loss, see [[SlowQueryQuestions]].&lt;br /&gt;
&lt;br /&gt;
== System level tools for I/O, CPU and memory usage investigation ==&lt;br /&gt;
&lt;br /&gt;
Tools like `ps&#039; with the `wchan&#039; format specifier, `vmstat&#039;, `top&#039;, `iotop&#039;, `blktrace&#039; + `blkparse&#039;, `btrace&#039;, `sar&#039;, alt-sysrq-t, etc can help you learn much more about what your system is doing and where things are being delayed.&lt;br /&gt;
&lt;br /&gt;
On supported systems (currently Solaris and FreeBSD), `dtrace&#039; is also a powerful tool. PostgreSQL has DTrace hooks to allow you to investigate its internal workings and performance as well as that of the operating system it is running on.&lt;br /&gt;
&lt;br /&gt;
Windows users will want to look into [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor], [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer], and [http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] from the [http://technet.microsoft.com/en-us/sysinternals/default.aspx SysInternals] suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unix/Linux tools ==&lt;br /&gt;
&lt;br /&gt;
=== ps ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;wchan&amp;quot; option is really useful for seeing what a process that&#039;s in &#039;D&#039; state (uninterruptable sleep in kernel system call) is actually doing. eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ps -e -o pid,ppid,wchan:60,cmd | grep post&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to go digging in the kernel sources, use Google, or nut it out to figure what the value shown in the &amp;lt;code&amp;gt;wchan&amp;lt;/code&amp;gt; field means.&lt;br /&gt;
&lt;br /&gt;
=== vmstat ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vmstat&amp;lt;/code&amp;gt; can give you useful overview information about CPU, disk and memory activity at a system wide level. It&#039;s most useful when updating continuously, eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(the number is in seconds).&lt;br /&gt;
&lt;br /&gt;
Output looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ vmstat 1&lt;br /&gt;
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----&lt;br /&gt;
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa&lt;br /&gt;
 0  0   4144 242088 707752 2307192    0    0     0    26   71   73  2  1 97  1&lt;br /&gt;
 0  0   4144 242080 707752 2307220    0    0     0     0  944 1917  2  1 97  0&lt;br /&gt;
 0  0   4144 241956 707752 2307220    0    0     0    64  772 1579  1  1 98  0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== top ===&lt;br /&gt;
&lt;br /&gt;
Like vmstat, gives you some system overview info, though isn&#039;t as useful for disk information. Quite configurable.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be fooled by the &amp;quot;used&amp;quot; and &amp;quot;free&amp;quot; memory values. The &amp;lt;i&amp;gt;real&amp;lt;/i&amp;gt; memory in use is actually (roughly) the value in &amp;quot;used&amp;quot; minus the value in &amp;quot;buffers&amp;quot;, since &amp;quot;buffers&amp;quot; includes the kernel&#039;s disk cache. The kernel will use most of the free memory for disk cache, but will shrink that cache as required to fit other things into memory. After all, truly free memory is wasted memory that does you no good.&lt;br /&gt;
&lt;br /&gt;
=== free ===&lt;br /&gt;
&lt;br /&gt;
Shows free and used memory, system-wide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ free -m&lt;br /&gt;
             total       used       free     shared    buffers     cached&lt;br /&gt;
Mem:          3960       3726        234          0        721       2252&lt;br /&gt;
-/+ buffers/cache:        752       3208&lt;br /&gt;
Swap:         2070          4       2066&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;free&amp;quot; value beside &amp;quot;-/+ buffers/cache&amp;quot; is the one you should generally consider the &amp;quot;real&amp;quot; amount of free memory in the system. The &amp;quot;-m&amp;quot; flag asks for values in megabytes.&lt;br /&gt;
&lt;br /&gt;
=== sar ===&lt;br /&gt;
&lt;br /&gt;
Process accounting. See the man page.&lt;br /&gt;
&lt;br /&gt;
=== gdb ===&lt;br /&gt;
&lt;br /&gt;
Why is a debugger listed in performance analysis tools?&lt;br /&gt;
&lt;br /&gt;
Because sometimes, attaching a debugger to a backend, interrupting the backend periodically to get a backtrace, and then trying to figure out what on earth it&#039;s up to is a helpful way to track down an issue.&lt;br /&gt;
&lt;br /&gt;
See [[Generating a stack trace of a PostgreSQL_backend]]&lt;br /&gt;
&lt;br /&gt;
=== Wireshark, tshark, and tcpdump ===&lt;br /&gt;
&lt;br /&gt;
These tools are for monitoring and analysis of traffic on a network interface. If you can&#039;t figure out what&#039;s keeping your network interface pegged, they might help you figure out what data is being transmitted/received.&lt;br /&gt;
&lt;br /&gt;
=== pktstat ===&lt;br /&gt;
&lt;br /&gt;
A top-like utility for network interfaces. Doesn&#039;t, alas, show process IDs or names, but you can figure those out from source and destination port information. Handy for tracking down a backend that&#039;s flooding the interface with traffic.&lt;br /&gt;
&lt;br /&gt;
== Linux-only tools ==&lt;br /&gt;
&lt;br /&gt;
=== atop ===&lt;br /&gt;
&lt;br /&gt;
[https://www.atoptool.nl/ Atop] is an ASCII full-screen performance monitor for Linux that is capable of reporting the activity of all processes (even if processes have finished during the interval), daily logging of system and process activity for long-term analysis, highlighting overloaded system resources by using colors, etc. At regular intervals, it shows system-level activity related to the CPU, memory, swap, disks (including LVM) and network layers, and for every process (and thread) it shows e.g. the CPU utilization, memory growth, disk utilization, priority, username, state, and exit code.&lt;br /&gt;
&lt;br /&gt;
=== iostat ===&lt;br /&gt;
&lt;br /&gt;
Provides summary information about I/O activity and load on block devices in the system. Doesn&#039;t provide information about what processes are responsible for the load, but produces short and easily read output in real time. Like vmstat, most usefully used in continuous mode, eg &amp;quot;iostat 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See the man page for details.&lt;br /&gt;
&lt;br /&gt;
=== blktrace, blkparse and btrace ===&lt;br /&gt;
&lt;br /&gt;
These are tools to get very low level information about the activity on a given block device, what process(es) are causing that activity, and what they&#039;re doing. It produces a huge amount of information, but can be filtered somewhat. It takes a bit of thought to interpret, but can be great for those &amp;quot;what the hell is thrashing my disk&amp;quot; moments.&lt;br /&gt;
&lt;br /&gt;
Because of the bgwriter and wal writer, it&#039;s not usually easy to see what PostgreSQL backends are keeping a disk busy with &amp;lt;i&amp;gt;writes&amp;lt;/i&amp;gt;. It&#039;s still good for tracking down heavy read loads and figuring out what backend (and, thus, query - via the &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt;) is responsible.&lt;br /&gt;
&lt;br /&gt;
Output looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  9,1    0      246    11.339004193  1383  U   N [postgres] 0&lt;br /&gt;
  9,1    0      247    11.340029833  1383  A   R 118356256 + 96 &amp;lt;- (252,3) 34469792&lt;br /&gt;
  9,1    0      248    11.340030339  1383  Q   R 118356256 + 96 [postgres]&lt;br /&gt;
  9,1    0      249    11.340054022  1383  A   R 118356352 + 128 &amp;lt;- (252,3) 34469888&lt;br /&gt;
  9,1    0      250    11.340054341  1383  Q   R 118356352 + 128 [postgres]&lt;br /&gt;
  9,1    0      251    11.340062014  1383  A   R 118356480 + 32 &amp;lt;- (252,3) 34470016&lt;br /&gt;
  9,1    0      252    11.340062367  1383  Q   R 118356480 + 32 [postgres]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... plus a handy summary at the end.&lt;br /&gt;
&lt;br /&gt;
=== strace ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;strace&amp;lt;/code&amp;gt; is a useful tool that can attach to a process and report all the system calls that process makes, including arguments to those system calls. It&#039;s great for figuring out what files a process opens, or if it&#039;s waiting for something, etc.&lt;br /&gt;
&lt;br /&gt;
Useful interpretation requires some C programming knowledge and some idea about POSIX APIs.&lt;br /&gt;
&lt;br /&gt;
(Note that other systems have similar tools with different names - for example, some BSDs have &amp;lt;code&amp;gt;truss&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== oprofile ===&lt;br /&gt;
&lt;br /&gt;
Probably not useful for general users, but a handy tool if you have something within Pg or a library used by Pg that&#039;s running strangely slowly and you don&#039;t know why.&lt;br /&gt;
&lt;br /&gt;
[[Profiling with OProfile]]&lt;br /&gt;
&lt;br /&gt;
=== alt-sysrq-t ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;magic sysrq key&amp;quot;. Mainly useful for tracking down processes mysteriously stuck in &#039;D&#039; state in the kernel, ie hung in a system call, since it will output a stack trace of the kernel stack for all processes in the system. Mostly used when trying to figure out whether Pg is having problems due to a kernel bug, hardware issue, file system bug, etc.&lt;br /&gt;
&lt;br /&gt;
Must be enabled with &#039;sysctl -w kernel.sysrq=1&#039; before it can be used.&lt;br /&gt;
&lt;br /&gt;
=== DTrace ===&lt;br /&gt;
&lt;br /&gt;
See separate [[DTrace]] page.&lt;br /&gt;
&lt;br /&gt;
== Windows tools ==&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor] ===&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer] ===&lt;br /&gt;
&lt;br /&gt;
===[http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PostgreSQL-centric performance tools ==&lt;br /&gt;
&lt;br /&gt;
=== pgBadger ===&lt;br /&gt;
&lt;br /&gt;
[https://pgbadger.darold.net/ pgBadger] is a PostgreSQL log analyzer build for speed with fully detailed reports from your PostgreSQL log file.&lt;br /&gt;
&lt;br /&gt;
=== PoWA ===&lt;br /&gt;
&lt;br /&gt;
[https://powa.readthedocs.io PoWA] (PostgreSQL Workload Analyzer) is a performance tool for PostgreSQL allowing to collect, aggregate and purge statistics on multiple PostgreSQL instances from various Stats Extensions ([https://www.postgresql.org/docs/current/static/pgstatstatements.html pg_stat_statements],[https://github.com/powa-team/pg_qualstats pg_qualstats],[https://github.com/powa-team/pg_stat_kcache pg_stat_kcache], [https://github.com/postgrespro/pg_wait_sampling/ pg_wait_sampling]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Web tools ==&lt;br /&gt;
&lt;br /&gt;
=== Explain Depesz ===&lt;br /&gt;
&lt;br /&gt;
Paste your explain analyze plan, and see the output. You can click on column headers to let it know which parameter is the most important for you – exclusive node time, inclusive node time, or rowcount mis-estimate.&lt;br /&gt;
&lt;br /&gt;
https://explain.depesz.com/&lt;br /&gt;
&lt;br /&gt;
=== Postgres EXPLAIN Visualiser (Pev) ===&lt;br /&gt;
&lt;br /&gt;
Pev is designed to make Postgres query plans easier to grok. It displays a plan as a tree, with each node representing a step that takes in a row set and produces another. &lt;br /&gt;
&lt;br /&gt;
http://tatiyants.com/pev/&lt;br /&gt;
&lt;br /&gt;
=== Postgres EXPLAIN Visualiser 2 (Pev2) ===&lt;br /&gt;
&lt;br /&gt;
This project is a rewrite of the excellent Postgres Explain Visualizer (pev).&lt;br /&gt;
&lt;br /&gt;
The pev project was initially written in early 2016 but seems to be abandoned since then. There was no activity at all for more than 4 years and counting though there are several issues open and relevant pull requests pending.&lt;br /&gt;
&lt;br /&gt;
The current project has several goals:&lt;br /&gt;
&lt;br /&gt;
  * isolate the plan view component and its dependencies in order to use it in any web app with for example the ability to load a plan without requiring any copy-paste from the user,&lt;br /&gt;
  * make it work with recent version of JS frameworks,&lt;br /&gt;
  * upgrade Bootstrap to a more recent version,&lt;br /&gt;
  * use VueJS just for a matter of taste,&lt;br /&gt;
  * maintain the project to match upgrades in PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://github.com/dalibo/pev2/&lt;br /&gt;
&lt;br /&gt;
=== pgMustard ===&lt;br /&gt;
&lt;br /&gt;
pgMustard visualises EXPLAIN output and gives tips on what to do to speed up your query.&lt;br /&gt;
&lt;br /&gt;
https://www.pgmustard.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Performance]] [[Category:Administration]]&lt;br /&gt;
&lt;br /&gt;
Page originally by --[[User:Ringerc|Ringerc]] 07:26, 26 November 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28668</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28668"/>
		<updated>2016-11-18T17:15:53Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add TomTom&amp;#039;s slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Alfa 2 || Devrim Gündüz || [https://www.gunduz.org/download.php?dlid=219 PostgreSQL Upgrades: Why and How?]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-vax.pdf Unclogging the VACUUM]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Omega || Chinh Nguyen, Neeran Gul || [[Media:Nguyen and Gul - PGConf.EU 2016.pdf|PostgreSQL in production at Yammer]]&lt;br /&gt;
|-&lt;br /&gt;
| 12:10 - 13:00 || Alfa 1 || Petr Jelinek || [[Media:Pglogical-tallinn-2016-petr-jelinek.pdf|Logical Replication in PostgreSQL]]&lt;br /&gt;
|-&lt;br /&gt;
| 12:10 - 13:00 || Omega || Stella Nisenbaum || [[Media:SNisenbaum_Yello_Becoming_A_SQL_Guru.pdf‎|Becoming A SQL Guru]]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Alfa 2 || Federico Campoli || [http://www.slideshare.net/FedericoCampoli/life-on-arollercoaster Life on a rollercoaster]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Omega || Stas Kelvich || [http://www.slideshare.net/kelvich/multimaster Multi-master replication and fault tolerance]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| 15:00 - 15:50 || Alfa 1 || Giuseppe Broccolo || [http://www.slideshare.net/GiuseppeBroccolo/gbroccolo-pgconfeu2016-pgnfs PostgreSQL &amp;amp; NFS: myths &amp;amp; truths]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Omega || Tomasz &amp;quot;LAFK_pl&amp;quot; Borek || [http://www.slideshare.net/TomekBorek/teaching-postgresql-to-new-people Teaching PostgreSQL to new people]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 1 || Amit Kapila || [[Media:Parallel-query-in-postgresql.pdf|Parallel Query In PostgreSQL!]]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Omega || Michał Gutkowski, Rafal Hawrylak || [[Media:Postgresql at Tomtom - lessons learned.pdf|PostgreSQL in TomTom - lessons learned]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 09:30 - 10:20 || Omega || Anastasia Lubennikova, Konstantin || [http://garret.ru/PageLevelCompression.pdf Page level compression and encryption in Postgres]&lt;br /&gt;
|+&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || Christoph Moench-Tegeder || [[Media:Pgconfeu_2016_benchmarkinvalid.pdf‎|Your Benchmark is Invalid]]&lt;br /&gt;
|+&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 1 || Markus Winand  || [http://modern-sql.com/slides Modern SQL in open source and commercial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-securing-postgresql.pdf Securing PostgreSQL]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Omega || Alexey Papulovskiy || [http://papulovskiy.github.io/pgconfeu2016/ A billion rows pet-project on a desktop hardware]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Omega || Khushboo Vashi || [[Media:Why_pgAdmin_4%3F.pdf|Why pgAdmin 4?]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 09:30 - 10:20 || Alfa 2 || Jan Wieck || [[:File:plprofiler_2016-11-03.pdf|Peeking into the black hole called PL/pgSQL - The new PL profiler]]&lt;br /&gt;
|-&lt;br /&gt;
| 09:30 - 10:20 || Alfa 1 || Bruce Momjian || [http://momjian.us/main/writings/pgsql/central.pdf Making Postgres Central in Your Data Center]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Omega || Mladen Marinović || [https://bitbucket.org/marin/pgconfeu2016/raw/f1e342a8904d12bb83b862329948393fd535f605/Dont&#039;t%20Touch%20that%20Parameter.pdf Don’t Touch that Parameter]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Omega || Martin Pihlak || [[Media:postgresql-at-skype.pdf|PostgreSQL@Skype / The Untold]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Alfa 1 || Stefanie Janine Stölting || [https://github.com/sjstoelting/talks/tree/master/one-database-to-rule-em-all.pgconfeu-2016 One Database to Rule &#039;em all]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Alfa 2 || Gülçin Yıldırım || [http://slides.com/apatheticmagpie/ft-in-postgres Evolution of Fault Tolerance in PostgreSQL]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
[[Category:PostgreSQL Europe]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Postgresql_at_Tomtom_-_lessons_learned.pdf&amp;diff=28667</id>
		<title>File:Postgresql at Tomtom - lessons learned.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Postgresql_at_Tomtom_-_lessons_learned.pdf&amp;diff=28667"/>
		<updated>2016-11-18T17:15:43Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28608</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28608"/>
		<updated>2016-11-12T10:51:49Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add Tomasz&amp;#039; slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Alfa 2 || Devrim Gündüz || [https://www.gunduz.org/download.php?dlid=219 PostgreSQL Upgrades: Why and How?]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-vax.pdf Unclogging the VACUUM]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Omega || Chinh Nguyen, Neeran Gul || [[Media:Nguyen and Gul - PGConf.EU 2016.pdf|PostgreSQL in production at Yammer]]&lt;br /&gt;
|-&lt;br /&gt;
| 12:10 - 13:00 || Alfa 1 || Petr Jelinek || [[Media:Pglogical-tallinn-2016-petr-jelinek.pdf|Logical Replication in PostgreSQL]]&lt;br /&gt;
|-&lt;br /&gt;
| 12:10 - 13:00 || Omega || Stella Nisenbaum || [[Media:SNisenbaum_Yello_Becoming_A_SQL_Guru.pdf‎|Becoming A SQL Guru]]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Alfa 2 || Federico Campoli || [http://www.slideshare.net/FedericoCampoli/life-on-arollercoaster Life on a rollercoaster]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Omega || Stas Kelvich || [http://www.slideshare.net/kelvich/multimaster Multi-master replication and fault tolerance]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Omega || Tomasz &amp;quot;LAFK_pl&amp;quot; Borek || [http://www.slideshare.net/TomekBorek/teaching-postgresql-to-new-people Teaching PostgreSQL to new people]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 1 || Amit Kapila || [[Media:Parallel-query-in-postgresql.pdf|Parallel Query In PostgreSQL!]]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 09:30 - 10:20 || Omega || Anastasia Lubennikova, Konstantin || [http://garret.ru/PageLevelCompression.pdf Page level compression and encryption in Postgres]&lt;br /&gt;
|+&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 1 || Markus Winand  || [http://modern-sql.com/slides Modern SQL in open source and commercial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-securing-postgresql.pdf Securing PostgreSQL]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Omega || Alexey Papulovskiy || [http://papulovskiy.github.io/pgconfeu2016/ A billion rows pet-project on a desktop hardware]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Omega || Khushboo Vashi || [[Media:Why_pgAdmin_4%3F.pdf|Why pgAdmin 4?]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 09:30 - 10:20 || Alfa 2 || Jan Wieck || [[:File:plprofiler_2016-11-03.pdf|Peeking into the black hole called PL/pgSQL - The new PL profiler]]&lt;br /&gt;
|-&lt;br /&gt;
| 09:30 - 10:20 || Alfa 1 || Bruce Momjian || [http://momjian.us/main/writings/pgsql/central.pdf Making Postgres Central in Your Data Center]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Omega || Martin Pihlak || [[Media:postgresql-at-skype.pdf|PostgreSQL@Skype / The Untold]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Alfa 2 || Gülçin Yıldırım || [http://slides.com/apatheticmagpie/ft-in-postgres Evolution of Fault Tolerance in PostgreSQL]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28597</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28597"/>
		<updated>2016-11-09T21:11:26Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add Amit&amp;#039;s slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Alfa 2 || Devrim Gündüz || [https://www.gunduz.org/download.php?dlid=219 PostgreSQL Upgrades: Why and How?]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-vax.pdf Unclogging the VACUUM]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Omega || Chinh Nguyen, Neeran Gul || [[Media:Nguyen and Gul - PGConf.EU 2016.pdf|PostgreSQL in production at Yammer]]&lt;br /&gt;
|-&lt;br /&gt;
| 12:10 - 13:00 || Omega || Stella Nisenbaum || [[Media:SNisenbaum_Yello_Becoming_A_SQL_Guru.pdf‎|Becoming A SQL Guru]]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Alfa 2 || Federico Campoli || [http://www.slideshare.net/FedericoCampoli/life-on-arollercoaster Life on a rollercoaster]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 1 || Amit Kapila || [[Media:Parallel-query-in-postgresql.pdf|Parallel Query In PostgreSQL!]]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 1 || Markus Winand  || [http://modern-sql.com/slides Modern SQL in open source and commercial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-securing-postgresql.pdf Securing PostgreSQL]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Omega || Alexey Papulovskiy || [http://papulovskiy.github.io/pgconfeu2016/ A billion rows pet-project on a desktop hardware]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Omega || Khushboo Vashi || [[Media:Why_pgAdmin_4%3F.pdf|Why pgAdmin 4?]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Omega || Martin Pihlak || [[Media:postgresql-at-skype.pdf|PostgreSQL@Skype / The Untold]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Alfa 2 || Gülçin Yıldırım || [http://slides.com/apatheticmagpie/ft-in-postgres Evolution of Fault Tolerance in PostgreSQL]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Parallel-query-in-postgresql.pdf&amp;diff=28596</id>
		<title>File:Parallel-query-in-postgresql.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Parallel-query-in-postgresql.pdf&amp;diff=28596"/>
		<updated>2016-11-09T21:10:58Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28595</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28595"/>
		<updated>2016-11-09T20:32:46Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add both C. Pettus&amp;#039; slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Alfa 2 || Devrim Gündüz || [https://www.gunduz.org/download.php?dlid=219 PostgreSQL Upgrades: Why and How?]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-vax.pdf Unclogging the VACUUM]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Omega || Chinh Nguyen, Neeran Gul || [[Media:Nguyen and Gul - PGConf.EU 2016.pdf|PostgreSQL in production at Yammer]]&lt;br /&gt;
|-&lt;br /&gt;
| 12:10 - 13:00 || Omega || Stella Nisenbaum || [[Media:SNisenbaum_Yello_Becoming_A_SQL_Guru.pdf‎|Becoming A SQL Guru]]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Alfa 2 || Federico Campoli || [http://www.slideshare.net/FedericoCampoli/life-on-arollercoaster Life on a rollercoaster]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 1 || Markus Winand  || [http://modern-sql.com/slides Modern SQL in open source and commercial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Alfa 1 || Christophe Pettus || [http://thebuild.com/presentations/pgconfeu-2016-securing-postgresql.pdf Securing PostgreSQL]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Omega || Alexey Papulovskiy || [http://papulovskiy.github.io/pgconfeu2016/ A billion rows pet-project on a desktop hardware]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Omega || Khushboo Vashi || [[Media:Why_pgAdmin_4%3F.pdf|Why pgAdmin 4?]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Omega || Martin Pihlak || [[Media:postgresql-at-skype.pdf|PostgreSQL@Skype / The Untold]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Alfa 2 || Gülçin Yıldırım || [http://slides.com/apatheticmagpie/ft-in-postgres Evolution of Fault Tolerance in PostgreSQL]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28574</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28574"/>
		<updated>2016-11-07T20:50:24Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add Alexey Papulovskiy slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Omega || Chinh Nguyen, Neeran Gul || [[Media:Nguyen and Gul - PGConf.EU 2016.pdf|PostgreSQL in production at Yammer]]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 14:40 - 15:30 || Omega || Alexey Papulovskiy || [http://papulovskiy.github.io/pgconfeu2016/ A billion rows pet-project on a desktop hardware]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28573</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28573"/>
		<updated>2016-11-07T20:46:47Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add Chinh Nguyen slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
|-&lt;br /&gt;
| 11:10 - 12:00 || Omega || Chinh Nguyen, Neeran Gul || [[Media:Nguyen and Gul - PGConf.EU 2016.pdf|PostgreSQL in production at Yammer]]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28572</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28572"/>
		<updated>2016-11-07T20:43:46Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Add Chinh Nguyen slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
| 11:10 - 12:00 || Omega || Chinh Nguyen, Neeran Gul || [Media:Nguyen and Gul - PGConf.EU 2016.pdf|PostgreSQL in production at Yammer]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Nguyen_and_Gul_-_PGConf.EU_2016.pdf&amp;diff=28571</id>
		<title>File:Nguyen and Gul - PGConf.EU 2016.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Nguyen_and_Gul_-_PGConf.EU_2016.pdf&amp;diff=28571"/>
		<updated>2016-11-07T20:39:43Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:161031_pgconf_databases_containers.pdf&amp;diff=28570</id>
		<title>File:161031 pgconf databases containers.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:161031_pgconf_databases_containers.pdf&amp;diff=28570"/>
		<updated>2016-11-07T20:32:07Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28569</id>
		<title>PostgreSQL Conference Europe Talks 2016</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2016&amp;diff=28569"/>
		<updated>2016-11-07T20:28:48Z</updated>

		<summary type="html">&lt;p&gt;Gleu: add Honzo Horak slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pgconf.eu 2016 took place in Tallinn, Estonia, from 2016-11-01 to 2016-11-04.&lt;br /&gt;
&lt;br /&gt;
== Tuesday (Trainings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Trainer||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:00 - 17:00 || Alfa 2 || Petr Jelinek, Simon Riggs || PostgreSQL Replication &amp;amp; Upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wednesday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 11:10 - 12:00 || Alfa 2 || David Steele || [https://github.com/dwsteele/conference/blob/release/PostgresPatchReview-PGConfEU-2016/slides/slides.pdf Reviewing PostgreSQL Patches for Fun and Profit]&lt;br /&gt;
|-&lt;br /&gt;
| 14:00 - 14:50 || Omega || Alexander Korotkov || [http://www.slideshare.net/AlexanderKorotkov/the-future-is-csn The future is CSN]&lt;br /&gt;
|-&lt;br /&gt;
| 15:00 - 15:50 || Alfa 2 || Andreas Seltenreich || [https://korte.credativ.com/~ase/sqlsmith-talk.pdf Hunting PostgreSQL bugs with SQLsmith]&lt;br /&gt;
|-&lt;br /&gt;
| 16:20 - 17:10 || Alfa 2 || Jehan-Guillaume (ioguix) de Rorthais || [http://www.dalibo.org/_media/2016-pgconfeu-paf.html.gz PAF: auto failover and more!]&lt;br /&gt;
|-&lt;br /&gt;
| 17:20 - 18:10 || Alfa 2 || Emre Hasegeli || [http://www.slideshare.net/EmreHasegeli/managing-thousands-of-databases Managing Thousands of Databases]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Thursday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Giuseppe Broccolo &amp;amp; Julien Rouhaud || [http://www.dalibo.org/_media/gbroccolo_jrouhaud_pgconfeu2016_brin4postgis.pdf BRIN indexes on geospatial databases]&lt;br /&gt;
|+&lt;br /&gt;
| 12:50 - 13:40 || Alfa 2 || Honza Horak  || [[Media:161031_pgconf_databases_containers.pdf|Database Containers Made by Distributions]]&lt;br /&gt;
|+&lt;br /&gt;
| 15:40 - 16:30 || Alfa 2 || Cédric Villemain || [[Media:2ndQUadrant Datastore xa.pdf|Transactions across multiple datastores]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Friday ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Time||Room||Speaker||Title (Link to slides)&lt;br /&gt;
|+&lt;br /&gt;
| 09:30 - 10:20 || Omega || Oleg Bartunov, Artur Zakirov || [http://www.slideshare.net/ArthurZakirov1/better-full-text-search-in-postgresql Better Full Text Search in PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 10:50 - 11:40 || Alfa 2 || Vik Fearing || [[:File:Lateral_tallinn.pdf|How Did We Live Without LATERAL?]]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 1 || David Steele || [https://github.com/dwsteele/conference/blob/release/AuditLogging-PGConfEU-2016/slides.pdf Audit Logging for PostgreSQL]&lt;br /&gt;
|-&lt;br /&gt;
| 11:50 - 12:40 || Alfa 2 || Alexey Lesovsky || [http://www.slideshare.net/alexeylesovsky/manage-postgresql-with-pgcenter Managing PostgreSQL with pgCenter]&lt;br /&gt;
|-&lt;br /&gt;
| 13:40 - 14:30 || Omega || Cédric Villemain || [[Media:2ndQuadrant Stats talk.pdf|A close look at stats: what you can do with them !]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2014&amp;diff=26203</id>
		<title>PostgreSQL Conference Europe Talks 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2014&amp;diff=26203"/>
		<updated>2015-10-27T15:13:34Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2014 Talks =&lt;br /&gt;
&lt;br /&gt;
== Conference Website ==&lt;br /&gt;
&lt;br /&gt;
http://2014.pgconf.eu/&lt;br /&gt;
&lt;br /&gt;
== Trainings: Tuesday 21st October, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Medici II ===&lt;br /&gt;
&lt;br /&gt;
* Rendimiento: el bueno, el malo y el feo, Álvaro Herrera&lt;br /&gt;
&lt;br /&gt;
=== Medici III ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.joeconway.com/presentations/migrating-pgconf.eu.2014.pdf Migration to PostgreSQL], Joe Conway, Michael Meskes&lt;br /&gt;
* [http://www.slideshare.net/nosys/using-postgre-sqljavapgcon2014 PostgreSQL and Java: best practices] + [https://github.com/8kdata/javapostgres Source code] ([https://twitter.com/ahachete Álvaro Hernández])&lt;br /&gt;
&lt;br /&gt;
=== Renacimiento I ===&lt;br /&gt;
&lt;br /&gt;
* Data analysis, Hans-Jürgen Schönig&lt;br /&gt;
* [https://wiki.postgresql.org/images/d/de/NoSQL_training_-_pgconf.eu.pdf NoSQL on Acid – Maximizing Results with JSONB and PostgreSQL], Bruce Momjian, Thom Brown&lt;br /&gt;
&lt;br /&gt;
=== Florencia II ===&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL Backups, Replication &amp;amp; Disaster Recovery, Simon Riggs&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 22nd October, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Keynote ===&lt;br /&gt;
&lt;br /&gt;
* Not Only NoSQL: A Case for NoSQL + PostgreSQL in a Big Data World, Matt Asay&lt;br /&gt;
&lt;br /&gt;
=== Medici I ===&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/presentation/d/1TV0bExFwVy-_d6C7A8Z2JL9Z9tvtkuZv3D58fkC3GWQ/edit?usp=sharing ALTER DATABASE ADD SANITY (google presentation)], Alexey Klyukin&lt;br /&gt;
&lt;br /&gt;
* [http://www.hagander.net/talks/postgresql94_2.pdf What&#039;s new in PostgreSQL 9.4], Magnus Hagander&lt;br /&gt;
&lt;br /&gt;
* [http://www.joeconway.com/presentations/test-pres-pgconf.eu.2014.pdf Who&#039;s the Fairest of Them All? Postgres Interface Performance], Joe Conway&lt;br /&gt;
&lt;br /&gt;
* [http://momjian.us/main/presentations/overview.html#scaling Postgres Scaling Opportunities], Bruce Momjian&lt;br /&gt;
&lt;br /&gt;
* Row Level Security, Stephen Frost&lt;br /&gt;
&lt;br /&gt;
* [https://s3.amazonaws.com/presentations.citusdata.com/cstore_fdw-pgconfeu-2014.pdf cstore_fdw, a columnar store for PostgreSQL] Ben Redman&lt;br /&gt;
&lt;br /&gt;
=== Medici III (Spanish track) ===&lt;br /&gt;
&lt;br /&gt;
* [http://folk.uio.no/rafael/pgconfeu2014/el_guardian_del_tesoro_pgconfeu2014.pdf El guardian del tesoro / The Guardian Of The Treasure], Rafael Martinez Guerrero&lt;br /&gt;
&lt;br /&gt;
* Desmitificando la búsqueda de Postgresql, Javier ramirez&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/ae_bm/postgres-40626330 Experiencias con PostgreSQL en AWS], Alejandro E. Brito Monedero&lt;br /&gt;
&lt;br /&gt;
* Características para Inteligencia de Negocios en Postgres, Álvaro Herrera&lt;br /&gt;
&lt;br /&gt;
* Almacenamiento de archivos en PostgreSQL: pros y contras, Martín Marqués&lt;br /&gt;
&lt;br /&gt;
* Domando a la bestia &amp;quot;replicación&amp;quot;, Jaime Casanova&lt;br /&gt;
&lt;br /&gt;
=== Renacimiento I ===&lt;br /&gt;
&lt;br /&gt;
* [[Media: Autovacuum_pgconfeu_gorthx.pdf‎|(Auto)Vacuum and You]], Gabrielle Roth&lt;br /&gt;
&lt;br /&gt;
* [[Media: Performance-archaeology.pdf‎|Performance Archaeology]] ([http://www.slideshare.net/fuzzycz/performance-archaeology-40583681 slideshare]), Tomas Vondra&lt;br /&gt;
&lt;br /&gt;
* [[Media: Udr-pgconf.pdf|UDR - Uni Directional Replication]], Petr Jelinek&lt;br /&gt;
&lt;br /&gt;
* [http://www.dalibo.org/_media/opm_talk_en.pdf OPM - Open PostgreSQL Monitoring], Jean-Paul Argudo and Julien Rouhaud&lt;br /&gt;
&lt;br /&gt;
* Choosing the right filesystem for PostgreSQL, Devrim GÜNDÜZ&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/confs/PGCONF_EU_2014_backups.pdf You&#039;d better have tested backups...], [http://tapoueh.org/confs Dimitri Fontaine]&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday 23 October, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Medici I ===&lt;br /&gt;
&lt;br /&gt;
* CartoDB: Empowering dynamic mapping with PostgreSQL, Alejandro Martínez&lt;br /&gt;
&lt;br /&gt;
* [http://michael.otacoo.com/content/materials/20140919_pgopen_logirep.pdf Understanding logical decoding and replication], Michael Paquier&lt;br /&gt;
&lt;br /&gt;
* [http://momjian.us/main/presentations/features.html#indexing Flexible Indexing with Postgres], Bruce Momjian&lt;br /&gt;
&lt;br /&gt;
* [http://gianni.people.2ndquadrant.com/home/formalising-sql-in-higher-order-logic Formalising SQL in Higher-Order Logic], Gianni Ciolli, Marco Maggesi&lt;br /&gt;
&lt;br /&gt;
* Locks unpicked, Álvaro Herrera, Simon Riggs&lt;br /&gt;
&lt;br /&gt;
* Analytical PostgreSQL -- Ordered set aggregates and Grouping Sets, Atri Sharma&lt;br /&gt;
&lt;br /&gt;
=== Medici III ===&lt;br /&gt;
&lt;br /&gt;
* [http://gauss.credativ.com/~mme/2014/PGConf_EU_2014_V01.pdf Open Source - A Blessing Or A Curse?], Michael Meskes&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Oslandia/presentations/raw/master/pgconf_eu_2014/postgis_latest_news_vincent_picavet.pdf PostGIS Latest News], Vincent Picavet&lt;br /&gt;
&lt;br /&gt;
* [https://cloud.cosmos.esa.int/public.php?service=files&amp;amp;t=f5b1a1a950c6fffd10d164f3e42725cd&amp;amp;download Ruling the Galaxy with PostgreSQL: Stories from the ESA Gaia Archive], Juan Gonzalez Nunez&lt;br /&gt;
&lt;br /&gt;
* [http://www.cybertec.at/wp-content/uploads/1million.pdf Joining 1 million tables], Hans-Jürgen Schönig&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/jim_mlodgenski/postrgesql-hadoop Leveraging Hadoop In Your PostgreSQL Environment], Jim Mlodgenski&lt;br /&gt;
&lt;br /&gt;
* How we fixed bugs and rescued data, Harald Armin Massa&lt;br /&gt;
&lt;br /&gt;
=== Renacimiento I ===&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/confs/PGCONF_EU_2014_pgloader.pdf Loading data in PostgreSQL, Fast. Any Data.], [http://tapoueh.org/ Dimitri Fontaine]&lt;br /&gt;
&lt;br /&gt;
* Advanced Authentication, Stephen Frost&lt;br /&gt;
&lt;br /&gt;
* [http://thebuild.com/presentations/corruption-pgconfeu-2014.pdf Finding and Repairing Data Corruption], Christophe Pettus&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/presentation/d/1gJL93iGNxbo9B2Y2sVnWVQfPBGllEjtoZlp6UitUwXM/edit?usp=sharing Scaling fashionably: From Startup to Scale at Zalando], Valentine Gogichashvili&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/presentation/d/1luiaBwulBJoubwpGxrbOabXOvIgx1chG-up_8FPV5lo/edit?usp=sharing| PgObserver - a full-blown performance monitoring tool], Kaarel Moppel&lt;br /&gt;
&lt;br /&gt;
* [https://speakerdeck.com/lfittl/advanced-pg-stat-statements-filtering-regression-testing-and-more Advanced Use of pg_stat_statements: Filtering, Regression Testing &amp;amp; more], Lukas Fittl&lt;br /&gt;
&lt;br /&gt;
=== Lightning Talks ===&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/confs/PGCONF_EU_2014_pgcharts.pdf Turn your SQL query into Charts], [http://tapoueh.org Dimitri Fontaine]&lt;br /&gt;
* [https://drive.google.com/file/d/0B-SFRgngatN_alhyWmZDdHRFcjQ/view?usp=sharing map()/reduce() with PostgreSQL + PL/Proxy], Ernst-Georg Schmid&lt;br /&gt;
&lt;br /&gt;
* [https://alioth.debian.org/scm/loggerhead/pkg-postgresql/postgresql-common/trunk/files postgresql-common for Red Hat], Jens Wilke&lt;br /&gt;
&lt;br /&gt;
* [https://perdomo.me/presentations/Immutable-DB.pdf A quest for an Immutable DB], Iván Perdomo&lt;br /&gt;
&lt;br /&gt;
* [[Media: Pgpass_pgconfeu_groth.pdf‎|Adventures in Ridiculous Benchmarking: pgpass]], Gabrielle Roth&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday 24 October, 2014 ==&lt;br /&gt;
&lt;br /&gt;
=== Medici I ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Su-Shee/talks Database Unit Testing with PgTAP], Susanne Schmidt&lt;br /&gt;
&lt;br /&gt;
* Common difficulties for new PostgreSQL users - and what we can do about them, Craig Ringer&lt;br /&gt;
&lt;br /&gt;
* Hacking PostgreSQL, Stephen Frost&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/akorotkov/talks/raw/master/pgconfeu-2014-jsquery.pdf Jsquery - the jsonb query language with GIN indexing support], Alexander Korotkov&lt;br /&gt;
&lt;br /&gt;
=== Medici III ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/oseemann/scaling-a-saas-backend-with-postgresql-a-case-study Scaling a SaaS backend with PostgreSQL], Oliver Seemann&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/wiki/File:RDS_EUPostgres2014_final.pptx Amazon RDS for PostgreSQL], Grant McAlister&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/8kdata/toro-db-pgconfeu2014 ToroDB: a new, open-source, document-oriented, JSON database, built on Postgres], [https://twitter.com/ahachete Álvaro Hernández]&lt;br /&gt;
&lt;br /&gt;
* Submitting a proper Postgres bug report, Jon Erdman&lt;br /&gt;
&lt;br /&gt;
=== Renaciemiento I ===&lt;br /&gt;
&lt;br /&gt;
* [http://andres.people.2ndquadrant.com/pgconf-eu-2014-10-23/bdr.pdf BDR - Asynchronous multimaster for postgres], Andres Freund&lt;br /&gt;
&lt;br /&gt;
* [http://thebuild.com/presentations/backups-pgconfeu-2014.pdf Be Very Afraid: Disaster Planning and Recovery], Christophe Pettus&lt;br /&gt;
&lt;br /&gt;
* [http://gianni.people.2ndquadrant.com/home/logical-decoding-for-auditing Logical Decoding for Auditing], Gianni Ciolli&lt;br /&gt;
&lt;br /&gt;
* walbouncer: Filtering the PostgreSQL transaction log, Hans-Jürgen Schönig&lt;br /&gt;
&lt;br /&gt;
=== Keynotes ===&lt;br /&gt;
&lt;br /&gt;
* NoSQL on Acid – Maximizing Results With JSONB And PostgreSQL, Keith Alsheimer&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL Odyssey at 88mph, Simon Riggs&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/trustly/keynotes/raw/master/PgConf%202014%20Trustly.pdf How we use PostgreSQL at Trustly], Joel Jacobson&lt;br /&gt;
&lt;br /&gt;
* Closing Session, Dave Page, Magnus Hagander&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;br /&gt;
[[Category:PostgreSQL Europe]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FOSDEM_2015&amp;diff=24202</id>
		<title>FOSDEM 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FOSDEM_2015&amp;diff=24202"/>
		<updated>2015-02-03T21:16:47Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Created page with &amp;quot;==Schedule==  Schedule is available at the following website: http://www.postgresql.eu/events/schedule/fosdem2015/  == PGDay FOSDEM 2015 ==  We are also organizing one-day eve...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Schedule==&lt;br /&gt;
&lt;br /&gt;
Schedule is available at the following website: http://www.postgresql.eu/events/schedule/fosdem2015/&lt;br /&gt;
&lt;br /&gt;
== PGDay FOSDEM 2015 ==&lt;br /&gt;
&lt;br /&gt;
We are also organizing one-day event: http://fosdem2015.pgconf.eu/&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday, January 30th, 2015 ==&lt;br /&gt;
&lt;br /&gt;
=== Marriott ===&lt;br /&gt;
&lt;br /&gt;
* Welcome (Magnus Hagander)&lt;br /&gt;
* Managing Resources with PostgreSQL (Cédric Villemain)&lt;br /&gt;
* Identifying missing indexes (Julien Rouhaud)&lt;br /&gt;
* Writing a Logical Decoding Output Plugin (Christophe Pettus)&lt;br /&gt;
* Enrich your data with geocoordinates from OpenStreetMap or ArcGIS (Andreas Scherbaum)&lt;br /&gt;
* Temporal data and time travel (Peter Vanroose)&lt;br /&gt;
* Migrating to PostgreSQL, the new story (Dimitri Fontaine)&lt;br /&gt;
* Scaling out PostgreSQL for write-intensive workloads (Marco Slot)&lt;br /&gt;
&lt;br /&gt;
[[Media:PGDay-2014 2014-01-31.odp|Projector Presentation (Friday, January 31st, 2014)]]&lt;br /&gt;
&lt;br /&gt;
== Talks: Saturday, January 31st, 2015 ==&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL FOSDEM Devroom ===&lt;br /&gt;
&lt;br /&gt;
* You&#039;d better have tested backups... (Dimitri Fontaine)&lt;br /&gt;
* New WAL record format in PostgreSQL 9.5 (Heikki Linnakangas)&lt;br /&gt;
* JSON and PostgreSQL, the State of the Art (Christophe Pettus)&lt;br /&gt;
* Foreign Data Wrappers in PostgreSQL : Where are we now ? (Ronan Dunklau)&lt;br /&gt;
* Modern SQL in PostgreSQL (Markus Winand)&lt;br /&gt;
* Large Scale Quality Assurance in the PostgreSQL Ecosystem (Christoph Berg)&lt;br /&gt;
&lt;br /&gt;
Speakers: please upload your slides to the wiki and add a link above.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2012&amp;diff=18636</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2012&amp;diff=18636"/>
		<updated>2012-11-21T09:15:17Z</updated>

		<summary type="html">&lt;p&gt;Gleu: add guillaume&amp;#039;s link to his slides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2012 Talks =&lt;br /&gt;
&lt;br /&gt;
== Trainings: Tuesday 23th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Clyde ===&lt;br /&gt;
&lt;br /&gt;
* Mastering PostgreSQL Administration (Bruce Momjian, Devrim GÜNDÜZ)&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL Performance Training (Greg Smith, Peter Geoghegan)&lt;br /&gt;
* PostgreSQL Replication Training (Dimitri Fontaine, Simon Riggs)&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.pgsql.cz/skoleni/skoleni_plpgsql_web.pdf Implementace uložených procedur v PostgreSQL] (Pavel Stehule)&lt;br /&gt;
* Čtení exekučních plánů (Tomas Vondra)&lt;br /&gt;
&lt;br /&gt;
=== Vltava ===&lt;br /&gt;
&lt;br /&gt;
* A day of SQL with Celko (Joe Celko)&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 24th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Bellevue ===&lt;br /&gt;
&lt;br /&gt;
* Opening keynote (Joe Celko)&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
* [http://momjian.us/main/presentations/features.html#cte Programming the SQL Way with Common Table Expressions (Bruce Momjian)]&lt;br /&gt;
* PostgreSQL on AWS (Christophe Pettus)&lt;br /&gt;
* [http://www.dalibo.org/_media/understanding_explain.pdf Understanding EXPLAIN&#039;s output (Guillaume Lelarge)]&lt;br /&gt;
* [http://www.sraoss.co.jp/event_seminar/2012/20121024_pgpool-II_pgconfEU2012_sraoss.pdf Boosting Performance and Reliability by using pgpool-II (Tatsuo Ishii)]&lt;br /&gt;
* [http://www.2ndquadrant.com/media/cms_page_media/59/Gianni_Ciolli-CREATE_EXTENSION_pgchess.pdf CREATE EXTENSION pgchess; (Gianni Ciolli)]&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Pg-fdw.pdf|Writing a foreign data wrapper (Bernd Helmle)]]&lt;br /&gt;
* [http://anarazel.de/2ndquadrant/pgconf-eu-2012-10-24 MultiMaster Replication: Applications, Comparison, Implementation ] (Andres Freund, Simon Riggs)&lt;br /&gt;
* [[Media:Pgconfeu12-collectd%2Bpsql.pdf|Watch your Elephants -- Using collectd for PostgreSQL performance analysis]] ([http://tokkee.org/ Sebastian &#039;tokkee&#039; Harl])&lt;br /&gt;
* [[Media:Range-types.pdf|Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]]&lt;br /&gt;
* [[Media:Pgxc_HA_20121024.pdf‎|High availability in Postgres-XC, the symmetric PostgreSQL cluster (Koichi Suzuki)]]&lt;br /&gt;
&lt;br /&gt;
=== Vltava ===&lt;br /&gt;
&lt;br /&gt;
* Provoz PostgreSQL na AWS (Tomas Vondra)&lt;br /&gt;
* [[Media:Plpgsql internals.pdf| PL/pgSQL internals -- some details from PL/pgSQL environment]]&lt;br /&gt;
* Migrace z MySQL na PostgreSQL (Tomas Vondra)&lt;br /&gt;
* [[Media:Indexy.pdf| Indexy jsou grunt -- basic and enhanced using of indexes in PostgreSQL]]&lt;br /&gt;
* Load dat do PostgreSQL (Jan Holčapek)&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday 25th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Bellevue (Lightning Talks) ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Full-text_search_in_PostgreSQL_in_milliseconds-extended-version.pdf| Full-text search in PostgreSQL in milliseconds (Oleg Bartunov, Alexander Korotkov)]]&lt;br /&gt;
* [[Media:Pgconfeu-2012-docbot-print.pdf|#PostgreSQL pg_docbot (Andreas &#039;ads&#039; Scherbaum)]]&lt;br /&gt;
* [http://tapoueh.org/images/pgq-coop.pdf PGQ Cooperative Consumers] (Dimitri Fontaine &amp;amp; Marko Kreen)&lt;br /&gt;
* [http://www.pgexperts.com/document.html?id=60 PostgreSQL Drinking Game] (Josh Berkus)&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
* How fast is PostgreSQL? (Cédric Villemain)&lt;br /&gt;
* [http://tapoueh.org/images/high-availability.pdf Implementing High Availability] (Dimitri Fontaine)&lt;br /&gt;
* [http://momjian.us/main/presentations/internals.html#shared_memory Inside PostgreSQL Shared Memory (Bruce Momjian)]&lt;br /&gt;
* [https://plv8-pgconfeu12.herokuapp.com Embracing the Web with JSON and PLV8] ([http://bitfission.com Will Leinweber])&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Oslandia/presentations/tree/master/pgconf_eu_2012 Topology and network analysis with PostgreSQL and PostGIS (Vincent Picavet)]&lt;br /&gt;
* [[Media:Universal_Data_Access_with_SQL_MED.pdf|Universal Data Access with SQL/MED (David Fetter)]]&lt;br /&gt;
* [https://github.com/Oslandia/presentations/tree/master/pgconf_eu_2012 PostGIS 2.0 and beyond (Vincent Picavet)]&lt;br /&gt;
* Practical Tips for Better PostgreSQL Applications (Marc Balmer)&lt;br /&gt;
* Pacemaker and PostgreSQL: to serve and protect your data (Jehan-Guillaume (ioguix) de Rorthais)&lt;br /&gt;
&lt;br /&gt;
=== Vltava ===&lt;br /&gt;
&lt;br /&gt;
* [[Media: Marketing-postgres.pdf|Marketing PostgreSQL (Jonathan S. Katz)]]&lt;br /&gt;
* [[Media: Pgconf2012_sprocwrapper.pdf‎|Java Stored Procedure Wrapper and PGObserver (Jan Mussler)]]&lt;br /&gt;
* [http://www.pgexperts.com/document.html?id=59 Elephants and Windmills] (Josh Berkus)&lt;br /&gt;
* [[Media: Pgeu2012.pdf|PostgreSQL in Research and Development: Three success stories. (Roland Sonnenschein)]]&lt;br /&gt;
* [[Media: Index_support_for_regular_expression_search.pdf‎ |Index support for regular expression search (Alexander Korotkov)]]&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday 26th October, 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Bellevue ===&lt;br /&gt;
&lt;br /&gt;
* Postgres Adoption at the Tipping Point: Users Around the World and Their Deployment Profile (Ed Boyajian)&lt;br /&gt;
* Community PostgreSQL (Simon Riggs, Harald Armin Massa)&lt;br /&gt;
* Closing (Dave Page)&lt;br /&gt;
&lt;br /&gt;
=== Seine ===&lt;br /&gt;
&lt;br /&gt;
* [http://2ndquadrant.com/media/cms_page_media/59/BeyondQueryLogging.pdf Beyond Query Logging] (Greg Smith, Peter Geoghegan)&lt;br /&gt;
* [http://www.hagander.net/talks/Backup_strategies_pgeu.pdf PostgreSQL Backup Strategies] (Magnus Hagander)&lt;br /&gt;
* [http://www.gunduz.org/download.php?dlid=196 Maintaining Very Large Databases (VLDs)] (Devrim GÜNDÜZ)&lt;br /&gt;
* [http://tapoueh.org/images/fotolog.pdf Large Scale MySQL Migration to PostgreSQL] (Dimitri Fontaine)&lt;br /&gt;
&lt;br /&gt;
=== Thames ===&lt;br /&gt;
&lt;br /&gt;
* [[Media: Postbis_pgcon_eu_2012.pdf|PostBIS - A Bioinformatics Booster for PostgreSQL (Michael Schneider, Renzo Kottmann)]]&lt;br /&gt;
* [[Media: oracle_migration_pgconf2012.pdf|Migrating Oracle queries to PostgreSQL (Alexey Klyukin)]]&lt;br /&gt;
* [http://www.2ndquadrant.com/media/cms_page_media/59/Gianni_Ciolli-Debug_writable_CTE.pdf Debugging complex SQL queries with writable CTEs (Gianni Ciolli)]&lt;br /&gt;
* [http://www.cybertec.at/download/2012_prag_linux_v5.pdf Limiting PostgreSQL resource consumption using the Linux kernel (Hans-Jürgen Schönig)]&lt;br /&gt;
&lt;br /&gt;
=== Vltava ===&lt;br /&gt;
&lt;br /&gt;
* [[Media: Pg_xnode_pgconf_2012.pdf|pg_xnode extension (Antonin Houska)]]&lt;br /&gt;
[[Category:PostgreSQL Europe]]&lt;br /&gt;
* PostgreSQL makes dev happy, a pgAgent + pl/pgsql use case (Julien Rouhaud)&lt;br /&gt;
* [[Media: PGconEU2012-KaiGai-PGStrom.pdf|PG-Strom - GPU Accelerated Asynchronous Query Execution Module (KaiGai Kohei)]]&lt;br /&gt;
[[Category:PostgreSQL Europe]]&lt;br /&gt;
* [http://tokkee.org/talks/pgconfeu12-time-series-data.pdf Using PostgreSQL for storing time-series data] ([http://tokkee.org/ Sebastian &#039;tokkee&#039; Harl])&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=FOSDEM_2012&amp;diff=16272</id>
		<title>FOSDEM 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=FOSDEM_2012&amp;diff=16272"/>
		<updated>2012-02-10T19:50:33Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Schedule==&lt;br /&gt;
&lt;br /&gt;
Schedule is available at the FOSDEM website: http://fosdem.org/2012/schedule/track/postgresql_devroom&lt;br /&gt;
&lt;br /&gt;
==Presentations==&lt;br /&gt;
&lt;br /&gt;
Slides of the presentations:&lt;br /&gt;
&lt;br /&gt;
* [[Media:Conferences-write_a_foreign_data_wrapper_in_15_minutes-presentation.pdf|Write a foreign data wrapper in 15 minutes]]&lt;br /&gt;
* [[Media:FOSDEM2012-Multi-CPU-performance-in-9.2.pdf|Multi-CPU performance in 9.2‎]]&lt;br /&gt;
* [[Media:Hooks_in_postgresql.pdf|Hooks in PostgreSQL]]&lt;br /&gt;
* [[Media:Managing_rights_in_postgresql.pdf‎|Managing rights in PostgreSQL]]&lt;br /&gt;
&lt;br /&gt;
Speakers: please upload your slides to the wiki and add a link above.&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Conferences-write_a_foreign_data_wrapper_in_15_minutes-presentation.pdf&amp;diff=16271</id>
		<title>File:Conferences-write a foreign data wrapper in 15 minutes-presentation.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Conferences-write_a_foreign_data_wrapper_in_15_minutes-presentation.pdf&amp;diff=16271"/>
		<updated>2012-02-10T19:49:19Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Hooks_in_postgresql.pdf&amp;diff=16270</id>
		<title>File:Hooks in postgresql.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Hooks_in_postgresql.pdf&amp;diff=16270"/>
		<updated>2012-02-10T19:48:32Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Managing_rights_in_postgresql.pdf&amp;diff=16269</id>
		<title>File:Managing rights in postgresql.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Managing_rights_in_postgresql.pdf&amp;diff=16269"/>
		<updated>2012-02-10T19:47:02Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2011&amp;diff=15635</id>
		<title>PostgreSQL Conference Europe Talks 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2011&amp;diff=15635"/>
		<updated>2011-10-20T16:05:17Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Ams 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2011 Talks =&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 19th October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
* [[Media:Mohan_PGCon_Keynote_10-19-2011.pdf|Ram Mohan Keynote: Afilias Winning Bet on Open Source]]&lt;br /&gt;
* [http://www.oslandia.com/files/1646fd60f9b0a4558d1e256cf3264572/pgconfeu2011_vincent_picavet_postgis.pdf Vincent Picavet - Geo in your database : Postgis]&lt;br /&gt;
* Heralding the Death of nosql — Will Leinweber, Heroku — http://pgeu-plv8.herokuapp.com&lt;br /&gt;
* [http://scanningpages.wordpress.com/?attachment_id=420| Slony Troubleshooting - Steve Singer, Afilias ]&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
* [http://ora2pg.darold.net/ora2pg-best-practices.pdf Gilles Darold: Best practices with Ora2Pg]&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Ciolli-window-2011.pdf|Gianni Ciolli, Look Out The Window Functions (and free your SQL)]]&lt;br /&gt;
plus four 2D heat diffusion movies, with different starting scenarios: [[http://vimeo.com/30797130 a hot point]],&lt;br /&gt;
[[http://vimeo.com/30797509 a hot segment]],&lt;br /&gt;
[[http://vimeo.com/30797715 a hot square]] and&lt;br /&gt;
[[http://vimeo.com/30797797 a cold square]].&lt;br /&gt;
* [[Media:Smartgrid_for_the_datacenter_web.pdf|Stefan Kaltenbrunner, A smartgrid for the datacenter]]&lt;br /&gt;
* [http://momjian.us/main/presentations/internals.html#optimizer Explaining the Postgres Query Optimizer]&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday 20th October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
&lt;br /&gt;
A Postgres Service (Peter van Hardenberg, Heroku) http://pgconfeu11-service.herokuapp.com/&lt;br /&gt;
&lt;br /&gt;
[[Media:pgconf2011.eu-berg-pgapt.pdf|Christoph Berg: Connecting the Debian and PostgreSQL worlds ]]&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
* Exposing the Power of Postgres to Ruby — Will Leinweber, Heroku — http://pgeu-ruby.herokuapp.com&lt;br /&gt;
* [http://wiki.postgresql.org/images/e/e6/Django-extensions.pdf Jonathan S. Katz: Writing Django Extensions for PostgreSQL]&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;br /&gt;
* [[Media:Ciolli-debug-wcte-2011.pdf|Gianni Ciolli, Debug complex SQL queries with writable CTEs]]&lt;br /&gt;
* [[Media:pgconfeu_stats.odp|Guillaume Lelarge, What use are the statistics views?]]&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday 21st October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2011&amp;diff=15634</id>
		<title>PostgreSQL Conference Europe Talks 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PostgreSQL_Conference_Europe_Talks_2011&amp;diff=15634"/>
		<updated>2011-10-20T16:03:48Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PostgreSQL Conference Europe 2011 Talks =&lt;br /&gt;
&lt;br /&gt;
== Talks: Wednesday 19th October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
* [[Media:Mohan_PGCon_Keynote_10-19-2011.pdf|Ram Mohan Keynote: Afilias Winning Bet on Open Source]]&lt;br /&gt;
* [http://www.oslandia.com/files/1646fd60f9b0a4558d1e256cf3264572/pgconfeu2011_vincent_picavet_postgis.pdf Vincent Picavet - Geo in your database : Postgis]&lt;br /&gt;
* Heralding the Death of nosql — Will Leinweber, Heroku — http://pgeu-plv8.herokuapp.com&lt;br /&gt;
* [http://scanningpages.wordpress.com/?attachment_id=420| Slony Troubleshooting - Steve Singer, Afilias ]&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
* [http://ora2pg.darold.net/ora2pg-best-practices.pdf Gilles Darold: Best practices with Ora2Pg]&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Ciolli-window-2011.pdf|Gianni Ciolli, Look Out The Window Functions (and free your SQL)]]&lt;br /&gt;
plus four 2D heat diffusion movies, with different starting scenarios: [[http://vimeo.com/30797130 a hot point]],&lt;br /&gt;
[[http://vimeo.com/30797509 a hot segment]],&lt;br /&gt;
[[http://vimeo.com/30797715 a hot square]] and&lt;br /&gt;
[[http://vimeo.com/30797797 a cold square]].&lt;br /&gt;
* [[Media:Smartgrid_for_the_datacenter_web.pdf|Stefan Kaltenbrunner, A smartgrid for the datacenter]]&lt;br /&gt;
* [http://momjian.us/main/presentations/internals.html#optimizer Explaining the Postgres Query Optimizer]&lt;br /&gt;
&lt;br /&gt;
== Talks: Thursday 20th October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
&lt;br /&gt;
A Postgres Service (Peter van Hardenberg, Heroku) http://pgconfeu11-service.herokuapp.com/&lt;br /&gt;
&lt;br /&gt;
[[Media:pgconf2011.eu-berg-pgapt.pdf|Christoph Berg: Connecting the Debian and PostgreSQL worlds ]]&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
* Exposing the Power of Postgres to Ruby — Will Leinweber, Heroku — http://pgeu-ruby.herokuapp.com&lt;br /&gt;
* [http://wiki.postgresql.org/images/e/e6/Django-extensions.pdf Jonathan S. Katz: Writing Django Extensions for PostgreSQL]&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;br /&gt;
* [[Media:Ciolli-debug-wcte-2011.pdf|Gianni Ciolli, Debug complex SQL queries with writable CTEs]]&lt;br /&gt;
* [[Media:pgconfeu_stats.odp|What use are the statistics views?]]&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday 21st October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Pgconfeu_stats.odp&amp;diff=15633</id>
		<title>File:Pgconfeu stats.odp</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Pgconfeu_stats.odp&amp;diff=15633"/>
		<updated>2011-10-20T15:58:56Z</updated>

		<summary type="html">&lt;p&gt;Gleu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=SSI/fr&amp;diff=15168</id>
		<title>SSI/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=SSI/fr&amp;diff=15168"/>
		<updated>2011-08-19T19:37:49Z</updated>

		<summary type="html">&lt;p&gt;Gleu: french review&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
Documentation de la «Serializable Snapshot Isolation» (Isolation par Instantanés Sérialisables, ou SSI) dans PostgreSQL, comparée à la «Snapshot Isolation» (Isolation par Instantanés, ou SI). Celles-ci correspondent respectivement aux niveaux d&#039;isolation de transaction SERIALIZABLE et REPEATABLE READ dans PostgreSQL, à partir de la version 9.1.&lt;br /&gt;
&lt;br /&gt;
== Aperçu ==&lt;br /&gt;
&lt;br /&gt;
Avec de vraies transactions sérialisables, si vous pouvez prouver que votre transaction fera ce qui est prévu si il n&#039;y a aucune transaction concurrente, elle fera ce qui est prévu quelles que soient les autres transactions sérialisables qui s&#039;exécuteront en même temps qu&#039;elle, ou sera annulée pour erreur de sérialisation.&lt;br /&gt;
&lt;br /&gt;
Ce document montre les problèmes qui peuvent se produire avec certaines combinaisons de transactions au niveau d&#039;isolation de transaction REPEATABLE READ, et comment elles sont évitées avec le niveau d&#039;isolation SERIALIZABLE, à partir de PostgreSQL 9.1.&lt;br /&gt;
&lt;br /&gt;
Ce document est destiné au programmeur d&#039;applications ou à l&#039;administrateur de bases de données. Pour les détails sur l&#039;implémentation de SSI, voyez la page de Wiki [[Serializable]].&lt;br /&gt;
&lt;br /&gt;
== Exemples ==&lt;br /&gt;
&lt;br /&gt;
Dans les environnements qui évitent de protéger leur intégrité en mettant en place des verrous bloquants, il sera fréquent que la base soit configurée (dans postgresql.conf) avec:&lt;br /&gt;
 default_transaction_isolation = &#039;serializable&#039;&lt;br /&gt;
Pour cette raison, tous les exemples ont été effectués avec ce paramétrage, ce qui a évité de polluer les exemples en se contentant d&#039;un simple begin plutôt que de déclarer explicitement le niveau d&#039;isolation pour chaque transaction.&lt;br /&gt;
&lt;br /&gt;
=== Write Skew Simple (Écriture Faussée Simple?) ===&lt;br /&gt;
&lt;br /&gt;
Quand deux transactions concurrentes déterminent chacune ce qu&#039;elles écrivent en lisant des données qui se chevauchent avec des données que l&#039;autre modifie, on peut se retrouver dans un état qui ne devrait pas apparaître si une des deux s&#039;était exécutée avant l&#039;autre. C&#039;est un phénomène connu sous le nom de &#039;&#039;write skew&#039;&#039;, et c&#039;est la forme la plus simple de défaut de sérialisation contre laquelle SSI vous protège.&lt;br /&gt;
&lt;br /&gt;
Quand il y a write skew dans SSI, les deux transactions se déroulent jusqu&#039;à ce que l&#039;une valide. La première à valider gagne, et l&#039;autre transaction est annulée. La règle du &amp;quot;le premier à valider gagne&amp;quot; garantit que du travail peut avoir lieu sur la base et que la transaction qui est annulée puisse être tentée à nouveau immédiatement.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Noir et Blanc ====&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, il y a des enregistrement avec une colonne couleur contenant &#039;blanc&#039; ou &#039;noir&#039;. Deux utilisateurs essayent simultanément de convertir tous les enregistrements vers une couleur unique, mais chacun dans une direction opposée. Un veut tout passer tous les blancs en noir, et l&#039;autre tous les noirs en blanc.&lt;br /&gt;
&lt;br /&gt;
L&#039;exemple peut être mis en place avec ces ordres: &lt;br /&gt;
 create table points&lt;br /&gt;
   (&lt;br /&gt;
     id int not null primary key,&lt;br /&gt;
     couleur text not null&lt;br /&gt;
   );&lt;br /&gt;
 insert into points&lt;br /&gt;
   with x(id) as (select generate_series(1,10))&lt;br /&gt;
   select id, case when id % 2 = 1 then &#039;noir&#039;&lt;br /&gt;
     else &#039;blanc&#039; end from x;&lt;br /&gt;
{|&lt;br /&gt;
|+ Exemple Noir et Blanc&lt;br /&gt;
! session 1&lt;br /&gt;
! session 2&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 begin;&lt;br /&gt;
 update points set couleur = &#039;noir&#039;&lt;br /&gt;
   where couleur = &#039;blanc&#039;;&lt;br /&gt;
|-&lt;br /&gt;
|  ||&lt;br /&gt;
 begin;&lt;br /&gt;
 update points set couleur = &#039;blanc&#039;&lt;br /&gt;
   where couleur = &#039;noir&#039;;&lt;br /&gt;
À ce moment, une des deux transaction est condamnée à mourir.&lt;br /&gt;
 commit;&lt;br /&gt;
Le premier à valider gagne.&lt;br /&gt;
 select * from points order by id;&lt;br /&gt;
&lt;br /&gt;
  id | couleur&lt;br /&gt;
 ----+-------&lt;br /&gt;
   1 | blanc&lt;br /&gt;
   2 | blanc&lt;br /&gt;
   3 | blanc&lt;br /&gt;
   4 | blanc&lt;br /&gt;
   5 | blanc&lt;br /&gt;
   6 | blanc&lt;br /&gt;
   7 | blanc&lt;br /&gt;
   8 | blanc&lt;br /&gt;
   9 | blanc&lt;br /&gt;
  10 | blanc&lt;br /&gt;
 (10 rows)&lt;br /&gt;
Celle-ci s&#039;est exécutée comme si elle était seule.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
 commit;&lt;br /&gt;
&lt;br /&gt;
 ERROR:  could not serialize access&lt;br /&gt;
         due to read/write dependencies&lt;br /&gt;
         among transactions&lt;br /&gt;
 DETAIL:  Cancelled on identification&lt;br /&gt;
          as a pivot, during commit attempt.&lt;br /&gt;
 HINT:  The transaction might succeed if retried.&lt;br /&gt;
Une erreur de sérialisation. On annule et on réessaye.&lt;br /&gt;
 rollback;&lt;br /&gt;
 begin;&lt;br /&gt;
 update points set couleur = &#039;noir&#039;&lt;br /&gt;
   where couleur = &#039;blanc&#039;;&lt;br /&gt;
 commit;&lt;br /&gt;
Il n&#039;y a pas de transaction concurrente pour gêner.&lt;br /&gt;
 select * from points order by id;&lt;br /&gt;
&lt;br /&gt;
  id | couleur&lt;br /&gt;
 ----+-------&lt;br /&gt;
   1 | noir&lt;br /&gt;
   2 | noir&lt;br /&gt;
   3 | noir&lt;br /&gt;
   4 | noir&lt;br /&gt;
   5 | noir&lt;br /&gt;
   6 | noir&lt;br /&gt;
   7 | noir&lt;br /&gt;
   8 | noir&lt;br /&gt;
   9 | noir&lt;br /&gt;
  10 | noir&lt;br /&gt;
 (10 rows)&lt;br /&gt;
La transaction s&#039;est exécutée seule, après l&#039;autre.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Données en intersection ====&lt;br /&gt;
&lt;br /&gt;
Cet exemple est tiré de la documentation PostgreSQL. Deux transactions concurrentes lisent des données, et chacune utilise ces données pour mettre à jour l&#039;ensemble lu par l&#039;autre. Un exemple simple, même si un peu artificiel, de données faussées.&lt;br /&gt;
&lt;br /&gt;
L&#039;exemple peut être mis en place avec ces ordres:&lt;br /&gt;
 CREATE TABLE mytab&lt;br /&gt;
 (&lt;br /&gt;
   class int NOT NULL,&lt;br /&gt;
   value int NOT NULL&lt;br /&gt;
 );&lt;br /&gt;
 INSERT INTO mytab VALUES&lt;br /&gt;
 (1, 10), (1, 20), (2, 100), (2, 200);&lt;br /&gt;
{|&lt;br /&gt;
|+ Exemple de données en intersection&lt;br /&gt;
! session 1&lt;br /&gt;
! session 2&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 BEGIN;&lt;br /&gt;
 SELECT SUM(value) FROM mytab WHERE class = 1;&lt;br /&gt;
&lt;br /&gt;
  sum&lt;br /&gt;
 -----&lt;br /&gt;
   30&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO mytab VALUES (2, 30);&lt;br /&gt;
|-&lt;br /&gt;
|  ||&lt;br /&gt;
 BEGIN;&lt;br /&gt;
 SELECT SUM(value) FROM mytab WHERE class = 2;&lt;br /&gt;
&lt;br /&gt;
  sum&lt;br /&gt;
 -----&lt;br /&gt;
  300&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO mytab VALUES (1, 300);&lt;br /&gt;
Chaque transaction a modifié ce que l&#039;autre transaction aurait lu. Si les deux étaient autorisées à valider, le comportement sérialisable ne serait plus respecté, parce que si elles avaient été exécutées une seule à la fois, une des transactions aurait vu l&#039;INSERT que l&#039;autre a validé. Nous attendons qu&#039;une des transactions ait validé avant d&#039;annuler quoi que ce soit, toutefois, pour garantir que des traitements soient effectués et éviter que le système ne s&#039;effondre.&lt;br /&gt;
 COMMIT;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 COMMIT;&lt;br /&gt;
&lt;br /&gt;
 ERROR:  could not serialize access&lt;br /&gt;
         due to read/write dependencies&lt;br /&gt;
         among transactions&lt;br /&gt;
 DETAIL:  Cancelled on identification&lt;br /&gt;
          as a pivot, during commit attempt.&lt;br /&gt;
 HINT:  The transaction might succeed if retried.&lt;br /&gt;
Donc, maintenant nous annulons la transaction en échec et nous la réessayons depuis le début.&lt;br /&gt;
 ROLLBACK;&lt;br /&gt;
 BEGIN;&lt;br /&gt;
 SELECT SUM(value) FROM mytab WHERE class = 1;&lt;br /&gt;
&lt;br /&gt;
  sum&lt;br /&gt;
 -----&lt;br /&gt;
  330&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO mytab VALUES (2, 330);&lt;br /&gt;
 COMMIT;&lt;br /&gt;
Cela réussit, et le résultat est cohérent avec une exécution sérialisée des transactions.&lt;br /&gt;
 SELECT * FROM mytab;&lt;br /&gt;
&lt;br /&gt;
  class | value&lt;br /&gt;
 -------+-------&lt;br /&gt;
      1 |    10&lt;br /&gt;
      1 |    20&lt;br /&gt;
      2 |   100&lt;br /&gt;
      2 |   200&lt;br /&gt;
      1 |   300&lt;br /&gt;
      2 |   330&lt;br /&gt;
 (6 rows)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Protection contre le Découvert ====&lt;br /&gt;
&lt;br /&gt;
Le cas hypothétique est celui d&#039;une banque qui autorise ses clients à retirer de l&#039;argent jusqu&#039;au total de tout ce qu&#039;ils ont sur tous leurs comptes. La banque transfèrera ensuite automatiquement les fonds au besoin pour terminer la journée avec un solde positif sur chaque compte. À l&#039;intérieur d&#039;une seule transaction, on vérifie que la somme de tous les comptes dépasse la somme requise.&lt;br /&gt;
&lt;br /&gt;
Quelqu&#039;un essaye d&#039;être malin et de piéger la banque en soumettant deux retraits de 900$ sur deux comptes ayant chacun 500$ de solde simultanément. Au niveau d&#039;isolation de transaction REPEATABLE READ, cela pourrait marcher; mais si le niveau d&#039;isolation de transaction SERIALIZABLE est utilisé, SSI détectera une &amp;quot;structure dangereuse&amp;quot; dans le schéma de lecture/écriture et rejettera une des deux transactions.&lt;br /&gt;
&lt;br /&gt;
Cet exemple peut être mis en place avec ces ordres:&lt;br /&gt;
&lt;br /&gt;
 create table compte&lt;br /&gt;
   (&lt;br /&gt;
     nom text not null,&lt;br /&gt;
     type text not null,&lt;br /&gt;
     solde money not null default &#039;0.00&#039;::money,&lt;br /&gt;
     primary key (nom, type)&lt;br /&gt;
   );&lt;br /&gt;
 insert into compte values&lt;br /&gt;
   (&#039;kevin&#039;,&#039;epargne&#039;, 500),&lt;br /&gt;
   (&#039;kevin&#039;,&#039;courant&#039;, 500);&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
|+ Exemple de Protection contre le Découvert&lt;br /&gt;
! session 1&lt;br /&gt;
! session 2&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 begin;&lt;br /&gt;
 select type, solde from compte&lt;br /&gt;
   where nom = &#039;kevin&#039;;&lt;br /&gt;
&lt;br /&gt;
    type    | solde&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  epargne   | $500.00&lt;br /&gt;
  courant   | $500.00&lt;br /&gt;
 (2 rows)&lt;br /&gt;
Le total est de $1000, un retrait de $900 est donc permis.&lt;br /&gt;
|-&lt;br /&gt;
|  ||&lt;br /&gt;
 begin;&lt;br /&gt;
 select type, solde from compte&lt;br /&gt;
   where nom = &#039;kevin&#039;;&lt;br /&gt;
&lt;br /&gt;
    type    | solde&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  epargne   | $500.00&lt;br /&gt;
  courant   | $500.00&lt;br /&gt;
 (2 rows)&lt;br /&gt;
Le total est de $1000, un retrait de $900 est donc permis.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
 update compte&lt;br /&gt;
   set solde = solde - 900::money&lt;br /&gt;
   where nom = &#039;kevin&#039; and type = &#039;epargne&#039;;&lt;br /&gt;
Jusqu&#039;ici tout va bien.&lt;br /&gt;
|-&lt;br /&gt;
|  ||&lt;br /&gt;
 update compte&lt;br /&gt;
   set solde = solde - 900::money&lt;br /&gt;
   where nom = &#039;kevin&#039; and type = &#039;courant&#039;;&lt;br /&gt;
Maintenant nous avons un problème. Cela ne peut co-exister avec l&#039;activité de l&#039;autre transaction. Nous n&#039;annulons pas encore, parce que la transaction échouerait avec les mêmes conflits si on la réessayait. Le premier à valider va gagner, et l&#039;autre échouera quand elle essayera de continuer après cela.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
 commit;&lt;br /&gt;
Celle ci a validé la première. Son travail est enregistré.&lt;br /&gt;
|-&lt;br /&gt;
|  ||&lt;br /&gt;
 commit;&lt;br /&gt;
&lt;br /&gt;
 ERROR:  could not serialize access&lt;br /&gt;
         due to read/write dependencies&lt;br /&gt;
         among transactions&lt;br /&gt;
 DETAIL:  Cancelled on identification&lt;br /&gt;
          as a pivot, during commit attempt.&lt;br /&gt;
 HINT:  The transaction might succeed if retried.&lt;br /&gt;
Cette transaction n&#039;a pas réussi à retirer l&#039;argent.&lt;br /&gt;
Maintenant nous l&#039;annulons et réessayons la transaction.&lt;br /&gt;
&lt;br /&gt;
 rollback;&lt;br /&gt;
 begin;&lt;br /&gt;
 select type, solde from compte&lt;br /&gt;
   where nom = &#039;kevin&#039;;&lt;br /&gt;
&lt;br /&gt;
    type    | solde&lt;br /&gt;
 -----------+----------&lt;br /&gt;
  epargne   | -$400.00&lt;br /&gt;
  courant   |  $500.00&lt;br /&gt;
 (2 rows)&lt;br /&gt;
On voit qu&#039;il y a un solde net de $100. Cette demande de $900 sera rejetée par l&#039;application.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Trois Transactions ou Plus ===&lt;br /&gt;
&lt;br /&gt;
Des anomalies de sérialisation peuvent résulter de motifs plus complexes d&#039;accès, impliquant trois transactions ou plus.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Couleurs Primaires ====&lt;br /&gt;
&lt;br /&gt;
C&#039;est similaire à l&#039;exemple &amp;quot;Blanc et Noir&amp;quot; précédent, à la différence que nous utilisons les trois couleurs primaires. Une transaction essaye de passer le rouge à jaune, la suivante le jaune au bleu, et la troisième le bleu au rouge. Si ces transactions étaient exécutées une seule à la fois, on aurait à la fin de l&#039;exécution deux des trois couleurs, en fonction de l&#039;ordre d&#039;exécution. Si deux d&#039;entre elles sont exécutées simultanément, celle essayant de lire les enregistrements mis à jour par l&#039;autre semblera s&#039;exécuter première, puisqu&#039;elle ne verra pas le travail de l&#039;autre transaction, il n&#039;y a donc pas de problème dans ce cas. Que l&#039;autre transaction soit exécutée avant ou après cela, les résultats sont cohérents avec un ordre d&#039;exécution sérialisé.&lt;br /&gt;
&lt;br /&gt;
Si les trois s&#039;exécutent en même temps, il y a un cycle dans l&#039;ordre apparent d&#039;exécution. Une transaction Repeatable Read ne détecterait pas cela, et la table aurait toujours trois couleurs. Une transaction Sérialisable détectera le problème et annulera une des transactions avec une erreur de sérialisation.&lt;br /&gt;
&lt;br /&gt;
L&#039;exemple peut être mis en place avec ces ordres:&lt;br /&gt;
 create table points&lt;br /&gt;
   (&lt;br /&gt;
     id int not null primary key,&lt;br /&gt;
     couleur text not null&lt;br /&gt;
   );&lt;br /&gt;
 insert into points&lt;br /&gt;
   with x(id) as (select generate_series(1,9000))&lt;br /&gt;
   select id, case when id % 3 = 1 then &#039;rouge&#039;&lt;br /&gt;
     when id % 3 = 2 then &#039;jaune&#039;&lt;br /&gt;
     else &#039;blue&#039; end from x;&lt;br /&gt;
 create index points_couleur on points (couleur);&lt;br /&gt;
 analyze points;&lt;br /&gt;
{|&lt;br /&gt;
|+ Primary Colors Example&lt;br /&gt;
! session 1&lt;br /&gt;
! session 2&lt;br /&gt;
! session 3&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 begin;&lt;br /&gt;
 update points set couleur = &#039;jaune&#039;&lt;br /&gt;
   where couleur = &#039;rouge&#039;;&lt;br /&gt;
|-&lt;br /&gt;
|  ||&lt;br /&gt;
 begin;&lt;br /&gt;
 update points set couleur = &#039;blue&#039;&lt;br /&gt;
   where couleur = &#039;jaune&#039;;&lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||&lt;br /&gt;
 begin;&lt;br /&gt;
 update points set couleur = &#039;rouge&#039;&lt;br /&gt;
   where couleur = &#039;blue&#039;;&lt;br /&gt;
À ce point, au moins une des trois transactions est condamnée. Pour garantir que les traitement progressent, on attend qu&#039;une valide. Le commit va réussir, ce qui non seulement garantit que les traitements progressent, mais qu&#039;une tentative de reprendre une transaction échouée n&#039;échouera pas &#039;&#039;sur la même combinaison de transactions&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 commit;&lt;br /&gt;
Le premier commit gagne. La session 2 doit échouer à ce point, parce que durant le commit il a été déterminé qu&#039;elle a les plus grandes chances de réussir si réessayée immédiatement.&lt;br /&gt;
 select couleur, count(*) from points&lt;br /&gt;
   group by couleur&lt;br /&gt;
   order by couleur;&lt;br /&gt;
&lt;br /&gt;
  couleur  | count&lt;br /&gt;
 ----------+-------&lt;br /&gt;
  blue     |  3000&lt;br /&gt;
  jaune    |  6000&lt;br /&gt;
 (2 rows)&lt;br /&gt;
Cela semble avoir été exécuté avant les autres mises à jour.&lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||&lt;br /&gt;
 commit;&lt;br /&gt;
Cela fonctionne si on l&#039;essaye à ce moment. Si la session 2 effectue davantage de travail avant, cette transaction pourrait aussi devoir être annulée et réessayée.&lt;br /&gt;
 select couleur, count(*) from points&lt;br /&gt;
   group by couleur&lt;br /&gt;
   order by couleur;&lt;br /&gt;
&lt;br /&gt;
  couleur  | count&lt;br /&gt;
 ----------+-------&lt;br /&gt;
  rouge    |  3000&lt;br /&gt;
  jaune    |  6000&lt;br /&gt;
 (2 rows)&lt;br /&gt;
Elle semble s&#039;être exécutée après la transaction de la session 1.&lt;br /&gt;
|-&lt;br /&gt;
|  ||&lt;br /&gt;
 commit;&lt;br /&gt;
&lt;br /&gt;
 ERROR:  could not serialize access&lt;br /&gt;
         due to read/write dependencies&lt;br /&gt;
         among transactions&lt;br /&gt;
 DETAIL:  Cancelled on identification&lt;br /&gt;
          as a pivot, during commit attempt.&lt;br /&gt;
 HINT:  The transaction might succeed if retried.&lt;br /&gt;
Une erreur de sérialisation. Nous annulons et réessayons.&lt;br /&gt;
 rollback;&lt;br /&gt;
 begin;&lt;br /&gt;
 update points set couleur = &#039;blue&#039;&lt;br /&gt;
   where couleur = &#039;jaune&#039;;&lt;br /&gt;
 commit;&lt;br /&gt;
Une nouvelle tentative réussira.&lt;br /&gt;
 select couleur, count(*) from points&lt;br /&gt;
   group by couleur&lt;br /&gt;
   order by couleur;&lt;br /&gt;
&lt;br /&gt;
  couleur | count&lt;br /&gt;
 ---------+-------&lt;br /&gt;
  blue    |  6000&lt;br /&gt;
  rouge   |  3000&lt;br /&gt;
 (2 rows)&lt;br /&gt;
Elle semble s&#039;être exécutée en dernier, ce qu&#039;elle a d&#039;ailleurs fait.&lt;br /&gt;
|}&lt;br /&gt;
Un point intéressant est que si la session 2 avait tenté de valider après la session 1 et avant la session 3, elle aurait tout de même échoué, et une re-tentative aurait aussi réussi, mais le comportement de la transaction de la session 3 n&#039;est pas déterministe. Elle pourrait avoir réussi, ou avoir reçu une erreur de sérialisation et avoir nécessité d&#039;être rejouée.&lt;br /&gt;
&lt;br /&gt;
C&#039;est parce que le verrouillage de prédicat utilisé par le mécanisme de détection de conflit s&#039;appuie sur les pages et enregistrement effectivement accédés, et il y a un facteur aléatoire utilisé lors de l&#039;insertion des entrées d&#039;index qui ont des clés égales, afin de réduire la contention; donc même avec des séquences d&#039;évènements identiques il est toujours possible de voir des différences sur où les erreurs de sérialisation se produisent. C&#039;est pour cela qu&#039;il est important, quand on s&#039;appuie sur les transactions sérialisables pour gérer la concurrence, d&#039;avoir un système généralisé permettant d&#039;identifier les erreurs de sérialisation et de rejouer les transactions depuis leur début.&lt;br /&gt;
&lt;br /&gt;
Il convient aussi de noter que si la session 2 avait validé la seconde tentative de transaction avant que la session 3 ait validé sa transaction, toute requête ultérieure qui aurait vu des enregistrements mis à jour de jaune à bleu (et validés) aurait, de façon déterministe, fait échouer la transaction de la session 3, parce que ces enregistrements ne seraient pas des enregistrements que la session 3 verraient comme bleu et mettraient à jour à rouge. Pour que la transaction 3 réussisse, elle doit pouvoir être considérée comme ayant été exécutée avant la transaction validée de la session 2. Par conséquent, exposer un état dans lequel le travail de la transaction de la session 2 est visible, mais pas le travail de la transaction de la session 3 signifie que la transaction de la session 3 doit échouer. L&#039;acte d&#039; &#039;&#039;observer&#039;&#039; un état récemment modifié de la base peut entraîner des erreurs de sérialisation. Cela sera exploré plus avant dans d&#039;autres exemples.&lt;br /&gt;
&lt;br /&gt;
=== Transactions en Lecture Seule ===&lt;br /&gt;
&lt;br /&gt;
Bien qu&#039;une transaction en lecture seule ne puisse contribuer à une anomalie qui persiste dans la base, dans le mode Repeatable Read implémenté par le SSI, elle peut voir un état qui n&#039;est pas cohérent avec l&#039;exécution sérialisée (une à la fois) des transactions. Une transaction Serializable implémentée avec SSI ne verra jamais ces anomalies transitoires.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Français]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=What%27s_new_in_PostgreSQL_9.1/fr&amp;diff=15167</id>
		<title>What&#039;s new in PostgreSQL 9.1/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=What%27s_new_in_PostgreSQL_9.1/fr&amp;diff=15167"/>
		<updated>2011-08-19T19:33:45Z</updated>

		<summary type="html">&lt;p&gt;Gleu: french review&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
Ce document présente, si possible par l&#039;exemple, un grand nombre des nouveautés de PostgreSQL 9.1, comparé à la version majeure précédente - PostgreSQL 9.0. Il y a de nombreuses nouveautés dans cette version, cette page de wiki ne couvre donc que les changements les plus importants  en détail. La liste complète des modifications se trouve dans le chapitre [http://docs.postgresql.fr/9.1/release.html Notes de version] de la documentation officielle.&lt;br /&gt;
&lt;br /&gt;
===Nouveautés majeures===&lt;br /&gt;
&lt;br /&gt;
==Réplication synchrone et autres fonctionnalités de réplication==&lt;br /&gt;
&lt;br /&gt;
Il y a un certain nombre de nouvelles fonctionnalités autour de la réplication en 9.1:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* En 9.0, l&#039;utilisateur servant à la réplication devait être superutilisateur. Ce n&#039;est plus le cas, il y a un nouvel attribut appelé &#039;replication&#039;.&lt;br /&gt;
&lt;br /&gt;
  CREATE ROLE replication_role REPLICATION LOGIN PASSWORD &#039;pwd_replication&#039;.&lt;br /&gt;
&lt;br /&gt;
Ce rôle peut alors être ajouté au pg_hba.conf, et être utilisé pour la streaming replication. C&#039;est évidemment préférable, d&#039;un point de vue sécurité, que d&#039;avoir un rôle superutilisateur dédié à cela.&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons une instance créée, ainsi qu&#039;un utilisateur de réplication, nous pouvons mettre en place la streaming replication. Il ne s&#039;agit que d&#039;ajouter la permission de se connecter à la base virtuelle &#039;replication&#039; dans &amp;quot;pg_hba.conf&amp;quot;, positionner &#039;&#039;wal_level&#039;&#039;, l&#039;archivage (&#039;&#039;archive_mode&#039;&#039; et &#039;&#039;archive_command&#039;&#039;) et &#039;&#039;max_wal_senders&#039;&#039;, ce qui est déjà traité dans le billet sur les nouveautés de la 9.0.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;instance est prête pour le streaming, nous pouvons montrer la seconde nouveauté.&lt;br /&gt;
&lt;br /&gt;
* pg_basebackup.&lt;br /&gt;
&lt;br /&gt;
Cet outil permet de cloner une base, ou en faire une sauvegarde, en n&#039;utilisant que le protocole réseau PostgreSQL. Il n&#039;y a pas besoin d&#039;appeler &amp;quot;pg_start_backup()&amp;quot;, puis réaliser une copie manuelle et enfin appeler &amp;quot;pg_stop_backup()&amp;quot;. pg_basebackup effectue tout ce travail en une seule commande. Pour la démonstration, nous allons cloner l&#039;instance en cours de fonctionnement vers /tmp/newcluster.&lt;br /&gt;
&lt;br /&gt;
  &amp;gt; pg_basebackup -D /tmp/newcluster -U replication -v&lt;br /&gt;
  Password: &lt;br /&gt;
  NOTICE:  pg_stop_backup complete, all required WAL segments have been archived&lt;br /&gt;
  pg_basebackup: base backup completed&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle instance est prête à démarrer: ajoutez simplement un fichier &amp;quot;recovery.conf&amp;quot; avec une &amp;quot;restore_command&amp;quot; pour récupérer les fichiers archivés, et démarrez la nouvelle instance. pg_basebackup peut aussi fabriquer un tar, ou inclure tous les fichiers xlog requis (pour avoir une sauvegarde totalement autonome).&lt;br /&gt;
&lt;br /&gt;
Comme nous allons maintenant montrer la réplication synchrone, préparons un &amp;quot;recovery.conf&amp;quot; pour se connecter à la base maître et récupérer les enregistrements au fil de l&#039;eau.&lt;br /&gt;
&lt;br /&gt;
Le fichier va ressembler à ceci&lt;br /&gt;
&lt;br /&gt;
  restore_command = &#039;cp /tmp/%f %p&#039;&lt;br /&gt;
  standby_mode = on&lt;br /&gt;
  primary_conninfo = &#039;host=localhost port=59121 user=replication password=replication application_name=newcluster&#039;&lt;br /&gt;
  trigger_file = &#039;/tmp/trig_f_newcluster&#039;&lt;br /&gt;
&lt;br /&gt;
Puis nous démarrons la nouvelle instance:&lt;br /&gt;
&lt;br /&gt;
  pg_ctl -D /tmp/newcluster start&lt;br /&gt;
  &lt;br /&gt;
  LOG:  database system was interrupted; last known up at 2011-05-22 17:15:45 CEST&lt;br /&gt;
  LOG:  entering standby mode&lt;br /&gt;
  LOG:  restored log file &amp;quot;00000001000000010000002F&amp;quot; from archive&lt;br /&gt;
  LOG:  redo starts at 1/2F000020&lt;br /&gt;
  LOG:  consistent recovery state reached at 1/30000000&lt;br /&gt;
  LOG:  database system is ready to accept read only connections&lt;br /&gt;
  cp: cannot stat « /tmp/000000010000000100000030 »: No such file or directory&lt;br /&gt;
  LOG:  streaming replication successfully connected to primary&lt;br /&gt;
&lt;br /&gt;
Nous avons notre esclave, et il récupère les données provenant du maître par le mode «streaming», mais nous sommes toujours en asynchrone. Notez que nous avons positionné un paramètre &amp;quot;application_name&amp;quot; dans la chaîne de connexion du &amp;quot;recovery.conf&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Réplication synchrone&lt;br /&gt;
&lt;br /&gt;
Pour que la réplication devienne synchrone, c&#039;est très simple, il suffit de positionner ceci dans le postgresql.conf du maître:&lt;br /&gt;
&lt;br /&gt;
  synchronous_standby_names = &#039;newcluster&#039;&lt;br /&gt;
&lt;br /&gt;
C&#039;est bien sûr l&#039;&amp;quot;application_name&amp;quot; provenant du &amp;quot;primary_conninfo&amp;quot; de l&#039;esclave. Un «pg_ctl_reload», et le nouveau paramètre est pris en compte. Maintenant, tout «COMMIT» sur le maître ne sera considéré comme terminé que quand l&#039;esclave l&#039;aura écrit sur son propre journal, et l&#039;aura notifié au maître.&lt;br /&gt;
&lt;br /&gt;
Un petit avertissement: les transactions sont considérées comme validées quand elles sont écrites dans le journal de l&#039;esclave, pas quand elles sont visibles sur l&#039;esclave. Cela veut dire qu&#039;il y a toujours un délai entre le moment où une transaction est validée sur le maître, et le moment où elle est visible sur l&#039;esclave. La réplication est tout de même synchrone: vous ne perdrez pas de données dans le cas du crash d&#039;un maître.&lt;br /&gt;
&lt;br /&gt;
La réplication synchrone peut être réglée assez finement: elle est contrôlable par session. Le paramètre &amp;quot;synchronous_commit&amp;quot; peut être désactivé (il est évidemment actif par défaut) par session, si celle-ci n&#039;a pas besoin de cette garantie de réplication synchrone. Si, dans votre transaction, vous n&#039;avez pas besoin de la réplication synchrone, faites simplement&lt;br /&gt;
  SET synchronous_commit TO off&lt;br /&gt;
et vous ne paierez pas la pénalité due à l&#039;attente de l&#039;esclave.&lt;br /&gt;
&lt;br /&gt;
Il y a quelques autres nouveautés à mentionner pour la réplication:&lt;br /&gt;
&lt;br /&gt;
* Les esclaves peuvent maintenant demander au maître de ne pas nettoyer par VACUUM les enregistrements dont ils pourraient encore avoir besoin.&lt;br /&gt;
&lt;br /&gt;
C&#039;était une des principales difficultés du paramétrage de la réplication en 9.0, si on souhaitait utiliser l&#039;esclave: un VACUUM pouvait détruire des enregistrements qui étaient encore nécessaires à l&#039;exécution des requêtes de l&#039;esclave, engendrant des conflits de réplication. L&#039;esclave avait alors à faire un choix: soit tuer la requête en cours d&#039;exécution, soit accepter de retarder l&#039;application des modifications générées par le VACUUM (et toutes celles qui le suivent bien sûr), et donc prendre du retard. On pouvait contourner le problème, en positionnant &amp;quot;vacuum_defer_cleanup_age&amp;quot; à une valeur non nulle, mais c&#039;était difficile de trouver une bonne valeur. La nouvelle fonctionnalité est activée en positionnant &amp;quot;hot_standby_feedback&amp;quot;, sur les bases de standby. Bien sûr, cela entraîne que la base de standby va pouvoir empêcher VACUUM de faire son travail de maintenance sur le maître, s&#039;il y a des requêtes très longues qui s&#039;exécutent sur l&#039;esclave.&lt;br /&gt;
&lt;br /&gt;
* pg_stat_replication est une nouvelle vue système.&lt;br /&gt;
&lt;br /&gt;
Elle affiche, sur le maître, l&#039;état de tous les esclaves: combien de WAL ils ont reçu, s&#039;ils sont connectés, synchrones, où ils en sont de l&#039;application des modifications:&lt;br /&gt;
&lt;br /&gt;
  =# SELECT * from pg_stat_replication ;&lt;br /&gt;
   procpid | usesysid |   usename   | application_name | client_addr | client_hostname | client_port |        backend_start         |   state   | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state &lt;br /&gt;
  ---------+----------+-------------+------------------+-------------+-----------------+-------------+------------------------------+-----------+---------------+----------------+----------------+-----------------+---------------+------------&lt;br /&gt;
     17135 |    16671 | replication | newcluster       | 127.0.0.1   |                 |       43745 | 2011-05-22 18:13:04.19283+02 | streaming | 1/30008750    | 1/30008750     | 1/30008750     | 1/30008750      |             1 | sync&lt;br /&gt;
&lt;br /&gt;
Il n&#039;est dont plus nécessaire d&#039;exécuter des requêtes sur les esclaves pour connaître leur état par rapport au maître.&lt;br /&gt;
&lt;br /&gt;
* pg_stat_database_conflicts est une autre vue système.&lt;br /&gt;
&lt;br /&gt;
Celle ci est sur la base de standby, et montre combien de requêtes ont été annulées, et pour quelles raisons:&lt;br /&gt;
&lt;br /&gt;
  =# SELECT * from pg_stat_database_conflicts ;&lt;br /&gt;
   datid |  datname  | confl_tablespace | confl_lock | confl_snapshot | confl_bufferpin | confl_deadlock &lt;br /&gt;
  -------+-----------+------------------+------------+----------------+-----------------+----------------&lt;br /&gt;
       1 | template1 |                0 |          0 |              0 |               0 |              0&lt;br /&gt;
   11979 | template0 |                0 |          0 |              0 |               0 |              0&lt;br /&gt;
   11987 | postgres  |                0 |          0 |              0 |               0 |              0&lt;br /&gt;
   16384 | marc      |                0 |          0 |              1 |               0 |              0&lt;br /&gt;
&lt;br /&gt;
* la réplication peut maintenant être mise en pause sur un esclave.&lt;br /&gt;
&lt;br /&gt;
Appelez tout simplement &#039;&#039;pg_xlog_replay_pause()&#039;&#039; pour mettre en pause, et &#039;&#039;pg_xlog_replay_resume()&#039;&#039; pour reprendre. Cela gèlera la base, ce qui en fait un excellent outil pour réaliser des sauvegardes cohérentes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pg_is_xlog_replay_paused()&#039;&#039; permet de connaître l&#039;état actuel.&lt;br /&gt;
&lt;br /&gt;
On peut aussi demander à PostgreSQL de mettre l&#039;application des journaux en pause à la fin de la récupération d&#039;instance, sans passer la base en production, pour permettre à l&#039;administrateur d&#039;exécuter des requêtes sur la base. L&#039;administrateur peut alors vérifier si le point de récupération atteint est correct, avant de mettre fin à la réplication. Ce nouveau paramètre est &amp;quot;pause_at_recovery_target&amp;quot;, et se positionne dans le recovery.conf.&lt;br /&gt;
&lt;br /&gt;
* On peut créer des points de récupération (Restore Points)&lt;br /&gt;
&lt;br /&gt;
Ce ne sont rien de plus que des points nommés dans le journal de transactions.&lt;br /&gt;
&lt;br /&gt;
Il peuvent être utilisés en spécifiant un &amp;quot;recovery_target_name&amp;quot; à la place d&#039;un &amp;quot;recovery_target_time&amp;quot; ou un &amp;quot;recovery_target_xid&amp;quot; dans le fichier recovery.conf.&lt;br /&gt;
&lt;br /&gt;
Ils sont créés en appelant &amp;quot;pg_create_restore_point()&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Collations par colonne==&lt;br /&gt;
&lt;br /&gt;
L&#039;ordre de collation n&#039;est plus unique dans une base de données.&lt;br /&gt;
&lt;br /&gt;
Imaginons que vous utilisiez une base en 9.0, avec un encodage UTF8, et une collation de_DE.utf8 (tri alphabétique), parce que la plupart de vos utilisateurs parlent allemand. Si vous avez des données françaises à stocker aussi, et que vous avez besoin de les trier, les utilisateurs français les plus pointilleux ne seraient pas satisfaits:&lt;br /&gt;
&lt;br /&gt;
  SELECT * from (values (&#039;élève&#039;),(&#039;élevé&#039;),(&#039;élever&#039;),(&#039;Élève&#039;)) as tmp order by column1;&lt;br /&gt;
   column1 &lt;br /&gt;
  ---------&lt;br /&gt;
   élevé&lt;br /&gt;
   élève&lt;br /&gt;
   Élève&lt;br /&gt;
   élever&lt;br /&gt;
&lt;br /&gt;
Pour être honnête, ce n&#039;est pas si mal. Mais ce n&#039;est pas l&#039;ordre alphabétique français: les caractères accentués sont considérés comme non accentués durant une première passe de tri. Ensuite, on effectue une seconde passe, où on considère que les caractères accentués sont après les non accentués (dans un ordre bien précis). Mais, pour que la chose soit plus amusante, le tri est fait du dernier au premier caractère dans cette seconde passe, et non plus du premier au dernier. Évidemment, la règle n&#039;est pas la même en allemand.&lt;br /&gt;
&lt;br /&gt;
En 9.1, vous disposez de deux nouvelles fonctionnalités:&lt;br /&gt;
&lt;br /&gt;
* Vous pouvez spécifier la collation dans une requête:&lt;br /&gt;
&lt;br /&gt;
  SELECT * FROM (VALUES (&#039;élève&#039;),(&#039;élevé&#039;),(&#039;élever&#039;),(&#039;Élève&#039;)) AS tmp ORDER BY column1 COLLATE &amp;quot;fr_FR.utf8&amp;quot;;&lt;br /&gt;
   column1 &lt;br /&gt;
  ---------&lt;br /&gt;
   élève&lt;br /&gt;
   Élève&lt;br /&gt;
   élevé&lt;br /&gt;
   élever&lt;br /&gt;
&lt;br /&gt;
* Vous pouvez définir la collation au moment de la déclaration de la table:&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE french_messages (message TEXT COLLATE &amp;quot;fr_FR.utf8&amp;quot;);&lt;br /&gt;
  INSERT INTO french_messages VALUES (&#039;élève&#039;),(&#039;élevé&#039;),(&#039;élever&#039;),(&#039;Élève&#039;);&lt;br /&gt;
  SELECT * FROM french_messages ORDER BY message;&lt;br /&gt;
   message &lt;br /&gt;
  ---------&lt;br /&gt;
   élève&lt;br /&gt;
   Élève&lt;br /&gt;
   élevé&lt;br /&gt;
   élever&lt;br /&gt;
&lt;br /&gt;
Et bien sûr, vous pouvez créer un index sur la colonne message, qui pourra être utilisé pour trier rapidement en français. Par exemple, avec une table plus grande et sans collation précisée:&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE french_messages2 (message TEXT);&lt;br /&gt;
  INSERT INTO french_messages2 SELECT * FROM french_messages, generate_series(1,100000); -- 400k lignes&lt;br /&gt;
  CREATE INDEX idx_french_ctype ON french_messages2 (message COLLATE &amp;quot;fr_FR.utf8&amp;quot;);&lt;br /&gt;
  EXPLAIN SELECT * FROM french_messages2 ORDER BY message;&lt;br /&gt;
                                    QUERY PLAN                                   &lt;br /&gt;
  -------------------------------------------------------------------------------&lt;br /&gt;
   Sort  (cost=62134.28..63134.28 rows=400000 width=32)&lt;br /&gt;
     Sort Key: message&lt;br /&gt;
     -&amp;gt;  Seq Scan on french_messages2  (cost=0.00..5770.00 rows=400000 width=32)&lt;br /&gt;
  &lt;br /&gt;
  EXPLAIN SELECT * FROM french_messages2 ORDER BY message COLLATE &amp;quot;fr_FR.utf8&amp;quot;;&lt;br /&gt;
                                              QUERY PLAN                                            &lt;br /&gt;
  --------------------------------------------------------------------------------------------------&lt;br /&gt;
   Index Scan using idx_french_ctype on french_messages2  (cost=0.00..17139.15 rows=400000 width=8)&lt;br /&gt;
&lt;br /&gt;
==Unlogged Tables/Tables non journalisées==&lt;br /&gt;
&lt;br /&gt;
Ces tables peuvent être utilisées pour stocker des données éphémères. Une table non journalisée est bien plus rapide à écrire, mais elle ne survivra pas à un crash (elle sera tronquée au redémarrage de l&#039;instance en cas de crash).&lt;br /&gt;
&lt;br /&gt;
Elles n&#039;ont pas pas le coût de maintenance associé à la journalisation, elles sont donc bien plus rapides à écrire.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple (idiot, l&#039;exemple):&lt;br /&gt;
&lt;br /&gt;
  # CREATE TABLE test (a int);&lt;br /&gt;
  CREATE TABLE&lt;br /&gt;
  # CREATE UNLOGGED table testu (a int);&lt;br /&gt;
  CREATE TABLE&lt;br /&gt;
  # CREATE INDEX idx_test on test (a);&lt;br /&gt;
  CREATE INDEX&lt;br /&gt;
  # CREATE INDEX idx_testu on testu (a);&lt;br /&gt;
  CREATE INDEX&lt;br /&gt;
  =# \timing &lt;br /&gt;
  Timing is on.&lt;br /&gt;
  =# INSERT INTO test SELECT generate_series(1,1000000);&lt;br /&gt;
  INSERT 0 1000000&lt;br /&gt;
  Time: 17601,201 ms&lt;br /&gt;
  =# INSERT INTO testu SELECT generate_series(1,1000000);&lt;br /&gt;
  INSERT 0 1000000&lt;br /&gt;
  Time: 3439,982 ms&lt;br /&gt;
&lt;br /&gt;
Elles sont donc très efficace pour des données de cache, ou pour n&#039;importe quoi qui puisse être reconstruit après un crash.&lt;br /&gt;
&lt;br /&gt;
==Extensions==&lt;br /&gt;
&lt;br /&gt;
Ce point et le suivant sont l&#039;occasion de présenter plusieurs fonctionnalités d&#039;un coup. Nous allons commencer par installer pg_trgm, et c&#039;est maintenant une extension.&lt;br /&gt;
&lt;br /&gt;
Installons donc pg_trgm. Jusqu&#039;à la 9.0, nous devions lancer un script manuellement. La commande ressemblait à ceci:&lt;br /&gt;
&lt;br /&gt;
  \i /usr/local/pgsql/share/contrib/pg_trgm.sql&lt;br /&gt;
&lt;br /&gt;
Cela entraînait des problèmes de maintenance: les fonctions créées allaient par défaut dans le schéma public, elles étaient envoyées telles quelles dans les fichiers pg_dump, ne se restauraient souvent pas bien, puisqu&#039;elles dépendaient souvent d&#039;objets binaires externes, ou pouvaient changer de définition entre les différentes versions de PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Avec la 9.1, vous pouvez utiliser la commande CREATE EXTENSION:&lt;br /&gt;
&lt;br /&gt;
  CREATE EXTENSION [ IF NOT EXISTS ] extension_name&lt;br /&gt;
      [ WITH ] [ SCHEMA schema ]&lt;br /&gt;
               [ VERSION version ]&lt;br /&gt;
               [ FROM old_version ]&lt;br /&gt;
&lt;br /&gt;
Les options les plus importantes sont &amp;quot;extension_name&amp;quot;, bien sûr, et &amp;quot;schema&amp;quot;: les extensions peuvent être stockées dans un schéma.&lt;br /&gt;
&lt;br /&gt;
Installons donc pg_trgm, pour l&#039;exemple qui va suivre:&lt;br /&gt;
&lt;br /&gt;
  =# CREATE schema extensions;&lt;br /&gt;
  CREATE SCHEMA&lt;br /&gt;
&lt;br /&gt;
  =# CREATE EXTENSION pg_trgm WITH SCHEMA extensions;&lt;br /&gt;
  CREATE EXTENSION&lt;br /&gt;
&lt;br /&gt;
Maintenant, pg_trgm est installé dans un schéma &amp;quot;extensions&amp;quot;. Il sera inclus dans les exports de base correctement, avec la syntaxe CREATE EXTENSION. Par conséquent, si quelque chose change dans l&#039;extension, elle sera restaurée avec la nouvelle définition.&lt;br /&gt;
&lt;br /&gt;
La liste des extensions peut être obtenue comme suit dans psql:&lt;br /&gt;
  \dx&lt;br /&gt;
                                      List of installed extensions&lt;br /&gt;
     Name   | Version |   Schema   |                            Description                            &lt;br /&gt;
  ----------+---------+------------+-------------------------------------------------------------------&lt;br /&gt;
   pg_trgm  | 1.0     | extensions | text similarity measurement and index searching based on trigrams&lt;br /&gt;
   plpgsql  | 1.0     | pg_catalog | PL/pgSQL procedural language&lt;br /&gt;
  (2 rows)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==K-Nearest-Neighbor Indexing/Indexation des k plus proches voisins==&lt;br /&gt;
&lt;br /&gt;
Les index GIST peuvent maintenant être utilisés pour retourner des enregistrements triés, si la notion de distance a une signification pour ces données, et qu&#039;on peut en fournir une définition. Pour le moment, ce travail a été effectué pour le type &#039;point&#039;, l&#039;extension &#039;pg_trgm&#039; et plusieurs types de données btree_gist. Cette fonctionnalité est fournie à tous les types de données, il y en aura donc probablement d&#039;autres qui l&#039;implémenteront dans un futur proche.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;heure, voici donc un exemple avec pg_trgm. pg_trgm utilise des trigrammes pour comparer des chaînes. Voici les trigrammes pour la chaîne &#039;hello&#039;:&lt;br /&gt;
&lt;br /&gt;
  SELECT show_trgm(&#039;hello&#039;);&lt;br /&gt;
              show_trgm            &lt;br /&gt;
  ---------------------------------&lt;br /&gt;
   {&amp;quot;  h&amp;quot;,&amp;quot; he&amp;quot;,ell,hel,llo,&amp;quot;lo &amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Les trigrammes sont utilisés pour évaluer la similarité (entre 0 et 1) entre des chaînes. Il y a donc une notion de distance, et on peut la définir par &#039;1-similarité&#039;.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple. La table contient 5 millions d&#039;enregistrements et pèse 750Mo.&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE test_trgm ( text_data text);&lt;br /&gt;
&lt;br /&gt;
  CREATE INDEX test_trgm_idx on test_trgm using gist (text_data extensions.gist_trgm_ops);&lt;br /&gt;
&lt;br /&gt;
Jusqu&#039;à la 9.0, si nous voulons les deux text_data les plus proches de &#039;hello&#039; dans la table, la requête était celle-ci:&lt;br /&gt;
&lt;br /&gt;
  SELECT text_data, similarity(text_data, &#039;hello&#039;)&lt;br /&gt;
  FROM test_trgm &lt;br /&gt;
  WHERE text_data % &#039;hello&#039;&lt;br /&gt;
  ORDER BY similarity(text_data, &#039;hello&#039;)&lt;br /&gt;
  LIMIT 2;&lt;br /&gt;
&lt;br /&gt;
Sur cette base de test, il faut environ 2 secondes pour obtenir le résultat.&lt;br /&gt;
&lt;br /&gt;
Avec 9.1 et la nouvelle fonctionnalité KNN, on peut l&#039;écrire comme ceci:&lt;br /&gt;
&lt;br /&gt;
  SELECT text_data, text_data &amp;lt;-&amp;gt; &#039;hello&#039;&lt;br /&gt;
  FROM test_trgm &lt;br /&gt;
  ORDER BY text_data &amp;lt;-&amp;gt; &#039;hello&#039;&lt;br /&gt;
  LIMIT 2;&lt;br /&gt;
&lt;br /&gt;
L&#039;opérateur &amp;lt;-&amp;gt; est l&#039;opérateur de distance. La requête dure 20 millisecondes, et passe par l&#039;index pour récupérer directement les deux meilleurs enregistrements.&lt;br /&gt;
&lt;br /&gt;
Tant que nous parlons de pg_trgm, une autre fonctionnalité apparaissant en 9.1 est que les opérateurs LIKE et ILIKE peuvent maintenant utiliser automatiquement un index trgm. Toujours sur la même table:&lt;br /&gt;
&lt;br /&gt;
  SELECT text_data&lt;br /&gt;
  FROM test_trgm&lt;br /&gt;
  WHERE text_data like &#039;%hello%&#039;;&lt;br /&gt;
&lt;br /&gt;
utilise l&#039;index test_trgm_idx (au lieu de parcourir la table entière).&lt;br /&gt;
&lt;br /&gt;
Attention tout de même: les index trgm sont très volumineux, et coûteux à maintenir.&lt;br /&gt;
&lt;br /&gt;
==Serializable Snapshot Isolation/Isolation par Instantanés Sérialisable/SSI==&lt;br /&gt;
&lt;br /&gt;
Cette fonctionnalité est très utile si vous avez besoin que toutes vos transactions se comportent comme si elles s&#039;exécutaient les unes après les autres, sans trop sacrifier les performances, comme c&#039;est le cas pour la plupart des implémentations d&#039;isolation «sérialisable» actuelles (elles s&#039;appuient habituellement sur le verrouillage de tous les enregistrements accédés).&lt;br /&gt;
&lt;br /&gt;
Comme cette fonctionnalité est complexe à montrer et à expliquer, voici un lien vers l&#039;explication complète de cette fonctionnalité: http://wiki.postgresql.org/wiki/SSI/fr&lt;br /&gt;
&lt;br /&gt;
==Writeable Common Table Expressions/Expression de Table Commune en Écriture==&lt;br /&gt;
&lt;br /&gt;
Cela étend la syntaxe WITH introduite en 8.4. Dorénavant, des requêtes de modification de données peuvent être utilisées dans la partie WITH de la requête, et les données retournées par cet ordre utilisées.&lt;br /&gt;
&lt;br /&gt;
Imaginons que nous voulons archiver tous les enregistrements correspondant à %hello% de la table test_trgm:&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE old_text_data (text_data text);&lt;br /&gt;
  &lt;br /&gt;
  WITH deleted AS (DELETE FROM test_trgm WHERE text_data like &#039;%hello%&#039; RETURNING text_data)&lt;br /&gt;
  INSERT INTO old_text_data SELECT * FROM deleted;&lt;br /&gt;
&lt;br /&gt;
Tout en une seule requête (donc en une seule passe sur test_trgm).&lt;br /&gt;
&lt;br /&gt;
==SE-Postgres==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL est la seule base qui propose une intégration complète avec le framework de sécurisation SELinux. Sécurité de niveau militaire pour votre base de données.&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==PGXN==&lt;br /&gt;
&lt;br /&gt;
[http://pgxn.org/ PGXN] est le PostgreSQL Extension Network (le réseau d&#039;extensions PostgreSQL), un système de distribution centralisée pour les bibliothèques d&#039;extension PostgreSQL open-source. Les auteurs d&#039;extensions peuvent [http://manager.pgxn.org/ soumettre leur travail] en même temps que [http://pgxn.org/spec/ les métadonnées le décrivant]: les packages et leur documentation sont [http://pgxn.org/ indexés] et distribués sur plusieurs serveurs. Le système peut être utilisé au travers d&#039;une interface web ou en utilisant des clients en ligne de commande grâce à une [https://github.com/pgxn/pgxn-api/wiki API simple].&lt;br /&gt;
&lt;br /&gt;
Un [http://pgxnclient.projects.postgresql.org/ client PGXN] complet est en cours de développement. Il peut être installé avec:&lt;br /&gt;
&lt;br /&gt;
 $ easy_install pgxnclient&lt;br /&gt;
 Searching for pgxnclient&lt;br /&gt;
 ...&lt;br /&gt;
 Best match: pgxnclient 0.2.1&lt;br /&gt;
 Processing pgxnclient-0.2.1-py2.6.egg&lt;br /&gt;
 ...&lt;br /&gt;
 Installed pgxnclient-0.2.1-py2.6.egg&lt;br /&gt;
&lt;br /&gt;
Il permet entre autres de rechercher des extensions sur le site web:&lt;br /&gt;
&lt;br /&gt;
 $ pgxn search pair&lt;br /&gt;
 pair 0.1.3&lt;br /&gt;
     ... Usage There are two ways to construct key/value *pairs*: Via the&lt;br /&gt;
     *pair*() function: % SELECT *pair*(&#039;foo&#039;, &#039;bar&#039;); *pair* ------------&lt;br /&gt;
     (foo,bar) Or by using the ~&amp;gt; operator: % SELECT &#039;foo&#039; ~&amp;gt; &#039;bar&#039;;&lt;br /&gt;
     *pair*...&lt;br /&gt;
 &lt;br /&gt;
 semver 0.2.2&lt;br /&gt;
     *pair* │ 0.1.0 │ Key/value *pair* data type Note that &amp;quot;0.35.0b1&amp;quot; is less&lt;br /&gt;
     than &amp;quot;0.35.0&amp;quot;, as required by the specification. Use ORDER BY to get&lt;br /&gt;
     more of a feel for semantic version ordering rules: SELECT...&lt;br /&gt;
&lt;br /&gt;
Pour compiler et installer sur le système:&lt;br /&gt;
&lt;br /&gt;
 $ pgxn install pair&lt;br /&gt;
 INFO: best version: pair 0.1.3&lt;br /&gt;
 INFO: saving /tmp/tmpezwyEO/pair-0.1.3.zip&lt;br /&gt;
 INFO: unpacking: /tmp/tmpezwyEO/pair-0.1.3.zip&lt;br /&gt;
 INFO: building extension&lt;br /&gt;
 ...&lt;br /&gt;
 INFO: installing extension&lt;br /&gt;
 [sudo] password for piro: &lt;br /&gt;
 /bin/mkdir -p &#039;/usr/local/pg91b1/share/postgresql/extension&#039;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Et pour les charger en tant qu&#039;extension de base de données:&lt;br /&gt;
&lt;br /&gt;
 $ pgxn load -d mydb pair&lt;br /&gt;
 INFO: best version: pair 0.1.3&lt;br /&gt;
 CREATE EXTENSION&lt;br /&gt;
&lt;br /&gt;
==SQL/MED==&lt;br /&gt;
&lt;br /&gt;
Le support de SQL/MED (Management of External Data ou Gestion de Données Externes) a été démarré en 8.4. Maintenant, PostgreSQL peut définir des tables externes, ce qui est le but principal de SQL/MED: accéder à des données externes. Voici un exemple, s&#039;appuyant sur l&#039;extension file_fdw.&lt;br /&gt;
&lt;br /&gt;
Nous allons accéder à un fichier CSV au travers d&#039;une table.&lt;br /&gt;
&lt;br /&gt;
  CREATE EXTENSION file_fdw WITH SCHEMA extensions;&lt;br /&gt;
  \dx+ file_fdw&lt;br /&gt;
            Objects in extension &amp;quot;file_fdw&amp;quot;&lt;br /&gt;
                   Object Description                 &lt;br /&gt;
  ----------------------------------------------------&lt;br /&gt;
   foreign-data wrapper file_fdw&lt;br /&gt;
   function extensions.file_fdw_handler()&lt;br /&gt;
   function extensions.file_fdw_validator(text[],oid)&lt;br /&gt;
&lt;br /&gt;
L&#039;étape suivante est optionnelle. Elle est là juste pour montrer la syntaxe de &#039;CREATE FOREIGN DATA WRAPPER&#039; (le foreign data wrapper étant en quelque sorte le connecteur pour un type de données externes):&lt;br /&gt;
&lt;br /&gt;
  =# CREATE FOREIGN DATA WRAPPER file_data_wrapper HANDLER extensions.file_fdw_handler;&lt;br /&gt;
  CREATE FOREIGN DATA WRAPPER&lt;br /&gt;
&lt;br /&gt;
L&#039;extension crée déjà un «foreign data wrapper» appelé file_fdw. Nous allons l&#039;utiliser à partir de maintenant.&lt;br /&gt;
&lt;br /&gt;
Nous avons besoin de créer un &#039;server&#039;. Comme les données que nous allons récupérer ne proviennent que d&#039;un fichier, cela semble un peu inutile, mais SQL/MED est aussi capable de gérer des bases de données distantes.&lt;br /&gt;
&lt;br /&gt;
  CREATE SERVER file FOREIGN DATA WRAPPER file_fdw ;&lt;br /&gt;
  CREATE SERVER&lt;br /&gt;
&lt;br /&gt;
Maintenant, attachons un fichier statistical_data.csv à une table statistical_data:&lt;br /&gt;
&lt;br /&gt;
  CREATE FOREIGN TABLE statistical_data (field1 numeric, field2 numeric) server file options (filename &#039;/tmp/statistical_data.csv&#039;, format &#039;csv&#039;, delimiter &#039;;&#039;) ;&lt;br /&gt;
  CREATE FOREIGN TABLE&lt;br /&gt;
  marc=# SELECT * from statistical_data ;&lt;br /&gt;
   field1 | field2 &lt;br /&gt;
  --------+--------&lt;br /&gt;
      0.1 |    0.2&lt;br /&gt;
      0.2 |    0.4&lt;br /&gt;
      0.3 |    0.9&lt;br /&gt;
      0.4 |    1.6&lt;br /&gt;
&lt;br /&gt;
Pour le moment, les foreign tables ne sont accessibles qu&#039;en SELECT.&lt;br /&gt;
&lt;br /&gt;
TODO: does this also work with dblink ?&lt;br /&gt;
&lt;br /&gt;
=Modifications pouvant entraîner des régressions=&lt;br /&gt;
&lt;br /&gt;
Les points suivants doivent être vérifiés lors d&#039;une migration vers la version 9.1.&lt;br /&gt;
&lt;br /&gt;
* La valeur par défaut de &#039;&#039;standard_conforming_strings&#039;&#039; est devenue &#039;&#039;on&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Traditionnellement, PostgreSQL ne traitait pas les littéraux de type chaîne (&#039;..&#039;) comme le spécifie le standard SQL: les anti-slashs (&#039;\&#039;) étaient considérés comme des caractères d&#039;échappement, ce qui entraînait que le caractère suivant un &#039;\&#039; était interprété. Par exemple, &#039;\n&#039; est un caractère newline, &#039;\\&#039; est le caractère &#039;\&#039; lui-même. Cela s&#039;apparentait davantage à la syntaxe du C.&lt;br /&gt;
&lt;br /&gt;
En 9.1, &#039;&#039;standard_conforming_strings&#039;&#039; est maintenant par défaut à &#039;&#039;on&#039;&#039;, ce qui signifie que les littéraux de type chaîne sont maintenant traités comme spécifié par le standard SQL. Ce qui signifie que les caractères apostrophe doivent maintenant être protégés avec une deuxième apostrophe plutôt qu&#039;un anti-slash, et que les anti-slashs ne sont plus des caractères d&#039;échappement.&lt;br /&gt;
&lt;br /&gt;
Par exemple, quand précédemment on écrivait &amp;lt;nowiki&amp;gt;&#039;l\&#039;heure&#039;, on doit maintenant écrire &#039;l&#039;&#039;heure&#039;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Certaines subtilités sont à connaître, même si elles ne sont pas apparues en 9.1:&lt;br /&gt;
&lt;br /&gt;
:* L&#039;ancienne syntaxe est toujours disponible. Mettez simplement un E devant le guillemet de départ: E&#039;l\&#039;heure&#039;&lt;br /&gt;
:* &#039;&#039;standard_conforming_strings&#039;&#039; peut toujours être remis à &#039;&#039;off&#039;&#039;&lt;br /&gt;
:* Beaucoup de langages de programmation font déjà ce qu&#039;il faut, si vous leur demandez de faire le travail d&#039;échappement pour vous. Par exemple, la fonction PQescapeLiteral de la libpq détecte automatiquement la valeur de standard_conforming_strings et s&#039;y adapte.&lt;br /&gt;
Toutefois, vérifiez bien que votre programme est prêt à supporter ce changement de comportement.&lt;br /&gt;
&lt;br /&gt;
* les conversions de type de données de style &#039;fonction&#039; ou &#039;attribut&#039; ne sont plus autorisés pour les types composites&lt;br /&gt;
&lt;br /&gt;
Depuis la version 8.4, il est possible de convertir à peu près n&#039;importe quoi vers son format texte.&lt;br /&gt;
Essayons cela avec la foreign table définie précédemment:&lt;br /&gt;
&lt;br /&gt;
  =# SELECT cast(statistical_data as text) from statistical_data ;&lt;br /&gt;
   statistical_data &lt;br /&gt;
  ------------------&lt;br /&gt;
   (0.1,0.2)&lt;br /&gt;
   (0.2,0.4)&lt;br /&gt;
   (0.3,0.9)&lt;br /&gt;
   (0.4,1.6)&lt;br /&gt;
  (4 rows)&lt;br /&gt;
&lt;br /&gt;
Le problème c&#039;est que les versions 8.4 et 9.0 nous donnent 4 syntaxes différentes pour effectuer cela:&lt;br /&gt;
:* SELECT cast(statistical_data as text) from statistical_data ;&lt;br /&gt;
:* SELECT statistical_data::text from statistical_data;&lt;br /&gt;
:* SELECT statistical_data.text from statistical_data;&lt;br /&gt;
:* SELECT text(statistical_data) from statistical_data;&lt;br /&gt;
les deux dernières syntaxes ne sont plus autorisées pour les types composites (comme un enregistrement de table): ils étaient bien trop faciles à utiliser accidentellement.&lt;br /&gt;
&lt;br /&gt;
* Les vérifications de conversion sur les domaines définis à partir de tableaux ont été renforcées&lt;br /&gt;
&lt;br /&gt;
Maintenant, PostgreSQL vérifie quand vous faites une mise à jour d&#039;un élément d&#039;une contrainte définie sur un tableau.&lt;br /&gt;
&lt;br /&gt;
Voici ce qui se passait en 9.0:&lt;br /&gt;
&lt;br /&gt;
  =#CREATE DOMAIN test_dom as int[] check (value[1] &amp;gt; 0);&lt;br /&gt;
  CREATE DOMAIN&lt;br /&gt;
  =#SELECT &#039;{-1,0,0,0,0}&#039;::test_dom;&lt;br /&gt;
  ERROR:  value for domain test_dom violates check constraint &amp;quot;test_dom_check&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Jusque là, tout va bien.&lt;br /&gt;
&lt;br /&gt;
  =#CREATE TABLE test_dom_table (test test_dom);&lt;br /&gt;
  CREATE TABLE&lt;br /&gt;
  =# INSERT INTO test_dom_table values (&#039;{1,0,0,0,0}&#039;);&lt;br /&gt;
  INSERT 0 1&lt;br /&gt;
  =# UPDATE test_dom_table SET test[1]=-1;&lt;br /&gt;
  UPDATE 1&lt;br /&gt;
&lt;br /&gt;
Par contre, là, c&#039;est anormal… la contrainte check nous interdit de le faire. C&#039;est maintenant impossible en 9.1, la vérification est faite correctement.&lt;br /&gt;
&lt;br /&gt;
* string_to_array() retourne maintenant un tableau vide pour une chaîne d&#039;entrée de longueur zéro. Précédemment, cela retournait NULL.&lt;br /&gt;
&lt;br /&gt;
  =# SELECT string_to_array(&#039;&#039;,&#039;whatever&#039;);&lt;br /&gt;
   string_to_array &lt;br /&gt;
  -----------------&lt;br /&gt;
   {}&lt;br /&gt;
&lt;br /&gt;
* string_to_array() découpe maintenant une chaîne en ses caractères si le séparateur est NULL. Précédemment, cela retournait NULL:&lt;br /&gt;
&lt;br /&gt;
  =# SELECT string_to_array(&#039;foo&#039;,NULL);&lt;br /&gt;
   string_to_array &lt;br /&gt;
  -----------------&lt;br /&gt;
   {f,o,o}&lt;br /&gt;
&lt;br /&gt;
* PL/pgSQL&#039;s RAISE sans paramètre a changé de comportement.&lt;br /&gt;
&lt;br /&gt;
C&#039;est un cas assez rare, mais qui piégeait les utilisateurs habitués au comportement d&#039;Oracle sur ce point.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple:&lt;br /&gt;
&lt;br /&gt;
  CREATE OR REPLACE FUNCTION raise_demo () returns void language plpgsql as $$&lt;br /&gt;
  BEGIN&lt;br /&gt;
    RAISE NOTICE &#039;Main body&#039;;&lt;br /&gt;
    BEGIN&lt;br /&gt;
      RAISE NOTICE &#039;Sub-block&#039;;&lt;br /&gt;
      RAISE EXCEPTION serialization_failure; -- Simulate a problem&lt;br /&gt;
    EXCEPTION WHEN serialization_failure THEN&lt;br /&gt;
      BEGIN&lt;br /&gt;
        -- Maybe we had a serialization error&lt;br /&gt;
        -- Won&#039;t happen here of course&lt;br /&gt;
        RAISE DEBUG &#039;There was probably a serialization failure. It could be because of...&#039;;&lt;br /&gt;
        -- ..&lt;br /&gt;
        -- If I get there let&#039;s pretend I couldn&#039;t find a solution to the error&lt;br /&gt;
        RAISE; -- Let&#039;s forward the error&lt;br /&gt;
      EXCEPTION WHEN OTHERS THEN&lt;br /&gt;
          -- This should capture everything&lt;br /&gt;
          RAISE EXCEPTION &#039;Couldn t figure what to do with the error&#039;;&lt;br /&gt;
      END;&lt;br /&gt;
    END;&lt;br /&gt;
  END;&lt;br /&gt;
  $$&lt;br /&gt;
  ;&lt;br /&gt;
CREATE FUNCTION&lt;br /&gt;
&lt;br /&gt;
En 9.0, vous aurez ce résultat (avec &#039;&#039;client_min_messages&#039;&#039; à &#039;&#039;debug&#039;&#039;):&lt;br /&gt;
  =# SELECT raise_demo();&lt;br /&gt;
  NOTICE:  Main body&lt;br /&gt;
  NOTICE:  Sub-block&lt;br /&gt;
  DEBUG:  There was probably a serialization failure. It could be because of...&lt;br /&gt;
  ERROR:  serialization_failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En 9.1:&lt;br /&gt;
  =# SELECT raise_demo();&lt;br /&gt;
  NOTICE:  Main body&lt;br /&gt;
  NOTICE:  Sub-block&lt;br /&gt;
  DEBUG:  There was probably a serialization failure. It could be because of...&lt;br /&gt;
  ERROR:  Couldn t figure what to do with the error&lt;br /&gt;
&lt;br /&gt;
La différence est que RAISE sans paramètres, en 9.0, ramène le déroulement du code à l&#039;endroit où l&#039;EXCEPTION s&#039;est déclenchée. En 9.1, le RAISE continue dans le bloc dans lequel il se produit, le bloc BEGIN intérieur n&#039;est pas quitté quand le RAISE se déclenche. Son bloc d&#039;exception est exécuté.&lt;br /&gt;
&lt;br /&gt;
=Améliorations liées aux performances=&lt;br /&gt;
&lt;br /&gt;
* Les écritures synchrones ont été optimisées pour moins charger le système de fichiers.&lt;br /&gt;
&lt;br /&gt;
Ce point est difficile à mettre en évidence dans ce document. Mais la performance et les temps de réponse (la latence) ont été fortement améliorés quand la charge en écriture est élevée.&lt;br /&gt;
&lt;br /&gt;
* Les tables filles (par héritage) dans les requêtes peuvent maintenant retourner des résultats triés de façon utile, ce qui permet des optimisations de MIN/MAX pour l&#039;héritage (et donc le partitionnement).&lt;br /&gt;
&lt;br /&gt;
Si vous utilisez beaucoup d&#039;héritage, dans un contexte de partitionnement en particulier, vous allez adorer cette optimisation.&lt;br /&gt;
&lt;br /&gt;
Le planificateur de requête est devenu bien plus intelligent dans le cas suivant.&lt;br /&gt;
&lt;br /&gt;
Créons un schéma factice:&lt;br /&gt;
&lt;br /&gt;
  =# CREATE TABLE parent (a int);&lt;br /&gt;
  CREATE TABLE&lt;br /&gt;
  =# CREATE TABLE children_1 ( check (a between 1 and 10000000)) inherits (parent);&lt;br /&gt;
  CREATE TABLE&lt;br /&gt;
  =# CREATE TABLE children_2 ( check (a between 10000001 and 20000000)) inherits (parent);&lt;br /&gt;
  CREATE TABLE&lt;br /&gt;
  =# INSERT INTO children_1 select generate_series(1,10000000);&lt;br /&gt;
  INSERT 0 10000000&lt;br /&gt;
  =# INSERT INTO children_2 select generate_series(10000001,20000000);&lt;br /&gt;
  INSERT 0 10000000&lt;br /&gt;
  =# CREATE INDEX test_1 ON children_1 (a);&lt;br /&gt;
  CREATE INDEX;&lt;br /&gt;
  =# CREATE INDEX test_2 ON children_2 (a);&lt;br /&gt;
  CREATE INDEX;&lt;br /&gt;
&lt;br /&gt;
Et demandons les 50 plus grandes valeurs de a.&lt;br /&gt;
&lt;br /&gt;
  SELECT * from parent order by a desc limit 50;&lt;br /&gt;
&lt;br /&gt;
Cela prend, sur une petite machine de test, 13 secondes sur une base en 9.0, et 0.8 millisecondes sur une base en 9.1.&lt;br /&gt;
&lt;br /&gt;
Le plan en 9.0 est:&lt;br /&gt;
&lt;br /&gt;
   Limit  (cost=952993.36..952993.48 rows=50 width=4)&lt;br /&gt;
     -&amp;gt;  Sort  (cost=952993.36..1002999.24 rows=20002354 width=4)&lt;br /&gt;
           Sort Key: public.parent.a&lt;br /&gt;
           -&amp;gt;  Result  (cost=0.00..288529.54 rows=20002354 width=4)&lt;br /&gt;
                 -&amp;gt;  Append  (cost=0.00..288529.54 rows=20002354 width=4)&lt;br /&gt;
                       -&amp;gt;  Seq Scan on parent  (cost=0.00..34.00 rows=2400 width=4)&lt;br /&gt;
                       -&amp;gt;  Seq Scan on children_1 parent  (cost=0.00..144247.77 rows=9999977 width=4)&lt;br /&gt;
                       -&amp;gt;  Seq Scan on children_2 parent  (cost=0.00..144247.77 rows=9999977 width=4)&lt;br /&gt;
&lt;br /&gt;
Le plan en 9.1 est:&lt;br /&gt;
&lt;br /&gt;
   Limit  (cost=113.75..116.19 rows=50 width=4)&lt;br /&gt;
     -&amp;gt;  Result  (cost=113.75..975036.98 rows=20002400 width=4)&lt;br /&gt;
           -&amp;gt;  Merge Append  (cost=113.75..975036.98 rows=20002400 width=4)&lt;br /&gt;
                 Sort Key: public.parent.a&lt;br /&gt;
                 -&amp;gt;  Sort  (cost=113.73..119.73 rows=2400 width=4)&lt;br /&gt;
                       Sort Key: public.parent.a&lt;br /&gt;
                       -&amp;gt;  Seq Scan on parent  (cost=0.00..34.00 rows=2400 width=4)&lt;br /&gt;
                 -&amp;gt;  Index Scan Backward using test_1 on children_1 parent  (cost=0.00..303940.35 rows=10000000 width=4)&lt;br /&gt;
                 -&amp;gt;  Index Scan Backward using test_2 on children_2 parent  (cost=0.00..303940.35 rows=10000000 width=4)&lt;br /&gt;
&lt;br /&gt;
Le plan en 9.0 signifie: je vais prendre tous les enregistrements de toutes les tables, les trier, et ensuite retourner les 50 plus grands.&lt;br /&gt;
&lt;br /&gt;
Le plan en 9.1 signifie: je vais prendre les enregistrements de chaque table dans l&#039;ordre trié, en utilisant leurs index s&#039;il y en a, les fusionner comme ils arrivent, et retourner les 50 premiers.&lt;br /&gt;
&lt;br /&gt;
C&#039;était un piège très fréquent, ce genre de requête devenait extrêmement lent quand on partitionnait une table. Et il était un peu compliqué de le contourner par réécriture de requête.&lt;br /&gt;
&lt;br /&gt;
* Les algorithmes de hachage peuvent maintenant être utilisés pour les full outer join, et pour les tableaux.&lt;br /&gt;
&lt;br /&gt;
Il est très simple de démontrer ce point (pour les full outer join):&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE test1 (a int);&lt;br /&gt;
  CREATE TABLE test2 (a int);&lt;br /&gt;
  INSERT INTO test1 SELECT generate_series(1,100000);&lt;br /&gt;
  INSERT INTO test2 SELECT generate_series(100,1000);&lt;br /&gt;
&lt;br /&gt;
Nous avons donc une grosse table test1 et une petite table test2.&lt;br /&gt;
&lt;br /&gt;
En 9.0, la requête est faite avec ce plan:&lt;br /&gt;
&lt;br /&gt;
  EXPLAIN ANALYZE SELECT * FROM test1 FULL OUTER JOIN test2 USING (a);&lt;br /&gt;
                                                          QUERY PLAN                                                        &lt;br /&gt;
  --------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
   Merge Full Join  (cost=11285.07..11821.07 rows=100000 width=8) (actual time=330.092..651.618 rows=100000 loops=1)&lt;br /&gt;
     Merge Cond: (test1.a = test2.a)&lt;br /&gt;
     -&amp;gt;  Sort  (cost=11116.32..11366.32 rows=100000 width=4) (actual time=327.926..446.814 rows=100000 loops=1)&lt;br /&gt;
           Sort Key: test1.a&lt;br /&gt;
           Sort Method:  external sort  Disk: 1368kB&lt;br /&gt;
           -&amp;gt;  Seq Scan on test1  (cost=0.00..1443.00 rows=100000 width=4) (actual time=0.011..119.246 rows=100000 loops=1)&lt;br /&gt;
     -&amp;gt;  Sort  (cost=168.75..174.75 rows=2400 width=4) (actual time=2.156..3.208 rows=901 loops=1)&lt;br /&gt;
           Sort Key: test2.a&lt;br /&gt;
           Sort Method:  quicksort  Memory: 67kB&lt;br /&gt;
           -&amp;gt;  Seq Scan on test2  (cost=0.00..34.00 rows=2400 width=4) (actual time=0.009..1.066 rows=901 loops=1&lt;br /&gt;
   Total runtime: 733.368 ms&lt;br /&gt;
&lt;br /&gt;
Voici le nouveau plan, en 9.1 cette fois-ci:&lt;br /&gt;
&lt;br /&gt;
  --------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
   Hash Full Join  (cost=24.27..1851.28 rows=100000 width=8) (actual time=2.536..331.547 rows=100000 loops=1)&lt;br /&gt;
     Hash Cond: (test1.a = test2.a)&lt;br /&gt;
     -&amp;gt;  Seq Scan on test1  (cost=0.00..1443.00 rows=100000 width=4) (actual time=0.014..119.884 rows=100000 loops=1)&lt;br /&gt;
     -&amp;gt;  Hash  (cost=13.01..13.01 rows=901 width=4) (actual time=2.505..2.505 rows=901 loops=1)&lt;br /&gt;
           Buckets: 1024  Batches: 1  Memory Usage: 32kB&lt;br /&gt;
           -&amp;gt;  Seq Scan on test2  (cost=0.00..13.01 rows=901 width=4) (actual time=0.017..1.186 rows=901 loops=1)&lt;br /&gt;
   Total runtime: 412.735 ms&lt;br /&gt;
&lt;br /&gt;
Le plan en 9.0 effectue 2 tris. Celui en 9.1 n&#039;a besoin que d&#039;un hachage de la plus petite table.&lt;br /&gt;
&lt;br /&gt;
Le temps d&#039;exécution est divisé par presque 2. Une autre propriété intéressante est que le nouveau plan a un coût de démarrage bien plus faible: le premier enregistrement est retourné après 2 millisecondes, alors qu&#039;il en faut 330 à l&#039;ancien plan.&lt;br /&gt;
&lt;br /&gt;
  SELECT * from test1 full outer join test2 using (a) LIMIT 10&lt;br /&gt;
&lt;br /&gt;
prend 330ms en 9.0, et 3ms en 9.1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration=&lt;br /&gt;
&lt;br /&gt;
* Paramétrage automatique de wal_buffers.&lt;br /&gt;
Le paramètre wal_buffers est maintenant positionné automatiquement quand sa valeur est -1, sa nouvelle valeur par défaut. Il est positionné automatiquement à 1/32ème de shared_buffers, avec un maximum à 16Mo. Un paramètre de moins à gérer…&lt;br /&gt;
&lt;br /&gt;
* Enregistrement des dernières remises à zéro dans les vues de statistiques de base de données et de background writer.&lt;br /&gt;
Vous pouvez maintentant savoir quand les statistiques ont été réinitialisées. Pour une base de données, par exemple:&lt;br /&gt;
&lt;br /&gt;
  SELECT datname, stats_reset FROM pg_stat_database;&lt;br /&gt;
    datname  |          stats_reset          &lt;br /&gt;
  -----------+-------------------------------&lt;br /&gt;
   template1 | &lt;br /&gt;
   template0 | &lt;br /&gt;
   postgres  | 2011-05-11 19:22:05.946641+02&lt;br /&gt;
   marc      | 2011-05-11 19:22:09.133483+02&lt;br /&gt;
&lt;br /&gt;
* Nouvelles colonnes montrant le nombre d&#039;opérations de vacuum et d&#039;analyze dans les vues pg_stat_*_tables.&lt;br /&gt;
&lt;br /&gt;
C&#039;est maintenant bien plus facile de savoir quelle table attire l&#039;attention d&#039;autovacuum:&lt;br /&gt;
&lt;br /&gt;
  SELECT relname, last_vacuum, vacuum_count, last_autovacuum, autovacuum_count, last_analyze, analyze_count, last_autoanalyze, autoanalyze_count&lt;br /&gt;
  FROM pg_stat_user_tables &lt;br /&gt;
  WHERE relname in (&#039;test1&#039;,&#039;test2&#039;);&lt;br /&gt;
   relname | last_vacuum | vacuum_count | last_autovacuum | autovacuum_count | last_analyze | analyze_count |       last_autoanalyze        | autoanalyze_count &lt;br /&gt;
  ---------+-------------+--------------+-----------------+------------------+--------------+---------------+-------------------------------+-------------------&lt;br /&gt;
   test1   |             |            0 |                 |                0 |              |             0 | 2011-05-22 15:51:50.48562+02  |                 1&lt;br /&gt;
   test2   |             |            0 |                 |                0 |              |             0 | 2011-05-22 15:52:50.325494+02 |                 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fonctionnalités SQL et PL/PgSQL=&lt;br /&gt;
&lt;br /&gt;
* Group by peut deviner des colonnes manquantes&lt;br /&gt;
&lt;br /&gt;
  CREATE TABLE entities (entity_name text primary key, entity_address text);&lt;br /&gt;
  CREATE TABLE employees (employee_name text primary key, entity_name text references entities (entity_name));&lt;br /&gt;
  INSERT INTO entities VALUES (&#039;HR&#039;, &#039;address1&#039;);&lt;br /&gt;
  INSERT INTO entities VALUES (&#039;SALES&#039;, &#039;address2&#039;);&lt;br /&gt;
  INSERT INTO employees VALUES (&#039;Smith&#039;, &#039;HR&#039;);&lt;br /&gt;
  INSERT INTO employees VALUES (&#039;Jones&#039;, &#039;HR&#039;);&lt;br /&gt;
  INSERT INTO employees VALUES (&#039;Taylor&#039;, &#039;SALES&#039;);&lt;br /&gt;
  INSERT INTO employees VALUES (&#039;Brown&#039;, &#039;SALES&#039;);&lt;br /&gt;
&lt;br /&gt;
On peut maintenant écrire:&lt;br /&gt;
&lt;br /&gt;
  SELECT count(*), entity_name, address&lt;br /&gt;
  FROM entities JOIN employees using (entity_name)&lt;br /&gt;
  GROUP BY entity_name;&lt;br /&gt;
   count | entity_name | address  &lt;br /&gt;
  -------+-------------+----------&lt;br /&gt;
       2 | HR          | address1&lt;br /&gt;
       2 | SALES       | address2&lt;br /&gt;
&lt;br /&gt;
En 9.0, il aurait fallu grouper aussi sur address. Comme entity_name est la clé primaire d&#039;entities, address est fonctionnellement dépendant d&#039;entity_name, il est donc évident que PostgreSQL doit aussi regrouper sur address.&lt;br /&gt;
&lt;br /&gt;
* De nouvelles valeurs peuvent être ajoutées à un type enum par ALTER TYPE.&lt;br /&gt;
&lt;br /&gt;
  =# CREATE TYPE package_status AS ENUM (&#039;RECEIVED&#039;, &#039;DELIVERED&#039;);  ;&lt;br /&gt;
  CREATE TYPE&lt;br /&gt;
  =# ALTER TYPE package_status ADD VALUE &#039;READY FOR DELIVERY&#039; AFTER &#039;RECEIVED&#039;;&lt;br /&gt;
  ALTER TYPE&lt;br /&gt;
&lt;br /&gt;
Jusqu&#039;à la 9.0, il était nécessaire de détruire le type et en créer un nouveau. Cela impliquait de détruire toutes les colonnes utilisant ce type. C&#039;était une des principales raisons pour lesquelles les enum étaient peu utilisés.&lt;br /&gt;
&lt;br /&gt;
* Les types composites peuvent être modifiés par ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE.&lt;br /&gt;
&lt;br /&gt;
Créons un type composite simple:&lt;br /&gt;
&lt;br /&gt;
  =#CREATE TYPE package AS (destination text);&lt;br /&gt;
&lt;br /&gt;
Créons une fonction vide utilisant ce type:&lt;br /&gt;
&lt;br /&gt;
  =#CREATE FUNCTION package_exists (pack package) RETURNS boolean LANGUAGE plpgsql AS $$&lt;br /&gt;
  BEGIN&lt;br /&gt;
    RETURN true;&lt;br /&gt;
  END&lt;br /&gt;
  $$&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
Testons cette fonction:&lt;br /&gt;
&lt;br /&gt;
  =#SELECT package_exists(row(&#039;test&#039;));&lt;br /&gt;
   package_exists &lt;br /&gt;
  ----------------&lt;br /&gt;
   t&lt;br /&gt;
&lt;br /&gt;
Cela fonctionne.&lt;br /&gt;
&lt;br /&gt;
Il est maintenant possible de modifier le type &#039;package&#039;:&lt;br /&gt;
&lt;br /&gt;
  =#ALTER TYPE package ADD ATTRIBUTE received boolean;&lt;br /&gt;
&lt;br /&gt;
le type a changé:&lt;br /&gt;
&lt;br /&gt;
  =#SELECT package_exists(row(&#039;test&#039;));&lt;br /&gt;
  ERROR:  cannot cast type record to package&lt;br /&gt;
  LINE 1: SELECT package_exists(row(&#039;test&#039;));&lt;br /&gt;
                                ^&lt;br /&gt;
  DETAIL:  Input has too few columns.&lt;br /&gt;
  =# SELECT package_exists(row(&#039;test&#039;,true));&lt;br /&gt;
   package_exists &lt;br /&gt;
  ----------------&lt;br /&gt;
   t&lt;br /&gt;
&lt;br /&gt;
* ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX&lt;br /&gt;
&lt;br /&gt;
Cela sera certainement utilisé principalement pour créer une clé unique ou primaire sans verrouiller une table pendant trop longtemps:&lt;br /&gt;
&lt;br /&gt;
  =# CREATE UNIQUE INDEX CONCURRENTLY idx_pk ON test_pk (a);&lt;br /&gt;
  CREATE INDEX&lt;br /&gt;
  =# ALTER TABLE test_pk ADD primary key using index idx_pk;&lt;br /&gt;
  ALTER TABLE&lt;br /&gt;
&lt;br /&gt;
La table test_pk ne sera verrouillée en écriture que pendant la durée de l&#039;ALTER TABLE. Le reste du travail sera fait sans bloquer le travail des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
On peut bien sûr utiliser cela pour reconstruire l&#039;index d&#039;une clé primaire sans verrouiller la table pendant toute l&#039;opération:&lt;br /&gt;
&lt;br /&gt;
  =# CREATE UNIQUE INDEX CONCURRENTLY idx_pk2 ON test_pk (a);&lt;br /&gt;
  =# BEGIN ;&lt;br /&gt;
  =# ALTER TABLE test_pk DROP CONSTRAINT idx_pk;&lt;br /&gt;
  =# ALTER TABLE test_pk ADD primary key using index idx_pk2;&lt;br /&gt;
  =# COMMIT ;&lt;br /&gt;
&lt;br /&gt;
* ALTER TABLE ... SET DATA TYPE peut éviter la ré-écriture de toute la table pour les cas les plus appropriés.&lt;br /&gt;
&lt;br /&gt;
Par exemple, convertir une colonne varchar en texte ne demande plus de réécrire la table.&lt;br /&gt;
&lt;br /&gt;
Par contre, augmenter la taille d&#039;une colonne varchar nécessite toujours une réécriture de la table&lt;br /&gt;
&lt;br /&gt;
Il reste encore un certain nombre de cas non gérés, qui déclenchent une réécriture. Il y aura probablement des améliorations dans les prochaines versions de PostgreSQL, ce travail se poursuivant.&lt;br /&gt;
&lt;br /&gt;
* New CREATE TABLE IF NOT EXISTS syntax.&lt;br /&gt;
&lt;br /&gt;
Vous n&#039;aurez pas d&#039;erreur si une table existe déjà, seulement un NOTICE.&lt;br /&gt;
&lt;br /&gt;
Attention au fait qu&#039;il ne vérifiera pas que la définition de votre CREATE TABLE et la définition de la table sont identiques.&lt;br /&gt;
&lt;br /&gt;
* Nouvelle option ENCODING à COPY TO/FROM. Cela permet de spécifier un encodage à COPY qui soit indépendant du client_encoding.&lt;br /&gt;
&lt;br /&gt;
  COPY test1 TO stdout ENCODING &#039;latin9&#039;&lt;br /&gt;
&lt;br /&gt;
convertira l&#039;encodage directement. Il n&#039;est donc pas nécessaire de changer le client_encoding avant le COPY.&lt;br /&gt;
&lt;br /&gt;
* triggers INSTEAD OF sur vues.&lt;br /&gt;
&lt;br /&gt;
Cette fonctionnalité peut être utilisée pour implémenter des vues en mise à jour. Voici un exemple:&lt;br /&gt;
&lt;br /&gt;
Continuons sur l&#039;exemple employees/entities.&lt;br /&gt;
&lt;br /&gt;
  =#CREATE VIEW emp_entity AS SELECT employee_name, entity_name, address&lt;br /&gt;
  FROM entities JOIN employees USING (entity_name);&lt;br /&gt;
&lt;br /&gt;
Pour rendre cette vue modifiable en 9.0, il fallait utiliser des RULES (règles). Cela pouvait vite tourner au cauchemar, les rules sont assez complexes à écrire, et encore pire à déboguer. Voici comment on procédait: [http://www.postgresql.org/docs/9.1/static/rules-update.html mises à jour par règles]&lt;br /&gt;
&lt;br /&gt;
On peut maintenant faire tout cela avec un trigger. Voici un exemple, en PL/PgSQL (il n&#039;y a que la partie INSERT ici):&lt;br /&gt;
&lt;br /&gt;
  =#CREATE OR REPLACE FUNCTION dml_emp_entity () RETURNS trigger LANGUAGE plpgsql AS $$&lt;br /&gt;
  DECLARE&lt;br /&gt;
    vrecord RECORD;&lt;br /&gt;
  BEGIN&lt;br /&gt;
    IF TG_OP = &#039;INSERT&#039; THEN&lt;br /&gt;
      -- Does the record exist in entity ?&lt;br /&gt;
      SELECT entity_name,address INTO vrecord FROM entities WHERE entity_name=NEW.entity_name;&lt;br /&gt;
      IF NOT FOUND THEN&lt;br /&gt;
        INSERT INTO entities (entity_name,address) VALUES (NEW.entity_name, NEW.address);&lt;br /&gt;
      ELSE&lt;br /&gt;
        IF vrecord.address != NEW.address THEN&lt;br /&gt;
        RAISE EXCEPTION &#039;There already is a record for % in entities. Its address is %. It conflics with your address %&#039;,&lt;br /&gt;
                        NEW.entity_name, vrecord.address, NEW.address USING ERRCODE = &#039;unique_violation&#039;;&lt;br /&gt;
        END IF;&lt;br /&gt;
      END IF; -- Nothing more to do, the entity already exists and is OK&lt;br /&gt;
      -- We now try to insert the employee data. Let&#039;s directly try an INSERT&lt;br /&gt;
      BEGIN&lt;br /&gt;
        INSERT INTO employees (employee_name, entity_name) VALUES (NEW.employee_name, NEW.entity_name);&lt;br /&gt;
        EXCEPTION WHEN unique_violation THEN&lt;br /&gt;
          RAISE EXCEPTION &#039;There is already an employee with this name %&#039;, NEW.employee_name USING ERRCODE = &#039;unique_violation&#039;;&lt;br /&gt;
      END;&lt;br /&gt;
    RETURN NEW; -- The trigger succeeded&lt;br /&gt;
    END IF;&lt;br /&gt;
  END&lt;br /&gt;
  $$&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&#039;à déclarer notre trigger maintenant:&lt;br /&gt;
&lt;br /&gt;
  =#CREATE TRIGGER trig_dml_emp_entity INSTEAD OF INSERT OR UPDATE OR DELETE ON emp_entity FOR EACH ROW EXECUTE PROCEDURE dml_emp_entity ();&lt;br /&gt;
&lt;br /&gt;
Il y a d&#039;autres avantages: une rule ne fait que réécrire la requête. Avec le trigger, nous avons rajouté de la logique, et nous pouvons retourner des messages d&#039;erreur pertinents. Cela permet bien plus facilement de comprendre ce qui a échoué. On peut aussi gérer des exceptions. Nous avons tous les avantages des triggers sur les rules.&lt;br /&gt;
&lt;br /&gt;
* PL/PgSQL FOREACH IN ARRAY.&lt;br /&gt;
&lt;br /&gt;
C&#039;est devenu bien plus simple de faire une boucle sur un tableau en PL/PgSQL. Jusqu&#039;à maintenant, le mot clé FOR ne fonctionnait que pour boucler sur des recordsets (résultat de requête).&lt;br /&gt;
&lt;br /&gt;
On peut maintenant s&#039;en servir pour boucler sur un tableau.&lt;br /&gt;
&lt;br /&gt;
Avant la 9.1, il aurait fallu écrire quelque chose de ce genre:&lt;br /&gt;
&lt;br /&gt;
  =# CREATE OR REPLACE FUNCTION test_array (parray int[]) RETURNS int LANGUAGE plpgsql AS $$&lt;br /&gt;
  DECLARE&lt;br /&gt;
    vcounter int :=0;&lt;br /&gt;
    velement int;&lt;br /&gt;
  BEGIN&lt;br /&gt;
    FOR velement IN SELECT unnest (parray)&lt;br /&gt;
    LOOP&lt;br /&gt;
      vcounter:=vcounter+velement;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    RETURN vcounter;&lt;br /&gt;
  END&lt;br /&gt;
  $$&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
Maintenant:&lt;br /&gt;
&lt;br /&gt;
  =# CREATE OR REPLACE FUNCTION test_array (parray int[]) RETURNS int LANGUAGE plpgsql AS $$&lt;br /&gt;
  DECLARE&lt;br /&gt;
    vcounter int :=0;&lt;br /&gt;
    velement int;&lt;br /&gt;
  BEGIN&lt;br /&gt;
    FOREACH velement IN ARRAY parray&lt;br /&gt;
    LOOP&lt;br /&gt;
      vcounter:=vcounter+velement;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
    RETURN vcounter;&lt;br /&gt;
  END&lt;br /&gt;
  $$&lt;br /&gt;
  ;&lt;br /&gt;
&lt;br /&gt;
C&#039;est bien plus facile à lire, et plus performant à l&#039;exécution.&lt;br /&gt;
&lt;br /&gt;
Il y a un autre avantage: nous pouvons découper le tableau quand il est multi-dimensionnel. Voici un exemple, tiré directement de la documentation:&lt;br /&gt;
&lt;br /&gt;
  =#CREATE FUNCTION scan_rows(int[]) RETURNS void AS $$&lt;br /&gt;
  DECLARE&lt;br /&gt;
    x int[];&lt;br /&gt;
  BEGIN&lt;br /&gt;
    FOREACH x SLICE 1 IN ARRAY $1&lt;br /&gt;
    LOOP&lt;br /&gt;
      RAISE NOTICE &#039;row = %&#039;, x;&lt;br /&gt;
    END LOOP;&lt;br /&gt;
  END;&lt;br /&gt;
  $$ LANGUAGE plpgsql;&lt;br /&gt;
  &lt;br /&gt;
  =#SELECT scan_rows(ARRAY[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]);&lt;br /&gt;
  NOTICE:  row = {1,2,3}&lt;br /&gt;
  NOTICE:  row = {4,5,6}&lt;br /&gt;
  NOTICE:  row = {7,8,9}&lt;br /&gt;
  NOTICE:  row = {10,11,12}&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.1]]&lt;br /&gt;
[[Category:Français]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=GSoC_2011&amp;diff=13293</id>
		<title>GSoC 2011</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=GSoC_2011&amp;diff=13293"/>
		<updated>2011-03-10T20:14:14Z</updated>

		<summary type="html">&lt;p&gt;Gleu: few ideas for pgadmin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Add support for multi-line GUCs (configuration variables)&lt;br /&gt;
* Add ability to control CSV log fields and order and allow CSV log format changes on SIGHUP&lt;br /&gt;
* Eliminate 1GB memory allocation limit for individual queries (MaxAllocSize and friends)&lt;br /&gt;
* Build SELinux demonstration for addressing PCI compliance&lt;br /&gt;
* [[Bulk_insert_for_GiST_GSoC_2011|Bulk insert for GiST]]&lt;br /&gt;
* Improve the auto-configuration script (Python or Perl)&lt;br /&gt;
* Write Foreign Data Wrappers for several external data sources (ODBC, SQL Server, Oracle, MySQL, CouchDB, Redis, etc.)&lt;br /&gt;
* Integrate SQL/MED and PL/Proxy&lt;br /&gt;
* Refactor the NewSysViews project to integrate it with information_schema for inclusion in core PostgreSQL.&lt;br /&gt;
* Create autotuning utilities for automated interaction with system information and/or logs&lt;br /&gt;
* Help finish the JSON data type&lt;br /&gt;
* Please add ideas here!&lt;br /&gt;
&lt;br /&gt;
More ideas:&lt;br /&gt;
&lt;br /&gt;
=== Core Source Code ===&lt;br /&gt;
&lt;br /&gt;
* TODO Items: A number of the items on our TODO list have been marked as good projects for beginners who are new to the PostgreSQL code. Items on this list have the advantage of already having general community agreement that the feature is desireable. These items should also have some general discussion available in the mailing list archives to help get you started. You can find these items on the TODO list, they will be marked with an [E].&lt;br /&gt;
* DDL Functions: Create a SQL-callable function capable of generating DDL scripts for objects within the database.&lt;br /&gt;
* EXPLAIN Enhancements: Add information to EXPLAIN documenting I/O activity, discarded plans, costing detail, memory usage and more.&lt;br /&gt;
* Text-Array Indexing: Add support for indexing text or multi-typed array data, capable of supporting indexed queries, similar to intarray.&lt;br /&gt;
&lt;br /&gt;
=== Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
* Enhance Buildfarm to test external packages, patches, or performance: The PostgreSQL project maintains a public buildfarm that continuously communicates with several machines that checkout and build the PostgreSQL source on a regular basis. The idea behind this project is to extend the current buildfarm code to allow it download external modules and report back on their build status, to download unapplied patches and test them, or to run performance tests.&lt;br /&gt;
* Enhance &amp;quot;Performance-Farm&amp;quot; framework for continuous performance regression testing: Similar to the buildfarm, the idea behind this project is to create a public infrastructure that continuously communicates with several machines that checkout and build the PostgreSQL source on a regular basis, running and reporting on agreed performance benchmarks.&lt;br /&gt;
&lt;br /&gt;
=== External Applications ===&lt;br /&gt;
&lt;br /&gt;
* pgAdmin III / phpPgAdmin Enhancements: PostgreSQL supports a number of popular GUI Tools that are not distributed with the core project. Projects like these often have their own TODO lists and compatibility issues with the core PotgreSQL that need development. We welcome ideas for these projects as well.&lt;br /&gt;
* pgAdmin III : add graph support to the server status window, add more ways to view an explain analyze in the query tool (and handle xml explain)&lt;br /&gt;
* Procedural Language Improvements: PostgreSQL provides support for more than a dozen different procedural languages, however the level of support varies depending on the language implementation. Enhancing support of these procedural languages might include fixing build issues, adding SPI support, adding trigger support, adding support for IN/OUT parameters and more.&lt;br /&gt;
* Replication and Clustering: PostgreSQL provides a wide range of replication solutions for varying types of replication needs. Many of these projects need assistance with building against different versions of PostgreSQL, installation and setup, administrative tools, and general bugfixing.&lt;br /&gt;
* Teaching &amp;amp; Learning Tools: External tools to help in teaching the internals of PostgreSQL such as enhanced visual EXPLAIN, graphical models of the query engine, educational guides to the code, and interactive tools to demonstrate various query types.&lt;br /&gt;
* PostGIS &amp;amp; GEOS: Add performance and feature enhancements to PostgreSQL&#039;s geographic data support.&lt;br /&gt;
&lt;br /&gt;
Additional projects may be found by browsing the [http://pgfoundry.org PostgreSQL Development Projects] website.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
The GSoC projects for 2011 are:&lt;br /&gt;
&lt;br /&gt;
* TBD :)&lt;br /&gt;
&lt;br /&gt;
We are also working on a [http://twitter.com/selenamarie/gsoc2011 twitter list] for those involved this year. If you are missing, please send us your info:&lt;br /&gt;
&lt;br /&gt;
== Key Info ==&lt;br /&gt;
* March 7th - 11th, Mentoring Application Due&lt;br /&gt;
* March 29th - April 9th, Student Applications Due&lt;br /&gt;
&lt;br /&gt;
* [http://google-opensource.blogspot.com/2011/02/mentoring-organization-applications-now.html Announcement for GSoC 2011]&lt;br /&gt;
* [http://www.google-melange.com// GSOC 2011 Home page ]&lt;br /&gt;
* [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2011/faqs GSOC 2011 FAQ]&lt;br /&gt;
* [http://www.postgresql.org/developer/summerofcode Postgres GSOC Page, Needs Updating!]&lt;br /&gt;
* [https://twitter.com/selenamarie/gsoc2011 Twitter stream of mentors and students]&lt;br /&gt;
&lt;br /&gt;
== Project Admins ==&lt;br /&gt;
* Selena Deckelmann - Co-admin, Mentor Summit attendee.&lt;br /&gt;
* Josh Berkus - Co-admin, Mentor Summit attendee.&lt;br /&gt;
* Robert Treat   - Past mentor 2x, co-admin, Mentor Summit attendee. &lt;br /&gt;
&lt;br /&gt;
== 2011 Mentors ==&lt;br /&gt;
* Dave Page - Former mentor - pgAdmin, Windows, Packaging, Infrastructure &lt;br /&gt;
* Heikki Linnakangas - Postgres Committer&lt;br /&gt;
* Magnus Hagander - Postgres Committer, Windows, pgAdmin&lt;br /&gt;
* Guillaume Lelarge - pgAdmin&lt;br /&gt;
* Jehan-Guillaume de Rorthais - phpPgAdmin&lt;br /&gt;
* Joe Abbate - Python-related, catalog-related projects&lt;br /&gt;
* David E. Wheeler - Perl-related, extensions, PGXN&lt;br /&gt;
* Mark Wong - benchmarking, monitoring, performance&lt;br /&gt;
* Tatsuo Ishii - Postgres Committer, pgpool-II&lt;br /&gt;
* Stephen Frost - Postgres contributor&lt;br /&gt;
&lt;br /&gt;
=== additional reviewers === &lt;br /&gt;
* Josh Berkus - auto-configuration, performance testing&lt;br /&gt;
* Selena Deckelmann - configuration, testing&lt;br /&gt;
* Andreas Scherbaum - performance, configuration, testing&lt;br /&gt;
&lt;br /&gt;
== Past Success ==&lt;br /&gt;
* Florian - read-only on snapshots, no advancement of xid on select statements&lt;br /&gt;
* Ivan - Full-Text Support in phpPgAdmin&lt;br /&gt;
* Mickael Deloison - pgScript engine for pgAdmin&lt;br /&gt;
* Luis Alberto Ochoa Paz - Graphical query builder for pgAdmin&lt;br /&gt;
* Leonardo Sapiras - browsing data through FK in phpPgAdmin + some additionnal stuffs&lt;br /&gt;
&lt;br /&gt;
== GOALS: ==&lt;br /&gt;
* usable code&lt;br /&gt;
** useful/novel ideas&lt;br /&gt;
** research projects&lt;br /&gt;
* longer term contributors&lt;br /&gt;
&lt;br /&gt;
== TODOs: ==&lt;br /&gt;
&lt;br /&gt;
* Kick-off Meeting for Community Members&lt;br /&gt;
* Update GSOC page&lt;br /&gt;
* Advertising?&lt;br /&gt;
* Blog that we&#039;re participating and seeking students&lt;br /&gt;
* Round of private emails to people who have participated in the past: Heikki, Simon, Mark&lt;br /&gt;
** request interest, and then follow up in asking about possible topics for students&lt;br /&gt;
* Mentor recruitment and then email to -hackers&lt;br /&gt;
** do this much later when we have some proposals in?&lt;br /&gt;
&lt;br /&gt;
* Recruitment -- no organized group effort?&lt;br /&gt;
** -announce, -general, -hackers&lt;br /&gt;
** user group lists&lt;br /&gt;
** phppgadmin/pgadmin&lt;br /&gt;
** berkeley&lt;br /&gt;
** Univ. of Maryland -- contact them?&lt;br /&gt;
&lt;br /&gt;
* Identify the commitfest that the code will be submitted to&lt;br /&gt;
&lt;br /&gt;
== Expectations ==&lt;br /&gt;
&lt;br /&gt;
* Stuff to keep students together:&lt;br /&gt;
** Regular blogging from students&lt;br /&gt;
** weekly group IRC checkin? -- two checkin times maybe?&lt;br /&gt;
&lt;br /&gt;
* Have students communicate on -hackers where appropriate (didn&#039;t really work?)&lt;br /&gt;
** Or other relevant -devel lists&lt;br /&gt;
&lt;br /&gt;
* Mailing list&lt;br /&gt;
** pgsql-students (?)  vs. -hackers (?)  maybe up to mentor?&lt;br /&gt;
** mentors mailing list -admin mailing list, berkus said?&lt;br /&gt;
** students mailing list via gsoc&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=11383</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=11383"/>
		<updated>2010-07-03T10:17:55Z</updated>

		<summary type="html">&lt;p&gt;Gleu: two new articles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-demarrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] [http://blog.postgresql.fr/public/Doc%20postgresql.pdf PDF] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.3_sous_windows Installation de PostgreSQL 8.3 sous Windows] (par Guillaume Lelarge, le 26/12/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.4_sous_windows Installation de PostgreSQL 8.4 sous Windows] (par Guillaume Lelarge, le 29/12/2009).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2010/06/16/Pr%C3%A9sentation-de-la-version-9.0-de-PostgreSQL2 Présentation de la version 9.0 de PostgreSQL] (par Marc Cousin, le 16/06/2010).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] » (par Guillaume Lelarge, octobre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] » (par Guillaume Lelarge, décembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] » (par Guillaume Lelarge, janvier 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_postgresql_8.4 PostgreSQL 8.4] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_le_projet_postgresql Le projet PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_installation_de_postgresql Installation de PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_rapide_configuration_de_postgresql Rapide configuration de PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_creer_une_base_avec_postgresql Créer une base avec PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpool_le_pooler_multitache pgPool : le pooler multitâche] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgbouncer_un_pooler_simple_mais_efficace pgBouncer : un pooler simple, mais efficace] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_la_replication_par_les_journaux_de_transactions La réplication par les journaux de transactions] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_slony_la_replication_des_donnees_par_trigger Slony : la réplication des données par trigger] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_londiste_la_replicaton_vue_par_skype Londiste : la réplication vue par Skype] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpoolII_la_replication_par_duplication_des_requetes pgPool-II : la réplication par duplication des requêtes] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_une_synthese_et_en_route_vers_le_futur Une synthèse, et en route vers le futur] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs45 Hors-série 45], « [http://www.dalibo.org/hs45_drbd_la_replication_des_blocs_disques DRBD, la réplication des blocs disques] » (par Guillaume Lelarge, décembre 2009).&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql Haute disponibilité avec PostgreSQL] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9701</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9701"/>
		<updated>2010-01-28T13:26:34Z</updated>

		<summary type="html">&lt;p&gt;Gleu: forgot some meta info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-d%C3%A9marrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.3_sous_windows Installation de PostgreSQL 8.3 sous Windows] (par Guillaume Lelarge, le 26/12/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.4_sous_windows Installation de PostgreSQL 8.4 sous Windows] (par Guillaume Lelarge, le 29/12/2009).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] » (par Guillaume Lelarge, octobre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] » (par Guillaume Lelarge, décembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] » (par Guillaume Lelarge, janvier 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_postgresql_8.4 PostgreSQL 8.4] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_le_projet_postgresql Le projet PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_installation_de_postgresql Installation de PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_rapide_configuration_de_postgresql Rapide configuration de PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_creer_une_base_avec_postgresql Créer une base avec PostgreSQL] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpool_le_pooler_multitache pgPool : le pooler multitâche] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgbouncer_un_pooler_simple_mais_efficace pgBouncer : un pooler simple, mais efficace] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_la_replication_par_les_journaux_de_transactions La réplication par les journaux de transactions] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_slony_la_replication_des_donnees_par_trigger Slony : la réplication des données par trigger] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_londiste_la_replicaton_vue_par_skype Londiste : la réplication vue par Skype] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpoolII_la_replication_par_duplication_des_requetes pgPool-II : la réplication par duplication des requêtes] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_une_synthese_et_en_route_vers_le_futur Une synthèse, et en route vers le futur] » (par Guillaume Lelarge, septembre 2009).&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql Haute disponibilité avec PostgreSQL] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9700</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9700"/>
		<updated>2010-01-28T13:24:12Z</updated>

		<summary type="html">&lt;p&gt;Gleu: add the contents of the special issue of GLMF for PostgreSQL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-d%C3%A9marrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.3_sous_windows Installation de PostgreSQL 8.3 sous Windows] (par Guillaume Lelarge, le 26/12/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.4_sous_windows Installation de PostgreSQL 8.4 sous Windows] (par Guillaume Lelarge, le 29/12/2009).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_postgresql_8.4 PostgreSQL 8.4] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_le_projet_postgresql Le projet PostgreSQL] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_installation_de_postgresql Installation de PostgreSQL] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_rapide_configuration_de_postgresql Rapide configuration de PostgreSQL] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_creer_une_base_avec_postgresql Créer une base avec PostgreSQL] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpool_le_pooler_multitache pgPool : le pooler multitâche] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgbouncer_un_pooler_simple_mais_efficace pgBouncer : un pooler simple, mais efficace] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_la_replication_par_les_journaux_de_transactions La réplication par les journaux de transactions] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_slony_la_replication_des_donnees_par_trigger Slony : la réplication des données par trigger] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_londiste_la_replicaton_vue_par_skype Londiste : la réplication vue par Skype] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_pgpoolII_la_replication_par_duplication_des_requetes pgPool-II : la réplication par duplication des requêtes] »&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?ref=lmhs44 Hors-série 44], « [http://dalibo.org/hs44_une_synthese_et_en_route_vers_le_futur Une synthèse, et en route vers le futur] »&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql Haute disponibilité avec PostgreSQL] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=9681</id>
		<title>Performance Analysis Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Performance_Analysis_Tools&amp;diff=9681"/>
		<updated>2010-01-26T10:18:30Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Performance Analysis Tools */ wrong name for the lock table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Performance Analysis Tools =&lt;br /&gt;
&lt;br /&gt;
This page is focused on tools for collecting data &amp;lt;i&amp;gt;outside&amp;lt;/i&amp;gt; of PostgreSQL, in order to learn more about the system as a whole, about PostgreSQL&#039;s use of system resources, about things that may be bottlenecks for PostgreSQL&#039;s performance, etc.&lt;br /&gt;
&lt;br /&gt;
Most of the time, the tools PostgreSQL provides internally will be more than adequate for your needs. The most important tool in your toolbox is the SQL &amp;lt;code&amp;gt;[[Using EXPLAIN|EXPLAIN]]&amp;lt;/code&amp;gt; command and its &amp;lt;code&amp;gt;EXPLAIN ANALYZE&amp;lt;/code&amp;gt; alternative. The &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pg_catalog.pg_locks&amp;lt;/code&amp;gt; views are also vital.&lt;br /&gt;
&lt;br /&gt;
You can find a lot of advice about tuning PostgreSQL and the system in the [[:Category:Performance|Performance]] and [[Category:Administration|Administration]] categories of the wiki, and in [http://www.postgresql.org/docs/current/static/ the PostgreSQL manual]. If you&#039;re at a loss, see [[SlowQueryQuestions]].&lt;br /&gt;
&lt;br /&gt;
== System level tools for I/O, CPU and memory usage investigation ==&lt;br /&gt;
&lt;br /&gt;
Tools like `ps&#039; with the `wchan&#039; format specifier, `vmstat&#039;, `top&#039;, `iotop&#039;, `blktrace&#039; + `blkparse&#039;, `btrace&#039;, `sar&#039;, alt-sysrq-t, etc can help you learn much more about what your system is doing and where things are being delayed.&lt;br /&gt;
&lt;br /&gt;
On supported systems (currently Solaris and FreeBSD), `dtrace&#039; is also a powerful tool. PostgreSQL has DTrace hooks to allow you to investigate its internal workings and performance as well as that of the operating system it is running on.&lt;br /&gt;
&lt;br /&gt;
Windows users will want to look into [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor], [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer], and [http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] from the [http://technet.microsoft.com/en-us/sysinternals/default.aspx SysInternals] suite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unix/Linux tools ==&lt;br /&gt;
&lt;br /&gt;
=== ps ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;wchan&amp;quot; option is really useful for seeing what a process that&#039;s in &#039;D&#039; state (uninterruptable sleep in kernel system call) is actually doing. eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ps -e -o pid,ppid,wchan:60,cmd | grep post&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to go digging in the kernel sources, use Google, or nut it out to figure what the value shown in the &amp;lt;code&amp;gt;wchan&amp;lt;/code&amp;gt; field means.&lt;br /&gt;
&lt;br /&gt;
=== vmstat ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vmstat&amp;lt;/code&amp;gt; can give you useful overview information about CPU, disk and memory activity at a system wide level. It&#039;s most useful when updating continuously, eg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vmstat 60&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(the number is in seconds).&lt;br /&gt;
&lt;br /&gt;
Output looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ vmstat 1&lt;br /&gt;
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----&lt;br /&gt;
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa&lt;br /&gt;
 0  0   4144 242088 707752 2307192    0    0     0    26   71   73  2  1 97  1&lt;br /&gt;
 0  0   4144 242080 707752 2307220    0    0     0     0  944 1917  2  1 97  0&lt;br /&gt;
 0  0   4144 241956 707752 2307220    0    0     0    64  772 1579  1  1 98  0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== top ===&lt;br /&gt;
&lt;br /&gt;
Like vmstat, gives you some system overview info, though isn&#039;t as useful for disk information. Quite configurable.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be fooled by the &amp;quot;used&amp;quot; and &amp;quot;free&amp;quot; memory values. The &amp;lt;i&amp;gt;real&amp;lt;/i&amp;gt; memory in use is actually (roughly) the value in &amp;quot;used&amp;quot; minus the value in &amp;quot;buffers&amp;quot;, since &amp;quot;buffers&amp;quot; includes the kernel&#039;s disk cache. The kernel will use most of the free memory for disk cache, but will shrink that cache as required to fit other things into memory. After all, truly free memory is wasted memory that does you no good.&lt;br /&gt;
&lt;br /&gt;
=== free ===&lt;br /&gt;
&lt;br /&gt;
Shows free and used memory, system-wide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ free -m&lt;br /&gt;
             total       used       free     shared    buffers     cached&lt;br /&gt;
Mem:          3960       3726        234          0        721       2252&lt;br /&gt;
-/+ buffers/cache:        752       3208&lt;br /&gt;
Swap:         2070          4       2066&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;free&amp;quot; value beside &amp;quot;-/+ buffers/cache&amp;quot; is the one you should generally consider the &amp;quot;real&amp;quot; amount of free memory in the system. The &amp;quot;-m&amp;quot; flag asks for values in megabytes.&lt;br /&gt;
&lt;br /&gt;
=== sar ===&lt;br /&gt;
&lt;br /&gt;
Process accounting. See the man page.&lt;br /&gt;
&lt;br /&gt;
=== gdb ===&lt;br /&gt;
&lt;br /&gt;
Why is a debugger listed in performance analysis tools?&lt;br /&gt;
&lt;br /&gt;
Because sometimes, attaching a debugger to a backend, interrupting the backend periodically to get a backtrace, and then trying to figure out what on earth it&#039;s up to is a helpful way to track down an issue.&lt;br /&gt;
&lt;br /&gt;
See [[Generating a stack trace of a PostgreSQL_backend]]&lt;br /&gt;
&lt;br /&gt;
=== Wireshark, tshark, and tcpdump ===&lt;br /&gt;
&lt;br /&gt;
These tools are for monitoring and analysis of traffic on a network interface. If you can&#039;t figure out what&#039;s keeping your network interface pegged, they might help you figure out what data is being transmitted/received.&lt;br /&gt;
&lt;br /&gt;
=== pktstat ===&lt;br /&gt;
&lt;br /&gt;
A top-like utility for network interfaces. Doesn&#039;t, alas, show process IDs or names, but you can figure those out from source and destination port information. Handy for tracking down a backend that&#039;s flooding the interface with traffic.&lt;br /&gt;
&lt;br /&gt;
== Linux-only tools ==&lt;br /&gt;
&lt;br /&gt;
=== iostat ===&lt;br /&gt;
&lt;br /&gt;
Provides summary information about I/O activity and load on block devices in the system. Doesn&#039;t provide information about what processes are responsible for the load, but produces short and easily read output in real time. Like vmstat, most usefully used in continuous mode, eg &amp;quot;iostat 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See the man page for details.&lt;br /&gt;
&lt;br /&gt;
=== blktrace, blkparse and btrace ===&lt;br /&gt;
&lt;br /&gt;
These are tools to get very low level information about the activity on a given block device, what process(es) are causing that activity, and what they&#039;re doing. It produces a huge amount of information, but can be filtered somewhat. It takes a bit of thought to interpret, but can be great for those &amp;quot;what the hell is thrashing my disk&amp;quot; moments.&lt;br /&gt;
&lt;br /&gt;
Because of the bgwriter and wal writer, it&#039;s not usually easy to see what PostgreSQL backends are keeping a disk busy with &amp;lt;i&amp;gt;writes&amp;lt;/i&amp;gt;. It&#039;s still good for tracking down heavy read loads and figuring out what backend (and, thus, query - via the &amp;lt;code&amp;gt;pg_catalog.pg_stat_activity&amp;lt;/code&amp;gt;) is responsible.&lt;br /&gt;
&lt;br /&gt;
Output looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  9,1    0      246    11.339004193  1383  U   N [postgres] 0&lt;br /&gt;
  9,1    0      247    11.340029833  1383  A   R 118356256 + 96 &amp;lt;- (252,3) 34469792&lt;br /&gt;
  9,1    0      248    11.340030339  1383  Q   R 118356256 + 96 [postgres]&lt;br /&gt;
  9,1    0      249    11.340054022  1383  A   R 118356352 + 128 &amp;lt;- (252,3) 34469888&lt;br /&gt;
  9,1    0      250    11.340054341  1383  Q   R 118356352 + 128 [postgres]&lt;br /&gt;
  9,1    0      251    11.340062014  1383  A   R 118356480 + 32 &amp;lt;- (252,3) 34470016&lt;br /&gt;
  9,1    0      252    11.340062367  1383  Q   R 118356480 + 32 [postgres]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... plus a handy summary at the end.&lt;br /&gt;
&lt;br /&gt;
=== strace ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;strace&amp;lt;/code&amp;gt; is a useful tool that can attach to a process and report all the system calls that process makes, including arguments to those system calls. It&#039;s great for figuring out what files a process opens, or if it&#039;s waiting for something, etc.&lt;br /&gt;
&lt;br /&gt;
Useful interpretation requires some C programming knowledge and some idea about POSIX APIs.&lt;br /&gt;
&lt;br /&gt;
(Note that other systems have similar tools with different names - for example, some BSDs have &amp;lt;code&amp;gt;truss&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== oprofile ===&lt;br /&gt;
&lt;br /&gt;
Probably not useful for general users, but a handy tool if you have something within Pg or a library used by Pg that&#039;s running strangely slowly and you don&#039;t know why.&lt;br /&gt;
&lt;br /&gt;
[[Profiling with OProfile]]&lt;br /&gt;
&lt;br /&gt;
=== alt-sysrq-t ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;magic sysrq key&amp;quot;. Mainly useful for tracking down processes mysteriously stuck in &#039;D&#039; state in the kernel, ie hung in a system call, since it will output a stack trace of the kernel stack for all processes in the system. Mostly used when trying to figure out whether Pg is having problems due to a kernel bug, hardware issue, file system bug, etc.&lt;br /&gt;
&lt;br /&gt;
Must be enabled with &#039;sysctl -w kernel.sysrq=1&#039; before it can be used.&lt;br /&gt;
&lt;br /&gt;
== DTrace ==&lt;br /&gt;
&lt;br /&gt;
* [http://pgfoundry.org/docman/?group_id=1000163 PostgreSQL DTrace Users Guide]&lt;br /&gt;
* [http://lethargy.org/~jesus/writes/postgresql-performance-through-the-eyes-of-dtrace PostgreSQL performance through the eyes of DTrace]&lt;br /&gt;
* [http://blogs.sun.com/jkshah/entry/profiling_postgresql_using_dtrace_on Profiling PostgreSQL using DTRACE on Solaris 10]&lt;br /&gt;
&lt;br /&gt;
== Windows tools ==&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx Process Monitor] ===&lt;br /&gt;
&lt;br /&gt;
=== [http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx Process Explorer] ===&lt;br /&gt;
&lt;br /&gt;
===[http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx FileMon] ===&lt;br /&gt;
&lt;br /&gt;
[[Category:Performance]] [[Category:Administration]] [[Category:Tips]]&lt;br /&gt;
&lt;br /&gt;
Page originally by --[[User:Ringerc|Ringerc]] 07:26, 26 November 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9398</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9398"/>
		<updated>2009-12-29T23:51:02Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Documents originaux */ add a new document&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-d%C3%A9marrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.3_sous_windows Installation de PostgreSQL 8.3 sous Windows] (par Guillaume Lelarge, le 26/12/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.4_sous_windows Installation de PostgreSQL 8.4 sous Windows] (par Guillaume Lelarge, le 29/12/2009).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql Haute disponibilité avec PostgreSQL] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9370</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=9370"/>
		<updated>2009-12-27T22:27:38Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Documents originaux */  new article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-d%C3%A9marrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
* [http://dalibo.org/installation_de_postgresql_8.3_sous_windows Installation de PostgreSQL 8.3 sous Windows] (par Guillaume Lelarge, le 26/12/2009).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql Haute disponibilité avec PostgreSQL] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=8796</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=8796"/>
		<updated>2009-11-22T07:55:45Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Slides de présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-d%C3%A9marrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql Haute disponibilité avec PostgreSQL] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=8795</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=8795"/>
		<updated>2009-11-22T07:55:10Z</updated>

		<summary type="html">&lt;p&gt;Gleu: new talks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-d%C3%A9marrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://dalibo.org/postgresql_et_la_haute_disponibilite PostgreSQL et la haute-disponibilité] (par Jean-Paul Argudo, avril 2009).&lt;br /&gt;
* [http://dalibo.org/haute_disponibilite_avec_postgresql http://dalibo.org/haute_disponibilite_avec_postgresql] (par Guillaume Lelarge, octobre 2009).&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/PGDay.EU%2C_Paris_2009 Conférences françaises (et anglaises) lors du PGDay 2009].&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:Adeo_PGDay.pdf&amp;diff=8688</id>
		<title>File:Adeo PGDay.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:Adeo_PGDay.pdf&amp;diff=8688"/>
		<updated>2009-11-11T15:33:38Z</updated>

		<summary type="html">&lt;p&gt;Gleu: uploaded a new version of &amp;quot;Image:Adeo PGDay.pdf&amp;quot;: Vincent Moreau&amp;#039;s talk during the french pgday.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Retour d&#039;expérience migration Oracle vers PostgreSQL&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PGDay.EU,_Paris_2009&amp;diff=8687</id>
		<title>PGDay.EU, Paris 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PGDay.EU,_Paris_2009&amp;diff=8687"/>
		<updated>2009-11-11T15:29:40Z</updated>

		<summary type="html">&lt;p&gt;Gleu: add links to files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PGDay.EU 2009, a collaboration between PostgreSQL Europe and PostgreSQLFR was held in Paris, France on November 6-7.&lt;br /&gt;
&lt;br /&gt;
== November 6, 2009 ==&lt;br /&gt;
&lt;br /&gt;
=== English track ===&lt;br /&gt;
&lt;br /&gt;
==== 12:00 - 12:50 [[Media:PGDay2009-EN-Datawarehousing_with_PostgreSQL.pdf|Datawarehousing with PostgreSQL (Gabriele Bartolini)]]====&lt;br /&gt;
==== 13:50 - 14:40 [http://www.scribd.com/doc/22212194/Scaling-PostgreSQL-PgDay-EU-2009 Scaling PostgreSQL Under Fire (Gavin M. Roy)] ====&lt;br /&gt;
==== 15:10 - 16:00 [http://www.hagander.net/talks/Performance%20Enhancements%20in%20PostgreSQL%208.4%20pgday.pdf Performance Enhancements in PostgreSQL 8.4 (MagnusHagander)] ====&lt;br /&gt;
==== 16:10 - 17:00 [[Media:PGDay2009-EN-The_Future_of_PostgreSQL_HA.pdf|The Future of PostgreSQL HA (Robert Hodges &amp;amp; Simon Riggs)]]====&lt;br /&gt;
&lt;br /&gt;
=== French track ===&lt;br /&gt;
==== 11:00 - 11:50 [[Media:Adeo_PGDay.pdf|Retour d&#039;expérience migration Oracle vers PostgreSQL (Vincent Moreau)]] ====&lt;br /&gt;
==== 12:00 - 12:50 [[Media:PGDay2009-FR-Retour_d_experience_PostgreSQL_et_Skytools_chez_Hi-Media.pdf|Retour d&#039;expérience : PostgreSQL et Skytools chez Hi-Media (Dimitri Fontaine)]] ====&lt;br /&gt;
==== 13:50 - 14:40 [[Media:PGDay2009-FR-Replication.pdf|Systèmes de réplication pour PostgreSQL (Jean-Paul Argudo)]] ====&lt;br /&gt;
==== 15:10 - 16:00 [[Media:PGDay2009-FR-PostGIS.pdf|PostGIS, un module de PostgreSQL pour les données spatiales (Olivier Courtin - Vincent Picavet)]]====&lt;br /&gt;
==== 16:10 - 17:00 [[Media:PPA_presentation.odp|phpPgAdmin: présentation, développement et futur du projet (Jehan-Guillaume (ioguix) de Rorthais)]]====&lt;br /&gt;
&lt;br /&gt;
== November 7, 2009 ==&lt;br /&gt;
&lt;br /&gt;
=== English track (DBA/General) ===&lt;br /&gt;
&lt;br /&gt;
==== 10:00 - 10:50 Japan PostgreSQL Users Group ([[Media:No1_JPUG_Junichi-Tado.ppt|Junichi Tado]], [[Media:No2_JPUG_Hiroshi-Saito.ppt|Hiroshi Saito]], [[Media:No3_JPUG_Toshiyuki-Ishikawa.ppt|Toshiyuki Ishikawa]] &amp;amp; [[Media:No4_JPUG_Kaori-Inaba.pptx|Kaori Inaba]]) ====&lt;br /&gt;
&lt;br /&gt;
=== English track (Developer) ===&lt;br /&gt;
&lt;br /&gt;
==== 9:00 - 9:50 [[Media:PGDay2009-WAL.pdf|Welcome to WAL (Heikki Linnakangas)]] ====&lt;br /&gt;
==== 10:00 - 10-50 [[Media:PGDay2009-EN-Writeable_CTEs_The_Next_Big_Thing.pdf|Writeable CTEs: The Next Big Thing (David Fetter - Marko Tiikkaja)]] ====&lt;br /&gt;
==== 11:20 - 12:10 [[Media:Jkatz-pgday2009.pdf|ORMs: Strengths, Weaknesses, and Building a PostgreSQL-specific ORM (Jonathan S. Katz)]] ====&lt;br /&gt;
==== 14:10 - 15:00 [[Media:PGDay2009-EN-pg_staging.pdf|pg_staging or how to manage your staging environments (Dimitri Fontaine)]]====&lt;br /&gt;
&lt;br /&gt;
=== French track ===&lt;br /&gt;
&lt;br /&gt;
==== 09:00 - 09:50 [[Media:PGDay2009-FR-MVCC_et_PostgreSQL.odp|MVCC et PostgreSQL (Guillaume Lelarge)]]====&lt;br /&gt;
==== 10:00 - 10:50 [[Media:Bacula_PGDay2009.pdf| Bacula et PostgreSQL (Éric Bollengier et Marc Cousin)]]====&lt;br /&gt;
==== 11:20 - 12:10 [[Media:Future-of-Clustering-with-Tungsten-PG-Days-EU-2009-fr.pdf‎| Clustering : la nouvelle donne (Stéphane Giron et Gilles Rayrat)]] ([[Media:Future-of-Clustering-with-Tungsten-PG-West-2009.pdf| English version here]])====&lt;br /&gt;
==== 13:10 - 14:00 [http://contributions.pilotsystems.net/publications/supports-de-conferences/conference-pgdays-2009-indexation-de-la-base-documentaire-de-liberation/ Indexation d&#039;une base documentaire pour le quotidien Libération (Gaël Le Mignot, Pilot Systems)] ====&lt;br /&gt;
==== 14:10 - 15:00 [[Media:Comparaison_tables.pdf|pg_comparator : Comparaison de tables à distance (Fabien Coelho)]] ====&lt;br /&gt;
&lt;br /&gt;
=== Lightning talks ===&lt;br /&gt;
&lt;br /&gt;
==== #1 [[Media:GHUMpgonwin_pgdayue2009.odp|Elephant, Snake and Window]] - 6 years experience with PostgreSQL on Windows (Harald Armin Massa)] ====&lt;br /&gt;
&lt;br /&gt;
==== #4 [http://fetter.org/Lightning_PGDay_EU_2009.pdf On Lightning Talks (David Fetter)] ====&lt;br /&gt;
==== #5 [[Media:Pgcluster-pgday-eu-2009.pdf‎|New features of PGCluster (Atsushi Mitani)]] ====&lt;br /&gt;
==== #7 [[Media:Pg51g-in-five.odp|pg51g in five – a toolkit for data diffs (Michael Nacos)]] ====&lt;br /&gt;
==== #8 [http://www.osor.eu/communities/osor/artifacts/presentations/OSOR-dissemination-lightning%20talk.pdf/at_download/file The Open Source Observatory and Repository (Ismael Olea)] ====&lt;br /&gt;
==== #9 [[Media:Pgday2009-objectwiz2.pdf|Objectwiz – open-source object-oriented data administration tool (Benoît Del Basso)]] ====&lt;br /&gt;
&lt;br /&gt;
=== Closing session ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== [[Media:PGDay.EU_2009_Closing.pdf‎|Closing session (Dave Page and Guillaume Smet)]]====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:No4_JPUG_Kaori-Inaba.pptx&amp;diff=8686</id>
		<title>File:No4 JPUG Kaori-Inaba.pptx</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:No4_JPUG_Kaori-Inaba.pptx&amp;diff=8686"/>
		<updated>2009-11-11T15:27:03Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Kaori Inaba&amp;#039;s talk during french pgday&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kaori Inaba&#039;s talk during french pgday&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:No3_JPUG_Toshiyuki-Ishikawa.ppt&amp;diff=8685</id>
		<title>File:No3 JPUG Toshiyuki-Ishikawa.ppt</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:No3_JPUG_Toshiyuki-Ishikawa.ppt&amp;diff=8685"/>
		<updated>2009-11-11T15:26:40Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Toshiyuki Ishikawa&amp;#039;s talk during french pgday&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Toshiyuki Ishikawa&#039;s talk during french pgday&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:No2_JPUG_Hiroshi-Saito.ppt&amp;diff=8684</id>
		<title>File:No2 JPUG Hiroshi-Saito.ppt</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:No2_JPUG_Hiroshi-Saito.ppt&amp;diff=8684"/>
		<updated>2009-11-11T15:26:04Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Hiroshi Saito&amp;#039;s talk during french pgday&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hiroshi Saito&#039;s talk during french pgday&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=File:No1_JPUG_Junichi-Tado.ppt&amp;diff=8683</id>
		<title>File:No1 JPUG Junichi-Tado.ppt</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=File:No1_JPUG_Junichi-Tado.ppt&amp;diff=8683"/>
		<updated>2009-11-11T15:24:48Z</updated>

		<summary type="html">&lt;p&gt;Gleu: Junichi Tado&amp;#039;s talk during french pgday&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Junichi Tado&#039;s talk during french pgday&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PGDay.EU,_Paris_2009&amp;diff=8682</id>
		<title>PGDay.EU, Paris 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PGDay.EU,_Paris_2009&amp;diff=8682"/>
		<updated>2009-11-11T15:19:40Z</updated>

		<summary type="html">&lt;p&gt;Gleu: jpug talk&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PGDay.EU 2009, a collaboration between PostgreSQL Europe and PostgreSQLFR was held in Paris, France on November 6-7.&lt;br /&gt;
&lt;br /&gt;
== November 6, 2009 ==&lt;br /&gt;
&lt;br /&gt;
=== English track ===&lt;br /&gt;
&lt;br /&gt;
==== 12:00 - 12:50 [[Media:PGDay2009-EN-Datawarehousing_with_PostgreSQL.pdf|Datawarehousing with PostgreSQL (Gabriele Bartolini)]]====&lt;br /&gt;
==== 13:50 - 14:40 [http://www.scribd.com/doc/22212194/Scaling-PostgreSQL-PgDay-EU-2009 Scaling PostgreSQL Under Fire (Gavin M. Roy)] ====&lt;br /&gt;
==== 15:10 - 16:00 [http://www.hagander.net/talks/Performance%20Enhancements%20in%20PostgreSQL%208.4%20pgday.pdf Performance Enhancements in PostgreSQL 8.4 (MagnusHagander)] ====&lt;br /&gt;
==== 16:10 - 17:00 [[Media:PGDay2009-EN-The_Future_of_PostgreSQL_HA.pdf|The Future of PostgreSQL HA (Robert Hodges &amp;amp; Simon Riggs)]]====&lt;br /&gt;
&lt;br /&gt;
=== French track ===&lt;br /&gt;
==== 11:00 - 11:50 [[Media:Adeo_PGDay.pdf|Retour d&#039;expérience migration Oracle vers PostgreSQL (Vincent Moreau)]] ====&lt;br /&gt;
==== 12:00 - 12:50 [[Media:PGDay2009-FR-Retour_d_experience_PostgreSQL_et_Skytools_chez_Hi-Media.pdf|Retour d&#039;expérience : PostgreSQL et Skytools chez Hi-Media (Dimitri Fontaine)]] ====&lt;br /&gt;
==== 13:50 - 14:40 [[Media:PGDay2009-FR-Replication.pdf|Systèmes de réplication pour PostgreSQL (Jean-Paul Argudo)]] ====&lt;br /&gt;
==== 15:10 - 16:00 [[Media:PGDay2009-FR-PostGIS.pdf|PostGIS, un module de PostgreSQL pour les données spatiales (Olivier Courtin - Vincent Picavet)]]====&lt;br /&gt;
==== 16:10 - 17:00 [[Media:PPA_presentation.odp|phpPgAdmin: présentation, développement et futur du projet (Jehan-Guillaume (ioguix) de Rorthais)]]====&lt;br /&gt;
&lt;br /&gt;
== November 7, 2009 ==&lt;br /&gt;
&lt;br /&gt;
=== English track (DBA/General) ===&lt;br /&gt;
&lt;br /&gt;
==== 10:00 - 10:50 Japan PostgreSQL Users Group (Junichi Tado, Hiroshi Saito, Toshiyuki Ishikawa &amp;amp; Kaori Inaba) ====&lt;br /&gt;
&lt;br /&gt;
=== English track (Developer) ===&lt;br /&gt;
&lt;br /&gt;
==== 9:00 - 9:50 [[Media:PGDay2009-WAL.pdf|Welcome to WAL (Heikki Linnakangas)]] ====&lt;br /&gt;
==== 10:00 - 10-50 [[Media:PGDay2009-EN-Writeable_CTEs_The_Next_Big_Thing.pdf|Writeable CTEs: The Next Big Thing (David Fetter - Marko Tiikkaja)]] ====&lt;br /&gt;
==== 11:20 - 12:10 [[Media:Jkatz-pgday2009.pdf|ORMs: Strengths, Weaknesses, and Building a PostgreSQL-specific ORM (Jonathan S. Katz)]] ====&lt;br /&gt;
==== 14:10 - 15:00 [[Media:PGDay2009-EN-pg_staging.pdf|pg_staging or how to manage your staging environments (Dimitri Fontaine)]]====&lt;br /&gt;
&lt;br /&gt;
=== French track ===&lt;br /&gt;
&lt;br /&gt;
==== 09:00 - 09:50 [[Media:PGDay2009-FR-MVCC_et_PostgreSQL.odp|MVCC et PostgreSQL (Guillaume Lelarge)]]====&lt;br /&gt;
==== 10:00 - 10:50 [[Media:Bacula_PGDay2009.pdf| Bacula et PostgreSQL (Éric Bollengier et Marc Cousin)]]====&lt;br /&gt;
==== 11:20 - 12:10 [[Media:Future-of-Clustering-with-Tungsten-PG-Days-EU-2009-fr.pdf‎| Clustering : la nouvelle donne (Stéphane Giron et Gilles Rayrat)]] ([[Media:Future-of-Clustering-with-Tungsten-PG-West-2009.pdf| English version here]])====&lt;br /&gt;
==== 13:10 - 14:00 [http://contributions.pilotsystems.net/publications/supports-de-conferences/conference-pgdays-2009-indexation-de-la-base-documentaire-de-liberation/ Indexation d&#039;une base documentaire pour le quotidien Libération (Gaël Le Mignot, Pilot Systems)] ====&lt;br /&gt;
==== 14:10 - 15:00 [[Media:Comparaison_tables.pdf|pg_comparator : Comparaison de tables à distance (Fabien Coelho)]] ====&lt;br /&gt;
&lt;br /&gt;
=== Lightning talks ===&lt;br /&gt;
&lt;br /&gt;
==== #1 [[Media:GHUMpgonwin_pgdayue2009.odp|Elephant, Snake and Window]] - 6 years experience with PostgreSQL on Windows (Harald Armin Massa)] ====&lt;br /&gt;
&lt;br /&gt;
==== #4 [http://fetter.org/Lightning_PGDay_EU_2009.pdf On Lightning Talks (David Fetter)] ====&lt;br /&gt;
==== #5 [[Media:Pgcluster-pgday-eu-2009.pdf‎|New features of PGCluster (Atsushi Mitani)]] ====&lt;br /&gt;
==== #7 [[Media:Pg51g-in-five.odp|pg51g in five – a toolkit for data diffs (Michael Nacos)]] ====&lt;br /&gt;
==== #8 [http://www.osor.eu/communities/osor/artifacts/presentations/OSOR-dissemination-lightning%20talk.pdf/at_download/file The Open Source Observatory and Repository (Ismael Olea)] ====&lt;br /&gt;
==== #9 [[Media:Pgday2009-objectwiz2.pdf|Objectwiz – open-source object-oriented data administration tool (Benoît Del Basso)]] ====&lt;br /&gt;
&lt;br /&gt;
=== Closing session ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== [[Media:PGDay.EU_2009_Closing.pdf‎|Closing session (Dave Page and Guillaume Smet)]]====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=7113</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=7113"/>
		<updated>2009-07-02T14:34:32Z</updated>

		<summary type="html">&lt;p&gt;Gleu: two new articles in french&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/11/Postgresql-et-l-authentification-Apache PostgreQL et l&#039;authentification Apache] (par Pascal Brognez, le 16/06/2009)&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/2009/06/20/Guide-de-d%C3%A9marrage-rapide-avec-PostgreSQL Guide de démarrage rapide avec PostgreSQL] (par Florence Cousin, le 20/06/2009).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=6075</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=6075"/>
		<updated>2009-04-28T11:54:25Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Publication */ two new linuxmag articles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=604 numéro 111], « [http://dalibo.org/glmf111_recherche_plein_texte_avec_postgresql Recherche plein texte avec PostgreSQL 8.3] ».&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=605 numéro 112], « [http://dalibo.org/glmf112_les_processus_de_postgresql Les processus de PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=6074</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=6074"/>
		<updated>2009-04-28T11:52:21Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Documents originaux */ document by scheu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
* [http://scheu.developpez.com/tutoriels/postgresql/log-shipping/ Réplication de base avec PostgreSQL : le log shipping] (par Scheu, octobre 2008).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=4686</id>
		<title>Main Page/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=Main_Page/fr&amp;diff=4686"/>
		<updated>2009-02-09T07:06:22Z</updated>

		<summary type="html">&lt;p&gt;Gleu: add a new linuxmag article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Communauté Francophone ==&lt;br /&gt;
&lt;br /&gt;
* Le site de la communauté : http://www.postgresql.fr&lt;br /&gt;
* La documentation en français : http://docs.postgresql.fr&lt;br /&gt;
* Le forum d&#039;entraide PostgreSQL : http://forum.postgresql.fr&lt;br /&gt;
* L&#039;association PostgreSQLFr : http://asso.postgresql.fr&lt;br /&gt;
&lt;br /&gt;
== Quelques documents en français ==&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/216 Pourquoi préférer PostgreSQL à MySQL] (par Christophe Chauvet, le 24/10/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/397 Sécuriser votre base PostgreSQL] (écrit par Hubert Lubaczewski, traduit par Damien Clochard, le 05/09/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/105 Points à vérifier en ce qui concerne les performances de PostgreSQL 8.0] (écrit par Josh Berkus et Joe Conway, traduit par Guillaume Lelarge le 15/07/2005).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/149/lg149-A.html Les bases de données par M. Deividson : les vues] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 14/09/2008).&lt;br /&gt;
* [http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-A.html Les bases de données par M. Deividson : les procédures stockées] (article de la Gazette Linux, écrit par M. Deividson, traduit par Florence Cousin le 23/11/2008).&lt;br /&gt;
&lt;br /&gt;
=== Documents originaux ===&lt;br /&gt;
&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/277 Guide d&#039;installation rapide de PostgreSQL 8.3 sur MacOS] (par escapek le 11/02/2008).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/396 Utiliser un index pour les recherches sur des motifs tels que « colonne LIKE &#039;%chaîne&#039; »] et sa suite, [http://blog.postgresql.fr/index.php?post/drupal/393 Index inversé, en C] (par Thomas Reiss, respectivement le 15/07/2007 et le 05/09/2007).&lt;br /&gt;
* [http://wiki.guillaume.lelarge.info/trac.cgi/wiki/PostgreSQL%208.2 PostgreSQL 8.2] (par Guillaume Lelarge, le 04/03/2007).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/389 Langages de procédure : type OUT et INOUT] (par Guillaume Lelarge, le 16/12/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/137 Utilisation des rôles dans PostgreSQL 8.1] (par Guillaume Lelarge, le 29/11/2005).&lt;br /&gt;
* [http://blog.postgresql.fr/index.php?post/drupal/113 Fiche mémoire sur PostgreSQL] (par Guillaume Lelarge, le 09/09/2005).&lt;br /&gt;
* [http://dalibo.org/comparatif_des_outils_de_pooling_de_connexions Comparatif entre pgPool et pgBouncer] (par Guillaume Lelarge, le 19/06/2007).&lt;br /&gt;
* [http://dalibo.org/les_nouveautes_de_postgresql_8.3 Les nouveautés de PostgreSQL 8.3] (par Jean-Paul Argudo, janvier 2008).&lt;br /&gt;
* [http://dalibo.org/slony_impact_de_la_perte_d_un_esclave Slony : Impact de la perte d&#039;un noeud esclave] (par Cédric Villemain, novembre 2007).&lt;br /&gt;
&lt;br /&gt;
=== Publication ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=525 numéro 103], « [http://dalibo.org/glmf103_postgresql_8.3_quoi_de_neuf PostgreSQL 8.3 : quoi de neuf ?] » (par Guillaume Lelarge, mars 2008) ;&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=579 numéro 105], « [http://dalibo.org/glmf105_nouvelle_gestion_des_journaux_applicatifs_avec_postgresql_8.3 Nouvelle gestion des journaux applicatifs sous PostgreSQL 8.3] » (et son [http://www.dalibo.org/glmf105_supplement supplément]) (par Guillaume Lelarge, mai 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=585 numéro 106], « [http://dalibo.org/glmf106_les_vues_systemes_sous_postgresql_8.3 Les vues systèmes sous PostgreSQL 8.3] » (par Guillaume Lelarge, juin 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=588 numéro 107], « [http://www.dalibo.org/glmf107_gestion_memoire_avec_postgresql Gestion mémoire sous PostgreSQL] » (par Guillaume Lelarge, juillet/août 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=594 numéro 108], « [http://www.dalibo.org/glmf108_postgresql_et_ses_journaux_de_transactions PostgreSQL et ses journaux de transactions] » (par Guillaume Lelarge, septembre 2008).&lt;br /&gt;
* [http://www.ed-diamond.com/produit.php?produit=597 numéro 109], « [http://dalibo.org/glmf109_operations_de_maintenance_sous_postgresql Opérations de maintenance sous PostgreSQL] ».&lt;br /&gt;
&lt;br /&gt;
=== Slides de présentation ===&lt;br /&gt;
&lt;br /&gt;
* [http://2008.rmll.info/Presentation-de-PostgreSQL.html Présentation du projet et de l&#039;outil PostgreSQL] (par Guillaume Lelarge, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/pitr-logshipping/tutoriel-pitr_logshipping-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PITR et le LogShipping] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;br /&gt;
* [http://svn.postgresqlfr.org/browser/materials/advocacy/trunk/confs/plpgsql/tutoriel-plgpsql-rmll2008.odp?rev=1091&amp;amp;format=raw Atelier sur PL/pgsql] (par Jean-Christophe Arnu, aux RMLL 2008, juillet 2008).&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
	<entry>
		<id>https://wiki.postgresql.org/index.php?title=PgAdmin_Internals&amp;diff=4310</id>
		<title>PgAdmin Internals</title>
		<link rel="alternate" type="text/html" href="https://wiki.postgresql.org/index.php?title=PgAdmin_Internals&amp;diff=4310"/>
		<updated>2009-01-15T17:48:11Z</updated>

		<summary type="html">&lt;p&gt;Gleu: /* Property page dialogue layout */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= pgAdmin Development =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The information about pgAdmin development can be located at:&lt;br /&gt;
&lt;br /&gt;
* http://www.pgadmin.org/development/&lt;br /&gt;
&lt;br /&gt;
* The pgAdmin developers mailing list is pgadmin-hackers@postgresql.org&lt;br /&gt;
&lt;br /&gt;
== Physical Source Lines of Code [SLOC]==&lt;br /&gt;
&lt;br /&gt;
The source code of pgAdmin have the following main attributes, found using sloccount program [2]:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:#009ace;background-color:#eeeeee;&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; style=&amp;quot;color:#e76700;&amp;quot; | &#039;&#039;&#039;Table 1-1. pgAdmin development effort. Retrieved at 04-05-2008 16:30&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Used Version&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 1.9.0-Dev&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Total Physical Source Lines of Code (SLOC)&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 78,142&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | &#039;&#039;&#039;Development Effort Estimate, Person-Years (Person-Months) &amp;lt;BR&amp;gt;&#039;&#039;&#039; &#039;&#039;(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))&#039;&#039;&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 19.43 (233.21)&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | &#039;&#039;&#039;Schedule Estimate, Years (Months)&#039;&#039;&#039; &amp;lt;BR&amp;gt; &#039;&#039;(Basic COCOMO model, Months = 2.5 * (person-months**0.38))&#039;&#039;&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 1.65 (19.85)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Estimated Average Number of Developers (Effort/Schedule) &lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 11.75&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; | &#039;&#039;&#039;Total Estimated Cost to Develop&#039;&#039;&#039; &amp;lt;BR&amp;gt; &#039;&#039;(average salary = $56,286/year, overhead = 2.40).&#039;&#039;&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| $ 2,625,248&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Another interesting information it&#039;s the distribution of the physical source lines of code between different programming languages in the project:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:#009ace;background-color:#eeeeee;&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; style=&amp;quot;color:#e76700;&amp;quot; | &#039;&#039;&#039;Table 1-2. Programming Languages&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | C++&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 73859  (94.52%)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Ansi C&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 2657 (3.40%)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Pascal&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 1120 (1.43%)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | sh&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 444 (0.57%)&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | perl&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 62 (0.08%)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And finally the physical source lines of code distribution between directories:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:#009ace;background-color:#eeeeee;&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+align=&amp;quot;bottom&amp;quot; style=&amp;quot;color:#e76700;&amp;quot; | &#039;&#039;&#039;Table 1-3. Programming Languages divide by directory at pgAdmin folder&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Directory Name&lt;br /&gt;
! Sloc&lt;br /&gt;
! Sloc by Language&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | ui&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 13859&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=13859&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | frm&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 12202&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=12202&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | schema&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 10032&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=10032&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | include&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 8517&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=8517,ansic=801&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | utils&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 4923&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=3464,pascal=1120,ansic=295,perl=44&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | slony&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 3614&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=3614&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | ctl&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 3052&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=3052&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | debugger&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 2667&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=2667&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | agent&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 1902&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=1902&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | db&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 1488&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=1057,ansic=431&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | top_dir&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 1054&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| cpp=1054&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Class naming conventions ==&lt;br /&gt;
&lt;br /&gt;
Naming conventions make programs more understandable by making them easier to read. They can also give information about the function of the identifier-for example, whether it&#039;s a constant, package, or class-which can be helpful in understanding the code. For this reason the following rules were followed:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;foo&#039;&#039;&#039; &#039;&#039;represents an object of&#039;&#039; &#039;&#039;&#039;type Foo&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;fooFactory&#039;&#039;&#039; &#039;&#039;creates&#039;&#039; &#039;&#039;&#039;foos&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;fooCollection&#039;&#039;&#039; &#039;&#039;is a&#039;&#039; &#039;&#039;&#039;collection of foos&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;fooCollectionFactory&#039;&#039;&#039; &#039;&#039;creates a&#039;&#039; &#039;&#039;&#039;fooCollection&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;fooObject&#039;&#039;&#039; &#039;&#039;is an object that&#039;&#039; &#039;&#039;&#039;resides under/in foo&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;fooObjCollection&#039;&#039;&#039; &#039;&#039;is a collection of&#039;&#039; &#039;&#039;&#039;fooObjects&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;fooObjFactory&#039;&#039;&#039; &#039;&#039;creates&#039;&#039; &#039;&#039;&#039;fooObjects&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Coding Style ==&lt;br /&gt;
&lt;br /&gt;
The following rules gives coding conventions for pgAdmin:&lt;br /&gt;
&lt;br /&gt;
# Braces are always on lines of their own.&lt;br /&gt;
# Only preprocessor directives, globals and function headers/closing braces should normally be left-justified&lt;br /&gt;
# Tab == 4 spaces&lt;br /&gt;
# Leave a blank line between logical blocks of code for clarity.&lt;br /&gt;
# Add a space after all but the last semi-colon in for loops for clarity.&lt;br /&gt;
# Introduce each function in a comment&lt;br /&gt;
&lt;br /&gt;
By Example:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Source code before applying coding conventions:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
bool gqbArrayCollection::existsObject(gqbObject *item){&lt;br /&gt;
gqbObject *found=NULL;&lt;br /&gt;
       int size=gqbArray.GetCount();&lt;br /&gt;
       for(int i=0;i&amp;lt;size;i++){&lt;br /&gt;
               if (gqbArray.Item(i)==item){&lt;br /&gt;
                       found=gqbArray.Item(i);&lt;br /&gt;
                       break;&lt;br /&gt;
               }&lt;br /&gt;
       }&lt;br /&gt;
if(found)&lt;br /&gt;
       return true;&lt;br /&gt;
else&lt;br /&gt;
       return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Source code after applying coding conventions:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
// Check if an item exists in the array.&lt;br /&gt;
bool gqbArrayCollection::existsObject(gqbObject *item)&lt;br /&gt;
{&lt;br /&gt;
   gqbObject *found=NULL;&lt;br /&gt;
   int size=gqbArray.GetCount();&lt;br /&gt;
&lt;br /&gt;
   for(int i=0; i&amp;lt;size; i++)&lt;br /&gt;
   {&lt;br /&gt;
       if (gqbArray.Item(i)==item)&lt;br /&gt;
       {&lt;br /&gt;
           found=gqbArray.Item(i);&lt;br /&gt;
           break;&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   if(found)&lt;br /&gt;
       return true;&lt;br /&gt;
   else&lt;br /&gt;
       return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== wxWidgets ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Because pgAdmin is written in C++ using the wxWidgets we should know some relevant information about it [1]:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;wxWidgets&#039;&#039;&#039; (formerly &#039;&#039;&#039;wxWindows&#039;&#039;&#039;) is a widget toolkit for creating graphical user interfaces (GUIs) for cross-platform applications. wxWidgets enables a program&#039;s GUI code to compile and run on several computer platforms with minimal or no code changes. It covers systems such as Microsoft Windows, Mac OS, Linux/Unix (X11, Motif, and GTK+), OpenVMS, OS/2 and AmigaOS. A version for embedded systems is under development.&lt;br /&gt;
&lt;br /&gt;
* The wxWidgets library is implemented in C++, with bindings available for many commonly used programming languages, among them, Python (wxPython), Erlang (wxErlang), Haskell (wxHaskell), Lua (wxLua), Perl (wxPerl), Ruby (wxRuby), Smalltalk (wxSqueak), Java (wx4j) and even JavaScript (wxJavaScript).&lt;br /&gt;
&lt;br /&gt;
* wxWidgets is best described as a native mode toolkit as it provides a thin abstraction to a platform&#039;s native widgets, as opposed to emulating the display of widgets using graphic primitives. Calling a native widget on the target platform results in a more native looking interface than toolkits such as [[Swing (Java)|Swing]] (for Java), as well as offering performance and other benefits. &lt;br /&gt;
&lt;br /&gt;
* The toolkit is also not restricted to GUI development, having a built-in [[Open Database Connectivity|ODBC]]-based database library, an [[inter-process communication]] layer, [[internet socket|socket]] networking functionality, and more.&lt;br /&gt;
&lt;br /&gt;
* A good free pdf book to learn wxWidgets can be found at: http://www.informit.com/store/product.aspx?isbn=0131473816 in the download section.&lt;br /&gt;
&lt;br /&gt;
== Development Environment ==&lt;br /&gt;
&lt;br /&gt;
The Development environment for pgAdmin can be in theory any accepted by the widget toolkit for creating graphical user interfaces (GUIs) for cross-platform applications known as wxWidgets, It covers systems such as Microsoft Windows, Mac OS, Linux/Unix (X11, Motif, and GTK+), OpenVMS, OS/2 and AmigaOS.  Here describes how to build pgAdmin from source on *nix, Mac and Windows:&lt;br /&gt;
&lt;br /&gt;
=== Linux, FreeBSD, Solaris and other unix variants ===&lt;br /&gt;
You will need:&lt;br /&gt;
* A modern development environment: &lt;br /&gt;
** GTK 2.2 or above.&lt;br /&gt;
** GNU automake 1.9 or above.&lt;br /&gt;
** GNU autoconf 2.59 or above.&lt;br /&gt;
** GNU gcc 3.4 or above.&lt;br /&gt;
* Following libraries:&lt;br /&gt;
** wxGTK 2.8.x &#039;&#039;from http://www.wxwidgets.org/&#039;&#039;&lt;br /&gt;
** libxml2 2.6.18 or above &#039;&#039;from http://www.xmlsoft.org/&#039;&#039;&lt;br /&gt;
** libxslt 1.1.x or above &#039;&#039;from http://www.xmlsoft.org/&#039;&#039;&lt;br /&gt;
** PostgreSQL 8.1 or above &#039;&#039;from http://www.postgresql.org/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Building ====&lt;br /&gt;
&lt;br /&gt;
# Install libxml2 and libxslt if they are not already present on your system, per the instructions included with them.&lt;br /&gt;
# Install PostgreSQL per the instructions included. It is recommended that you build with OpenSSL support, using the &#039;&#039;--with-openssl&#039;&#039; configure option.&lt;br /&gt;
# Unpack the wxGTK tarball to a convenient location, and build and install it as follows:&lt;br /&gt;
#* &#039;&#039;&#039;Note:&#039;&#039;&#039; A script is included in the pgAdmin source tarball(xtra/wx-build/build-wxgtk) which will build and install wxWidgets in each combination of shared/static/debug/release builds for you. (You can follow below steps for wxGTK  manual compilation too).&lt;br /&gt;
#* cd /path/to/wxGTK/source/&lt;br /&gt;
#* ./configure --with-gtk --enable-gtk2 --enable-unicode&lt;br /&gt;
#* make&lt;br /&gt;
#* sudo make install&lt;br /&gt;
# Install wxWidgets contrib modules.&lt;br /&gt;
#* cd contrib/&lt;br /&gt;
#* make&lt;br /&gt;
#* sudo make install&lt;br /&gt;
#Unpack the pgAdmin tarball to a convenient location, and build and install it as follows:&lt;br /&gt;
#* bash bootstrap &#039;&#039;&#039;#Required only if building from an SVN checkout&#039;&#039;&#039;&lt;br /&gt;
#* ./configure&lt;br /&gt;
#* make all&lt;br /&gt;
#* sudo make install&lt;br /&gt;
   If any of the prerequisite components are installed in locations that the &lt;br /&gt;
   configure script cannot find, you may specify their locations on the command&lt;br /&gt;
   line. See the configure help (./configure --help) for details.&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
You will need:&lt;br /&gt;
&lt;br /&gt;
* A modern development environment: &lt;br /&gt;
** XCode 2.0 or above&lt;br /&gt;
** GNU automake 1.9 or above.&lt;br /&gt;
** GNU autoconf 2.59 or above.&lt;br /&gt;
* wxMac 2.8.x &#039;&#039;from http://www.wxwidgets.org/&#039;&#039;&lt;br /&gt;
* libxml2 2.6.18 or above &#039;&#039;from http://www.xmlsoft.org/&#039;&#039;&lt;br /&gt;
* libxslt 1.1.x or above &#039;&#039;from http://www.xmlsoft.org/&#039;&#039;&lt;br /&gt;
* PostgreSQL 8.1 or above &#039;&#039;from http://www.postgresql.org/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Building ==== &lt;br /&gt;
&lt;br /&gt;
# Install libxml2 and libxslt per the instructions included with them into a non-system location. The default versions included with OS X Panther and Tiger are too old and will not work correctly with pgAdmin.&lt;br /&gt;
# Install PostgreSQL per the instructions included. It is recommended that you build with OpenSSL support, using the --with-openssl configure option.&lt;br /&gt;
# Unpack the wxMac tarball to a convenient location, and build and install it as follows:&lt;br /&gt;
#* cd /path/to/wxMac/source/&lt;br /&gt;
#* ./configure --with-mac --enable-gtk2 --enable-unicode&lt;br /&gt;
#* make&lt;br /&gt;
#* sudo make install&lt;br /&gt;
# Install wxWidgets contrib modules:&lt;br /&gt;
#* cd contrib/&lt;br /&gt;
#* make&lt;br /&gt;
#* sudo make install&lt;br /&gt;
#* &#039;&#039;Note 1:&#039;&#039; You may also pass the --enable-universal_binary option to configure to build a Universal binary. This will also require a Universal build of PostgreSQL&#039;s libpq library.&lt;br /&gt;
#* &#039;&#039;Note 2:&#039;&#039; A script is included in the pgAdmin source tarball (&#039;&#039;xtra/wx-build/build-wxmac&#039;&#039;) which will install a Universal build ofwxWidgets in each combination of shared/static/debug/release builds for you.&lt;br /&gt;
# Unpack the pgAdmin tarball to a convenient location, and build and install it as follows:&lt;br /&gt;
#* bash bootstrap	# Required only if building from an SVN checkout&lt;br /&gt;
#* ./configure --enable-appbundle&lt;br /&gt;
#* make all&lt;br /&gt;
#* make install&lt;br /&gt;
#*  This final step will build an OSX appbundle called pgAdmin3.app in the root of your source tree. As this can take a minute or two, the &#039;&#039;pkg/mac/debug-bundle.sh&#039;&#039; script may be used to build a non-relocatable &#039;fake&#039; appbundle using symbolic links directly to the executable files. This appbundle is called pgAdmin3-debug.app, and doesn&#039;t need to be rebuilt when pgAdmin is recompiled.&lt;br /&gt;
  If any of the prerequisite components are installed in locations that the &lt;br /&gt;
  configure script cannot find, you may specify their locations on the command&lt;br /&gt;
  line. See the configure help (./configure --help) for details.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
You will need:&lt;br /&gt;
&lt;br /&gt;
* Windows 2000 or above.&lt;br /&gt;
* Microsoft Visual C++ 2005.&lt;br /&gt;
* The Windows 2003 R2 Platform SDK. (Not included with Express edition, should be download &amp;amp; installed)&lt;br /&gt;
* Windows Installer XML v3.&lt;br /&gt;
* wxMSW 2.8.x from http://www.wxwidgets.org/&lt;br /&gt;
* libxml2 2.6.18 or above from http://www.xmlsoft.org/&lt;br /&gt;
* libxslt 1.1.x or above from http://www.xmlsoft.org/&lt;br /&gt;
* iconv 1.9.x or above from http://gnuwin32.sourceforge.net/&lt;br /&gt;
* PostgreSQL 8.1 or above from http://www.postgresql.org/&lt;br /&gt;
&lt;br /&gt;
 Precompiled XML/XSLT and dependency packages for Windows can be found at &lt;br /&gt;
 &#039;&#039;http://zlatkovic.com&#039;&#039;. You probably need zlib 1.2.x as well as libxml2 and &lt;br /&gt;
 libxslt.&lt;br /&gt;
&lt;br /&gt;
==== Building ====&lt;br /&gt;
# Unpack the wxMSW source code to a convenient location pointed to by the &#039;&#039;&#039;%WXWIN%&#039;&#039;&#039; environment variable.&lt;br /&gt;
# Install PostgreSQL to a convenient location pointed to by the &#039;&#039;&#039;%PGDIR%&#039;&#039;&#039; environment variable.&lt;br /&gt;
# Unpack the pgAdmin source code to a convenient location.&lt;br /&gt;
# From a Visual Studio command prompt, run the wxWidgets build script included in the pgAdmin source tree at &#039;&#039;xtra/wx-build/build-wxmsw.bat&#039;&#039;&lt;br /&gt;
# Unpack the libxml2, libxslt and dependency binaries in a directory pointed to by the &#039;&#039;&#039;%PGBUILD%&#039;&#039;&#039; environment variable.&lt;br /&gt;
# Start Visual C++ and load the pgAdmin solution file. Build the required targets.&lt;br /&gt;
&lt;br /&gt;
==== Note from microsoft site for Visual C++ Express Edition 2005 Users: ==== &lt;br /&gt;
&lt;br /&gt;
You can use Visual C++ Express to build .NET Framework applications immediately after&lt;br /&gt;
installation. In order to use Visual C++ Express to build Win32 applications, you&#039;ll need to take&lt;br /&gt;
just a few more steps. I&#039;ll list the steps necessary for building Win32 applications using Visual C+&lt;br /&gt;
+ Express.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. Install the Microsoft Platform SDK:&#039;&#039;&#039; Follow the instructions and install the SDK for the x86 platform.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Update the Visual C++ directories in the Projects and Solutions section in the Options dialog box. Add the paths to the appropriate subsection:&#039;&#039;&#039;&lt;br /&gt;
● Executable files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin&lt;br /&gt;
● Include files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include&lt;br /&gt;
● Library files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib&lt;br /&gt;
&lt;br /&gt;
Note: Alternatively, you can update the Visual C++ Directories by modifying the VCProjectEngine.&lt;br /&gt;
dll.express.config file located in the \vc\vcpackages subdirectory of the Visual C++ Express install&lt;br /&gt;
location. Please make sure that you also delete the file &amp;quot;vccomponents.dat&amp;quot; located in the &amp;quot;%&lt;br /&gt;
USERPROFILE%\Local Settings\Application Data\Microsoft\VCExpress\8.0&amp;quot; if it exists before&lt;br /&gt;
restarting Visual C++ Express Edition.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Update the corewin_express.vsprops file:&#039;&#039;&#039;&lt;br /&gt;
One more step is needed to make the Win32 template work in Visual C++ Express. This can be done in two ways.&lt;br /&gt;
&lt;br /&gt;
1. Click on Project (on each one pgAdmin3, pgaevent, pgAgent), Properties, Linker, Input, Additional Dependencies and made sure the folllowing were all in the list (or else you will get unresovled externals to Windows API).&lt;br /&gt;
&lt;br /&gt;
user32.lib&lt;br /&gt;
gdi32.lib&lt;br /&gt;
oleaut32.lib&lt;br /&gt;
ole32.lib&lt;br /&gt;
comdlg32.lib&lt;br /&gt;
shell32.lib&lt;br /&gt;
winmm.lib&lt;br /&gt;
comctl32.lib&lt;br /&gt;
rpcrt4.lib&lt;br /&gt;
wsock32.lib&lt;br /&gt;
odbc32.lib&lt;br /&gt;
advapi32.lib&lt;br /&gt;
&lt;br /&gt;
This avoid errors from type LNK2019&lt;br /&gt;
&lt;br /&gt;
2.You need to edit the corewin_express.vsprops file (found in C:\Program Files\Microsoft Visual Studio 8\VC&lt;br /&gt;
\VCProjectDefaults) and Change the string that reads: AdditionalDependencies=&amp;quot;kernel32.lib&amp;quot;&lt;br /&gt;
to AdditionalDependencies=&amp;quot;kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib&lt;br /&gt;
shell32.lib ole32.lib oleaut32.lib uuid.lib&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Class Hierarchy ==&lt;br /&gt;
&lt;br /&gt;
[Add info here!]&lt;br /&gt;
&lt;br /&gt;
== SVN Directory Structure == &lt;br /&gt;
===pgadmin===&lt;br /&gt;
===== agent ===== &lt;br /&gt;
pgAdmin Agent related classes:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;dlgJob.cpp&#039;&#039;&#039; - PostgreSQL Job Property&lt;br /&gt;
* &#039;&#039;&#039;dlgSchedule.cpp&#039;&#039;&#039; - PostgreSQL Schedule Property&lt;br /&gt;
* &#039;&#039;&#039;dlgStep.cpp&#039;&#039;&#039; - PostgreSQL Step Property&lt;br /&gt;
* &#039;&#039;&#039;pgaStep.cpp&#039;&#039;&#039; - PostgreSQL Agent Step&lt;br /&gt;
* &#039;&#039;&#039;pgaJob.cpp&#039;&#039;&#039; - PostgreSQL Agent Job&lt;br /&gt;
* &#039;&#039;&#039;pgaSchedule.cpp&#039;&#039;&#039; - PostgreSQL Agent Schedule&lt;br /&gt;
* &#039;&#039;&#039;pgaStep.cpp&#039;&#039;&#039; - PostgreSQL Agent Step&lt;br /&gt;
&lt;br /&gt;
==== db ====&lt;br /&gt;
Contains postgresql database related files:&lt;br /&gt;
* &#039;&#039;&#039;keywords.c&#039;&#039;&#039; - lexical token lookup for reserved words in PostgreSQL&lt;br /&gt;
* &#039;&#039;&#039;pgConn.cpp&#039;&#039;&#039; - PostgreSQL Connection class&lt;br /&gt;
* &#039;&#039;&#039;pgQueryThread.cpp&#039;&#039;&#039; - PostgreSQL threaded query class&lt;br /&gt;
* &#039;&#039;&#039;pgSet.cpp&#039;&#039;&#039; - PostgreSQL ResultSet class&lt;br /&gt;
&lt;br /&gt;
==== dlg ==== &lt;br /&gt;
Contains the source code for all dialogs used by pgAdmin like by example:&lt;br /&gt;
* &#039;&#039;&#039;dlgOperator.cpp&#039;&#039;&#039; - PostgreSQL Operator Property&lt;br /&gt;
* &#039;&#039;&#039;dlgHbaConfig.cpp&#039;&#039;&#039; - Configure setting&lt;br /&gt;
* &#039;&#039;&#039;dlgFindReplace.cpp&#039;&#039;&#039; - Search and replace&lt;br /&gt;
&#039;&#039;&#039;And more...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== include ==== &lt;br /&gt;
Contains all headers files (.h) used by pgAdmin, is divided in several folders for organization purpose.&lt;br /&gt;
&lt;br /&gt;
==== schema ==== &lt;br /&gt;
Contains all classes related to postgresql schemas, like by example:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pgSchema.cpp&#039;&#039;&#039; - schema class&lt;br /&gt;
* &#039;&#039;&#039;pgCollection.cpp&#039;&#039;&#039; - Simple object for use with &#039;collection&#039; nodes&lt;br /&gt;
* &#039;&#039;&#039;pgForeignKey.cpp&#039;&#039;&#039; - ForeignKey class&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;and others.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== ui ==== &lt;br /&gt;
Contains xrc dialogue resource files.&lt;br /&gt;
&lt;br /&gt;
==== ctl ==== &lt;br /&gt;
Contains the source code for controls used by pgAdmin:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;calbox.cpp&#039;&#039;&#039; - Date-picker control box&lt;br /&gt;
* &#039;&#039;&#039;ctlComboBox.cpp&#039;&#039;&#039; - enhanced combobox control&lt;br /&gt;
* &#039;&#039;&#039;ctlListView.cpp&#039;&#039;&#039; - enhanced listview control&lt;br /&gt;
* &#039;&#039;&#039;ctlMenuToolbar.cpp&#039;&#039;&#039; - Menu tool bar&lt;br /&gt;
** &#039;&#039;Note:&#039;&#039; This code is used with the authors permission from Paul Nelson (http://www.pnelsoncomposer.com/)&lt;br /&gt;
* &#039;&#039;&#039;ctlSecurityPanel.cpp&#039;&#039;&#039; - Panel with security information&lt;br /&gt;
* &#039;&#039;&#039;ctlSQLBox.cpp&#039;&#039;&#039; - SQL syntax highlighting textbox&lt;br /&gt;
* &#039;&#039;&#039;ctlSQLGrid.cpp&#039;&#039;&#039; - SQL Query result window&lt;br /&gt;
* &#039;&#039;&#039;ctlSQLResult.cpp&#039;&#039;&#039; - SQL Query result window&lt;br /&gt;
* &#039;&#039;&#039;ctlTree.cpp&#039;&#039;&#039; - wxTreeCtrl containing pgObjects&lt;br /&gt;
* &#039;&#039;&#039;explainCanvas.cpp&#039;&#039;&#039; - Explain Canvas&lt;br /&gt;
* &#039;&#039;&#039;explainShape.cpp&#039;&#039;&#039; - Explain Shapes&lt;br /&gt;
* &#039;&#039;&#039;timespin.cpp&#039;&#039;&#039; - timeSpin SpinCtrl&lt;br /&gt;
* &#039;&#039;&#039;xh_calb.cpp&#039;&#039;&#039; - wxCalendarBox handler&lt;br /&gt;
* &#039;&#039;&#039;xh_ctlcombo.cpp&#039;&#039;&#039; - ctlComboBox handler&lt;br /&gt;
* &#039;&#039;&#039;xh_ctltree.cpp&#039;&#039;&#039; - ctlTree handler&lt;br /&gt;
* &#039;&#039;&#039;xh_sqlbox.cpp&#039;&#039;&#039; - ctlSQLBox handler&lt;br /&gt;
* &#039;&#039;&#039;xh_timespin.cpp&#039;&#039;&#039; - wxTimeSpinCtrl handler&lt;br /&gt;
&lt;br /&gt;
==== debugger ==== &lt;br /&gt;
Contains debugger related classes like:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;debugger.cpp&#039;&#039;&#039; - Debugger factories&lt;br /&gt;
* &#039;&#039;&#039;dlgDirectDbg.cpp&#039;&#039;&#039; - debugger &lt;br /&gt;
* &#039;&#039;&#039;frmDebugger.cpp&#039;&#039;&#039; - debugger&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;And more&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== frm ==== &lt;br /&gt;
Contains forms related classes like:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;frmAbout.cpp&#039;&#039;&#039; - About Box&lt;br /&gt;
* &#039;&#039;&#039;frmMain.cpp&#039;&#039;&#039; - The main form&lt;br /&gt;
** &#039;&#039;&#039;events.cpp&#039;&#039;&#039; - Event handlers, browser and statistics functions for frmMain.&lt;br /&gt;
* &#039;&#039;&#039;frmPassword.cpp&#039;&#039;&#039; - Change password&lt;br /&gt;
* &#039;&#039;&#039;frmQuery.cpp&#039;&#039;&#039; - SQL Query Box&lt;br /&gt;
* &#039;&#039;&#039;frmReport.cpp&#039;&#039;&#039; - The report file dialogue&lt;br /&gt;
&lt;br /&gt;
==== slony ==== &lt;br /&gt;
Constains classes related to administration of Slony-I Clusters.&lt;br /&gt;
&lt;br /&gt;
==== utils ==== &lt;br /&gt;
Utility classes used by pgAdmin like:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;factory.cpp&#039;&#039;&#039; - Object classes factory&lt;br /&gt;
* &#039;&#039;&#039;favourites.cpp&#039;&#039;&#039; - Query favourites&lt;br /&gt;
* &#039;&#039;&#039;md5.cpp&#039;&#039;&#039; - MD5 password encryption functions&lt;br /&gt;
* &#039;&#039;&#039;misc.cpp&#039;&#039;&#039; - Miscellaneous Utilities&lt;br /&gt;
* &#039;&#039;&#039;pgconfig.cpp&#039;&#039;&#039; - backend configuration classes&lt;br /&gt;
* &#039;&#039;&#039;sysLogger.cpp&#039;&#039;&#039; - Log handling class&lt;br /&gt;
* &#039;&#039;&#039;sysProcess.cpp&#039;&#039;&#039; - External process&lt;br /&gt;
* &#039;&#039;&#039;sysSettings.cpp&#039;&#039;&#039; - Settings handling class&lt;br /&gt;
* &#039;&#039;&#039;utffile.cpp&#039;&#039;&#039; - file io with BOM interpretation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;And more.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Developer Notes ==&lt;br /&gt;
&lt;br /&gt;
=== To add actions to the main window (frmMain) ===&lt;br /&gt;
&lt;br /&gt;
* Create the frmXXX class that will render the new function.&lt;br /&gt;
* Create an actionFactory (or contextActionFactory, if the action will display in context menus too) derived factory for each action to be performed, and register it in frmMain::CreateMenus(). Never touch menu.h, or anything for that. Easy examples are frmGrantWizard or frmEditGrid.&lt;br /&gt;
** Implement CheckEnable() for each factory, checking the current object if the action applies.&lt;br /&gt;
** Implement StartDialog(), which brings up the dialog.&lt;br /&gt;
&lt;br /&gt;
  Following this, you should be able to add new actions on objects by just adding&lt;br /&gt;
  the source and registering the new menu in frmMain.cpp. If you think you need &lt;br /&gt;
  to modify more files, you&#039;re probably wrong.&lt;br /&gt;
&lt;br /&gt;
=== To add objects to the object tree ===&lt;br /&gt;
&lt;br /&gt;
* Implement the class with proper hierarchy. pgCast and dlgCast are simple examples. &lt;br /&gt;
* Instantiate a collection in the pgXXX object where it should be located under.&lt;br /&gt;
&lt;br /&gt;
=== Property page dialogue layout ===&lt;br /&gt;
&lt;br /&gt;
Design of dialogs should follow these rules as much as possible&lt;br /&gt;
&lt;br /&gt;
* Standard dialog heights are 150, 250, and 330&lt;br /&gt;
* Standard dialog heights are 220, and 300&lt;br /&gt;
* Notebook is at 2,2d, size (216,216d)&lt;br /&gt;
* Standard button size is (50,15d)&lt;br /&gt;
* First control at (5,5d)&lt;br /&gt;
* Standard controls are at (70,[y] d), size (135,12d)&lt;br /&gt;
* Vertical constrol spacing is 15d, for radio buttons and checkboxes 12d&lt;br /&gt;
* Static text has a vertical offset of 2 relative to other controls&lt;br /&gt;
* Static text should be designed with 50 % space in reserve, to leave enough space for translated strings.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/WxWidgets&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[2] http://www.dwheeler.com/sloccount/&lt;/div&gt;</summary>
		<author><name>Gleu</name></author>
	</entry>
</feed>