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

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2013_Developer_Meeting</id>
		<title>PgCon 2013 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2013_Developer_Meeting"/>
				<updated>2013-05-01T09:14:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 22nd May, 2013 near the University of Ottawa, prior to pgCon 2013. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org). &lt;br /&gt;
&lt;br /&gt;
Please note that this year the attendee numbers have been kept low in order to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.3 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 8:30AM to 5PM, and will be in the &amp;quot;Red Experience&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Josh Berkus (secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Peter Eisentraut&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Andres Freund&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Alexander Korotkov&lt;br /&gt;
* Fujii Masao&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Dave Page (chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* 9.4 Commitfest schedule&lt;br /&gt;
* [http://wiki.postgresql.org/wiki/Parallel_Query_Execution Parallel Query Execution] (Bruce, Noah)&lt;br /&gt;
* logical changeset generation review &amp;amp; integration (Andres)&lt;br /&gt;
* utilization of upcoming non-volatile RAM device (Kaigai)&lt;br /&gt;
* pluggable plan/exec nodes (Kaigai)&lt;br /&gt;
** to offload targetlist calculation, sorting, aggregates, ...&lt;br /&gt;
* [[GIN generalization]] (Alexander)&lt;br /&gt;
* An Extensibility Roadmap (dim)&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/FOSDEM_2013</id>
		<title>FOSDEM 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/FOSDEM_2013"/>
				<updated>2013-02-04T09:56:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;dim's talks at FOSDEM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Schedule==&lt;br /&gt;
&lt;br /&gt;
Schedule is available at the FOSDEM website: https://fosdem.org/2013/schedule/track/postgresql/&lt;br /&gt;
&lt;br /&gt;
== PGDay FOSDEM 2013 ==&lt;br /&gt;
&lt;br /&gt;
We are also organizing one-day event: https://wiki.postgresql.org/wiki/PGDay_FOSDEM_2013&lt;br /&gt;
&lt;br /&gt;
==Presentations==&lt;br /&gt;
&lt;br /&gt;
Slides of the presentations:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday, February 1st, 2013 ==&lt;br /&gt;
&lt;br /&gt;
=== Radisson Blu ===&lt;br /&gt;
&lt;br /&gt;
* Welcome (Magnus Hagander)&lt;br /&gt;
* Sqitch: VCS-enabled database change management (Ronan Dunklau)&lt;br /&gt;
* Postgresql 9.2 FTS Solutions (Emanuel Calvo)&lt;br /&gt;
* Pagination done the PostgreSQL way (Markus Winand) [[File:Pagination_Done_the_PostgreSQL_Way.pdf]]&lt;br /&gt;
* Announcements	FOSDEM PGDay 2013 (Dave Page, Jean-Paul Argudo)&lt;br /&gt;
* 3D an exact geometries for PostGIS (Hugo Mercier)&lt;br /&gt;
* Understanding PostgreSQL timelines (Heikki Linnakangas)&lt;br /&gt;
* Maintaining Very Large Databases (VLDs) (Devrim GÜNDÜZ)&lt;br /&gt;
&lt;br /&gt;
== Talks: Sunday, February 3rd, 2013 ==&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL FOSDEM Devroom ===&lt;br /&gt;
&lt;br /&gt;
* openbarter, a possible solution for ecological regulation (Olivier Chaussavoine)&lt;br /&gt;
* [http://tapoueh.org/images/confs/Fosdem2013_Event_Triggers.pdf Event Triggers] (Dimitri Fontaine)&lt;br /&gt;
* PostGIS 2.0 and beyond (Vincent Picavet)&lt;br /&gt;
* Making apt.postgresql.org a reality (Christoph Berg)&lt;br /&gt;
* Postgres Demystified (Craig Kerstiens)&lt;br /&gt;
* PostgreSQL as a Schemaless Database (Christophe Pettus)&lt;br /&gt;
* [http://tapoueh.org/images/confs/Fosdem2013_High_Availability.pdf Implementing High Availability] (Dimitri Fontaine)&lt;br /&gt;
* Practical Tips for Better PostgreSQL Applications (Marc Balmer)&lt;br /&gt;
&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>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T17:06:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* DROP CASCADE support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Use Cases ===&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
* Impact analysis/performance&lt;br /&gt;
&lt;br /&gt;
==== Logical Replication ====&lt;br /&gt;
&lt;br /&gt;
We want to record a DDL changes in a way that allows it to be replayed elsewhere in a flexible way. So we need access to both the original text and the fully qualified text once all search paths are resolved, making both available to allow replication to decide which to use. We don't need to fire actions for every conceivable sub-statement, only enough that we can accurately reproduce what occurred. So for example, a DROP CASCADE might just need to be replayed as a DROP CASCADE. Query text is available from utility hooks, but fully cooked SQL event info is required.&lt;br /&gt;
&lt;br /&gt;
==== Auditing ====&lt;br /&gt;
&lt;br /&gt;
We need to be able to record Who did What to Whom/WhichObject, When they did it and whether it succeeded. So we need access to userid, username, actioncategory, actiontext, subjectcategory, subjectid, action time, rc&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
&lt;br /&gt;
How long did we hold locks for? How long did the action take?&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that release.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Features still in the work for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main features we need and which are not yet commited in 9.3 are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
The next point is detailing where the discussion is at about those features that we didn't commit yet.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE / DROP OWNED support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
==== How to expose Information to Event Triggers Functions ====&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
* http://www.postgresql.org/message-id/CAFNqd5VuowUqXrHfWf_Ld-_szCUxaN3=RZD=XiVmNr_Yd=53QQ@mail.gmail.com&lt;br /&gt;
* http://www.postgresql.org/message-id/51055F11.6040208@ca.afilias.info&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T17:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Use Cases ===&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
* Impact analysis/performance&lt;br /&gt;
&lt;br /&gt;
==== Logical Replication ====&lt;br /&gt;
&lt;br /&gt;
We want to record a DDL changes in a way that allows it to be replayed elsewhere in a flexible way. So we need access to both the original text and the fully qualified text once all search paths are resolved, making both available to allow replication to decide which to use. We don't need to fire actions for every conceivable sub-statement, only enough that we can accurately reproduce what occurred. So for example, a DROP CASCADE might just need to be replayed as a DROP CASCADE. Query text is available from utility hooks, but fully cooked SQL event info is required.&lt;br /&gt;
&lt;br /&gt;
==== Auditing ====&lt;br /&gt;
&lt;br /&gt;
We need to be able to record Who did What to Whom/WhichObject, When they did it and whether it succeeded. So we need access to userid, username, actioncategory, actiontext, subjectcategory, subjectid, action time, rc&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
&lt;br /&gt;
How long did we hold locks for? How long did the action take?&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that release.&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Features still in the work for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main features we need and which are not yet commited in 9.3 are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
The next point is detailing where the discussion is at about those features that we didn't commit yet.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
==== How to expose Information to Event Triggers Functions ====&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
* http://www.postgresql.org/message-id/CAFNqd5VuowUqXrHfWf_Ld-_szCUxaN3=RZD=XiVmNr_Yd=53QQ@mail.gmail.com&lt;br /&gt;
* http://www.postgresql.org/message-id/51055F11.6040208@ca.afilias.info&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:35:32Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Missing features for 9.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main features we need and which are not yet commited in 9.3 are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
The next point is detailing where the discussion is at about those features that we didn't commit yet.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
==== How to expose Information to Event Triggers Functions ====&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
* http://www.postgresql.org/message-id/CAFNqd5VuowUqXrHfWf_Ld-_szCUxaN3=RZD=XiVmNr_Yd=53QQ@mail.gmail.com&lt;br /&gt;
* http://www.postgresql.org/message-id/51055F11.6040208@ca.afilias.info&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:29:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Distributed Sequences */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
==== How to expose Information to Event Triggers Functions ====&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
* http://www.postgresql.org/message-id/CAFNqd5VuowUqXrHfWf_Ld-_szCUxaN3=RZD=XiVmNr_Yd=53QQ@mail.gmail.com&lt;br /&gt;
* http://www.postgresql.org/message-id/51055F11.6040208@ca.afilias.info&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:25:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Distributed Sequences */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
==== How to expose Information to Event Triggers Functions ====&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
* http://www.postgresql.org/message-id/CAFNqd5VuowUqXrHfWf_Ld-_szCUxaN3=RZD=XiVmNr_Yd=53QQ@mail.gmail.com&lt;br /&gt;
* http://www.postgresql.org/message-id/51055F11.6040208@ca.afilias.info&lt;br /&gt;
&lt;br /&gt;
==== Distributed Sequences ====&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:25:07Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Command String Normalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
==== How to expose Information to Event Triggers Functions ====&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
See&lt;br /&gt;
* http://www.postgresql.org/message-id/CAFNqd5VuowUqXrHfWf_Ld-_szCUxaN3=RZD=XiVmNr_Yd=53QQ@mail.gmail.com&lt;br /&gt;
* http://www.postgresql.org/message-id/51055F11.6040208@ca.afilias.info&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* How to expose Information to Event Triggers Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
==== How to expose Information to Event Triggers Functions ====&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:22:38Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Command String Normalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
==== Command String Normalisation ====&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:22:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* DROP CASCADE support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
==== DROP CASCADE support ====&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:19:53Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* How to expose Information to Event Triggers Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:19:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* How to expose Information to Event Triggers Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to expose some magic PL variables. The already commited code exposes ''TG_EVENT'' and ''TG_TAG''.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_COMMAND&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:13:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Discussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement them.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to propose a mix of magic PL variables. The already commited code exposes TG_EVENT and TG_TAG.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_COMMAND&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T16:13:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* = Missing features for 9.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
=== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to propose a mix of magic PL variables. The already commited code exposes TG_EVENT and TG_TAG.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_COMMAND&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T15:56:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Expected Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers is landing in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
==== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to propose a mix of magic PL variables. The already commited code exposes TG_EVENT and TG_TAG.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_COMMAND&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T15:55:30Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Main advantages over ProcessUtility hooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disabled, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
==== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to propose a mix of magic PL variables. The already commited code exposes TG_EVENT and TG_TAG.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_COMMAND&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T15:53:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Event Triggers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support important use cases.&lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disable, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
==== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to propose a mix of magic PL variables. The already commited code exposes TG_EVENT and TG_TAG.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_COMMAND&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T15:47:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;First Version.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Event Triggers ==&lt;br /&gt;
&lt;br /&gt;
The Event Trigger patch series main goal is to allow for users to tweak DDL commands without having to hook in ProcessUtility(). The design has been made more general so that we can support &lt;br /&gt;
&lt;br /&gt;
=== Main advantages over ProcessUtility hooks ===&lt;br /&gt;
&lt;br /&gt;
The first version of Event Triggers has very few technical capabilities to offer that we don't already have available in the form of ProcessUtility hooks, so, what's the deal here?&lt;br /&gt;
&lt;br /&gt;
* You can write event triggers functions in PL/pgSQL, no need to write them in C, build an extension, ship it to the server's file system and finally install it;&lt;br /&gt;
&lt;br /&gt;
* You can actually list the currently installed Event Triggers by doing \dy in psql;&lt;br /&gt;
&lt;br /&gt;
* In ''single user'' mode the Event Triggers are disable, staying out of the way while you're busy fixing your production services;&lt;br /&gt;
&lt;br /&gt;
* It's possible to install more than one Event Trigger then decide as the DBA in which order to run the Event Triggers without having to decipher how the code is implemented and in which order the ''shared object librairies'' are going to be ''_Init()''ialized.&lt;br /&gt;
&lt;br /&gt;
=== Expected Features ===&lt;br /&gt;
&lt;br /&gt;
The first release of Event Triggers in PostgreSQL 9.3 and we will have a restricted set of features in that relase.&lt;br /&gt;
&lt;br /&gt;
==== Use Cases ====&lt;br /&gt;
&lt;br /&gt;
We attempt at being able to solve those use cases:&lt;br /&gt;
&lt;br /&gt;
* Logical Replication&lt;br /&gt;
* Auditing&lt;br /&gt;
* DDL support for Extensions&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
&lt;br /&gt;
So we want to provide those features:&lt;br /&gt;
&lt;br /&gt;
* Event Triggers that run either before or after a DDL command&lt;br /&gt;
* User Functions should be provided with detailed information:&lt;br /&gt;
** event name&lt;br /&gt;
** command tag&lt;br /&gt;
** operation (CREATE, ALTER or DROP)&lt;br /&gt;
** object kind (TABLE, FUNCTION, VIEW, etc)&lt;br /&gt;
** object OID&lt;br /&gt;
** object name&lt;br /&gt;
** schema name where the object lives&lt;br /&gt;
** &lt;br /&gt;
* support for DROP CASCADE&lt;br /&gt;
* support for dropping multiple objects&lt;br /&gt;
* support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Commited patches from the series ===&lt;br /&gt;
&lt;br /&gt;
Here's the list of what we already have:&lt;br /&gt;
&lt;br /&gt;
* Syntax support and documentation for event triggers.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3855968f328918b6cd1401dd11d109d471a54d40&lt;br /&gt;
** that was the first step, catalogs and grammar&lt;br /&gt;
* Make new event trigger facility actually do something.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3a0e4d36ebd7f477822d5bae41ba121a40d22ccc&lt;br /&gt;
** and now you can actually have your function called&lt;br /&gt;
** it will only know about ''tg_event'' and ''tg_tag'' &lt;br /&gt;
** and you can only write it in PLpgSQL&lt;br /&gt;
* Adjust many backend functions to return OID rather than void.&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c504513f83a9ee8dce4a719746ca73102cae9f13&lt;br /&gt;
** http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=82b1b213cad3a69cf5f3dfaa81687c14366960fc&lt;br /&gt;
** that's a preparing step so that we can expose the object OID in the event trigger&lt;br /&gt;
** not yet exposed though&lt;br /&gt;
* Add ddl_command_end support for event triggers.&lt;br /&gt;
**  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=841a5150c575ccd89e4b03aec66eeeefb21f3cbe&lt;br /&gt;
** so that you can call your event trigger when the object has already been ''CREATE''d&lt;br /&gt;
&lt;br /&gt;
==== Missing features for 9.3 === &lt;br /&gt;
&lt;br /&gt;
The main missing features are:&lt;br /&gt;
&lt;br /&gt;
* No specific information about the objects that the command target&lt;br /&gt;
* No access to the parse tree or the command string, raw or normalized&lt;br /&gt;
* No support for multiple targets per command&lt;br /&gt;
** only DROP can target more than one object at a time&lt;br /&gt;
** and DROP CASCADE is another special case of that&lt;br /&gt;
* No support for ''generated'' commands&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
Some of the features are still under discussion in order to find the best design we can implement.&lt;br /&gt;
&lt;br /&gt;
As a general note it's useful to recall that most of those features have already been coded at least once (some of them received one or more redesign and refactoring following review in the 9.2 and 9.3 cycles). So it's not about adding ''new'' features that we didn't see coming before, it's about finishing a patch series to match a subset of the features proposed a couple of years ago.&lt;br /&gt;
&lt;br /&gt;
The goal is to refine which subset we are ready to accept and to evaluate if we can ship with that subset as something that makes sense on its own.&lt;br /&gt;
&lt;br /&gt;
For example, with no information available at all about the specifics of the objects that a command is targeting, it's hard to see which use case you can actually solve with Event Triggers.&lt;br /&gt;
&lt;br /&gt;
==== ''generated'' and ''internal'' commands ====&lt;br /&gt;
&lt;br /&gt;
For context, the following command will actually run several operations:&lt;br /&gt;
&lt;br /&gt;
 CREATE TABLE foo(id serial primary key, f1 text);&lt;br /&gt;
&lt;br /&gt;
We will have ''CREATE SEQUENCE'' then a new ''CREATE TABLE'' statement using the name of the sequence we just created, then ''ALTER SEQUENCE'' and finally a ''CREATE INDEX'' command. The current implementation of PostgreSQL backend is to form a ''parse node'' from scratch and send that to ProcessUtility() again, in a recursive way.&lt;br /&gt;
&lt;br /&gt;
The current patch proposal is to expose those with a ''CONTEXT'' of ''GENERATED'' that is not matched by default by any Event Trigger, and allow the user to opt-in when he's interested into that level of implementation detail.&lt;br /&gt;
&lt;br /&gt;
It might not be very wise to make that implementation detail visible to users because that would make us unable to clean the mess later, should any developer has round tuits or motivation to go about that some day.&lt;br /&gt;
&lt;br /&gt;
One idea is to only expose users who are willing to code their event trigger in C, and another idea is then to only expose them via a ''hook''. The problem with the ''hook'' approach is that you need to build and expose the exact same amount of information.&lt;br /&gt;
&lt;br /&gt;
=== DROP CASCADE support ===&lt;br /&gt;
&lt;br /&gt;
A patch has been sent to allow to call an Event Trigger for each object that is dropped as part of a command: http://www.postgresql.org/message-id/m2fw1ieq5x.fsf@2ndQuadrant.fr&lt;br /&gt;
&lt;br /&gt;
=== How to expose Information to Event Triggers Functions ===&lt;br /&gt;
&lt;br /&gt;
The current proposal is to propose a mix of magic PL variables. The already commited code exposes TG_EVENT and TG_TAG.&lt;br /&gt;
&lt;br /&gt;
We're proposing to add to that the most common pieces of information as variables, adding to them those that are really cheap to build (it's a constant string):&lt;br /&gt;
&lt;br /&gt;
* Variables&lt;br /&gt;
** TG_OBJECTID&lt;br /&gt;
** TG_OBJECTNAME&lt;br /&gt;
** TG_SCHEMANAME&lt;br /&gt;
** TG_OPERATION&lt;br /&gt;
** TG_OBTYPENAME&lt;br /&gt;
** TG_COMMAND&lt;br /&gt;
** TG_CONTEXT&lt;br /&gt;
&lt;br /&gt;
* Accessors&lt;br /&gt;
** pg_get_event_command_string()&lt;br /&gt;
&lt;br /&gt;
About ''TG_CONTEXT'', see previous point.&lt;br /&gt;
&lt;br /&gt;
=== Command String Normalisation ===&lt;br /&gt;
&lt;br /&gt;
The main use case for the ''command string'' is Logical Replication. In that use case, it's very important to know off hand in which schemas the objects are created (resp. dropped, altered) and to some extend which names are given to automatically named objects (indexes, constraints, sequences).&lt;br /&gt;
&lt;br /&gt;
=== Distributed Sequences ===&lt;br /&gt;
&lt;br /&gt;
In the Logical Replication use case, it's important to be able, from an event trigger, to make it so that a ''CREATE SEQUENCE'' will in fact create a ''distributed'' sequence, in certain cases determined by the logical replication system (not known in the backend).&lt;br /&gt;
&lt;br /&gt;
=== Features For Next Releases ===&lt;br /&gt;
&lt;br /&gt;
Some features we intended to provide already in 9.2 will have to wait until we are ready, which will not be the case in the 9.3 timeframe.&lt;br /&gt;
&lt;br /&gt;
==== INSTEAD OF ====&lt;br /&gt;
&lt;br /&gt;
The idea is to be able to install an Event Trigger that takes control over an existing command, to be able to re-define it, maybe in terms of the command itself:&lt;br /&gt;
&lt;br /&gt;
 create event trigger my_create_extension instead of 'create extension'&lt;br /&gt;
    execute procedure my_create_extension();&lt;br /&gt;
&lt;br /&gt;
 create function my_create_extension()&lt;br /&gt;
         returns event_trigger&lt;br /&gt;
        language plpgsql&lt;br /&gt;
 as $$&lt;br /&gt;
 begin&lt;br /&gt;
    alter event trigger my_create_extension disable;&lt;br /&gt;
    -- do some stuff here&lt;br /&gt;
    create extension tg_objectid;&lt;br /&gt;
    -- do some more stuff here, presumably&lt;br /&gt;
 end;&lt;br /&gt;
 $$;&lt;br /&gt;
&lt;br /&gt;
Unfortunately it's already clear that the ''INSTEAD OF'' feature implementation is too hard to get right from the first release of Event Triggers, because the call points in the backend code must be really carefully placed.&lt;br /&gt;
&lt;br /&gt;
==== table_rewrite ====&lt;br /&gt;
&lt;br /&gt;
The idea is to provide an event called ''table_rewrite'' that will fire any time a command that will rewrite the whole of the table is to be executed, so that the DBA can install a local policy about that (accept the rewrite only at night when it's not a full moon, say).&lt;br /&gt;
&lt;br /&gt;
==== create table on insert ====&lt;br /&gt;
&lt;br /&gt;
Some developers are getting used to ''schema less'' databases nowadays, and want to be have the behaviour that when they do&lt;br /&gt;
&lt;br /&gt;
 INSERT INTO look_me_i_dont_exist(key, value) VALUES(1, 'foo');&lt;br /&gt;
&lt;br /&gt;
The table ''look_me_i_dont_exist'' is automatically created by PostgreSQL with two columns ''key'' of type ''integer'' (presumably) and ''value'' of type ''text'' here.&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Development_projects</id>
		<title>Development projects</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Development_projects"/>
				<updated>2013-01-30T14:52:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Active Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
If you are working on a PostgreSQL project and collaborating using the wiki, please add a link to your page(s) below.&lt;br /&gt;
&lt;br /&gt;
== Active Projects ==&lt;br /&gt;
* [[Hot Standby]] and [[Hot Standby TODO|TODO]] items - 9.0&lt;br /&gt;
* [[Streaming Replication]] - async is done in 9,0 / sync is under development&lt;br /&gt;
* [[Extensions]]&lt;br /&gt;
* [[Performances QA testing]]&lt;br /&gt;
* [[Temporal Extensions]]&lt;br /&gt;
* [[In-place upgrade]]&lt;br /&gt;
* [[Table partitioning]]&lt;br /&gt;
* [[JDBC]]&lt;br /&gt;
* [[SEPostgreSQL|Security-Enhanced PostgreSQL]]&lt;br /&gt;
* [[Clustering Development Projects]]&lt;br /&gt;
* [[Serializable]]&lt;br /&gt;
* [[SQL/MED]]&lt;br /&gt;
* [[Event Triggers]] - a patch series for 9.3&lt;br /&gt;
&lt;br /&gt;
== Developer project trackers ==&lt;br /&gt;
* [[Simon Riggs' Development Projects]]&lt;br /&gt;
* [[Greg Stark's Development Projects]]&lt;br /&gt;
* [[User:Petere|Peter Eisentraut's Page]]&lt;br /&gt;
* [[Aster's Development Projects]]&lt;br /&gt;
* [[Robert Haas' Development Projects]]&lt;br /&gt;
&lt;br /&gt;
== General feature wishlists ==&lt;br /&gt;
* [[DataWarehousing]]&lt;br /&gt;
* [[Statistics the planner doesn't have that it really needs]]&lt;br /&gt;
* [[:Image:Partitioning Requirements.pdf | Partitioning Requirements]]&lt;br /&gt;
* [[Logging Brainstorm]]&lt;br /&gt;
* [[Refactor Type System]]&lt;br /&gt;
&lt;br /&gt;
== Pending Projects ==&lt;br /&gt;
* [[Updatable views]]&lt;br /&gt;
* [[GUCS Overhaul]]&lt;br /&gt;
* [[FreeSpaceMapRewrite]]&lt;br /&gt;
* [[C++ Compatibility]]&lt;br /&gt;
&lt;br /&gt;
== Completed Projects ==&lt;br /&gt;
* [[64bit Windows port]] - 9.0&lt;br /&gt;
* [[DefaultACL|Default ACL Properties for DB Objects]] - 9.0&lt;br /&gt;
* [[GSoC_2008|Google Summer of Code 2008]]&lt;br /&gt;
* [[XML Support]] ([[XML Todo]]) - 8.3&lt;br /&gt;
* [[Enumerated Types]] - 8.3&lt;br /&gt;
* [[Wishlist For 8.3]]&lt;br /&gt;
* [[Gborg migration]]&lt;br /&gt;
* [[TrackerDiscussion| Tracker Discussion]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|!]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Event_Triggers</id>
		<title>Event Triggers</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Event_Triggers"/>
				<updated>2013-01-30T14:51:29Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;Created page with &amp;quot;Category:PostgreSQL 9.3&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:PostgreSQL 9.3]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Development_projects</id>
		<title>Development projects</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Development_projects"/>
				<updated>2013-01-30T14:50:43Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Active Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
If you are working on a PostgreSQL project and collaborating using the wiki, please add a link to your page(s) below.&lt;br /&gt;
&lt;br /&gt;
== Active Projects ==&lt;br /&gt;
* [[Hot Standby]] and [[Hot Standby TODO|TODO]] items - 9.0&lt;br /&gt;
* [[Streaming Replication]] - async is done in 9,0 / sync is under development&lt;br /&gt;
* [[Extensions]]&lt;br /&gt;
* [[Performances QA testing]]&lt;br /&gt;
* [[Temporal Extensions]]&lt;br /&gt;
* [[In-place upgrade]]&lt;br /&gt;
* [[Table partitioning]]&lt;br /&gt;
* [[JDBC]]&lt;br /&gt;
* [[SEPostgreSQL|Security-Enhanced PostgreSQL]]&lt;br /&gt;
* [[Clustering Development Projects]]&lt;br /&gt;
* [[Serializable]]&lt;br /&gt;
* [[SQL/MED]]&lt;br /&gt;
* [[Event Triggers]]&lt;br /&gt;
&lt;br /&gt;
== Developer project trackers ==&lt;br /&gt;
* [[Simon Riggs' Development Projects]]&lt;br /&gt;
* [[Greg Stark's Development Projects]]&lt;br /&gt;
* [[User:Petere|Peter Eisentraut's Page]]&lt;br /&gt;
* [[Aster's Development Projects]]&lt;br /&gt;
* [[Robert Haas' Development Projects]]&lt;br /&gt;
&lt;br /&gt;
== General feature wishlists ==&lt;br /&gt;
* [[DataWarehousing]]&lt;br /&gt;
* [[Statistics the planner doesn't have that it really needs]]&lt;br /&gt;
* [[:Image:Partitioning Requirements.pdf | Partitioning Requirements]]&lt;br /&gt;
* [[Logging Brainstorm]]&lt;br /&gt;
* [[Refactor Type System]]&lt;br /&gt;
&lt;br /&gt;
== Pending Projects ==&lt;br /&gt;
* [[Updatable views]]&lt;br /&gt;
* [[GUCS Overhaul]]&lt;br /&gt;
* [[FreeSpaceMapRewrite]]&lt;br /&gt;
* [[C++ Compatibility]]&lt;br /&gt;
&lt;br /&gt;
== Completed Projects ==&lt;br /&gt;
* [[64bit Windows port]] - 9.0&lt;br /&gt;
* [[DefaultACL|Default ACL Properties for DB Objects]] - 9.0&lt;br /&gt;
* [[GSoC_2008|Google Summer of Code 2008]]&lt;br /&gt;
* [[XML Support]] ([[XML Todo]]) - 8.3&lt;br /&gt;
* [[Enumerated Types]] - 8.3&lt;br /&gt;
* [[Wishlist For 8.3]]&lt;br /&gt;
* [[Gborg migration]]&lt;br /&gt;
* [[TrackerDiscussion| Tracker Discussion]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|!]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PGDay_FOSDEM_2013</id>
		<title>PGDay FOSDEM 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PGDay_FOSDEM_2013"/>
				<updated>2013-01-07T08:12:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Dinner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PGDay FOSDEM 2013 =&lt;br /&gt;
&lt;br /&gt;
This is the first PgDay we hold in Belgium. FOSDEM PGDay 2013 will be held on Feb 1st in Brussels, Belgium, at the Radisson Blu Royal hotel. As an extension to the regular PostgreSQL devroom at FOSDEM, it will cover topics for PostgreSQL users, developers and contributors, and anybody else interested in PostgreSQL&lt;br /&gt;
&lt;br /&gt;
== Details ==&lt;br /&gt;
&lt;br /&gt;
* '''Date:''' Feb 01st, 2013 9am-5pm&lt;br /&gt;
* '''Venue:''': Radisson Blu Royal Hotel&lt;br /&gt;
* '''Coordinator:''': PostgreSQL Europe [mailto:contact@pgconf.eu contact@pgconf.eu]&lt;br /&gt;
* '''Website:''': http://fosdem2013.pgconf.eu/&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
Free attendance, web registration required: http://fosdem2013.pgconf.eu/registration/ (limited seats)&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
Schedule will be published online:  http://fosdem2013.pgconf.eu/registration/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Location and Venue ==&lt;br /&gt;
&lt;br /&gt;
http://fosdem2013.pgconf.eu/venue/&lt;br /&gt;
&lt;br /&gt;
Address: &lt;br /&gt;
&lt;br /&gt;
http://www.radissonblu.com/royalhotel-brussels/location&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dinner ==&lt;br /&gt;
&lt;br /&gt;
We are organizing a dinner after the event on Friday 1st, 2013 at Hard Rock Cafe Brussels. We have limited (30) number of seats, so please add your name to this list before going there.&lt;br /&gt;
&lt;br /&gt;
Attendees:&lt;br /&gt;
&lt;br /&gt;
* Devrim Gündüz (x2)&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Andreas Scherbaum (+1.5)&lt;br /&gt;
* Jean-Paul Argudo&lt;br /&gt;
* Patryk Kordylewski (x2)&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL Events]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012"/>
				<updated>2012-10-30T14:09:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Bellevue (Lightning Talks) */&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;
* 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;
&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;
* Understanding EXPLAIN'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;
* 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 'tokkee' Harl])&lt;br /&gt;
* [[Media:Range-types.pdf|Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]]&lt;br /&gt;
* 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;
&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 'ads' 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;
* 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)]]&lt;br /&gt;
* Migrating Oracle queries to PostgreSQL (Alexey Klyukin)&lt;br /&gt;
* 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 'tokkee' Harl])&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012"/>
				<updated>2012-10-30T14:09:15Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Bellevue (Lightning Talks) */&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;
* 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;
&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;
* Understanding EXPLAIN'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;
* 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 'tokkee' Harl])&lt;br /&gt;
* [[Media:Range-types.pdf|Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]]&lt;br /&gt;
* 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;
&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 'ads' Scherbaum)]]&lt;br /&gt;
* [http://tapoueh.org/images/pgq-coop.pdf PGQ Cooperative Consumers]&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;
* 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)]]&lt;br /&gt;
* Migrating Oracle queries to PostgreSQL (Alexey Klyukin)&lt;br /&gt;
* 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 'tokkee' Harl])&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012"/>
				<updated>2012-10-30T14:08:28Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Seine */&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;
* 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;
&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;
* Understanding EXPLAIN'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;
* 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 'tokkee' Harl])&lt;br /&gt;
* [[Media:Range-types.pdf|Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]]&lt;br /&gt;
* 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;
&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 'ads' Scherbaum)]]&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;
* 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)]]&lt;br /&gt;
* Migrating Oracle queries to PostgreSQL (Alexey Klyukin)&lt;br /&gt;
* 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 'tokkee' Harl])&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012</id>
		<title>PostgreSQL Conference Europe Talks 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2012"/>
				<updated>2012-10-30T14:07:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Seine */&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;
* 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;
&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;
* Understanding EXPLAIN'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;
* 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 'tokkee' Harl])&lt;br /&gt;
* [[Media:Range-types.pdf|Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same (Jonathan S. Katz)]]&lt;br /&gt;
* 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;
&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 'ads' Scherbaum)]]&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;
* 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;
* 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)]]&lt;br /&gt;
* Migrating Oracle queries to PostgreSQL (Alexey Klyukin)&lt;br /&gt;
* 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 'tokkee' Harl])&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Postgres_Open_2012</id>
		<title>Postgres Open 2012</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Postgres_Open_2012"/>
				<updated>2012-09-19T19:42:43Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Slides for talks will be linked here!&lt;br /&gt;
