Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1Tox05-0004iR-T7 for pgsql-hackers@arkaria.postgresql.org; Sat, 29 Dec 2012 14:02:58 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.72) (envelope-from ) id 1Tox04-0002Ev-Rv for pgsql-hackers@arkaria.postgresql.org; Sat, 29 Dec 2012 14:02:56 +0000 Received: from makus.postgresql.org ([98.129.198.125]) by malur.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1Tox01-0002D6-KL for pgsql-hackers@postgresql.org; Sat, 29 Dec 2012 14:02:54 +0000 Received: from acidenitrix.villemain.org ([91.121.90.165]) by makus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1Towzy-0002GQ-Rt for pgsql-hackers@postgresql.org; Sat, 29 Dec 2012 14:02:52 +0000 Received: from [89.157.243.169] (helo=Dimitris-MacBook-Air.local) by acidenitrix.villemain.org with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1Towzw-0005ZF-Pd; Sat, 29 Dec 2012 15:02:49 +0100 From: Dimitri Fontaine To: Robert Haas Cc: PostgreSQL Hackers Subject: Re: Event Triggers: adding information Organization: 2ndQuadrant References: User-Mail-Address: dimitri@2ndQuadrant.fr Date: Sat, 29 Dec 2012 15:02:41 +0100 In-Reply-To: (Robert Haas's message of "Sat, 29 Dec 2012 08:11:00 -0500") Message-ID: User-Agent: Gnus/5.130006 (Ma Gnus v0.6) Emacs/24.2 (darwin) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --=-=-= Content-Type: text/plain Robert Haas writes: > OK, I committed this. Thanks. Please find attached a rebased patch, v6. I think it's looking more like what you would expect now: COLUMNS=70 git diff --stat postgres/master.. doc/src/sgml/event-trigger.sgml | 196 +++- doc/src/sgml/plpgsql.sgml | 95 +- doc/src/sgml/ref/create_event_trigger.sgml | 20 +- src/backend/catalog/objectaddress.c | 22 +- src/backend/commands/event_trigger.c | 870 ++++++++++++++++- src/backend/commands/trigger.c | 39 + src/backend/commands/typecmds.c | 2 +- src/backend/tcop/utility.c | 385 +++++--- src/backend/utils/cache/evtcache.c | 15 + src/bin/pg_dump/pg_dump.c | 21 +- src/bin/pg_dump/pg_dump.h | 1 + src/bin/psql/describe.c | 9 +- src/include/catalog/objectaddress.h | 21 + src/include/catalog/pg_event_trigger.h | 2 + src/include/commands/event_trigger.h | 47 +- src/include/commands/trigger.h | 1 + src/include/utils/evtcache.h | 6 +- src/pl/plpgsql/src/pl_comp.c | 48 + src/pl/plpgsql/src/pl_exec.c | 57 +- src/pl/plpgsql/src/plpgsql.h | 6 + src/test/regress/expected/event_trigger.out | 53 +- src/test/regress/sql/event_trigger.sql | 51 +- 22 files changed, 1700 insertions(+), 267 deletions(-) >> That completes ALTER and CREATE ObjectID support, I did nothing about >> the DROP case in the attached. The way I intend to solve that problem is >> using get_object_address() and do an extra lookup from within the Event >> Trigger code path. > > An extra lookup that occurs always, or only when event triggers are in > use? A re-resolution of the name, or some other kind of lookup? Only when event triggers are in use, and when the object is known to exists in the catalogs (ddl_command_start for a DROP operation, or ddl_command_end for a CREATE or ALTER operation). And it's only a name resolution using the catcache when it exists, or a catalog index scan when we have to. The key we have is the OID. The OID is filled in from utility.c in all CREATE and ALTER operations that we are interested into, and in the case of a DROP operation we do either a RangeVarGetRelid for relations or get_object_address() for the other object kinds. Given the OID, we use the ObjectProperty[] structure to know which cache or catalog to scan in order to get the name and namespace of the object. Regards, -- Dimitri Fontaine http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=event_trigger_infos.6.patch.gz Content-Transfer-Encoding: base64 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 JYb+AQA= --=-=-= Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --=-=-=--