Re: Add CREATE support to event triggers - Mailing list pgsql-hackers
From | Dimitri Fontaine |
---|---|
Subject | Re: Add CREATE support to event triggers |
Date | |
Msg-id | m2r47pk23k.fsf@2ndQuadrant.fr Whole thread Raw |
In response to | Re: Add CREATE support to event triggers (Alvaro Herrera <alvherre@2ndquadrant.com>) |
Responses |
Re: Add CREATE support to event triggers
|
List | pgsql-hackers |
Hi, Alvaro Herrera <alvherre@2ndquadrant.com> writes: > So here's a patch implementing the ideas expressed in this thread. > There are two new SQL functions: I spent some time reviewing the patch and tried to focus on a higher level review, as I saw Andres already began with the lower level stuff. The main things to keep in mind here are: - this patch enables running Event Triggers anytime a new object is created, in a way that the user code is run once theobject already made it through the catalogs; - the Event Trigger code has access to the full details about every created object, so it's not tied to a command butreally the fact that an object just was created in the catalogs; (it's important with serial and primary key sub-commands) - facilities are provided so that it's possible to easily build an SQL command that if executed would create the exactsame object again; - the facilities around passing the created object details and building a SQL command are made in such a way that it'strivially possible to "hack" away the captured objects properties before producing again a new SQL command. After careful study and thinking, it appears to me that the proposed patch addresses the whole range of features we expect here, and is both flexible enough for the users and easy enough to maintain. The event being fired once the objects are available in the catalogs makes it possible for the code providing the details in the JSON format to complete the parsetree with necessary information. Current state of the patch is not ready for commit yet, independant of code details some more high-level work needs to be done: - preliminary commit It might be a good idea to separate away some pre-requisites of this patch and commit them separately: the OID publishingparts and allowing an Event Trigger to get fired after CREATE but without the extra detailed JSON formatedinformation might be good commits already, and later add the much needed details about what did happen. - document the JSON format I vote for going with the proposed format, because it actually allows to implement both the audit and replication featureswe want, with the capability of hacking schema, data types, SQL representation etc; and because I couldn't thinkof anything better than what's proposed here ;-) - other usual documentation I don't suppose I have to expand on what I mean here… - fill-in other commands Not all commands are supported in the submitted patch. I think once we have a clear documentation on the general JSONformating and how to use it as a user, we need to include support for all CREATE commands that we have. I see nothing against extending when this work has to bo done until after the CF, as long as it's fully done beforebeta. After all it's only about filling in minutia at this point. - review the JSON producing code It might be possible to use more of the internal supports for JSON now that the format is freezing. - regression tests The patch will need some. The simpler solution is to add a new regression test entry and exercise all the CREATE commandsin there, in a specific schema, activating an event trigger that outputs the JSON detailed information each time(the snitch() example). Best would be to have some "pretty" indented output of the JSON to help with reviewing diffs, and I have to wonder aboutJSON object inner-ordering if we're going to do that. No other ideas on this topic from me. > The JSON parsing is done in event_trigger.c. This code should probably > live elsewhere, but I again hesitate to put it in json.c or jsonfuncs.c, > at least until some discussion about its general applicability takes > place. I see that as useful enough if it can be made to work without the special "fmt" fields somehow, with a nice default formatting ability. In particular, being able to build some intermediate object with json_agg then call the formating/expanding function on top of that might be quite useful. That said, I don't think we have enough time to attack this problem now, I think it would be wiser to address your immediate problem separately in your patch and clean it later (next release) with sharing code and infrastructure and offering a more generally useful tool. At least we will have some feedback about the Event Trigger specific context then. Regards, -- Dimitri Fontaine http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support
pgsql-hackers by date: