nyuuzyou/wikis huggingface dataset:
PGUG EU Media Coordination

This is an overview of publications where we want to have regular PostgreSQL exposure. Feel free to extend the list with interesting Publications in your area.
= Publications =
Publication 	Publisher 	Type 	Language	Target audience 	Contact
Linux Magazin 	Linux New Media AG 	Monthly Magazine 	German 	Professional/Commercial FOSS Users	Jens-Christoph Brendel
Admin Magazin 	Linux New Media AG 	Monthly Magazine 	German 	IT-Administrators 	Jens-Christoph Brendel
Linux Technical Review	Linux New Media AG 	Subscriber-only Online Publication	German 	Architects & Decision Makers 	Jens-Christoph Brendel
iX 	Heise Zeitschriften Verlag GmbH & Co. KG	Monthly Magazine 	German 	IT-Administrators 	FIXME
Entwickler Magazin 	Software & Support Verlag GmbH 	Monthly Magazine 	German 	Developers? 	FIXME
DatabasePro 	Neue Mediengesellschaft Ulm mbH 	Two-monthly Magazine 	German 	Developers 	Erik Franz
= Published articles =
Publication 	Title	Autor 	Date/Issue
Linux Magazin	FIXME	Andreas Scherbaum	FIXME
Category:Users group
PG UK 2008

PG UK 2008, the UK's first PostgreSQL conference was held on the 2nd April 2008 at the Conservatoire in Birmingham as part of the UKUUG (UK Unix User's Group) Spring 2008 conference. The following talks were presented.
* PostgreSQL UK 2008 - Simon Riggs, 2nd Quadrant
* How the PostgreSQL Project Works - Dave Page, EnterpriseDB (Audio)
* Postgres At Claranet - Chris Fewtrell, Clara.net (Audio)
* Explaining EXPLAIN - Greg Stark, EnterpriseDB (Audio)
* PostgreSQL in the Data Center - Detlef Ulherr, Sun Microsystems (Audio)
* Experience with full text search - Richard Huxton, Archonet
* Integrating map data with PostGIS - Mark Cave-Ayland, Sirius (Audio)
* PostgreSQL Performance Features in 8.3 - Simon Riggs, 2nd Quadrant (Audio)
* Integrated monitoring for PostgreSQL - Tim Retout, Credativ
= Audio =
Audio from the above talks in Ogg format is also available:
* Explaining_EXPLAIN.ogg (15.1MB)
* How_the_PostgreSQL_Project_Works.ogg (6.7MB)
* Pgsindatacenter.ogg (15.3MB)
* PostGISPGUK.ogg (10.8MB)
* PostgresAtClaranet.ogg (10.7MB)
* Postgres_Performance_Update.ogg (12.5MB)
Category:PostgreSQL Events
PgVector

= Notes =
* users want to store vectors in Postgres already
** lose users if vector data doesn't perform
* FAISS - open source library of algorithms for vector search
* recall
* Vectors don't fit on a page
** algorithmic problem following pointers?
** just need to fit the vector somehow?
* Quantized
* Split vectors
* GiST vs BTree?
* SP-GiST
** compress (dimension reduction, precision reduction)
** KNN?
* normalization allows compression? same exponent?
* vector table access method?
* no concept of "approximate" answer
* pg_vector uses IVF FLAT (custom index access method)
* why can't we add toast tables to indexes?
* chain leaf pages ("overflow")
* what needs to be in core?
** better handle large vectors across pages
** TAM improvements?
* "If it quacks like a duck and looks like a coffee cup..."
Pie Charts

Based on the original idea by Shlomi Noach at
http://code.openark.org/blog/mysql/sql-pie-chart
Change the "VALUES" subquery to use a different data set. 
\set width 80
\set height 25
\set radius 1.0
\set colours #;o:X"@+-=123456789abcdef
WITH slices AS (
 SELECT CAST(row_number() over () AS integer) AS slice,
 name, 
	 value,
	 100.0 * value / sum(value) OVER () AS percentage,
	 2*PI() * sum(value) OVER (rows unbounded preceding) 
 / sum(value) OVER () AS radians
 FROM (VALUES ('red',1),
 ('blue',2),
 ('orange',3),
 ('white',4)
 ) AS data(name,value))
