event_triggers_v1.8--v1.9.patch

text/x-patch

Filename: event_triggers_v1.8--v1.9.patch
Type: text/x-patch
Part: 0
Message: Re: Event Triggers reduced, v1

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
Series: patch v1
File+
doc/src/sgml/event-trigger.sgml 22 19
doc/src/sgml/plpgsql.sgml 1 1
doc/src/sgml/ref/create_event_trigger.sgml 4 5
src/backend/tcop/utility.c 85 53
src/backend/utils/cache/evtcache.c 32 56
src/include/commands/event_trigger.h 1 1
src/include/utils/evtcache.h 3 8
src/pl/plperl/expected/plperl_trigger.out 8 6
src/pl/plperl/sql/plperl_trigger.sql 3 1
src/pl/plpython/expected/plpython_trigger.out 8 6
src/pl/plpython/sql/plpython_trigger.sql 3 1
src/pl/tcl/expected/pltcl_setup.out 8 6
src/pl/tcl/sql/pltcl_setup.sql 3 1
src/test/regress/expected/event_triggers.out 232 239
src/test/regress/sql/event_triggers.sql 9 7
diff --git a/doc/src/sgml/event-trigger.sgml b/doc/src/sgml/event-trigger.sgml
index 52e9764..36f0d34 100644
--- a/doc/src/sgml/event-trigger.sgml
+++ b/doc/src/sgml/event-trigger.sgml
@@ -25,24 +25,25 @@
    <title>Overview of Event Trigger Behavior</title>
 
    <para>
-     An event trigger fires whenever the event with which it is
-     associated occurs in the database in which it is defined.  Currently,
-     the only supported event is <literal>command_start</>.  Support for
+     An event trigger fires whenever the event with which it is associated
+     occurs in the database in which it is defined. Currently, the only
+     supported event is <literal>ddl_command_start</>. Support for
      additional events may be added in future releases.
    </para>
 
    <para>
-     The <literal>command_start</> event occurs just before the execution of
-     many SQL commands, most of which can be broadly described as
-     <link linkend="ddl">DDL</link>.  There are a number of commands that,
+     The <literal>ddl_command_start</> event occurs just before the
+     execution of many SQL commands, most of which can be broadly described
+     as
+     <link linkend="ddl">DDL</link>. There are a number of commands that,
      for various reasons, are specifically excluded from the event trigger
      system:
 
     <itemizedlist>
      <listitem>
       <para>
-       The <literal>command_start</> event does not occur for commands that
-       access or modify data within a particular table, such
+       The <literal>ddl_command_start</> event does not occur for commands
+       that access or modify data within a particular table, such
        <xref linkend="sql-select">, <xref linkend="sql-insert">, 
        <xref linkend="sql-update">, <xref linkend="sql-delete">, and
        <xref linkend="sql-truncate">.  This also includes commands related
@@ -54,19 +55,21 @@
      </listitem>
      <listitem>
       <para>
-       The <literal>command_start</> event does not occur for commands that
-       create, alter, or drop global objects.  Unlike the event trigger, these
-       objects are not part of the current database; they are accessible from
-       all databases in the cluster, and are therefore unaffected by event
-       triggers.  Such objects include databases, tablespaces, and roles.
+       The <literal>ddl_command_start</> event does not occur for commands
+       that create, alter, or drop global objects. Unlike the event trigger,
+       these objects are not part of the current database; they are
+       accessible from all databases in the cluster, and are therefore
+       unaffected by event triggers. Such objects include databases,
+       tablespaces, and roles.
       </para>
      </listitem>
      <listitem>
       <para>
-       The <literal>command_start</> event does not occur for commands where
-       firing a trigger might result either result in system instability or
-       interfere with the administrator's ability to regain control of the
-       database.  These include transaction control commands, such as
+       The <literal>ddl_command_start</> event does not occur for commands
+       where firing a trigger might result either result in system
+       instability or interfere with the administrator's ability to regain
+       control of the database. These include transaction control commands,
+       such as
        <xref linkend="sql-begin"> or <xref linkend="sql-commit">; configuration
        commands, such as <xref linkend="sql-set"> or <xref linkend="sql-show">;
        and commands related to the event trigger mechanism itself, such as
@@ -97,7 +100,7 @@
 
    <para>
      A trigger definition can also specify a <literal>WHEN</literal>
-     condition so that, for example, a <literal>command_start</literal>
+     condition so that, for example, a <literal>ddl_command_start</literal>
      trigger can be fired only for particular commands which the user wishes
      to intercept. A common use of such triggers is to restrict the range of
      DDL operations which users may perform.
@@ -118,7 +121,7 @@
       <thead>
        <row>
         <entry>command tag</entry>
-        <entry><literal>command_start</literal></entry>
+        <entry><literal>ddl_command_start</literal></entry>
        </row>
       </thead>
       <tbody>
diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml
index a21aaf2..4ce3278 100644
--- a/doc/src/sgml/plpgsql.sgml
+++ b/doc/src/sgml/plpgsql.sgml
@@ -4020,7 +4020,7 @@ BEGIN
 END;
 $$ LANGUAGE plpgsql;
 
-CREATE EVENT TRIGGER snitch ON command_start EXECUTE PROCEDURE snitch();
+CREATE EVENT TRIGGER snitch ON ddl_command_start EXECUTE PROCEDURE snitch();
 </programlisting>
    </example>
   </sect2>
diff --git a/doc/src/sgml/ref/create_event_trigger.sgml b/doc/src/sgml/ref/create_event_trigger.sgml
index 3b3d474..a25c6b0 100644
--- a/doc/src/sgml/ref/create_event_trigger.sgml
+++ b/doc/src/sgml/ref/create_event_trigger.sgml
@@ -122,8 +122,7 @@ CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
   <title>Examples</title>
 
   <para>
-   Forbid the execution of any command supported by the event trigger
-   mechanism:
+   Forbid the execution of any <link linkend="ddl">ddl</link> command:
 
 <programlisting>
 CREATE OR REPLACE FUNCTION abort_any_command()
@@ -135,7 +134,7 @@ BEGIN
 END;
 $$;
 
-CREATE EVENT TRIGGER abort_ddl ON command_start
+CREATE EVENT TRIGGER abort_ddl ON ddl_command_start
    EXECUTE PROCEDURE abort_any_command();
 </programlisting>
 
@@ -156,8 +155,8 @@ END;
 $$;
 
   CREATE EVENT TRIGGER check_style