&lt;br /&gt;
== Tuesday September 18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.postgresql.org/images/7/73/Range-types-pgopen-2012.pdf Range Types in PostgreSQL 9.2 - Your Life Will Never Be the Same]&lt;br /&gt;
* Scaling out by distributing and replicating data in Postgres-XC&lt;br /&gt;
* PostgreSQL When It's Not Your Job&lt;br /&gt;
&lt;br /&gt;
* [http://tapoueh.org/images/fotolog.pdf Large Scale MySQL Migration to PostgreSQL]&lt;br /&gt;
* Choosing a logical replication system: Slony vs Bucardo&lt;br /&gt;
* Temporal Database Demo&lt;br /&gt;
&lt;br /&gt;
* 12 Calm Years of PostgreSQL in Critical Messaging&lt;br /&gt;
* PostgreSQL in the cloud: Theory and Practice&lt;br /&gt;
* [http://www.hagander.net/talks/Backup%20strategies.pdf PostgreSQL Backup Strategies]&lt;br /&gt;
&lt;br /&gt;
* This Is PostGIS&lt;br /&gt;
* Embracing the Web with JSON and PLV8&lt;br /&gt;
* How Akiban Implemented a New Database Compatible with the PostgreSQL Protocol&lt;br /&gt;
&lt;br /&gt;
* [[Media:Ha_postgres.pdf|High Availability with PostgreSQL and Pacemaker]]&lt;br /&gt;
* Logging: Not Just for Lumberjacks&lt;br /&gt;
* [http://stuff.coffeecode.net/2012/pgopen_fulltext/pgsql-fulltext-intro.html Full-text search - seek and ye shall find]&lt;br /&gt;
&lt;br /&gt;
=== Lightning Talks ===&lt;br /&gt;
&lt;br /&gt;
TBD!&lt;br /&gt;
&lt;br /&gt;
== Wednesday September 19 ==&lt;br /&gt;
&lt;br /&gt;
* [http://pgexperts.com/document.html?id=54 Super Jumbo Deluxe], plus [http://pgexperts.com/presentations.html more presentations here]&lt;br /&gt;
* [[Media:OO_approach.pdf|An object oriented approach to data driven software development]]&lt;br /&gt;
* TransLattice Elastic Database Architecture Deep Dive&lt;br /&gt;
&lt;br /&gt;
* [http://www.pateldenish.com/2012/04/deploying-maximum-ha-architecture-with-postgresql.html Deploying maximum HA architecture with Postgres] , for pg_reorg [http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=p90xyourdatabase-13010796913746-phpapp02&amp;amp;stripped_title=p90-x-your-database p90x talk]&lt;br /&gt;
* Scaling Postgres with some help from Redis&lt;br /&gt;
* Retail DDL&lt;br /&gt;
&lt;br /&gt;
* Query Logging and Workload Analysis&lt;br /&gt;
* A Shared-nothing cluster system: Postgres-XC&lt;br /&gt;
* DVDStore Benchmark and PostgreSQL&lt;br /&gt;
&lt;br /&gt;
* Performance Improvements in PostgreSQL 9.2&lt;br /&gt;
* A Batch of Commit Batching&lt;br /&gt;
* [http://momjian.us/main/presentations/features.html#cte Programming the SQL Way with Common Table Expressions]&lt;br /&gt;
&lt;br /&gt;
* Postgres is the new default – how we transitioned our platform at Engine Yard and why you should too&lt;br /&gt;
* Leveraging PLV8 in Javascript-heavy Web Applications&lt;br /&gt;
* PG Extractor - A smarter pg_dump&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Lock_Monitoring</id>
		<title>Lock Monitoring</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Lock_Monitoring"/>
				<updated>2012-05-25T09:18:01Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Looking at [http://www.postgresql.org/docs/current/static/view-pg-locks.html pg_locks] shows you what locks are granted and what processes are waiting for locks to be acquired.  A good query to start looking for lock problems:&lt;br /&gt;
  select relation::regclass, * from pg_locks where not granted;&lt;br /&gt;
* Figuring out what the processes holding or waiting for locks is easier if you cross-reference against the information in [http://www.postgresql.org/docs/current/static/monitoring-stats.html pg_stat_activity]&lt;br /&gt;
* The following query may be helpful to see what processes are blocking SQL statements:&lt;br /&gt;
  select bl.pid as blocked_pid, a.usename as blocked_user, &lt;br /&gt;
         kl.pid as blocking_pid, ka.usename as blocking_user, a.current_query as blocked_statement&lt;br /&gt;
  from pg_catalog.pg_locks bl&lt;br /&gt;
       join pg_catalog.pg_stat_activity a&lt;br /&gt;
       on bl.pid = a.procpid&lt;br /&gt;
       join pg_catalog.pg_locks kl&lt;br /&gt;
            join pg_catalog.pg_stat_activity ka&lt;br /&gt;
            on kl.pid = ka.procpid&lt;br /&gt;
       on bl.transactionid = kl.transactionid and bl.pid != kl.pid&lt;br /&gt;
  where not bl.granted;&lt;br /&gt;
* Here's an alternate view of that same data that includes an idea how old the state is:&lt;br /&gt;
&lt;br /&gt;
    select &lt;br /&gt;
      pg_stat_activity.datname,pg_class.relname,pg_locks.transactionid, pg_locks.mode, pg_locks.granted,&lt;br /&gt;
      pg_stat_activity.usename,substr(pg_stat_activity.current_query,1,30), pg_stat_activity.query_start, &lt;br /&gt;
      age(now(),pg_stat_activity.query_start) as &amp;quot;age&amp;quot;, pg_stat_activity.procpid &lt;br /&gt;
    from pg_stat_activity,pg_locks left &lt;br /&gt;
      outer join pg_class on (pg_locks.relation = pg_class.oid)  &lt;br /&gt;
    where pg_locks.pid=pg_stat_activity.procpid order by query_start;&lt;br /&gt;
&lt;br /&gt;
* Here's almost quite the same thing but with some more details:&lt;br /&gt;
&lt;br /&gt;
   select bl.pid as blocked_pid, a.usename as blocked_user,&lt;br /&gt;
         ka.current_query as blocking_statement, now() - ka.query_start as blocking_duration,&lt;br /&gt;
         kl.pid as blocking_pid, ka.usename as blocking_user, a.current_query as blocked_statement,&lt;br /&gt;
         now() - a.query_start as blocked_duration&lt;br /&gt;
  from pg_catalog.pg_locks bl&lt;br /&gt;
       join pg_catalog.pg_stat_activity a&lt;br /&gt;
       on bl.pid = a.procpid&lt;br /&gt;
       join pg_catalog.pg_locks kl&lt;br /&gt;
            join pg_catalog.pg_stat_activity ka&lt;br /&gt;
            on kl.pid = ka.procpid&lt;br /&gt;
       on bl.transactionid = kl.transactionid and bl.pid != kl.pid&lt;br /&gt;
  where not bl.granted;&lt;br /&gt;
&lt;br /&gt;
* If you suspect intermittent locks are causing problems only sometimes, but are having trouble catching them in one of these live views, setting the [http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-LOG-LOCK-WAITS log_lock_waits] and related [http://www.postgresql.org/docs/current/static/runtime-config-locks.html#GUC-DEADLOCK-TIMEOUT deadlock_timeout] parameters can be helpful.  Then slow lock acquisition will appear in the database logs for later analysis.&lt;br /&gt;
&lt;br /&gt;
See also [[Lock dependency information]]&lt;br /&gt;
[[Category:Administration]][[Category:Performance]][[Category:Monitoring]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Queuing</id>
		<title>Queuing</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Queuing"/>
				<updated>2012-05-16T13:24:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Queueing in core */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Queueing in core =&lt;br /&gt;
&lt;br /&gt;
Internal use cases:&lt;br /&gt;
&lt;br /&gt;
* Materialized Views&lt;br /&gt;
* Alter Table Concurrently&lt;br /&gt;
* Cluster Concurrently&lt;br /&gt;
* Parallel queries&lt;br /&gt;
* PG/Strom: GPU Offloading (parallel too)&lt;br /&gt;
&lt;br /&gt;
Parallel queries have different transactional semantics needs (it's all running in the same transaction, producer and consumer)&lt;br /&gt;
&lt;br /&gt;
External use cases:&lt;br /&gt;
&lt;br /&gt;
* Very Common Design Pattern&lt;br /&gt;
* Datawarehouse and pruning historical data (avoid vacuum issues)&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&lt;br /&gt;
* it's a table?&lt;br /&gt;
* concurrent inserts and pruning&lt;br /&gt;
* no update&lt;br /&gt;
* payload would be a record/tuple (create type / create table)&lt;br /&gt;
* FIFO, Insert Only Segment Optimisation with a starting block that can be &amp;gt; 0&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting"/>
				<updated>2012-05-16T13:23:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Agenda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org). &lt;br /&gt;
&lt;br /&gt;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 8:30AM to 5PM, and will be in the &amp;quot;Red Experience&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Shigeru Hanada&lt;br /&gt;
* Hitoshi Harada&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Agree CommitFest schedule for 9.3 (Strawman from Simon)&lt;br /&gt;
** CF1 June 15, 2012 - 1 month&lt;br /&gt;
** CF2 Sep 15, 2012 - 1 month&lt;br /&gt;
** CF3 Nov 15, 2012 - 1 month&lt;br /&gt;
** CF4 Jan 15, 2013 - 2 months&lt;br /&gt;
* Queuing [Dimitri, Kevin]&lt;br /&gt;
** Description: efficient and transactional queuing is a very common need for application using databases, and could help implementing some internal features&lt;br /&gt;
** Goals: get an agreement that core is the right place where to solve that problem, and what parts of it we want in core exactly&lt;br /&gt;
* Materialized views [Kevin]&lt;br /&gt;
** Description: Declarative materialized views are a frequently requested feature, but means many things to many people.  It's not likely that an initial implementation will address everything.  We need a base set of functionality on which to build.&lt;br /&gt;
** Goals: Reach consensus on what a minimum feature set for commit would be.&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
** Description: to solve partitioning, we need to agree on a global approach&lt;br /&gt;
** Goals: agreeing on SE as a basis for better partitioning, having a &amp;quot;GO&amp;quot; on working on SE&lt;br /&gt;
* MERGE: Challenges and priorities [Peter G]&lt;br /&gt;
** Description: Implementing the MERGE statement for 9.3. It is envisaged specifically as an atomic &amp;quot;upsert&amp;quot; operation.&lt;br /&gt;
** Goals: To get buy-in on various aspects of the feature's development, and, ideally, to secure reviewer resources or other support. Because of the complexity of the feature, early interest from reviewers is preferable.&lt;br /&gt;
* Row-level Access Control and SELinux [KaiGai]&lt;br /&gt;
** Security label on user tables&lt;br /&gt;
** Dynamic expandable enum data types&lt;br /&gt;
** Enforcement of triggers by extension&lt;br /&gt;
* Enhancement of FDW at v9.3 [KaiGai]&lt;br /&gt;
** Writable foreign tables&lt;br /&gt;
** Stuffs to be pushed down (Join, Aggregate, Sort, ...)&lt;br /&gt;
** Inheritance of foreign/regular tables&lt;br /&gt;
** Constraint (PK/FK) &amp;amp; Trigger support.&lt;br /&gt;
* Type registry [Andrew]&lt;br /&gt;
** Provide for known OIDs for non-builtin types, and possibly for their IO functions too&lt;br /&gt;
** Would make it possible to write code in core or in extension X that handles a type defined in extension Y.&lt;br /&gt;
* Ending CommitFests in a timely fashion, especially the last one.  Avoiding a crush of massive feature patches at the end of the cycle.  Handling big patches that aren't quite ready yet.  Getting more people to help with patch review. [Robert]&lt;br /&gt;
* What Developers Want [Josh]&lt;br /&gt;
** Description: a top-5 list of features and obstacles to developer adoption of PostgreSQL (with slides)&lt;br /&gt;
** Goal: to set priorities for some features aimed at application users&lt;br /&gt;
* In-Place Upgrades &amp;amp; Checksums [Greg Smith, Simon]&lt;br /&gt;
** Description:  Revisit in-place upgrades of the page format, now that pg_upgrade is available and multiple checksum implementations needing it have been proposed.&lt;br /&gt;
** Goal:  Nail down some incremental milestones for 9.3 development to aim at.&lt;br /&gt;
* Autonomous Transactions [Simon]&lt;br /&gt;
** Overview of idea, relationship to stored procedures&lt;br /&gt;
** Feedback, buy-in and/or alternatives&lt;br /&gt;
* Parallel Query [Bruce Momjian]&lt;br /&gt;
** Hope to get buy-in for what parallel operations we are hoping to add in upcoming releases&lt;br /&gt;
* Report from Clustering Meeting [Josh] (10 min)&lt;br /&gt;
** Description: to summarize the discussions of the cluster-hackers meeting from the previous day&lt;br /&gt;
** Goal: inter-team synchronization.  Possibly, decisions requested on specific in-core features.&lt;br /&gt;
* Double Write Buffers [Simon]&lt;br /&gt;
** Is anyone committing to do that for 9.3?&lt;br /&gt;
&lt;br /&gt;
* Goals, priorities, and resources for 9.3 [All]&lt;br /&gt;
** For roadmap and planning purposes, set expectations and coordinate work schedules for 9.3.  Confirm who is doing what, identify interested reviewers at start, and check for gaps.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:30 - 08:45&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|08:45 - 09:15&lt;br /&gt;
|Autonomous transactions&lt;br /&gt;
|Simon Riggs&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:15 - 09:40&lt;br /&gt;
|[[Queuing]]&lt;br /&gt;
|Dimitri Fontaine/Kevin Grittner&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:40 - 09:50&lt;br /&gt;
|Report from the Clustering Meeting&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|09:50 - 10:10&lt;br /&gt;
|Type registry&lt;br /&gt;
|Andrew Dunstan&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|10:10 - 10:30&lt;br /&gt;
|Access control and SELinux&lt;br /&gt;
|KaiGai Kohei&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|10:45 - 11:15&lt;br /&gt;
|Enhancement of FDWs in 9.3&lt;br /&gt;
|KaiGai Kohei&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:15 - 11:30&lt;br /&gt;
|What developers want&lt;br /&gt;
|Josh Berkus&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|11:30 - 12:00&lt;br /&gt;
|Parallel Query&lt;br /&gt;
|Bruce Momjian&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|12:00 - 12:30&lt;br /&gt;
|MERGE: Challenges and priorities&lt;br /&gt;
|Peter Geoghegan&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|13:30 - 14:00&lt;br /&gt;
|Materialised views&lt;br /&gt;
|Kevin Grittner&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:00 - 14:20&lt;br /&gt;
|In place upgrades and checksums&lt;br /&gt;
|Simon Riggs/Greg Smith&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:20 - 14:45&lt;br /&gt;
|Partitioning and segment exclusion&lt;br /&gt;
|Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|14:45 - 15:00&lt;br /&gt;
|Commitfest Schedule&lt;br /&gt;
|All&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15:15 - 15:40&lt;br /&gt;
|Commitfest management&lt;br /&gt;
|Robert Haas&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|15:40 - 16:45&lt;br /&gt;
|Goals, priorities, and resources for 9.3&lt;br /&gt;
|All&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&lt;br /&gt;
|Dave Page&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Queuing</id>
		<title>Queuing</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Queuing"/>
				<updated>2012-05-16T13:23:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Queueing in core */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Queueing in core =&lt;br /&gt;
&lt;br /&gt;
Internal use cases:&lt;br /&gt;
&lt;br /&gt;
* Materialized Views&lt;br /&gt;
* Alter Table Concurrently&lt;br /&gt;
* Cluster Concurrently&lt;br /&gt;
* Parallel queries&lt;br /&gt;
* PG/Strom: GPU Offloading&lt;br /&gt;
&lt;br /&gt;
External use cases:&lt;br /&gt;
&lt;br /&gt;
* Very Common Design Pattern&lt;br /&gt;
* Datawarehouse and pruning historical data (avoid vacuum issues)&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&lt;br /&gt;
* it's a table?&lt;br /&gt;
* concurrent inserts and pruning&lt;br /&gt;
* no update&lt;br /&gt;
* payload would be a record/tuple (create type / create table)&lt;br /&gt;
* FIFO, Insert Only Segment Optimisation with a starting block that can be &amp;gt; 0&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Queuing</id>
		<title>Queuing</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Queuing"/>
				<updated>2012-05-16T13:22:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;moved Queueing to Queuing:&amp;amp;#32;Typo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Queueing in core =&lt;br /&gt;
&lt;br /&gt;
Internal use cases:&lt;br /&gt;
&lt;br /&gt;
* Materialized Views&lt;br /&gt;
* Alter Table Concurrently&lt;br /&gt;
* Cluster Concurrently&lt;br /&gt;
* Parallel queries&lt;br /&gt;
&lt;br /&gt;
External use cases:&lt;br /&gt;
&lt;br /&gt;
* Very Common Design Pattern&lt;br /&gt;
* Datawarehouse and pruning historical data (avoid vacuum issues)&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&lt;br /&gt;
* it's a table?&lt;br /&gt;
* concurrent inserts and pruning&lt;br /&gt;
* no update&lt;br /&gt;
* payload would be a record/tuple (create type / create table)&lt;br /&gt;
* FIFO, Insert Only Segment Optimisation with a starting block that can be &amp;gt; 0&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Queueing</id>
		<title>Queueing</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Queueing"/>
				<updated>2012-05-16T13:22:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;moved Queueing to Queuing:&amp;amp;#32;Typo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queuing]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Queuing</id>
		<title>Queuing</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Queuing"/>
				<updated>2012-05-16T13:19:06Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Queueing in core */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Queueing in core =&lt;br /&gt;
&lt;br /&gt;
Internal use cases:&lt;br /&gt;
&lt;br /&gt;
* Materialized Views&lt;br /&gt;
* Alter Table Concurrently&lt;br /&gt;
* Cluster Concurrently&lt;br /&gt;
* Parallel queries&lt;br /&gt;
&lt;br /&gt;
External use cases:&lt;br /&gt;
&lt;br /&gt;
* Very Common Design Pattern&lt;br /&gt;
* Datawarehouse and pruning historical data (avoid vacuum issues)&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&lt;br /&gt;
* it's a table?&lt;br /&gt;
* concurrent inserts and pruning&lt;br /&gt;
* no update&lt;br /&gt;
* payload would be a record/tuple (create type / create table)&lt;br /&gt;
* FIFO, Insert Only Segment Optimisation with a starting block that can be &amp;gt; 0&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Queuing</id>
		<title>Queuing</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Queuing"/>
				<updated>2012-05-16T13:15:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Queueing in core =&lt;br /&gt;
&lt;br /&gt;
Internal use cases:&lt;br /&gt;
&lt;br /&gt;
* Materialized Views&lt;br /&gt;
* Alter Table Concurrently&lt;br /&gt;
* Cluster Concurrently&lt;br /&gt;
* Parallel queries&lt;br /&gt;
&lt;br /&gt;
External use cases:&lt;br /&gt;
&lt;br /&gt;
* Very Common Design Pattern&lt;br /&gt;
* Datawarehouse and pruning historical data (avoid vacuum issues)&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&lt;br /&gt;
* it's a table&lt;br /&gt;
* concurrent inserts and pruning&lt;br /&gt;
* no update&lt;br /&gt;
* payload would be a record/tuple (create type / create table)&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/Queuing</id>
		<title>Queuing</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/Queuing"/>
				<updated>2012-05-16T13:14:39Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;Queueing in Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Queueing in core&lt;br /&gt;
&lt;br /&gt;
Internal use cases:&lt;br /&gt;
&lt;br /&gt;
- Materialized Views&lt;br /&gt;
- Alter Table Concurrently&lt;br /&gt;
- Cluster Concurrently&lt;br /&gt;
- Parallel queries&lt;br /&gt;
&lt;br /&gt;
External use cases:&lt;br /&gt;
&lt;br /&gt;
- Very Common Design Pattern&lt;br /&gt;
- Datawarehouse and pruning historical data (avoid vacuum issues)&lt;br /&gt;
&lt;br /&gt;
Implementation:&lt;br /&gt;
&lt;br /&gt;
- it's a table&lt;br /&gt;
- concurrent inserts and pruning&lt;br /&gt;
- no update&lt;br /&gt;
- payload would be a record/tuple (create type / create table)&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting"/>
				<updated>2012-05-04T21:56:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org). &lt;br /&gt;
&lt;br /&gt;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Red Experience&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Shigeru Hanada&lt;br /&gt;
* Hitoshi Harada&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Priorities for 9.3 [All]&lt;br /&gt;
** Description: discuss what people are working on and what's likely to be in 9.3.&lt;br /&gt;
** Goals: set expectations and coordinate work schedules for 9.3.&lt;br /&gt;
* Queuing [Dimitri, Kevin]&lt;br /&gt;
** Description: efficient and transactional queuing is a very common need for application using databases, and could help implementing some internal features&lt;br /&gt;
** Goals: get an agreement that core is the right place where to solve that problem, and what parts of it we want in core exactly&lt;br /&gt;
* Materialized views [Kevin]&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
** Description: to solve partitioning, we need to agree on a global approach&lt;br /&gt;
** Goals: agreeing on SE as a basis for better partitioning, having a &amp;quot;GO&amp;quot; on working on SE&lt;br /&gt;
* The MERGE statement: Challenges and priorities [Peter G]&lt;br /&gt;
* Row-level Access Control and SELinux [KaiGai]&lt;br /&gt;
** Security label on user tables&lt;br /&gt;
** Dynamic expandable enum data types&lt;br /&gt;
** Enforcement of triggers by extension&lt;br /&gt;
* Enhancement of FDW at v9.3 [KaiGai]&lt;br /&gt;
** Writable foreign tables&lt;br /&gt;
** Stuffs to be pushed down (Join, Aggregate, Sort, ...)&lt;br /&gt;
** Inheritance of foreign/regular tables&lt;br /&gt;
** Constraint (PK/FK) &amp;amp; Trigger support.&lt;br /&gt;
* Type registry [Andrew]&lt;br /&gt;
** Provide for known OIDs for non-builtin types, and possibly for their IO functions too&lt;br /&gt;
** Would make it possible to write code in core or in extension X that handles a type defined in extension Y.&lt;br /&gt;
* Ending CommitFests in a timely fashion, especially the last one.  Avoiding a crush of massive feature patches at the end of the cycle.  Handling big patches that aren't quite ready yet.  Getting more people to help with patch review. [Robert]&lt;br /&gt;
* What Developers Want [Josh]&lt;br /&gt;
** Description: a top-5 list of features and obstacles to developer adoption of PostgreSQL (with slides)&lt;br /&gt;
** Goal: to set priorities for some features aimed at application users&lt;br /&gt;
* In-Place Upgrades &amp;amp; Checksums [Greg Smith, Simon]&lt;br /&gt;
** Description:  Revisit in-place upgrades of the page format, now that pg_upgrade is available and multiple checksum implementations needing it have been proposed.&lt;br /&gt;
** Goal:  Nail down some incremental milestones for 9.3 development to aim at.&lt;br /&gt;
* Autonomous Subtransactions [Simon]&lt;br /&gt;
* Parallel Query [Bruce Momjian]&lt;br /&gt;
* Report from Clustering Meeting [Josh] (10 min)&lt;br /&gt;
** Description: to summarize the discussions of the cluster-hackers meeting from the previous day&lt;br /&gt;
** Goal: inter-team synchronization.  Possibly, decisions requested on specific in-core features.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting"/>
				<updated>2012-05-04T21:54:15Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org). &lt;br /&gt;
&lt;br /&gt;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Red Experience&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Jeff Davis&lt;br /&gt;
* Andrew Dunstan&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Stephen Frost&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Kevin Grittner&lt;br /&gt;
* Robert Haas&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Shigeru Hanada&lt;br /&gt;
* Hitoshi Harada&lt;br /&gt;
* KaiGai Kohei&lt;br /&gt;
* Tom Lane&lt;br /&gt;
* Noah Misch&lt;br /&gt;
* Bruce Momjian&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Simon Riggs&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Priorities for 9.3 [All]&lt;br /&gt;
** Description: discuss what people are working on and what's likely to be in 9.3.&lt;br /&gt;
** Goals: set expectations and coordinate work schedules for 9.3.&lt;br /&gt;
* Queuing [Dimitri, Kevin]&lt;br /&gt;
* Materialized views [Dimitri, Kevin]&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
** Description: to solve partitioning, we need to agree on a global approach&lt;br /&gt;
** Goals: agreeing on SE as a basis for better partitioning, having a &amp;quot;GO&amp;quot; on working on SE&lt;br /&gt;
* The MERGE statement: Challenges and priorities [Peter G]&lt;br /&gt;
* Row-level Access Control and SELinux [KaiGai]&lt;br /&gt;
** Security label on user tables&lt;br /&gt;
** Dynamic expandable enum data types&lt;br /&gt;
** Enforcement of triggers by extension&lt;br /&gt;
* Enhancement of FDW at v9.3 [KaiGai]&lt;br /&gt;
** Writable foreign tables&lt;br /&gt;
** Stuffs to be pushed down (Join, Aggregate, Sort, ...)&lt;br /&gt;
** Inheritance of foreign/regular tables&lt;br /&gt;
** Constraint (PK/FK) &amp;amp; Trigger support.&lt;br /&gt;
* Type registry [Andrew]&lt;br /&gt;
** Provide for known OIDs for non-builtin types, and possibly for their IO functions too&lt;br /&gt;
** Would make it possible to write code in core or in extension X that handles a type defined in extension Y.&lt;br /&gt;
* Ending CommitFests in a timely fashion, especially the last one.  Avoiding a crush of massive feature patches at the end of the cycle.  Handling big patches that aren't quite ready yet.  Getting more people to help with patch review. [Robert]&lt;br /&gt;
* What Developers Want [Josh]&lt;br /&gt;
** Description: a top-5 list of features and obstacles to developer adoption of PostgreSQL (with slides)&lt;br /&gt;
** Goal: to set priorities for some features aimed at application users&lt;br /&gt;
* In-Place Upgrades &amp;amp; Checksums [Greg Smith, Simon]&lt;br /&gt;
** Description:  Revisit in-place upgrades of the page format, now that pg_upgrade is available and multiple checksum implementations needing it have been proposed.&lt;br /&gt;
** Goal:  Nail down some incremental milestones for 9.3 development to aim at.&lt;br /&gt;
* Autonomous Subtransactions [Simon]&lt;br /&gt;
* Parallel Query [Bruce Momjian]&lt;br /&gt;
* Report from Clustering Meeting [Josh] (10 min)&lt;br /&gt;
** Description: to summarize the discussions of the cluster-hackers meeting from the previous day&lt;br /&gt;
** Goal: inter-team synchronization.  Possibly, decisions requested on specific in-core features.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting"/>
				<updated>2012-02-21T08:53:17Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org). &lt;br /&gt;
&lt;br /&gt;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Red Experience&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting (in alphabetical order, by surname):&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Josh Berkus (Secretary)&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Greg Smith&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Queuing [Dimitri]&lt;br /&gt;
* Materialized views [Dimitri, Kevin?]&lt;br /&gt;
* Partitioning and Segment Exclusion [Dimitri]&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting"/>
				<updated>2012-02-17T15:58:19Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Proposed Agenda Items */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org). &lt;br /&gt;
&lt;br /&gt;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Red Experience&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting:&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
* Write Scalability (Scale up, scale out)&lt;br /&gt;
* Queuing&lt;br /&gt;
* Materialized views&lt;br /&gt;
* Partitioning and Segment Exclusion&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting</id>
		<title>PgCon 2012 Developer Meeting</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PgCon_2012_Developer_Meeting"/>
				<updated>2012-02-17T15:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Attendees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A meeting of the most active PostgreSQL developers is being planned for Wednesday 16th May, 2012 near the University of Ottawa, prior to pgCon 2012. In order to keep the numbers manageable, this meeting is '''by invitation only'''. Unfortunately it is quite possible that we've overlooked important code developers during the planning of the event - if you feel you fall into this category and would like to attend, please contact Dave Page (dpage@pgadmin.org). &lt;br /&gt;
&lt;br /&gt;
Please note that this year the attendee numbers have been cut to try to keep the meeting more productive. Invitations have been sent only to developers that have been highly active on the database server over the 9.2 release cycle. We have not invited any contributors based on their contributions to related projects, or seniority in regional user groups or sponsoring companies, unlike in previous years.&lt;br /&gt;
&lt;br /&gt;
This is a PostgreSQL Community event. Room and refreshments/food sponsored by EnterpriseDB. Other companies sponsored attendance for their developers.&lt;br /&gt;
 &lt;br /&gt;
== Time &amp;amp; Location ==&lt;br /&gt;
&lt;br /&gt;
The meeting will be from 9AM to 5PM, and will be in the &amp;quot;Red Experience&amp;quot; room at:&lt;br /&gt;
&lt;br /&gt;
 Novotel Ottawa&lt;br /&gt;
 33 Nicholas Street&lt;br /&gt;
 Ottawa&lt;br /&gt;
 Ontario&lt;br /&gt;
 K1N 9M7&lt;br /&gt;
 &lt;br /&gt;
Food and drink will be provided throughout the day, including breakfast from 8AM.&lt;br /&gt;
&lt;br /&gt;
[http://maps.google.ca/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=novotel+ottawa&amp;amp;aq=&amp;amp;sll=49.891235,-97.15369&amp;amp;sspn=36.237851,79.013672&amp;amp;ie=UTF8&amp;amp;hq=novotel+ottawa&amp;amp;hnear=&amp;amp;ll=45.421528,-75.683699&amp;amp;spn=0.036869,0.077162&amp;amp;z=14&amp;amp;iwloc=A&amp;amp;layer=c&amp;amp;cbll=45.425741,-75.689638&amp;amp;panoid=Z4FUGnkZkdHAOkIxyjjS9Q&amp;amp;cbp=12,25.83,,0,-0.6 View on Google Maps]&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
The following people have RSVPed to the meeting:&lt;br /&gt;
&lt;br /&gt;
* Oleg Bartunov&lt;br /&gt;
* Peter Geoghegan&lt;br /&gt;
* Magnus Hagander&lt;br /&gt;
* Dave Page (Chair)&lt;br /&gt;
* Teodor Sigaev&lt;br /&gt;
* Dimitri Fontaine&lt;br /&gt;
&lt;br /&gt;
== Proposed Agenda Items ==&lt;br /&gt;
&lt;br /&gt;
Please list proposed agenda items here:&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Item&lt;br /&gt;
!Presenter&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:00&lt;br /&gt;
|Breakfast&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|08:45 - 09:00&lt;br /&gt;
|Welcome and introductions&lt;br /&gt;
|Dave Page&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|10:30 - 10:45&lt;br /&gt;
|Coffee break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|12:30 - 13:30&lt;br /&gt;
|Lunch	&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|15:00 - 15:15&lt;br /&gt;
|Tea break&lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|16:45 - 17:00&lt;br /&gt;
|Any other business/group photo&lt;br /&gt;
|Dave Page&lt;br /&gt;
|- style=&amp;quot;font-style:italic;background-color:lightgray;&amp;quot;&lt;br /&gt;
|17:00&lt;br /&gt;
|Finish&lt;br /&gt;
|	&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minutes==&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

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

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

	<entry>
		<id>http://wiki.postgresql.org/wiki/File:Using-extensions.pdf</id>
		<title>File:Using-extensions.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/File:Using-extensions.pdf"/>
				<updated>2011-10-24T13:13:44Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostgreSQL 9.1 features extensibility to the next level. While this often is a concern for C-developers among us, this talk will detail why extensions are a first-class facility for anyone doing Stored Procedures, whatever their implementation language.&lt;br /&gt;
&lt;br /&gt;
If you ever did type CREATE OR REPLACE FUNCTION, be it in LANGUAGE SQL, then you're in!&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/File:Using-extensions.pdf</id>
		<title>File:Using-extensions.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/File:Using-extensions.pdf"/>
				<updated>2011-10-24T13:11:34Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2011</id>
		<title>PostgreSQL Conference Europe Talks 2011</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_Conference_Europe_Talks_2011"/>
				<updated>2011-10-24T13:10:50Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;Dimitri Fontaine: Extensions are good for Business Logic&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;
* [http://www.mgrid.net/blogs/mgrid-at-pgdayeu-2011 Yeb Havinga: Introducing ISO-21090 Healthcare Datatypes]&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:SSI-PGConfEU2011.pdf|Heikki Linnakangas: Serializable Snapshot Isolation ]]&lt;br /&gt;
&lt;br /&gt;
* [[Media:Fast_GiST_index_build.pdf|Alexander Korotkov: Fast GiST index build ]]&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;
* [[Media:using-extensions.pdf|Dimitri Fontaine: Extensions are good for business logic]]&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;
* [[Media:Pgconf-2011-mysql-to-pg-print.pdf|Andreas 'ads' Scherbaum: Port databases from MySQL to 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;
* Lightning talk: [[Media:Ciolli-waiting-for-the-barman-2011.pdf|Gabriele Bartolini and Gianni Ciolli, waiting for (the) BaRMan]]&lt;br /&gt;
&lt;br /&gt;
== Talks: Friday 21st October, 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ams 1 ===&lt;br /&gt;
* Reliable Databases in The Cloud with WAL-E (redux) - Dan Farina, Heroku - http://wal-e-pgeu2011.herokuapp.com/&lt;br /&gt;
* [http://wiki.postgresql.org/images/4/46/Knn.pdf Jonathan S. Katz: Accelerating Local Search With PostgreSQL 9.1]&lt;br /&gt;
&lt;br /&gt;
=== Ams 2 ===&lt;br /&gt;
&lt;br /&gt;
* [http://bunsen.credativ.com/~mme/2011/PGConf_EU.pdf Michael Meskes: Mission Impossible?]&lt;br /&gt;
&lt;br /&gt;
=== Ams 3 ===&lt;br /&gt;
* [http://wiki.postgresql.org/images/f/fa/Pg-eu-2011-closing-keynote.pdf Bruce Momjian: Closing Keynote]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PostgreSQL_9.1_Open_Items</id>
		<title>PostgreSQL 9.1 Open Items</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PostgreSQL_9.1_Open_Items"/>
				<updated>2011-06-06T13:37:53Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/*core extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Planning ==&lt;br /&gt;
See the [[PostgreSQL 9.1 Development Plan]].&lt;br /&gt;
&lt;br /&gt;
== Meta-Issues ==&lt;br /&gt;
* [[standard_conforming_strings]] -- readiness of drivers and applications&lt;br /&gt;
* Review &amp;quot;Long Term&amp;quot; list of items from [[PostgreSQL 9.0 Open Items]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Blockers for Beta2 ===&lt;br /&gt;
* {{MessageLink|4DC00203020000250003D1E8@gw.wicourts.gov|Make DDL commands SSI-aware}}&lt;br /&gt;
* {{MessageLink|7486.1306253575@sss.pgh.pa.us|Domains over arrays no longer match ANYARRAY}}&lt;br /&gt;
* {{MessageLink|201105261137.p4QBbTlt077425@wwwmaster.postgresql.org|HS slaves do not handle unlogged tables nicely (bug 6041)}}&lt;br /&gt;
* {{MessageLink|BANLkTiknTSLMbGuTaOYg4O0V7UAMsr_rOA|NOT VALID constraints don't dump properly}}&lt;br /&gt;
&lt;br /&gt;
=== Not Blockers for Beta2 ===&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-general/2011-01/msg00890.php generate_series boundary issue] [http://archives.postgresql.org/pgsql-hackers/2011-02/msg00423.php and prototype patch]&lt;br /&gt;
** This is a pre-existing bug, not a regression, so it is not a beta blocker.&lt;br /&gt;
* {{MessageLink|4CEA5A0F.1030602@enterprisedb.com|do latches have memory-ordering problems?}}&lt;br /&gt;
** [http://archives.postgresql.org/message-id/11500.1302097336@sss.pgh.pa.us mostly just needs testing]&lt;br /&gt;
* {{MessageLink|4DA58686.1050501@enterprisedb.com| throw an error if you try to start from incomplete backup taken with pg_basebackup}}&lt;br /&gt;
* {{MessageLink|4DE8B1A8.2020505@enterprisedb.com| add a proof to README-SSI for the validity of the READ ONLY optimizations}}&lt;br /&gt;
** {{MessageLink|20110602070419.GA10064@csail.mit.edu| Dan offered a concise proof, but we need a cite for one premise it uses}}&lt;br /&gt;
** {{MessageLink|4DE67235020000250003DFBC@gw.wicourts.gov| Kevin offered a self-contained proof, but it's much longer than Dan's}}&lt;br /&gt;
* {{MessageLink|4DD3D6C6.5060006@2ndquadrant.com|core extensions, part of the main docs, shipped by default}}&lt;br /&gt;
&lt;br /&gt;
== Resolved Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Issues Resolved Prior to Beta2 ===&lt;br /&gt;
* {{MessageLink|20110428194112.GB12161@tornado.leadboat.com|ALTER TYPE DROP + composite-typed col vs. pg_upgrade}}&lt;br /&gt;
* {{MessageLink|4DB7D194.6030906@enterprisedb.com|Memory leak in foreign scans}}&lt;br /&gt;
* [http://archives.postgresql.org/message-id/19738.1306338472@sss.pgh.pa.us vacuum sometimes fails to update relpages/reltuples]&lt;br /&gt;
* {{MessageLink|BANLkTik8KxxjJ1KW-pO+WWBdTEAT+80ArQ@mail.gmail.com|SSI HOT chain traversal issue}}&lt;br /&gt;
&lt;br /&gt;
=== Issues Resolved Prior to Beta1 ===&lt;br /&gt;
&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTin4o+eSgQsP=0i6EM=Evu3oX=ewHp8Bwod1UaWZ@mail.gmail.com wal_buffers = -1 causes spurious chatter on reload]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTi=jCTGC+Qxfkum6EXcw8q4tRFd2KHNpe+4HYUeS@mail.gmail.com is there a safeguard to prevent recovery from pausing before consistency is reached?]&lt;br /&gt;
* {{MessageLink|09B23E7BF70425478C1330D893A722C602FEC019BD@MailSVR.invera.com|Walreceiver crashes in AIX}}&lt;br /&gt;
** {{MessageLink|4C753155.3070708@ca.afilias.info|Steve Singer can't reproduce, suggests a possible way this could be pilot error}}&lt;br /&gt;
* {{MessageLink|AANLkTik9HZi8GfSiKuHVY2N7g7xDV+sN46eRxPbOjO7P@mail.gmail.com|bug of the hot standby feedback}}&lt;br /&gt;
* {{MessageLink|201011271931.oARJVV427882@momjian.us|GIST rewrite vs. pg_upgrade}}&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTin3PPOwXq2Cpf+tLNNKSv4OmHfDn5qr0aoeczA-@mail.gmail.com replication/README needs to be updated]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTikJmP+bo1N-mFUWEpJiV6_OKisYw512OGeTJUbm@mail.gmail.com backend wrongly waits for sync rep even though max_wal_senders = 0]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTik4tuG2EA6oeiov1=DO6UcDoARP45Lk+KGfy7HC@mail.gmail.com reload of the configuration file should not cause the server to end unexpectedly]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2010-11/msg00002.php Fix ecpg preprocessor regression]&lt;br /&gt;
* {{MessageLink|AANLkTimDUiRrrWzZ2ZXWSRfeP5tHm9PGmpp6zfqaFpte@mail.gmail.com|Once sync_standbys_defined becomes true, there's no way for it to ever become false again.  That can't be right.}}&lt;br /&gt;
* {{MessageLink|AANLkTimfvNzJy490wp95vP1RLumkxEZBTWUjhA_Dd1QS@mail.gmail.com|backend no longer needs to wait for replication when synchronous_standby_names is set to '' and configuration file is reloaded.}}&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTi=z+eg6yMEtJCqYb0OnGaNMoTg9eYiK-xm8v0AQ@mail.gmail.com pause_at_recovery_target needs to be added in recovery.conf.sample]&lt;br /&gt;
* {{MessageLink|201101181630.p0IGU45v047971@wwwmaster.postgresql.org|BUG #5842: Memory leak in PL/Python when taking slices of results}}&lt;br /&gt;
* {{MessageLink|4D5EB8ED.7010002@enterprisedb.com|hot standby feedback message needs to be explained at protocol-replication.html}}&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-03/msg00720.php consider renaming ident to peer authentication on local connections]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTi=q5=x_WoOccf5dqHoAWXyDc7qXG0cpbnsNKUCB@mail.gmail.com serious problem by multiple backups]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTi=qR0zy5cS98n=TDCxda5sj=NODDA=xAZUCdJOE@mail.gmail.com FK constraints &amp;quot;NOT VALID&amp;quot; by default]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTikvpjkUjwksZK=wOw7CDyMtaVEddmPN9yFv7jX-@mail.gmail.com sync rep very slow when fsync=off on standby]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTinbzFaJXkzwm2xEegfytK1LPw8odo61wgZkkGp=@mail.gmail.com No longer need to check synchronous_standby_names and max_wal_senders at startup]&lt;br /&gt;
* {{MessageLink|201012071131.55211.gabi.julien@broadsign.com|pg_last_xact_replay_timestamp limitations}}&lt;br /&gt;
** rhaas says: It's not clear there's an action item here, so moving to resolved.  Feel free to move back with more details.&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTikUAOYoStwkwG+DZOzTwT2QVj0H9aDywpzxvhxn@mail.gmail.com either remove write_location completely, or revert the change that broke it]&lt;br /&gt;
** [http://archives.postgresql.org/message-id/AANLkTinHrymKd56m5AfawCdujuNM6B2g_--9UiOSSKGx@mail.gmail.com original report of problem with write_location] (but the other issues in that email are now fixed)&lt;br /&gt;
** [http://archives.postgresql.org/message-id/AANLkTikphXd4LMXXOAZJg2s_8q0Fu5e3uuec4BG4xD4f@mail.gmail.com possible patch]&lt;br /&gt;
* {{MessageLink|29244.1295376372@sss.pgh.pa.us|DO blocks leak memory}}&lt;br /&gt;
* {{MessageLink|AANLkTimnwxEv-ZbqBLCSBSvmq-80vzvDb2u0pPchGm2r@mail.gmail.com|replication timeout}}&lt;br /&gt;
* {{MessageLink|1293977249.5984.17.camel@vanquo.pezone.net|raise protocol version number}}&lt;br /&gt;
** [http://archives.postgresql.org/message-id/1240.1301353669@sss.pgh.pa.us not done, would break things]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTik6ArKPwnvA8_9XHo9j9+w4A2UEnsheX-mwR=Aj@mail.gmail.com fix attinhcount tracking]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-04/msg00033.php SSI: SIReadLock lines in pg_locks don't show pid]&lt;br /&gt;
** questions have been raised whether pid should be suppressed after connection closes or even maybe after transaction completion&lt;br /&gt;
* [http://archives.postgresql.org/message-id/AANLkTi%3DkoHqna9WMm8_ATJN6c1GOLLp_0Tx6VswKhAdi%40mail.gmail.com synchronous_commit and synchronous_replication]&lt;br /&gt;
* {{MessageLink|AANLkTimUuzn3DAaO1OLCijjjfcw0MXL-0HAvZKr9xRyV@mail.gmail.com|conversion from integer literals to money type}}&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4D892157.7070607@lelarge.info comments on SQL/MED objects]&lt;br /&gt;
** rhaas says: [http://archives.postgresql.org/message-id/AANLkTimS1tDEuEeocz9PBjQ-RLSdjJ+VKFc_+F+Jm3Ou@mail.gmail.com proposed patch]&lt;br /&gt;
** rhaas says: thom brown points out that [http://archives.postgresql.org/message-id/AANLkTi==NemsL7Vo=YfsPc8DdZActYF7ZwCFVO-0Nu21@mail.gmail.com I forgot USER MAPPINGs]&lt;br /&gt;
** [http://archives.postgresql.org/message-id/7102.1302029271@sss.pgh.pa.us fixing user mappings opens unduly large can of worms]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2011-03/msg00352.php SSI: assertion failure on marking conflict-in due to race condition]&lt;br /&gt;
** existing patch to recheck after trading shared LW locks for exclusive should fix&lt;br /&gt;
* [http://archives.postgresql.org/message-id/29987.1301930239@sss.pgh.pa.us keywords table needs updating]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-03/msg01170.php SSI: clumsy error handling results in generic message rather than more specific message with hint]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-04/msg00157.php SSI: disable optimization when in subtransaction]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4D9DD97B020000250003C53C@gw.wicourts.gov SSI: LOG message about SLRU wrap-around]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/BANLkTi=W8OrvqLHS+suU8R2b_rhFaqeEaw@mail.gmail.com sync rep and fast shutdown]&lt;br /&gt;
** rhaas says: no easy resolution, i guess we'll leave this alone for now?&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-03/msg01913.php SSI: three different HTABs contend for shared memory in a free-for-all]&lt;br /&gt;
** Heikki proposes &amp;quot;We'll need to teach dynahash not to allocate any more entries after the preallocation. A new HASH_NO_GROW flag to hash_create() seems like a suitable interface.&amp;quot;&lt;br /&gt;
** [http://archives.postgresql.org/message-id/BANLkTimVuicyZG4j3F427BgfA2iYP8Od_Q@mail.gmail.com Alternatively, we could just use an initial allocation which matches the maximum entries, to ensure that all HTABs can allocate ''at least'' the configured maximum.] (There's an existing patch for that.)&lt;br /&gt;
** I committed a patch to add the new flag to hash_create() - Heikki&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-04/msg00083.php SSI: failure to clean up some SLRU-summarized locks]&lt;br /&gt;
** existing patch to properly set commitSeqNo on the offending locks should fix&lt;br /&gt;
* {{MessageLink|20110410103636.GC10697@tornado.leadboat.com|ALTER TABLE ADD COLUMN not creating TOAST tables for inheritance children}}&lt;br /&gt;
* {{MessageLink|20110410015728.GA10162@tornado.leadboat.com|typed table DDL loose ends}}&lt;br /&gt;
* [http://archives.postgresql.org/message-id/29173.1301114203@sss.pgh.pa.us assorted collation issues]&lt;br /&gt;
** [http://archives.postgresql.org/message-id/21742.1303137667@sss.pgh.pa.us almost there...]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-hackers/2011-04/msg00334.php pl/python traceback fix]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/BANLkTinz2do3EqWO9RH66bY2FBOmL=uSoA@mail.gmail.com gin indexes don't get used unless you vacuum]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/4DB015B3020000250003CB51@gw.wicourts.gov SSI: High-contention UPDATE load on RAM disk database slows non-serializable transactions by a fraction of a percent]&lt;br /&gt;
** [http://archives.postgresql.org/message-id/20110422220734.GG57793@csail.mit.edu Or speeds it up by a fraction of a percent.  Either way it's too close to tease out from the noise easily.]&lt;br /&gt;
** [http://archives.postgresql.org/message-id/20110425033308.GJ57793@csail.mit.edu As insurance against any performance hit in extreme high contention loads, it might be worthwhile to do a quick return (without taking any locks) if no serializable transactions are active.]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/201104201411.p3KEBOfA009414@wwwmaster.postgresql.org SSI: UPDATE setting a TOASTed value is broken, regardless of transaction isolation level]&lt;br /&gt;
** [http://archives.postgresql.org/message-id/4DAEF7E6.7080107@enterprisedb.com proposed patch]&lt;br /&gt;
* [http://archives.postgresql.org/message-id/BANLkTim6a_rfZ+UPPATTXap9Ed7-X7BzoA@mail.gmail.com foreign table permissions issues]&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-bugs/2011-04/msg00141.php CREATE TABLE IF NOT EXISTS doesn't work]&lt;br /&gt;
* {{MessageLink|201103111328.p2BDSFd10499@momjian.us|Typed-tables patch broke pg_upgrade}}&lt;br /&gt;
** {{MessageLink|20110418235041.GB2769@tornado.leadboat.com|proposed patch (tt2v2-binary-upgrade.patch)}}&lt;br /&gt;
&lt;br /&gt;
[[Category:PostgreSQL 9.1]]&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/GSoC_2011</id>
		<title>GSoC 2011</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/GSoC_2011"/>
				<updated>2011-03-14T16:09:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;/* Project Ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is GSoC? ==&lt;br /&gt;
&lt;br /&gt;
Google Summer of Code (GSoC) is a global program that offers student developers stipends to write code for various open source software projects. We have worked with several open source, free software, and technology-related groups to identify and fund several projects over a three month period. Since its inception in 2005, the program has brought together over 4,500 students and more than more than 4,000 mentors &amp;amp; co-mentors from over 85 countries worldwide, all for the love of code. Through Google Summer of Code, accepted student applicants are paired with a mentor or mentors from the participating projects, thus gaining exposure to real-world software development scenarios and the opportunity for employment in areas related to their academic pursuits. In turn, the participating projects are able to more easily identify and bring in new developers. Best of all, more source code is created and released for the use and benefit of all.&lt;br /&gt;
&lt;br /&gt;
PostgreSQL has an official summer of code page: http://www.postgresql.org/developer/summerofcode.html&lt;br /&gt;
&lt;br /&gt;
We also have a Ukraine translation: http://webhostinggeeks.com/science/project-postgresql-ua&lt;br /&gt;
&lt;br /&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;
* PL/Erlang&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;
* Finish the AOX integration for archives (see http://archives.beccati.org/ which has been done in PHP, has to be redone in django to integrate into the architecture)&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'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;
* Devrim Gündüz - Administration related software (dashboard)&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'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'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>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/File:PGDay2010-Extensions.pdf</id>
		<title>File:PGDay2010-Extensions.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/File:PGDay2010-Extensions.pdf"/>
				<updated>2010-12-08T20:53:16Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;PostgreSQL extensibility is remarkable but incomplete. It lacks dump and
restore support. What that means is  that once an extension is installed
into your database, PostgreSQL currently has no idea of what SQL objects
belongs to  the extension rather  itself, so  the dump will  contain the
instructions to install the extension. That's only practical if you want
to restore  your dump targeting  the very same extension's  version, but
when upgrading systems that's seldom what happens. This talk will detail
how to fix this problem and more, explaining you how to benefit from the
extensions capabilities for your own work within the database.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostgreSQL extensibility is remarkable but incomplete. It lacks dump and&lt;br /&gt;
restore support. What that means is  that once an extension is installed&lt;br /&gt;
into your database, PostgreSQL currently has no idea of what SQL objects&lt;br /&gt;
belongs to  the extension rather  itself, so  the dump will  contain the&lt;br /&gt;
instructions to install the extension. That's only practical if you want&lt;br /&gt;
to restore  your dump targeting  the very same extension's  version, but&lt;br /&gt;
when upgrading systems that's seldom what happens. This talk will detail&lt;br /&gt;
how to fix this problem and more, explaining you how to benefit from the&lt;br /&gt;
extensions capabilities for your own work within the database.&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	<entry>
		<id>http://wiki.postgresql.org/wiki/PGDay_Europe_2010_Talks</id>
		<title>PGDay Europe 2010 Talks</title>
		<link rel="alternate" type="text/html" href="http://wiki.postgresql.org/wiki/PGDay_Europe_2010_Talks"/>
				<updated>2010-12-08T20:52:03Z</updated>
		
		<summary type="html">&lt;p&gt;Dim:&amp;#32;PostgreSQL Extension's Development&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PGDay.EU 2010 was held in Stuttgart, Germany on December 6th - 8th.&lt;br /&gt;
&lt;br /&gt;
== Monday, December 6, 2010 ==&lt;br /&gt;
&lt;br /&gt;
=== Berlin 1+2 ===&lt;br /&gt;
&lt;br /&gt;
==== 9:45 - 10:45 [[Keynote: Back To The Future of Open Source  (Simon Phipps)]]====&lt;br /&gt;
==== 11:10 - 12:00 [[Play chess against PostgreSQL (and get beaten) (Gianni Ciolli)]] ====&lt;br /&gt;
==== 12:10 - 13:00 [[Rapid Upgrades With Pg_Upgrade (Bruce Momjian)]] ====&lt;br /&gt;
==== 14:00 - 14:50 [[Media:Postgis beyond courtin caveayland pgdayEU2010.pdf|PostGIS 1.5 and beyond: a technical perspective (Mark Cave-Ayland, Olivier Courtin)]] ====&lt;br /&gt;
==== 15:20 - 16:10 [[Managing PostgreSQL Replication (Simon Riggs)]] ====&lt;br /&gt;
&lt;br /&gt;
=== Berlin 3 ===&lt;br /&gt;
&lt;br /&gt;
==== 11:10 - 12:00 [[Media:Postgis_das_wo_in_der_datenbank_pgday_eu_2010.pdf|PostGIS - Das Wo? in der Datenbank (Stefan Keller, Andreas Neumann)]]====&lt;br /&gt;
&lt;br /&gt;
==== 12:10 - 13:00 [[Media:Pgsql_detailhandel.pdf|PostgreSQL als Basis für Detailhandels-Anwendungen (Marc Balmer)]]====&lt;br /&gt;
&lt;br /&gt;
==== 14:00 - 14:50 [[Media:Pg-community.pdf|Die PostgreSQL Community (Bernd Helmle)]]====&lt;br /&gt;
&lt;br /&gt;
==== 16:20 - 17:10 [[Media:Pgday-2010-ose-print.pdf|Open Source Entscheidungen]] ([[User:Ads|Andreas Scherbaum]]) ====&lt;br /&gt;
&lt;br /&gt;
=== Glasgow ===&lt;br /&gt;
&lt;br /&gt;
==== 15:20 - 16:10 [[Media:Concurrency.pdf|Concurrency &amp;amp; PostgreSQL (Marko Tiikkaja)]]====&lt;br /&gt;
&lt;br /&gt;
==== 16:20 - 17:10 [[Media:PostgreSQL_Clustering_with_Red_Hat_Cluster_Suite_06122010.odp|PostgreSQL Clustering with RedHat Cluster Suite (Devrim Gündüz)]]====&lt;br /&gt;
&lt;br /&gt;
=== Tara ===&lt;br /&gt;
&lt;br /&gt;
==== 14:00 - 14:50 [[Media:PGDay_EU_2010.pdf|Servermonitoring Postgres mit RHQ (Heiko Rupp)]]====&lt;br /&gt;
&lt;br /&gt;
==== 15:20 - 16:10 [[Media:Psycopg-2010-stuttgart.pdf|Advanced PostgreSQL Access from Python with Psycopg]] ([[User:dvarrazzo|Daniele Varrazzo]]) ====&lt;br /&gt;
&lt;br /&gt;
== Tuesday, December 7, 2010 ==&lt;br /&gt;
&lt;br /&gt;
=== Berlin 1+2 ===&lt;br /&gt;
==== 11:35 - 12:20 [[Media:Web-arch-pgday2010.pdf|How PostgreSQL 9 Makes Web Architecture Sweeter]] (Jonathan S. Katz) ====&lt;br /&gt;
==== 14:10 - 15:00 [[Media:PGDay2010-Statistics.pdf|Statistics in PostgreSQL]] (Heikki Linnakangas) ====&lt;br /&gt;
&lt;br /&gt;
=== Berlin 3 ===&lt;br /&gt;
&lt;br /&gt;
==== 09:00 - 09:50 [[Media:PGDay2010_-_ILMSraster.pdf|Verwendung von PostgreSQL und GRASS-GIS in einer &amp;quot;Virtual Appliance&amp;quot; für datenbankbasierte Rasterhaltung in ILMS]] ([[User:c3schs|Christian Schwartze]]) ====&lt;br /&gt;
&lt;br /&gt;
==== 10:25 - 11:10 [[Media:Pgday_eu_2010_benchmarking.pdf|Benchmarking und Performancetesting von und mit PostgreSQL]] ([[User:mastermind|Stefan Kaltenbrunner]]) ====&lt;br /&gt;
&lt;br /&gt;
==== 11:35 - 12:20 [[Media:Pgday-2010-mysql-to-pg-print.pdf|Datenbanken von MySQL zu PostgreSQL portieren]] ([[User:Ads|Andreas Scherbaum]]) ====&lt;br /&gt;
&lt;br /&gt;
==== 14:10 - 15:00 [[Media:Postgresql_query_cache_memcached_bjoern_haeuser.pdf|Postgresql Query Cache mit Memcache]] ====&lt;br /&gt;
&lt;br /&gt;
=== Glasgow ===&lt;br /&gt;
==== 10:25 - 11:10 [http://www.slideshare.net/Tim.Bunce/pl-perl90-201012 PL/Perl new features in 9.0] ([[User:timbunce|Tim Bunce]]) ====&lt;br /&gt;
==== 13:10 - 14:00 [[Media:Postgis vincent picavet pgdayEU2010.pdf|PostGIS, a PostgreSQL plugin for spatial data]] ([[User:Vincentp|Vincent Picavet]]) ====&lt;br /&gt;
=== Tara ===&lt;br /&gt;
&lt;br /&gt;
==== 10:25 - 11:10 [http://www.dalibo.org/_media/pgpool.pdf Why your PostgreSQL 9.0 cluster needs pgpool-II] ([[User:jpargudo|Jean-Paul Argudo]]) ====&lt;br /&gt;
==== 14:10 - 15:00 [[Media:PGDay2010-Extensions.pdf|PostgreSQL extension's development]] (Dimitri Fontaine) ====&lt;/div&gt;</summary>
		<author><name>Dim</name></author>	</entry>

	</feed>