(
 SELECT array_to_string(array_agg(c),) AS pie_chart
 FROM (
 SELECT x, y,
 CASE WHEN NOT (sqrt(pow(x, 2) + pow(y, 2)) 
 BETWEEN :radius*1/10 AND :radius)
 THEN ' '
 ELSE substring(:colours,
 (select min(slice) 
 from slices 
 where radians >= PI() + atan2(y,-x)),
 1)
 END AS c
 FROM (SELECT 2.0*generate_series(0,:width)/:width-1.0) AS x(x),
 (SELECT 2.0*generate_series(0,:height)/:height-1.0) AS y(y)
 ORDER BY y,x
 ) AS xy
 GROUP BY y
 ORDER BY y
)
UNION ALL 
SELECT repeat(substring(:colours,slice,1), 2) || ' ' || 
 name || ': ' || 
 value || ' (' || round(percentage,0) || '%)' 
 FROM slices;
Result:
 pie_chart 
-----------------------------------------------------------------------------------
 ; 
 oooo;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 ooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 oooooooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 ooooooooooooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 ooooooooooooooooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 oooooooooooooooooooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###### 
 oooooooooooooooooooooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;########### 
 ooooooooooooooooooooooooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;################## 
 ooooooooooooooooooooooooooooooooooo;;;;;;;;;;;;;;;;;;;####################### 
 ooooooooooooooooooooooooooooooooooooo;;;;;;;;;;;;;;############################ 
 oooooooooooooooooooooooooooooooooooooo;;;;;;;;################################# 
 oooooooooooooooooooooooooooooooooooo #################################### 
 oooooooooooooooooooooooooooooooooooo :::::::::::::::::::::::::::::::::::: 
 ooooooooooooooooooooooooooooooooo:::::::::::::::::::::::::::::::::::::::::::::: 
 oooooooooooooooooooooooooooo::::::::::::::::::::::::::::::::::::::::::::::::::: 
 ooooooooooooooooooooooo:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 oooooooooooooooooo::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 ooooooooooo:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 oooooo::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 ::::::::::::::::::::::::::::::::::::::::::::::::::: 
 ::::::::::::::::::::::::::::::::::::::::::: 
 ::::::::::::::::::::::::::::::: 
 : 
 ## red: 1 (10%)
 ;; blue: 2 (20%)
 oo orange: 3 (30%)
 :: white: 4 (40%)
(30 rows)
Category:SQL
Pivot query

by Emanuel Calvo
Parametter= your query. Beware, the first column in your query will be
the column name plus a number (for cases in what you have not distinct
values).
CREATE OR REPLACE FUNCTION pivoty_with_header(query text) RETURNS void AS $pivot$
DECLARE
 num_cols int;
 num_rows int;
 table_pivoted text;
 columna text;
 header text;
 counter int := 0;
BEGIN
 DROP TABLE IF EXISTS pivoted;
 DROP TABLE IF EXISTS pivot_;
 
 EXECUTE 'CREATE TEMP TABLE pivot_ AS ' || query ;
 SELECT count(*) INTO num_cols from information_schema.columns where table_name = 'pivot_';
 SELECT count(*) INTO num_rows FROM pivot_;
 table_pivoted := 'CREATE TABLE pivoted (';
 SELECT column_name into header from information_schema.columns where table_name = 'pivot_' limit 1;
 FOR header IN EXECUTE 'SELECT ' || header || ' from pivot_'
 LOOP
 counter := counter +1;
 SELECT table_pivoted || 'col_' || translate(header,'.,|/?!',) || counter ||' text ,' INTO table_pivoted;
 END LOOP;
 select regexp_replace(table_pivoted,E'\,$',,'g') INTO table_pivoted;
 select table_pivoted || ')' into table_pivoted;
 EXECUTE table_pivoted;
 
 
 FOR columna IN SELECT column_name::Text FROM information_schema.columns where table_name = 'pivot_'
 LOOP
 if (columna != ('col_' || translate(header,'.,|/?!',)) )
 THEN
 EXECUTE 'INSERT INTO pivoted SELECT ((translate(array_agg(' || columna || ')::text,{},() ))::pivoted).* FROM pivot_';
 END IF;
 END LOOP;
 
END;
$pivot$ LANGUAGE plpgsql;
Another without using column name:
CREATE OR REPLACE FUNCTION pivoty(query text) RETURNS void AS $pivot$
DECLARE
 num_cols int;
 num_rows int;
 table_pivoted text;
 columna text;