-            ON command_start
-          WHEN tag IN (CREATE TABLE)
+            ON ddl_command_start
+          WHEN tag IN ('CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO')
        EXECUTE PROCEDURE enforce_local_style();
 </programlisting>
   </para>
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 4e1a8c0..dcbd180 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -355,7 +355,7 @@ standard_ProcessUtility(Node *parsetree,
 	if (completionTag)
 		completionTag[0] = '\0';
 
-	/* Event Trigger support for command_start */
+	/* Event Trigger support for ddl_command_start */
 	InitEventContext(&evt, parsetree);
 
 	switch (nodeTag(parsetree))
@@ -509,7 +509,8 @@ standard_ProcessUtility(Node *parsetree,
 			 * relation and attribute manipulation
 			 */
 		case T_CreateSchemaStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_SCHEMA;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateSchemaCommand((CreateSchemaStmt *) parsetree,
 								queryString);
 			break;
@@ -523,7 +524,11 @@ standard_ProcessUtility(Node *parsetree,
 				CreateStmt *stmt = (CreateStmt *) parsetree;
 
 				/* possibly run event triggers */
-				ExecEventTriggers(&evt, EVT_CommandStart);
+				if (nodeTag(parsetree) == T_CreateStmt)
+					evt.objecttype = OBJECT_TABLE;
+				else
+					evt.objecttype = OBJECT_FOREIGN_TABLE;
+				ExecEventTriggers(&evt, EVT_DDLCommandStart);
 
 				/* Run parse analysis ... */
 				stmts = transformCreateStmt(stmt, queryString);
@@ -589,74 +594,81 @@ standard_ProcessUtility(Node *parsetree,
 
 		case T_CreateTableSpaceStmt:
 			PreventTransactionChain(isTopLevel, "CREATE TABLESPACE");
-			ExecEventTriggers(&evt, EVT_CommandStart);
 			CreateTableSpace((CreateTableSpaceStmt *) parsetree);
 			break;
 
 		case T_DropTableSpaceStmt:
 			PreventTransactionChain(isTopLevel, "DROP TABLESPACE");
-			ExecEventTriggers(&evt, EVT_CommandStart);
 			DropTableSpace((DropTableSpaceStmt *) parsetree);
 			break;
 
 		case T_AlterTableSpaceOptionsStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
 			AlterTableSpaceOptions((AlterTableSpaceOptionsStmt *) parsetree);
 			break;
 
 		case T_CreateExtensionStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_EXTENSION;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateExtension((CreateExtensionStmt *) parsetree);
 			break;
 
 		case T_AlterExtensionStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_EXTENSION;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			ExecAlterExtensionStmt((AlterExtensionStmt *) parsetree);
 			break;
 
 		case T_AlterExtensionContentsStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_EXTENSION;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			ExecAlterExtensionContentsStmt((AlterExtensionContentsStmt *) parsetree);
 			break;
 
 		case T_CreateFdwStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_FDW;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateForeignDataWrapper((CreateFdwStmt *) parsetree);
 			break;
 
 		case T_AlterFdwStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_FDW;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterForeignDataWrapper((AlterFdwStmt *) parsetree);
 			break;
 
 		case T_CreateForeignServerStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_FOREIGN_SERVER;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateForeignServer((CreateForeignServerStmt *) parsetree);
 			break;
 
 		case T_AlterForeignServerStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_FOREIGN_SERVER;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterForeignServer((AlterForeignServerStmt *) parsetree);
 			break;
 
 		case T_CreateUserMappingStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			/* there's no OBJECT_ for user mappings */
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateUserMapping((CreateUserMappingStmt *) parsetree);
 			break;
 
 		case T_AlterUserMappingStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			/* there's no OBJECT_ for user mappings */
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterUserMapping((AlterUserMappingStmt *) parsetree);
 			break;
 
 		case T_DropUserMappingStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			/* there's no OBJECT_ for user mappings */
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			RemoveUserMapping((DropUserMappingStmt *) parsetree);
 			break;
 
 		case T_DropStmt:
 			evt.objecttype = ((DropStmt *) parsetree)->removeType;
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 
 			switch (((DropStmt *) parsetree)->removeType)
 			{
@@ -722,19 +734,19 @@ standard_ProcessUtility(Node *parsetree,
 			 */
 		case T_RenameStmt:
 			evt.objecttype = ((RenameStmt *) parsetree)->renameType;
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			ExecRenameStmt((RenameStmt *) parsetree);
 			break;
 
 		case T_AlterObjectSchemaStmt:
 			evt.objecttype = ((AlterObjectSchemaStmt *) parsetree)->objectType;
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			ExecAlterObjectSchemaStmt((AlterObjectSchemaStmt *) parsetree);
 			break;
 
 		case T_AlterOwnerStmt:
 			evt.objecttype = ((AlterOwnerStmt *) parsetree)->objectType;
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			ExecAlterOwnerStmt((AlterOwnerStmt *) parsetree);
 			break;
 
@@ -746,8 +758,9 @@ standard_ProcessUtility(Node *parsetree,
 				ListCell   *l;
 				LOCKMODE	lockmode;
 
-				/* run command_start event triggers, if any */
-				ExecEventTriggers(&evt, EVT_CommandStart);
+				/* run ddl_command_start event triggers, if any */
+				evt.objecttype = OBJECT_TABLE;
+				ExecEventTriggers(&evt, EVT_DDLCommandStart);
 
 				/*
 				 * Figure out lock mode, and acquire lock.	This also does
@@ -800,8 +813,9 @@ standard_ProcessUtility(Node *parsetree,
 			{
 				AlterDomainStmt *stmt = (AlterDomainStmt *) parsetree;
 
-				/* run command_start event triggers, if any */
-				ExecEventTriggers(&evt, EVT_CommandStart);
+				/* run ddl_command_start event triggers, if any */
+				evt.objecttype = OBJECT_DOMAIN;
+				ExecEventTriggers(&evt, EVT_DDLCommandStart);
 
 				/*
 				 * Some or all of these functions are recursive to cover
@@ -868,7 +882,7 @@ standard_ProcessUtility(Node *parsetree,
 				DefineStmt *stmt = (DefineStmt *) parsetree;
 
 				evt.objecttype = stmt->kind;
-				ExecEventTriggers(&evt, EVT_CommandStart);
+				ExecEventTriggers(&evt, EVT_DDLCommandStart);
 
 				switch (stmt->kind)
 				{
@@ -916,18 +930,21 @@ standard_ProcessUtility(Node *parsetree,
 			{
 				CompositeTypeStmt *stmt = (CompositeTypeStmt *) parsetree;
 
-				ExecEventTriggers(&evt, EVT_CommandStart);
+				evt.objecttype = OBJECT_TYPE;
+				ExecEventTriggers(&evt, EVT_DDLCommandStart);
 				DefineCompositeType(stmt->typevar, stmt->coldeflist);
 			}
 			break;
 
 		case T_CreateEnumStmt:	/* CREATE TYPE AS ENUM */
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_TYPE;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineEnum((CreateEnumStmt *) parsetree);
 			break;
 
 		case T_CreateRangeStmt:	/* CREATE TYPE AS RANGE */
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_TYPE;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineRange((CreateRangeStmt *) parsetree);
 			break;
 
@@ -938,23 +955,27 @@ standard_ProcessUtility(Node *parsetree,
 			 * with enum OID values getting into indexes and then having their
 			 * defining pg_enum entries go away.
 			 */
+			evt.objecttype = OBJECT_TYPE;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			PreventTransactionChain(isTopLevel, "ALTER TYPE ... ADD");
-			ExecEventTriggers(&evt, EVT_CommandStart);
 			AlterEnum((AlterEnumStmt *) parsetree);
 			break;
 
 		case T_ViewStmt:		/* CREATE VIEW */
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_VIEW;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineView((ViewStmt *) parsetree, queryString);
 			break;
 
 		case T_CreateFunctionStmt:		/* CREATE FUNCTION */
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_FUNCTION;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateFunction((CreateFunctionStmt *) parsetree, queryString);
 			break;
 
 		case T_AlterFunctionStmt:		/* ALTER FUNCTION */
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_FUNCTION;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterFunction((AlterFunctionStmt *) parsetree);
 			break;
 
@@ -962,7 +983,8 @@ standard_ProcessUtility(Node *parsetree,
 			{
 				IndexStmt  *stmt = (IndexStmt *) parsetree;
 
-				ExecEventTriggers(&evt, EVT_CommandStart);
+				evt.objecttype = OBJECT_INDEX;
+				ExecEventTriggers(&evt, EVT_DDLCommandStart);
 
 				if (stmt->concurrent)
 					PreventTransactionChain(isTopLevel,
@@ -998,17 +1020,20 @@ standard_ProcessUtility(Node *parsetree,
 			break;
 
 		case T_RuleStmt:		/* CREATE RULE */
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_RULE;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineRule((RuleStmt *) parsetree, queryString);
 			break;
 
 		case T_CreateSeqStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_SEQUENCE;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineSequence((CreateSeqStmt *) parsetree);
 			break;
 
 		case T_AlterSeqStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_SEQUENCE;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterSequence((AlterSeqStmt *) parsetree);
 			break;
 
@@ -1075,8 +1100,6 @@ standard_ProcessUtility(Node *parsetree,
 			{
 				LoadStmt   *stmt = (LoadStmt *) parsetree;
 
-				ExecEventTriggers(&evt, EVT_CommandStart);
-
 				closeAllVfds(); /* probably not necessary... */
 				/* Allowed names are restricted if you're not superuser */
 				load_file(stmt->filename, !superuser());
@@ -1085,14 +1108,12 @@ standard_ProcessUtility(Node *parsetree,
 
 		case T_ClusterStmt:
 			/* we choose to allow this during "read only" transactions */
-			ExecEventTriggers(&evt, EVT_CommandStart);
 			PreventCommandDuringRecovery("CLUSTER");
 			cluster((ClusterStmt *) parsetree, isTopLevel);
 			break;
 
 		case T_VacuumStmt:
 			/* we choose to allow this during "read only" transactions */
-			ExecEventTriggers(&evt, EVT_CommandStart);
 			PreventCommandDuringRecovery("VACUUM");
 			vacuum((VacuumStmt *) parsetree, InvalidOid, true, NULL, false,
 				   isTopLevel);
@@ -1103,7 +1124,10 @@ standard_ProcessUtility(Node *parsetree,
 			break;
 
 		case T_CreateTableAsStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_TABLE;
+			if (((CreateTableAsStmt *) parsetree)->is_select_into)
+				evt.operation = "CREATE";
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			ExecCreateTableAs((CreateTableAsStmt *) parsetree,
 							  queryString, params, completionTag);
 			break;
@@ -1127,7 +1151,8 @@ standard_ProcessUtility(Node *parsetree,
 			break;
 
 		case T_CreateTrigStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_TRIGGER;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			(void) CreateTrigger((CreateTrigStmt *) parsetree, queryString,
 								 InvalidOid, InvalidOid, false);
 			break;
@@ -1141,7 +1166,8 @@ standard_ProcessUtility(Node *parsetree,
 			break;
 
 		case T_CreatePLangStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_LANGUAGE;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateProceduralLanguage((CreatePLangStmt *) parsetree);
 			break;
 
@@ -1149,7 +1175,8 @@ standard_ProcessUtility(Node *parsetree,
 			 * ******************************** DOMAIN statements ****
 			 */
 		case T_CreateDomainStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_DOMAIN;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineDomain((CreateDomainStmt *) parsetree);
 			break;
 
@@ -1215,8 +1242,6 @@ standard_ProcessUtility(Node *parsetree,
 			{
 				ReindexStmt *stmt = (ReindexStmt *) parsetree;
 
-				ExecEventTriggers(&evt, EVT_CommandStart);
-
 				/* we choose to allow this during "read only" transactions */
 				PreventCommandDuringRecovery("REINDEX");
 				switch (stmt->kind)
@@ -1250,37 +1275,44 @@ standard_ProcessUtility(Node *parsetree,
 			break;
 
 		case T_CreateConversionStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_CONVERSION;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateConversionCommand((CreateConversionStmt *) parsetree);
 			break;
 
 		case T_CreateCastStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_CAST;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			CreateCast((CreateCastStmt *) parsetree);
 			break;
 
 		case T_CreateOpClassStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_OPCLASS;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineOpClass((CreateOpClassStmt *) parsetree);
 			break;
 
 		case T_CreateOpFamilyStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_OPFAMILY;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			DefineOpFamily((CreateOpFamilyStmt *) parsetree);
 			break;
 
 		case T_AlterOpFamilyStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_OPFAMILY;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterOpFamily((AlterOpFamilyStmt *) parsetree);
 			break;
 
 		case T_AlterTSDictionaryStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_TSDICTIONARY;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterTSDictionary((AlterTSDictionaryStmt *) parsetree);
 			break;
 
 		case T_AlterTSConfigurationStmt:
-			ExecEventTriggers(&evt, EVT_CommandStart);
+			evt.objecttype = OBJECT_TSCONFIGURATION;
+			ExecEventTriggers(&evt, EVT_DDLCommandStart);
 			AlterTSConfiguration((AlterTSConfigurationStmt *) parsetree);
 			break;
 
diff --git a/src/backend/utils/cache/evtcache.c b/src/backend/utils/cache/evtcache.c
index bae9c35..df517e8 100644
--- a/src/backend/utils/cache/evtcache.c
+++ b/src/backend/utils/cache/evtcache.c
@@ -102,7 +102,7 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_CreateCast,
 		"CREATE CAST",
 		T_CreateCastStmt,
-		-1
+		OBJECT_CAST
 	},
 	{
 		ETC_CreateCollation,
@@ -114,49 +114,49 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_CreateConversion,
 		"CREATE CONVERSION",
 		T_CreateConversionStmt,
-		-1
+		OBJECT_CONVERSION
 	},
 	{
 		ETC_CreateDomain,
 		"CREATE DOMAIN",
 		T_CreateDomainStmt,
-		-1
+		OBJECT_DOMAIN
 	},
 	{
 		ETC_CreateExtension,
 		"CREATE EXTENSION",
 		T_CreateExtensionStmt,
-		-1
+		OBJECT_EXTENSION
 	},
 	{
 		ETC_CreateForeignDataWrapper,
 		"CREATE FOREIGN DATA WRAPPER",
 		T_CreateFdwStmt,
-		-1
+		OBJECT_FDW
 	},
 	{
 		ETC_CreateForeignTable,
 		"CREATE FOREIGN TABLE",
 		T_CreateForeignTableStmt,
-		-1
+		OBJECT_FOREIGN_TABLE
 	},
 	{
 		ETC_CreateFunction,
 		"CREATE FUNCTION",
 		T_CreateFunctionStmt,
-		-1
+		OBJECT_FUNCTION
 	},
 	{
 		ETC_CreateIndex,
 		"CREATE INDEX",
 		T_IndexStmt,
-		-1
+		OBJECT_INDEX
 	},
 	{
 		ETC_CreateLanguage,
 		"CREATE LANGUAGE",
 		T_CreatePLangStmt,
-		-1
+		OBJECT_LANGUAGE
 	},
 	{
 		ETC_CreateOperator,
@@ -168,13 +168,13 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_CreateOperatorClass,
 		"CREATE OPERATOR CLASS",
 		T_CreateOpClassStmt,
-		-1
+		OBJECT_OPCLASS
 	},
 	{
 		ETC_CreateOperatorFamily,
 		"CREATE OPERATOR FAMILY",
 		T_CreateOpFamilyStmt,
-		-1
+		OBJECT_OPFAMILY
 	},
 	{
 		ETC_CreateRule,
@@ -186,37 +186,37 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_CreateSchema,
 		"CREATE SCHEMA",
 		T_CreateSchemaStmt,
-		-1
+		OBJECT_SCHEMA
 	},
 	{
 		ETC_CreateSequence,
 		"CREATE SEQUENCE",
 		T_CreateSeqStmt,
-		-1
+		OBJECT_SEQUENCE
 	},
 	{
 		ETC_CreateServer,
 		"CREATE SERVER",
 		T_CreateForeignServerStmt,
-		-1
+		OBJECT_FOREIGN_SERVER
 	},
 	{
 		ETC_CreateTable,
 		"CREATE TABLE",
 		T_CreateStmt,
-		-1
+		OBJECT_TABLE
 	},
 	{
 		ETC_CreateTableAs,
 		"CREATE TABLE AS",
 		T_CreateTableAsStmt,
-		-1
+		OBJECT_TABLE
 	},
 	{
 		ETC_SelectInto,
 		"SELECT INTO",
 		T_CreateTableAsStmt,
-		-1
+		OBJECT_TABLE
 	},
 	{
 		ETC_CreateTextSearchParser,
@@ -246,7 +246,7 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_CreateTrigger,
 		"CREATE TRIGGER",
 		T_CreateTrigStmt,
-		-1
+		OBJECT_TRIGGER
 	},
 	{
 		ETC_CreateType,
@@ -258,19 +258,19 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_CreateType,
 		"CREATE TYPE",
 		T_CompositeTypeStmt,
-		-1
+		OBJECT_TYPE
 	},
 	{
 		ETC_CreateType,
 		"CREATE TYPE",
 		T_CreateEnumStmt,
-		-1
+		OBJECT_TYPE
 	},
 	{
 		ETC_CreateType,
 		"CREATE TYPE",
 		T_CreateRangeStmt,
-		-1
+		OBJECT_TYPE
 	},
 	{
 		ETC_CreateUserMapping,
@@ -282,13 +282,13 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_CreateView,
 		"CREATE VIEW",
 		T_ViewStmt,
-		-1
+		OBJECT_VIEW
 	},
 	{
 		ETC_AlterTable,
 		"ALTER TABLE",
 		T_AlterTableStmt,
-		-1
+		OBJECT_TABLE
 	},
 	{
 		ETC_DropAggregate,
@@ -453,34 +453,10 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		OBJECT_VIEW
 	},
 	{
-		ETC_Vacuum,
-		"VACUUM",
-		T_VacuumStmt,
-		-1
-	},
-	{
-		ETC_Cluster,
-		"CLUSTER",
-		T_ClusterStmt,
-		-1
-	},
-	{
-		ETC_Load,
-		"LOAD",
-		T_LoadStmt,
-		-1
-	},
-	{
-		ETC_Reindex,
-		"REINDEX",
-		T_ReindexStmt,
-		-1
-	},
-	{
 		ETC_AlterSequence,
 		"ALTER SEQUENCE",
 		T_AlterSeqStmt,
-		-1
+		OBJECT_SEQUENCE
 	},
 	{
 		ETC_AlterUserMapping,
@@ -492,13 +468,13 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_AlterFunction,
 		"ALTER FUNCTION",
 		T_AlterFunctionStmt,
-		-1
+		OBJECT_FUNCTION
 	},
 	{
 		ETC_AlterDomain,
 		"ALTER DOMAIN",
 		T_AlterDomainStmt,
-		-1
+		OBJECT_DOMAIN
 	},
 	/* ALTER <OBJECT> name RENAME TO */
 	{
@@ -818,7 +794,7 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_AlterType,
 		"ALTER TYPE",
 		T_AlterEnumStmt,
-		-1
+		OBJECT_TYPE
 	},
 	{
 		ETC_AlterType,
@@ -842,7 +818,7 @@ static EventTriggerCommandTagsType EventTriggerCommandTags[] =
 		ETC_AlterTextSearchDictionary,
 		"ALTER TEXT SEARCH DICTIONARY",
 		T_AlterTSDictionaryStmt,
-		-1
+		OBJECT_TSDICTIONARY
 	},
 	/* ALTER <OBJECT> name OWNER TO */
 	{
@@ -1319,8 +1295,8 @@ event_to_string(TrigEvent event)
 {
 	switch (event)
 	{
-		case EVT_CommandStart:
-			return "command_start";
+		case EVT_DDLCommandStart:
+			return "ddl_command_start";
 	}
 	return NULL;
 }
@@ -1328,8 +1304,8 @@ event_to_string(TrigEvent event)
 TrigEvent
 parse_event_name(char *event)
 {
-	if (pg_strcasecmp(event, "command_start") == 0)
-		return EVT_CommandStart;
+	if (pg_strcasecmp(event, "ddl_command_start") == 0)
+		return EVT_DDLCommandStart;
 	else
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
diff --git a/src/include/commands/event_trigger.h b/src/include/commands/event_trigger.h
index 13be6bc..9772577 100644
--- a/src/include/commands/event_trigger.h
+++ b/src/include/commands/event_trigger.h
@@ -51,7 +51,7 @@ typedef struct EventContextData *EventContext;
 typedef struct EventTriggerData
 {
 	NodeTag		 type;
-	char        *event;			/* command_start, etc */
+	char        *event;			/* ddl_command_start, etc */
 	char		*toplevel;		/* TopLevel Command Tag */
 	char		*tag;			/* Command Tag */
 	char		*operation;		/* CREATE / ALTER / DROP, or NULL */
diff --git a/src/include/utils/evtcache.h b/src/include/utils/evtcache.h
index ef84b90..397cd55 100644
--- a/src/include/utils/evtcache.h
+++ b/src/include/utils/evtcache.h
@@ -20,12 +20,12 @@
  * Times at which an event trigger can be fired. These are the
  * possible values for pg_event_trigger.evtevent.
  *
- * As of now we only implement the command_start firing point, we intend on
+ * As of now we only implement the ddl_command_start firing point, we intend on
  * adding more firing points later.
  */
 typedef enum TrigEvent
 {
-	EVT_CommandStart       = 1,
+	EVT_DDLCommandStart       = 1,
 } TrigEvent;
 
 /*
@@ -70,12 +70,6 @@ typedef enum TrigEventCommand
 	ETC_AlterUserMapping,
 	ETC_AlterView,
 
-	ETC_Cluster = 300,
-	ETC_Load,
-	ETC_Reindex,
-	ETC_SelectInto,
-	ETC_Vacuum,
-
 	ETC_CreateAggregate = 400,
 	ETC_CreateCast,
 	ETC_CreateCollation,
@@ -96,6 +90,7 @@ typedef enum TrigEventCommand
 	ETC_CreateServer,
 	ETC_CreateTable,
 	ETC_CreateTableAs,
+	ETC_SelectInto,
 	ETC_CreateTextSearchParser,
 	ETC_CreateTextSearchConfiguration,
 	ETC_CreateTextSearchDictionary,
diff --git a/src/pl/plperl/expected/plperl_trigger.out b/src/pl/plperl/expected/plperl_trigger.out
index 2d1ed56..6f48bef 100644
--- a/src/pl/plperl/expected/plperl_trigger.out
+++ b/src/pl/plperl/expected/plperl_trigger.out
@@ -317,20 +317,22 @@ create or replace function perlsnitch() returns event_trigger language plperl as
                . $_TD->{schemaname} . " "
                . $_TD->{objectname});
 $$;
-create event trigger perl_snitch on command_start execute procedure perlsnitch();
+create event trigger perl_snitch
+                  on ddl_command_start
+   execute procedure perlsnitch();
 create or replace function foobar() returns int language sql as $$select 1;$$;
-NOTICE:  perlsnitch: command_start CREATE FUNCTION NULL NULL
+NOTICE:  perlsnitch: ddl_command_start CREATE FUNCTION NULL NULL
 CONTEXT:  PL/Perl function "perlsnitch"
 alter function foobar() cost 77;
-NOTICE:  perlsnitch: command_start ALTER FUNCTION NULL NULL
+NOTICE:  perlsnitch: ddl_command_start ALTER FUNCTION NULL NULL
 CONTEXT:  PL/Perl function "perlsnitch"
 drop function foobar();
-NOTICE:  perlsnitch: command_start DROP FUNCTION NULL NULL
+NOTICE:  perlsnitch: ddl_command_start DROP FUNCTION NULL NULL
 CONTEXT:  PL/Perl function "perlsnitch"
 create table foo();
-NOTICE:  perlsnitch: command_start CREATE TABLE NULL NULL
+NOTICE:  perlsnitch: ddl_command_start CREATE TABLE NULL NULL
 CONTEXT:  PL/Perl function "perlsnitch"
 drop table foo;
-NOTICE:  perlsnitch: command_start DROP TABLE NULL NULL
+NOTICE:  perlsnitch: ddl_command_start DROP TABLE NULL NULL
 CONTEXT:  PL/Perl function "perlsnitch"
 drop event trigger perl_snitch;
diff --git a/src/pl/plperl/sql/plperl_trigger.sql b/src/pl/plperl/sql/plperl_trigger.sql
index 75a9f11..9df8a77 100644
--- a/src/pl/plperl/sql/plperl_trigger.sql
+++ b/src/pl/plperl/sql/plperl_trigger.sql
@@ -179,7 +179,9 @@ create or replace function perlsnitch() returns event_trigger language plperl as
                . $_TD->{objectname});
 $$;
 
-create event trigger perl_snitch on command_start execute procedure perlsnitch();
+create event trigger perl_snitch
+                  on ddl_command_start
+   execute procedure perlsnitch();
 
 create or replace function foobar() returns int language sql as $$select 1;$$;
 alter function foobar() cost 77;
diff --git a/src/pl/plpython/expected/plpython_trigger.out b/src/pl/plpython/expected/plpython_trigger.out
index 5294dc7..5eb92ee 100644
--- a/src/pl/plpython/expected/plpython_trigger.out
+++ b/src/pl/plpython/expected/plpython_trigger.out
@@ -615,20 +615,22 @@ create or replace function pysnitch() returns event_trigger language plpythonu a
   plpy.notice("  pysnitch: %s %s %s.%s" %
               (TD["event"], TD["tag"], TD["schemaname"], TD["objectname"]));
 $$;
-create event trigger py_snitch on command_start execute procedure pysnitch();
+create event trigger py_snitch
+                  on ddl_command_start
+   execute procedure pysnitch();
 create or replace function foobar() returns int language sql as $$select 1;$$;
-NOTICE:    pysnitch: command_start CREATE FUNCTION None.None
+NOTICE:    pysnitch: ddl_command_start CREATE FUNCTION None.None
 CONTEXT:  PL/Python function "pysnitch"
 alter function foobar() cost 77;
-NOTICE:    pysnitch: command_start ALTER FUNCTION None.None
+NOTICE:    pysnitch: ddl_command_start ALTER FUNCTION None.None
 CONTEXT:  PL/Python function "pysnitch"
 drop function foobar();
-NOTICE:    pysnitch: command_start DROP FUNCTION None.None
+NOTICE:    pysnitch: ddl_command_start DROP FUNCTION None.None
 CONTEXT:  PL/Python function "pysnitch"
 create table foo();
-NOTICE:    pysnitch: command_start CREATE TABLE None.None
+NOTICE:    pysnitch: ddl_command_start CREATE TABLE None.None
 CONTEXT:  PL/Python function "pysnitch"
 drop table foo;
-NOTICE:    pysnitch: command_start DROP TABLE None.None
+NOTICE:    pysnitch: ddl_command_start DROP TABLE None.None
 CONTEXT:  PL/Python function "pysnitch"
 drop event trigger py_snitch;
diff --git a/src/pl/plpython/sql/plpython_trigger.sql b/src/pl/plpython/sql/plpython_trigger.sql
index aaa1731..dd2ac11 100644
--- a/src/pl/plpython/sql/plpython_trigger.sql
+++ b/src/pl/plpython/sql/plpython_trigger.sql
@@ -394,7 +394,9 @@ create or replace function pysnitch() returns event_trigger language plpythonu a
               (TD["event"], TD["tag"], TD["schemaname"], TD["objectname"]));
 $$;
 
-create event trigger py_snitch on command_start execute procedure pysnitch();
+create event trigger py_snitch
+                  on ddl_command_start
+   execute procedure pysnitch();
 
 create or replace function foobar() returns int language sql as $$select 1;$$;
 alter function foobar() cost 77;
diff --git a/src/pl/tcl/expected/pltcl_setup.out b/src/pl/tcl/expected/pltcl_setup.out
index cfe124c..b28cb8c 100644
--- a/src/pl/tcl/expected/pltcl_setup.out
+++ b/src/pl/tcl/expected/pltcl_setup.out
@@ -523,15 +523,17 @@ select tcl_date_week(2001,10,24);
 create or replace function tclsnitch() returns event_trigger language pltcl as $$
   elog NOTICE " tclsnitch: $TG_event $TG_tag $TG_schemaname $TG_objectname"
 $$;
-create event trigger tcl_snitch on command_start execute procedure tclsnitch();
+create event trigger tcl_snitch
+                  on ddl_command_start
+   execute procedure tclsnitch();
 create or replace function foobar() returns int language sql as $$select 1;$$;
-NOTICE:   tclsnitch: command_start CREATE FUNCTION  
+NOTICE:   tclsnitch: ddl_command_start CREATE FUNCTION  
 alter function foobar() cost 77;
-NOTICE:   tclsnitch: command_start ALTER FUNCTION  
+NOTICE:   tclsnitch: ddl_command_start ALTER FUNCTION  
 drop function foobar();
-NOTICE:   tclsnitch: command_start DROP FUNCTION  
+NOTICE:   tclsnitch: ddl_command_start DROP FUNCTION  
 create table foo();
-NOTICE:   tclsnitch: command_start CREATE TABLE  
+NOTICE:   tclsnitch: ddl_command_start CREATE TABLE  
 drop table foo;
-NOTICE:   tclsnitch: command_start DROP TABLE  
+NOTICE:   tclsnitch: ddl_command_start DROP TABLE  
 drop event trigger tcl_snitch;
diff --git a/src/pl/tcl/sql/pltcl_setup.sql b/src/pl/tcl/sql/pltcl_setup.sql
index 2cb4839..06aef02 100644
--- a/src/pl/tcl/sql/pltcl_setup.sql
+++ b/src/pl/tcl/sql/pltcl_setup.sql
@@ -565,7 +565,9 @@ create or replace function tclsnitch() returns event_trigger language pltcl as $
   elog NOTICE " tclsnitch: $TG_event $TG_tag $TG_schemaname $TG_objectname"
 $$;
 
-create event trigger tcl_snitch on command_start execute procedure tclsnitch();
+create event trigger tcl_snitch
+                  on ddl_command_start
+   execute procedure tclsnitch();
 
 create or replace function foobar() returns int language sql as $$select 1;$$;
 alter function foobar() cost 77;
diff --git a/src/test/regress/expected/event_triggers.out b/src/test/regress/expected/event_triggers.out
index 687d1c2..443736c 100644
--- a/src/test/regress/expected/event_triggers.out
+++ b/src/test/regress/expected/event_triggers.out
@@ -10,9 +10,11 @@ begin
   raise notice 'snitch: % % [% - %]', tg_event, tg_tag, tg_operation, tg_objecttype;
 end;
 $$;
-create event trigger any_t on command_start
+create event trigger any_t
+                  on ddl_command_start
    execute procedure snitch();
-create event trigger foo_t on command_start
+create event trigger foo_t
+                  on ddl_command_start
                 when tag in ('alter collation',
                              'alter conversion',
                              'alter domain',
@@ -51,19 +53,17 @@ create event trigger foo_t on command_start
                              'drop text search parser',
                              'drop text search template',
                              'drop trigger',
-                             'reindex',
-                             'select into',
-                             'vacuum')
+                             'select into')
    execute procedure snitch();
 alter event trigger foo_t disable;
 alter event trigger foo_t enable;
 alter event trigger foo_t rename to snitch;
 create schema cmd;
-NOTICE:  snitch: command_start CREATE SCHEMA [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE SCHEMA [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE SCHEMA [CREATE - SCHEMA]
+NOTICE:  snitch: ddl_command_start CREATE SCHEMA [CREATE - SCHEMA]
 create schema cmd2;
-NOTICE:  snitch: command_start CREATE SCHEMA [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE SCHEMA [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE SCHEMA [CREATE - SCHEMA]
+NOTICE:  snitch: ddl_command_start CREATE SCHEMA [CREATE - SCHEMA]
 create role regression_bob;
 alter event trigger snitch owner to regression_bob;
 ERROR:  permission denied to change owner of event trigger "snitch"
@@ -71,204 +71,195 @@ HINT:  The owner of an event trigger must be a superuser.
 alter role regression_bob superuser;
 alter event trigger snitch owner to regression_bob;
 create table cmd.foo(id bigserial primary key);
-NOTICE:  snitch: command_start CREATE TABLE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TABLE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE SEQUENCE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE SEQUENCE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE INDEX [CREATE - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TABLE [CREATE - TABLE]
+NOTICE:  snitch: ddl_command_start CREATE TABLE [CREATE - TABLE]
+NOTICE:  snitch: ddl_command_start CREATE SEQUENCE [CREATE - SEQUENCE]
+NOTICE:  snitch: ddl_command_start CREATE SEQUENCE [CREATE - SEQUENCE]
+NOTICE:  snitch: ddl_command_start CREATE INDEX [CREATE - INDEX]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 create view cmd.v as select * from cmd.foo;
-NOTICE:  snitch: command_start CREATE VIEW [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE VIEW [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE VIEW [CREATE - VIEW]
+NOTICE:  snitch: ddl_command_start CREATE VIEW [CREATE - VIEW]
 alter table cmd.foo add column t text;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 create table cmd.bar as select 1;
-NOTICE:  snitch: command_start CREATE TABLE AS [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TABLE AS [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TABLE AS [CREATE - TABLE]
+NOTICE:  snitch: ddl_command_start CREATE TABLE AS [CREATE - TABLE]
 drop table cmd.bar;
-NOTICE:  snitch: command_start DROP TABLE [DROP - TABLE]
-NOTICE:  snitch: command_start DROP TABLE [DROP - TABLE]
+NOTICE:  snitch: ddl_command_start DROP TABLE [DROP - TABLE]
+NOTICE:  snitch: ddl_command_start DROP TABLE [DROP - TABLE]
 select 1 into cmd.bar;
-NOTICE:  snitch: command_start SELECT INTO [<NULL> - <NULL>]
-NOTICE:  snitch: command_start SELECT INTO [<NULL> - <NULL>]
+NOTICE:  snitch: ddl_command_start SELECT INTO [CREATE - TABLE]
+NOTICE:  snitch: ddl_command_start SELECT INTO [CREATE - TABLE]
 drop table cmd.bar;
-NOTICE:  snitch: command_start DROP TABLE [DROP - TABLE]
-NOTICE:  snitch: command_start DROP TABLE [DROP - TABLE]
+NOTICE:  snitch: ddl_command_start DROP TABLE [DROP - TABLE]
+NOTICE:  snitch: ddl_command_start DROP TABLE [DROP - TABLE]
 create table test9 (id int, stuff text);
-NOTICE:  snitch: command_start CREATE TABLE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TABLE [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TABLE [CREATE - TABLE]
+NOTICE:  snitch: ddl_command_start CREATE TABLE [CREATE - TABLE]
 alter table test9 rename to test;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - TABLE]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table test set schema cmd;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - TABLE]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test rename column stuff to things;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - COLUMN]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - COLUMN]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - COLUMN]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - COLUMN]
 alter table cmd.test add column alpha text;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha set data type varchar(300);
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha set default 'test';
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha drop default;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha set statistics 78;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha set storage plain;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha set not null;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha drop not null;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha set (n_distinct = -0.78);
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test alter column alpha reset (n_distinct);
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test drop column alpha;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test add check (id > 2) not valid;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test add check (id < 800000);
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test set without cluster;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test set with oids;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 alter table cmd.test set without oids;
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TABLE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TABLE [ALTER - TABLE]
 create sequence test_seq_;
-NOTICE:  snitch: command_start CREATE SEQUENCE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE SEQUENCE [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE SEQUENCE [CREATE - SEQUENCE]
+NOTICE:  snitch: ddl_command_start CREATE SEQUENCE [CREATE - SEQUENCE]
 alter sequence test_seq_ owner to regression_bob;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - TABLE]
 alter sequence test_seq_ rename to test_seq;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - SEQUENCE]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence test_seq set schema cmd;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - SEQUENCE]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq start with 3;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq restart with 4;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq minvalue 3;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq no minvalue;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq maxvalue 900000;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq no maxvalue;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq cache 876;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq cycle;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 alter sequence cmd.test_seq no cycle;
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER SEQUENCE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
+NOTICE:  snitch: ddl_command_start ALTER SEQUENCE [ALTER - SEQUENCE]
 create view view_test as select id, things from cmd.test;
-NOTICE:  snitch: command_start CREATE VIEW [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE VIEW [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE VIEW [CREATE - VIEW]
+NOTICE:  snitch: ddl_command_start CREATE VIEW [CREATE - VIEW]
 alter view view_test owner to regression_bob;
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - TABLE]
 alter view view_test rename to view_test2;
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - VIEW]
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - VIEW]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - VIEW]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - VIEW]
 alter view view_test2 set schema cmd;
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - VIEW]
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - VIEW]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - VIEW]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - VIEW]
 alter view cmd.view_test2 alter column id set default 9;
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - TABLE]
 alter view cmd.view_test2 alter column id drop default;
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER VIEW [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER VIEW [ALTER - TABLE]
 cluster cmd.foo using foo_pkey;
-NOTICE:  snitch: command_start CLUSTER [<NULL> - <NULL>]
 vacuum cmd.foo;
-NOTICE:  snitch: command_start VACUUM [<NULL> - <NULL>]
-NOTICE:  snitch: command_start VACUUM [<NULL> - <NULL>]
 vacuum;
-NOTICE:  snitch: command_start VACUUM [<NULL> - <NULL>]
-NOTICE:  snitch: command_start VACUUM [<NULL> - <NULL>]
 reindex table cmd.foo;
-NOTICE:  snitch: command_start REINDEX [<NULL> - <NULL>]
-NOTICE:  snitch: command_start REINDEX [<NULL> - <NULL>]
 set session_replication_role to replica;
 create table cmd.bar();
-NOTICE:  snitch: command_start CREATE TABLE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TABLE [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TABLE [CREATE - TABLE]
+NOTICE:  snitch: ddl_command_start CREATE TABLE [CREATE - TABLE]
 reset session_replication_role;
 create index idx_foo on cmd.foo(t);
-NOTICE:  snitch: command_start CREATE INDEX [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE INDEX [CREATE - INDEX]
 reindex index cmd.idx_foo;
-NOTICE:  snitch: command_start REINDEX [<NULL> - <NULL>]
-NOTICE:  snitch: command_start REINDEX [<NULL> - <NULL>]
 drop index cmd.idx_foo;
-NOTICE:  snitch: command_start DROP INDEX [DROP - INDEX]
+NOTICE:  snitch: ddl_command_start DROP INDEX [DROP - INDEX]
 create function fun(int) returns text language sql
 as $$ select t from cmd.foo where id = $1; $$;
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
 alter function fun(int) strict;
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
 alter function fun(int) rename to notfun;
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - FUNCTION]
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
 alter function notfun(int) set schema cmd;
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - FUNCTION]
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
 alter function cmd.notfun(int) owner to regression_bob;
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - FUNCTION]
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
 alter function cmd.notfun(int) cost 77;
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER FUNCTION [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
+NOTICE:  snitch: ddl_command_start ALTER FUNCTION [ALTER - FUNCTION]
 drop function cmd.notfun(int);
-NOTICE:  snitch: command_start DROP FUNCTION [DROP - FUNCTION]
+NOTICE:  snitch: ddl_command_start DROP FUNCTION [DROP - FUNCTION]
 create function cmd.plus1(int) returns bigint language sql
 as $$ select $1::bigint + 1; $$;
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
 create operator cmd.+!(procedure = cmd.plus1, leftarg = int);
-NOTICE:  snitch: command_start CREATE OPERATOR [CREATE - OPERATOR]
-NOTICE:  snitch: command_start CREATE OPERATOR [CREATE - OPERATOR]
+NOTICE:  snitch: ddl_command_start CREATE OPERATOR [CREATE - OPERATOR]
+NOTICE:  snitch: ddl_command_start CREATE OPERATOR [CREATE - OPERATOR]
 alter operator cmd.+!(int, NONE) set schema public;
-NOTICE:  snitch: command_start ALTER OPERATOR [ALTER - OPERATOR]
-NOTICE:  snitch: command_start ALTER OPERATOR [ALTER - OPERATOR]
+NOTICE:  snitch: ddl_command_start ALTER OPERATOR [ALTER - OPERATOR]
+NOTICE:  snitch: ddl_command_start ALTER OPERATOR [ALTER - OPERATOR]
 drop operator public.+!(int, NONE);
-NOTICE:  snitch: command_start DROP OPERATOR [DROP - OPERATOR]
+NOTICE:  snitch: ddl_command_start DROP OPERATOR [DROP - OPERATOR]
 create aggregate cmd.avg (float8)
 (
     sfunc = float8_accum,
@@ -276,130 +267,130 @@ create aggregate cmd.avg (float8)
     finalfunc = float8_avg,
     initcond = '{0,0,0}'
 );
-NOTICE:  snitch: command_start CREATE AGGREGATE [CREATE - AGGREGATE]
-NOTICE:  snitch: command_start CREATE AGGREGATE [CREATE - AGGREGATE]
+NOTICE:  snitch: ddl_command_start CREATE AGGREGATE [CREATE - AGGREGATE]
+NOTICE:  snitch: ddl_command_start CREATE AGGREGATE [CREATE - AGGREGATE]
 alter aggregate cmd.avg(float8) set schema public;
-NOTICE:  snitch: command_start ALTER AGGREGATE [ALTER - AGGREGATE]
+NOTICE:  snitch: ddl_command_start ALTER AGGREGATE [ALTER - AGGREGATE]
 drop aggregate public.avg(float8);
-NOTICE:  snitch: command_start DROP AGGREGATE [DROP - AGGREGATE]
-NOTICE:  snitch: command_start DROP AGGREGATE [DROP - AGGREGATE]
+NOTICE:  snitch: ddl_command_start DROP AGGREGATE [DROP - AGGREGATE]
+NOTICE:  snitch: ddl_command_start DROP AGGREGATE [DROP - AGGREGATE]
 create collation cmd.french (LOCALE = 'fr_FR');
-NOTICE:  snitch: command_start CREATE COLLATION [CREATE - COLLATION]
-NOTICE:  snitch: command_start CREATE COLLATION [CREATE - COLLATION]
+NOTICE:  snitch: ddl_command_start CREATE COLLATION [CREATE - COLLATION]
+NOTICE:  snitch: ddl_command_start CREATE COLLATION [CREATE - COLLATION]
 alter collation cmd.french rename to francais;
-NOTICE:  snitch: command_start ALTER COLLATION [ALTER - COLLATION]
-NOTICE:  snitch: command_start ALTER COLLATION [ALTER - COLLATION]
+NOTICE:  snitch: ddl_command_start ALTER COLLATION [ALTER - COLLATION]
+NOTICE:  snitch: ddl_command_start ALTER COLLATION [ALTER - COLLATION]
 create type cmd.compfoo AS (f1 int, f2 text);
-NOTICE:  snitch: command_start CREATE TYPE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TYPE [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TYPE [CREATE - TYPE]
+NOTICE:  snitch: ddl_command_start CREATE TYPE [CREATE - TYPE]
 alter type cmd.compfoo add attribute f3 text;
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
 create type cmd.type_test AS (a integer, b integer, c text);
-NOTICE:  snitch: command_start CREATE TYPE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TYPE [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TYPE [CREATE - TYPE]
+NOTICE:  snitch: ddl_command_start CREATE TYPE [CREATE - TYPE]
 alter type cmd.type_test owner to regression_bob;
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - TYPE]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - TYPE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
 alter type cmd.type_test rename to type_test2;
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - TYPE]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - TYPE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
 alter type cmd.type_test2 set schema public;
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - TYPE]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - TYPE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
 alter type public.type_test2 rename attribute a to z;
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - ATTRIBUTE]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - ATTRIBUTE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - ATTRIBUTE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - ATTRIBUTE]
 alter type public.type_test2 add attribute alpha text;
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
 alter type public.type_test2 alter attribute alpha set data type char(90);
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
 alter type public.type_test2 drop attribute alpha;
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TABLE]
 drop type cmd.compfoo;
-NOTICE:  snitch: command_start DROP TYPE [DROP - TYPE]
+NOTICE:  snitch: ddl_command_start DROP TYPE [DROP - TYPE]
 drop type public.type_test2;
-NOTICE:  snitch: command_start DROP TYPE [DROP - TYPE]
+NOTICE:  snitch: ddl_command_start DROP TYPE [DROP - TYPE]
 create type cmd.bug_status as enum ('new', 'open', 'closed');
-NOTICE:  snitch: command_start CREATE TYPE [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TYPE [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TYPE [CREATE - TYPE]
+NOTICE:  snitch: ddl_command_start CREATE TYPE [CREATE - TYPE]
 alter type cmd.bug_status add value 'wontfix';
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER TYPE [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
+NOTICE:  snitch: ddl_command_start ALTER TYPE [ALTER - TYPE]
 create domain cmd.us_postal_code as text check(value ~ '^\d{5}$' or value ~ '^\d{5}-\d{4}$');
-NOTICE:  snitch: command_start CREATE DOMAIN [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE DOMAIN [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE DOMAIN [CREATE - DOMAIN]
+NOTICE:  snitch: ddl_command_start CREATE DOMAIN [CREATE - DOMAIN]
 alter domain cmd.us_postal_code set not null;
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 alter domain cmd.us_postal_code set default 90210;
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 alter domain cmd.us_postal_code drop default;
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 alter domain cmd.us_postal_code drop not null;
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 alter domain cmd.us_postal_code add constraint dummy_constraint check (value ~ '^\d{8}$');
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 alter domain cmd.us_postal_code drop constraint dummy_constraint;
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 alter domain cmd.us_postal_code owner to regression_bob;
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - DOMAIN]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 alter domain cmd.us_postal_code set schema cmd2;
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - DOMAIN]
-NOTICE:  snitch: command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
+NOTICE:  snitch: ddl_command_start ALTER DOMAIN [ALTER - DOMAIN]
 drop domain cmd2.us_postal_code;
-NOTICE:  snitch: command_start DROP DOMAIN [DROP - DOMAIN]
-NOTICE:  snitch: command_start DROP DOMAIN [DROP - DOMAIN]
+NOTICE:  snitch: ddl_command_start DROP DOMAIN [DROP - DOMAIN]
+NOTICE:  snitch: ddl_command_start DROP DOMAIN [DROP - DOMAIN]
 create function cmd.trigfunc() returns trigger language plpgsql as
 $$ begin raise notice 'trigfunc';  end;$$;
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
 create trigger footg before update on cmd.foo for each row execute procedure cmd.trigfunc();
-NOTICE:  snitch: command_start CREATE TRIGGER [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE TRIGGER [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE TRIGGER [CREATE - TRIGGER]
+NOTICE:  snitch: ddl_command_start CREATE TRIGGER [CREATE - TRIGGER]
 alter trigger footg on cmd.foo rename to foo_trigger;
-NOTICE:  snitch: command_start ALTER TRIGGER [ALTER - TRIGGER]
-NOTICE:  snitch: command_start ALTER TRIGGER [ALTER - TRIGGER]
+NOTICE:  snitch: ddl_command_start ALTER TRIGGER [ALTER - TRIGGER]
+NOTICE:  snitch: ddl_command_start ALTER TRIGGER [ALTER - TRIGGER]
 drop trigger foo_trigger on cmd.foo;
-NOTICE:  snitch: command_start DROP TRIGGER [DROP - TRIGGER]
-NOTICE:  snitch: command_start DROP TRIGGER [DROP - TRIGGER]
+NOTICE:  snitch: ddl_command_start DROP TRIGGER [DROP - TRIGGER]
+NOTICE:  snitch: ddl_command_start DROP TRIGGER [DROP - TRIGGER]
 create conversion test for 'utf8' to 'sjis' from utf8_to_sjis;
-NOTICE:  snitch: command_start CREATE CONVERSION [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE CONVERSION [CREATE - CONVERSION]
 create default conversion test2 for 'utf8' to 'sjis' from utf8_to_sjis;
-NOTICE:  snitch: command_start CREATE CONVERSION [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE CONVERSION [CREATE - CONVERSION]
 alter conversion test2 rename to test3;
-NOTICE:  snitch: command_start ALTER CONVERSION [ALTER - CONVERSION]
-NOTICE:  snitch: command_start ALTER CONVERSION [ALTER - CONVERSION]
+NOTICE:  snitch: ddl_command_start ALTER CONVERSION [ALTER - CONVERSION]
+NOTICE:  snitch: ddl_command_start ALTER CONVERSION [ALTER - CONVERSION]
 drop conversion test3;
-NOTICE:  snitch: command_start DROP CONVERSION [DROP - CONVERSION]
+NOTICE:  snitch: ddl_command_start DROP CONVERSION [DROP - CONVERSION]
 drop conversion test;
-NOTICE:  snitch: command_start DROP CONVERSION [DROP - CONVERSION]
+NOTICE:  snitch: ddl_command_start DROP CONVERSION [DROP - CONVERSION]
 create operator class test_op_class
    for type anyenum using hash as
    operator 1  =,
    function 1  hashenum(anyenum);
-NOTICE:  snitch: command_start CREATE OPERATOR CLASS [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE OPERATOR CLASS [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE OPERATOR CLASS [CREATE - OPERATOR CLASS]
+NOTICE:  snitch: ddl_command_start CREATE OPERATOR CLASS [CREATE - OPERATOR CLASS]
 create text search configuration test (parser = "default");
-NOTICE:  snitch: command_start CREATE TEXT SEARCH CONFIGURATION [CREATE - TEXT SEARCH CONFIGURATION]
-NOTICE:  snitch: command_start CREATE TEXT SEARCH CONFIGURATION [CREATE - TEXT SEARCH CONFIGURATION]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH CONFIGURATION [CREATE - TEXT SEARCH CONFIGURATION]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH CONFIGURATION [CREATE - TEXT SEARCH CONFIGURATION]
 create text search dictionary test_stem (
    template = snowball,
    language = 'english', stopwords = 'english'
 );
-NOTICE:  snitch: command_start CREATE TEXT SEARCH DICTIONARY [CREATE - TEXT SEARCH DICTIONARY]
-NOTICE:  snitch: command_start CREATE TEXT SEARCH DICTIONARY [CREATE - TEXT SEARCH DICTIONARY]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH DICTIONARY [CREATE - TEXT SEARCH DICTIONARY]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH DICTIONARY [CREATE - TEXT SEARCH DICTIONARY]
 alter text search dictionary test_stem (StopWords = dutch );
-NOTICE:  snitch: command_start ALTER TEXT SEARCH DICTIONARY [ALTER - <NULL>]
+NOTICE:  snitch: ddl_command_start ALTER TEXT SEARCH DICTIONARY [ALTER - TEXT SEARCH DICTIONARY]
 create text search parser test_parser (
   start = prsd_start,
   gettoken = prsd_nexttoken,
@@ -407,38 +398,38 @@ create text search parser test_parser (
   lextypes = prsd_lextype,
   headline = prsd_headline
 );
-NOTICE:  snitch: command_start CREATE TEXT SEARCH PARSER [CREATE - TEXT SEARCH PARSER]
-NOTICE:  snitch: command_start CREATE TEXT SEARCH PARSER [CREATE - TEXT SEARCH PARSER]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH PARSER [CREATE - TEXT SEARCH PARSER]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH PARSER [CREATE - TEXT SEARCH PARSER]
 create text search template test_template (
   init = dsimple_init,
   lexize = dsimple_lexize
 );
-NOTICE:  snitch: command_start CREATE TEXT SEARCH TEMPLATE [CREATE - TEXT SEARCH TEMPLATE]
-NOTICE:  snitch: command_start CREATE TEXT SEARCH TEMPLATE [CREATE - TEXT SEARCH TEMPLATE]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH TEMPLATE [CREATE - TEXT SEARCH TEMPLATE]
+NOTICE:  snitch: ddl_command_start CREATE TEXT SEARCH TEMPLATE [CREATE - TEXT SEARCH TEMPLATE]
 drop text search configuration test;
-NOTICE:  snitch: command_start DROP TEXT SEARCH CONFIGURATION [DROP - TEXT SEARCH CONFIGURATION]
-NOTICE:  snitch: command_start DROP TEXT SEARCH CONFIGURATION [DROP - TEXT SEARCH CONFIGURATION]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH CONFIGURATION [DROP - TEXT SEARCH CONFIGURATION]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH CONFIGURATION [DROP - TEXT SEARCH CONFIGURATION]
 drop text search dictionary test_stem;
-NOTICE:  snitch: command_start DROP TEXT SEARCH DICTIONARY [DROP - TEXT SEARCH DICTIONARY]
-NOTICE:  snitch: command_start DROP TEXT SEARCH DICTIONARY [DROP - TEXT SEARCH DICTIONARY]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH DICTIONARY [DROP - TEXT SEARCH DICTIONARY]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH DICTIONARY [DROP - TEXT SEARCH DICTIONARY]
 drop text search parser test_parser;
-NOTICE:  snitch: command_start DROP TEXT SEARCH PARSER [DROP - TEXT SEARCH PARSER]
-NOTICE:  snitch: command_start DROP TEXT SEARCH PARSER [DROP - TEXT SEARCH PARSER]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH PARSER [DROP - TEXT SEARCH PARSER]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH PARSER [DROP - TEXT SEARCH PARSER]
 drop text search template test_template;
-NOTICE:  snitch: command_start DROP TEXT SEARCH TEMPLATE [DROP - TEXT SEARCH TEMPLATE]
-NOTICE:  snitch: command_start DROP TEXT SEARCH TEMPLATE [DROP - TEXT SEARCH TEMPLATE]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH TEMPLATE [DROP - TEXT SEARCH TEMPLATE]
+NOTICE:  snitch: ddl_command_start DROP TEXT SEARCH TEMPLATE [DROP - TEXT SEARCH TEMPLATE]
 create function cmd.testcast(text) returns int4  language plpgsql as $$begin return 4::int4;end;$$;
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE FUNCTION [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
+NOTICE:  snitch: ddl_command_start CREATE FUNCTION [CREATE - FUNCTION]
 create cast (text as int4) with function cmd.testcast(text) as assignment;
-NOTICE:  snitch: command_start CREATE CAST [CREATE - <NULL>]
-NOTICE:  snitch: command_start CREATE CAST [CREATE - <NULL>]
+NOTICE:  snitch: ddl_command_start CREATE CAST [CREATE - CAST]
+NOTICE:  snitch: ddl_command_start CREATE CAST [CREATE - CAST]
 alter schema cmd rename to cmd1;
-NOTICE:  snitch: command_start ALTER SCHEMA [ALTER - SCHEMA]
-NOTICE:  snitch: command_start ALTER SCHEMA [ALTER - SCHEMA]
+NOTICE:  snitch: ddl_command_start ALTER SCHEMA [ALTER - SCHEMA]
+NOTICE:  snitch: ddl_command_start ALTER SCHEMA [ALTER - SCHEMA]
 drop schema cmd1 cascade;
-NOTICE:  snitch: command_start DROP SCHEMA [DROP - SCHEMA]
-NOTICE:  snitch: command_start DROP SCHEMA [DROP - SCHEMA]
+NOTICE:  snitch: ddl_command_start DROP SCHEMA [DROP - SCHEMA]
+NOTICE:  snitch: ddl_command_start DROP SCHEMA [DROP - SCHEMA]
 NOTICE:  drop cascades to 12 other objects
 DETAIL:  drop cascades to table cmd1.foo
 drop cascades to view cmd1.v
@@ -453,8 +444,8 @@ drop cascades to function cmd1.trigfunc()
 drop cascades to function cmd1.testcast(text)
 drop cascades to cast from text to integer
 drop schema cmd2 cascade;
-NOTICE:  snitch: command_start DROP SCHEMA [DROP - SCHEMA]
-NOTICE:  snitch: command_start DROP SCHEMA [DROP - SCHEMA]
+NOTICE:  snitch: ddl_command_start DROP SCHEMA [DROP - SCHEMA]
+NOTICE:  snitch: ddl_command_start DROP SCHEMA [DROP - SCHEMA]
 -- fail because owning event trigger snitch
 drop role regression_bob;
 ERROR:  role "regression_bob" cannot be dropped because some objects depend on it
@@ -485,10 +476,12 @@ begin
   raise notice 'check_one_row: %', c;
 end;
 $$;
-create event trigger a_insert_one_row on command_start
+create event trigger a_insert_one_row
+                 on ddl_command_start
         when tag in ('alter table')
    execute procedure insert_one_row();
-create event trigger b_check_one_row on command_start
+create event trigger b_check_one_row
+                  on ddl_command_start
          when tag in ('alter table')
    execute procedure check_one_row();
 alter table onerow alter column id type bigint;
diff --git a/src/test/regress/sql/event_triggers.sql b/src/test/regress/sql/event_triggers.sql
index 9ca1a28..d3436b3 100644
--- a/src/test/regress/sql/event_triggers.sql
+++ b/src/test/regress/sql/event_triggers.sql
@@ -11,10 +11,12 @@ begin
 end;
 $$;
 
-create event trigger any_t on command_start
+create event trigger any_t
+                  on ddl_command_start
    execute procedure snitch();
 
-create event trigger foo_t on command_start
+create event trigger foo_t
+                  on ddl_command_start
                 when tag in ('alter collation',
                              'alter conversion',
                              'alter domain',
@@ -53,9 +55,7 @@ create event trigger foo_t on command_start
                              'drop text search parser',
                              'drop text search template',
                              'drop trigger',
-                             'reindex',
-                             'select into',
-                             'vacuum')
+                             'select into')
    execute procedure snitch();
 
 alter event trigger foo_t disable;
@@ -277,11 +277,13 @@ begin
 end;
 $$;
 
-create event trigger a_insert_one_row on command_start
+create event trigger a_insert_one_row
+                 on ddl_command_start
         when tag in ('alter table')
    execute procedure insert_one_row();
 
-create event trigger b_check_one_row on command_start
+create event trigger b_check_one_row
+                  on ddl_command_start
          when tag in ('alter table')
    execute procedure check_one_row();