BEGIN
 DROP TABLE IF EXISTS pivoted;
 DROP TABLE IF EXISTS pivot_;
 
 EXECUTE 'CREATE TEMP TABLE pivot_ AS ' || query ;
 SELECT count(*) INTO num_cols from information_schema.columns where table_name = 'pivot_';
 SELECT count(*) INTO num_rows FROM pivot_;
 table_pivoted := 'CREATE TABLE pivoted (';
 FOR i IN 1 .. num_rows 
 LOOP
 IF ( i = num_rows ) 
 THEN
 SELECT table_pivoted || 'col' || i || ' text ' INTO table_pivoted;
 ELSE
 SELECT table_pivoted || 'col' || i || ' text ,' INTO table_pivoted;
 END IF;
 END LOOP;
 select table_pivoted || ')' into table_pivoted;
 EXECUTE table_pivoted;
 FOR columna IN SELECT column_name::Text FROM information_schema.columns where table_name = 'pivot_'
 LOOP
 EXECUTE 'INSERT INTO pivoted SELECT ((translate(array_agg(' || columna || ')::text,{},() ))::pivoted).* FROM pivot_';
 
 END LOOP;
END;
$pivot$ LANGUAGE plpgsql;
This function will generate a table called pivoted of your query, so execute it with
the query as parametter and then:
SELECT * FROM pivoted;
Planner Statistics

In order for queries to execute quickly, the PostgreSQL query planner needs to have accurate statistics about the tables in your database. See Statistics Used by the Planner and Using EXPLAIN for more information about this.
Statistics are updated by running the VACUUM ANALYZE, either against the whole database or against the table you're interested in. Starting in PostgreSQL 8.1, you can automate this task by using the Auto-Vacuum Daemon. This can take some configuration to setup usefully, in PostgreSQL 8.3 auto-vacuum is intelligent and well tuned enough that it's turned on by default.
The most popular tunable that controls statistics gathering is default_statistics_target, which can be set per table and column with ALTER TABLE SET STATISTICS. The useful range is generally 10 (the default) to 100. Higher settings can cause the statistics collection process itself to be a drag on performance. For more information, see the long thread on Better default_statistics_target - Part 2.
Category:AdministrationCategory:Performance
Planner Statistics/ja

問い合わせを高速に実行させるためには、PostgreSQL問い合わせプランナはデータベース内のテーブルに関する統計情報を正確に保持する必要があります。
詳細についてはStatistics Used by the PlannerおよびUsing EXPLAINを参照してください。
データベース全体、あるいは、対象としたいテーブルに対してVACUUM ANALYZEを実行することで統計情報は更新されます。
PostgreSQL 8.1から自動バキュームデーモンを使用することにより、この作業を自動化できるようになりました。
有用に設定するためにはいくつか設定項目を取りますが、PostgreSQL 8.3の自動バキュームは機能が上がり、デフォルトのまま有効にしておくだけで十分調整されています。
統計情報の収集を制御するもっともよくつかわれる調整項目は default_statistics_targetです。
これはALTER TABLE SET STATISTICSを使用してテーブル毎および列毎に設定可能です。
有用な範囲は通常10（デフォルト）から100です。
設定を大きくすることにより、統計情報収集プロセス自身が性能に影響を与えます。
これ以上の情報については、長めのスレッドですが、Better default_statistics_target から Part 2を参照してください。
Category:JapaneseCategory:AdministrationCategory:Performance
Planner Statistics/ru

Чтобы запросы выполнялись быстро, планировщику PostgreSQL необходима правильная статистика по таблицам вашей базы данных. См. Статистика, используемая планировщиком и Использование Explain.
Статистика обновляется в результате запуска VACUUM ANALYZE для всей базы, или для требуемой таблицы. Начиная с версии PostgreSQL 8.1, эту задачу можно автоматизировать с помощью демона Auto-Vacuum. Может потребоваться настройка для достижения качественного результата. Начиная с версии PostgreSQL 8.3 авто-вакуум довольно интеллектуальный и включен по умолчанию.
Наиболее популярная настройка, управляющая сборщиком статистики, это default_statistics_target, которая может выставляться для отдельных таблиц и колонок с помощью ALTER TABLE SET STATISTICS. Обычно значение лежит в рамках от 10 (по умолчанию) до 100. Более высокие значения могут оказывать влияние на производительность. Подробнее см. обсуждение Оптимальный default_statistics_target и Часть 2.
Category:Administration
Category:Performance
Category:Russian
Platypus

A place to collect reports of Perl FFI::Platypus and the in-development FFI-based test framework overhaul working on different platforms.
= Known to work =
* Debian 12 on amd64, installed with: apt-get install libffi-platypus-perl
* FreeBSD 14 on amd64, installed with: pkg install p5-FFI-Platypus
* macOS + MacPorts on arm64, installed with: port install p5-ffi-platypus
PL Matrix

This page provides a list of known Procedural Language handlers for PostgreSQL.
Language 	Handler 	Status 	Availability	Named Parameters? 	OUT Parameters? 	(Un)Trusted 	Notes
C# 	PL/dotnet 	Beta 	pl/dotnet 	yes 	yes 	Untrusted 	install with CREATE EXTENSION
F# 	PL/dotnet 	Beta 	pl/dotnet 	yes 	yes 	Untrusted 	install with CREATE EXTENSION
Haskell 	PL/Haskell 	Production 	PL/Haskell 	? 	? 	Trusted and Untrusted 	
Java 	PL/Java 	Production 	PL/Java 	yes 	partial (no INOUT) 	Trusted and Untrusted, both configurable	install with CREATE EXTENSION
JavaScript	PL/v8 	Production 	pl/v8js 	yes 	yes 	Trusted 	install with CREATE EXTENSION
Julia 	PL/Julia 	? 	pl/julia 	? 	? 	Untrusted 	install with CREATE EXTENSION
LOLCODE 	PL/lolcode 	Alpha 	pl/lolcode 	yes 	? 	? 	
Lua 	pl/lua (ng)	Production 	pl/lua (ng) 	yes 	yes 	Trusted and Untrusted 	install with CREATE EXTENSION
Perl 	PL/Perl 	Production 	in core 	no 	no 	Trusted and Untrusted 	
PHP 	PL/PHP 	Beta 	pl/php 	Yes 	? 	? 	
PL/pgSQL 	PL/pgSQL 	Production 	in core 	yes 	yes 	Trusted 	compiled by default
Python 	PL/Python 	Production 	in core 	yes 	support for one OUT parameter from 8.4, multiple from 9.1	Untrusted 	
R 	PL/R 	Production 	PL/R 	yes 	no 	Untrusted 	
Ruby 	PL/Ruby 	? 	pl/ruby 	? 	? 	? 	
Rust 	PL/Rust 	Production 	PL/Rust 	yes 	no 	Trusted and Untrusted 	install with CREATE EXTENSION
Scheme 	PL/scheme 	Unmaintained	pl/scheme 	yes 	yes 	Untrusted 	
Shell 	PL/sh 	Production 	PL/sh 	no (not useful) 	no 	Untrusted necessarily 	
SQL 	None 	Production 	in core 	yes (version 9.2+)	yes 	Trusted 	available by default
Tcl 	PL/Tcl 	Production 	in core 	no 	no 	Trusted and Untrusted 	
XSLT 	PL/XSLT 	Alpha 	pl/xslt 	yes 	no 	Untrusted 	install with CREATE EXTENSION
Note: All languages are allowed to use parameter names in the function parameter list declaration. The Named Parameters column indicates if the body of the function can refer to the parameters by those names, or whether it has to use a notation such as $1, $2, etc.
Note: All languages support parameters that are explicitly marked as IN parameters. Unless otherwise specified, languages that support OUT parameters also support INOUT parameters.
Category:Languages
PL/pgSQL Dynamic Triggers

== Access the fields in NEW from PL/pgSQL Triggers ==
EXECUTE 'SELECT (' ||
 quote_literal(NEW) || '::' || TG_RELID::regclass ||
 ').' || quote_ident(columnname)
 INTO var;
This works as of 8.4:
CREATE OR REPLACE FUNCTION dynamic_trigger()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
 ri RECORD;
 t TEXT;
BEGIN
 RAISE NOTICE E'\n Operation: %\n Schema: %\n Table: %',
 TG_OP,
 TG_TABLE_SCHEMA,
 TG_TABLE_NAME;
 FOR ri IN
 SELECT ordinal_position, column_name, data_type
 FROM information_schema.columns
 WHERE
 table_schema = TG_TABLE_SCHEMA
 AND table_name = TG_TABLE_NAME
 ORDER BY ordinal_position
 LOOP
 EXECUTE 'SELECT ($1).' || ri.column_name || '::text' INTO t USING NEW;
 RAISE NOTICE E'Column\n number: %\n name: %\n type: %\n value: %.',
 ri.ordinal_position,
 ri.column_name,
 ri.data_type,
 t;
 END LOOP;
 RETURN NEW;
END;
$$;
Category:Snippets
Category:PL/pgSQL
PL/Proxy

== Project Overview ==
PL/Proxy is database partitioning system implemented as PL language. Main idea is that proxy function will be created with same signature as remote function to be called, so only destination info needs to be specified inside proxy function body.
== Project Status ==
Stable, in production.
== Features ==
* PL/Proxy functions detect remote functions to be called from their own signature.
* Function can be run on one, some or all members of the cluster.
* If query is executed on several partitions, it will happen in parallel.
* Queries are run in auto-commit mode on the remote server.
* Query parameters are sent separately from query body, thus avoiding quoting/unquoting overhead on both sides.
* Does not contain code connection pooling, works with external pooler if needed, preferably PgBouncer.
== Documentation ==
* Language syntax.
* Cluster config functions.
* FAQ, describes few design decisions.
* Official tutorial
* Kristo Kaiv's tutorial: part 1, part 2.
== Downloads ==
* Source releases: https://plproxy.github.io/
* GIT: https://github.com/plproxy/plproxy
Binary packages (may not be up-to-date)
* Deb: PL/Proxy is included in Debian and Ubuntu official repositories as postgresql-X.Y-plproxy package, where X.Y is postgres major version.
* RPM: PGDG Yum repository
== Community Support ==
* Discussion: https://gitter.im/plproxy/plproxy
* Bugtracker: https://github.com/plproxy/plproxy/issues
== Quick Examples ==
=== Simple remote function call ===
Connect to database "users" on localhost and call SQL function there: SELECT * FROM get_user_email($1);
 CREATE FUNCTION get_user_email(username text) RETURNS text AS $$
 
 CONNECT 'dbname=users';
 
 $$ LANGUAGE plproxy;
=== Partitioned remote function call ===
Users are spread over several databases, partition number is acquired by taking hashtext(username). This needs also configuring the cluster, described in documentation. After this is done, actual proxy function looks following:
 CREATE FUNCTION get_user_email(username text) RETURNS text AS $$
 
 CLUSTER 'userdb';
 RUN ON hashtext(username);
 
 $$ LANGUAGE plproxy;
Category:Clustering
PLPSM

I started work on implementation PSM language for PostgreSQL. This is a second attack on this subject. I wrote a PLpgPSM interpret based on PLpgSQL interpret. After a few years I decided so this isn't a well way, and started from scratch.
* PLpgSQL is very mature language (interpret)
** Code is relative complex but not stable,
** It is a interpret with very lazy checking of SQL code, 
** Code is hardly optimized on speed,
** Code is old - a few known trick are not used in all from backward compatibility reasons. 
** PLpgSQL type system is relative complex - it uses a scalars, rows and records.
There is a minimal chance to move a new language with similar code complexity like PLpgSQL to core. But outside the core is relative hard work to maintain a complex code, then isn't PLpgSQL good base for new language. This is a reason why I started from zero. For some near years there isn't goal a same performance like PLpgSQL but good maintainability, readability and extensibility. Unlike PL/pgSQL PSM language requires a query checking in compile time - a automatic variables related to statement FOR are deduced from query's result. So these similar languages demands little bit different design. Next issue of PL/pgSQL so this is more dynamic, than is necessary. Dynamic SQL was a evil for years. So there was a goal to eliminate a usage of dynamic sql. You can use a query in functions that reads from non existing tables (in startup execution time), you can call a non existing functions. These features are not available in PSM, because a integrated queries are checked early. Now, dynamic sql cannot be a risk (with USAGE clause), so there are no reason why do compiler more complex. More, a errors in SQL are found early. 
===Points that should be changed about SPI===
* some expression parser and executor support,
** possibility to ensure a result types and typmods,
** possibility to activate a implicit casting,
** possibility to fetch from cursor to type specified target,
** some better work with composite types.
===Plan===
* psm0 .. simple but with full features compiler
* psm1 .. user friendly error messages and diagnostics + regress tests
* psm2 .. maximum possibility speed
* plpsm .. goal implementation
a implemented features will not be changed between psm0 and plpsm - only bugs will be fixed. A complete list of implemented features is specified by samples in test.sql file.
===More Info===
https://github.com/okbob/plpsm0
Category:Languages
Policies

Contains draft and approved policies of the PostgreSQL project regarding web, infrastructure, mailing lists, and more.
The following policies are now maintained on the main website:
* Approval Policies
** News and Events Approval Policies
** Professional Services and Hosting Approval Policies
** Planet PostgreSQL policy
* On the Project Name
* Being a Sponsor
* Archives Policy
* Trademark Policy
* PostgreSQL Release Support Policy
* Code of Conduct
* @postgresql Twitter Account Policy
The following policies require updates or review before being moved to the main website:
* Contributor Listings
* PostgreSQL.Org Booth policy for tradeshows
* Release Preparation
* Fundraising Group
!
Posters

== Propaganda Posters ==
Image:Reasons.497x702.png| 10 reasons to entrust your data to PostgreSQL (SVG version) 
Image:What is pg(2).pdf| What is PostgreSQL?(OOo version)
Image:Postgresql_full_steam_english.jpeg|Upcoming PostgreSQL 9.2 Full Steam Ahead (jpeg, landscape, A4 format) (JPEG version tar including xcf gimp data)
== Technical Posters ==
Image:PostgreSQL 83 Stat View.497x702.png| PostgreSQL Stats Views()
Image:PostgreSQL 83 Internal Catalogs.png| Internal Catalogs ( )
Category:Advocacy
PostgresForest

== Project Overview ==
PostgresForest is designed for the use of Business Intelligence apps and (read intensive) Web apps.
* PostgreSQL JDBC driver derivative: PostgresForest is a modified JDBC driver to enable clustering features.
* High Availability: PostgresForest enables to implement an high-available database system with its replication facilities.
* Parallel Query Processing: PostgresForest can understand and execute parallel queries in a shared-nothing distributed database.
* On-Line Recoverying: PostgresForest can recover a node from its failure condition without the service downtime.
== Project Status ==
== Project Contacts ==
* PostgresForest on SourceForge.JP
* PostgresForest on NTT DATA CORPORATION
== General Information ==
* Scalability: Up to tens of servers.
* Read Scaling: Yes
* Write Scaling: Yes (on partitioning)
* Synchronous replication: Yes (statement-based replication)
* Triggers/procedures: 
* Parallel Query: Yes
* Failover/HA: Yes
* Online Provisioning: 
* PostgreSQL Upgrades: 
* Detached Node/WAN: 
* PostgreSQL Core Modifications Required: Yes (lock timeout patch required to avoid the global deadlock)
* Programming Languages: Java (A JDBC derivative)
== Clustering Model ==
 
PostgresForest is a query based replication system.
== Use Case ==
== Drawbacks ==
== Future plans ==
== Project Sponsors ==
* Sponsored by NTT DATA CORPORATION
== Others ==
Category:Clustering
Postgres Open 2012

Slides for talks will be linked here!
== Monday September 17 ==
* PostgreSQL AuthN / AuthZ
* PostgreSQL on ZFS
== Tuesday September 18 ==
* Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same
* 
* PostgreSQL When It's Not Your Job
* Large Scale MySQL Migration to PostgreSQL
* Choosing a logical replication system: Slony vs Bucardo
* Temporal Database Demo
* 12 Calm Years of PostgreSQL in Critical Messaging
* PostgreSQL in the cloud: Theory and Practice
* PostgreSQL Backup Strategies
* This Is PostGIS
* Embracing the Web with JSON and PLV8
* How Akiban Implemented a New Database Compatible with the PostgreSQL Protocol
* 
* 
* Full-text search - seek and ye shall find
=== Lightning Talks ===
I wonder if my function works? (pg_jobmon)
== Wednesday September 19 ==
* Super Jumbo Deluxe, plus more presentations here
* 
* TransLattice Elastic Database Architecture Deep Dive
* Deploying maximum HA architecture with Postgres , for pg_reorg p90x talk
* Scaling Postgres with some help from Redis
* Retail DDL
* Query Logging and Workload Analysis (link is to updated version titled "Beyond Query Logging")
* 
* DVDStore Benchmark and PostgreSQL
* Performance Improvements in PostgreSQL 9.2
* A Batch of Commit Batching
* Programming the SQL Way with Common Table Expressions
* Postgres is the new default – how we transitioned our platform at Engine Yard and why you should too
* Leveraging PLV8 in Javascript-heavy Web Applications
* PG Extractor - A smarter pg_dump