Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
event-trigger-example.html78 linesDownload Raw Back to html
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>40.4. A Complete Event Trigger Example</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="event-trigger-interface.html" title="40.3. Writing Event Trigger Functions in C" /><link rel="next" href="event-trigger-table-rewrite-example.html" title="40.5. A Table Rewrite Event Trigger Example" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">40.4. A Complete Event Trigger Example</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="event-trigger-interface.html" title="40.3. Writing Event Trigger Functions in C">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="event-triggers.html" title="Chapter 40. Event Triggers">Up</a></td><th width="60%" align="center">Chapter 40. Event Triggers</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 16.3 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="event-trigger-table-rewrite-example.html" title="40.5. A Table Rewrite Event Trigger Example">Next</a></td></tr></table><hr /></div><div class="sect1" id="EVENT-TRIGGER-EXAMPLE"><div class="titlepage"><div><div><h2 class="title" style="clear: both">40.4. A Complete Event Trigger Example <a href="#EVENT-TRIGGER-EXAMPLE" class="id_link">#</a></h2></div></div></div><p>3    Here is a very simple example of an event trigger function written in C.4    (Examples of triggers written in procedural languages can be found in5    the documentation of the procedural languages.)6   </p><p>7    The function <code class="function">noddl</code> raises an exception each time it is called.8    The event trigger definition associated the function with9    the <code class="literal">ddl_command_start</code> event.  The effect is that all DDL10    commands (with the exceptions mentioned11    in <a class="xref" href="event-trigger-definition.html" title="40.1. Overview of Event Trigger Behavior">Section 40.1</a>) are prevented from running.12   </p><p>13    This is the source code of the trigger function:14</p><pre class="programlisting">15#include "postgres.h"16#include "commands/event_trigger.h"17 18 19PG_MODULE_MAGIC;20 21PG_FUNCTION_INFO_V1(noddl);22 23Datum24noddl(PG_FUNCTION_ARGS)25{26    EventTriggerData *trigdata;27 28    if (!CALLED_AS_EVENT_TRIGGER(fcinfo))  /* internal error */29        elog(ERROR, "not fired by event trigger manager");30 31    trigdata = (EventTriggerData *) fcinfo-&gt;context;32 33    ereport(ERROR,34            (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),35             errmsg("command \"%s\" denied",36                    GetCommandTagName(trigdata-&gt;tag))));37 38    PG_RETURN_NULL();39}40</pre><p>41   </p><p>42    After you have compiled the source code (see <a class="xref" href="xfunc-c.html#DFUNC" title="38.10.5. Compiling and Linking Dynamically-Loaded Functions">Section 38.10.5</a>),43    declare the function and the triggers:44</p><pre class="programlisting">45CREATE FUNCTION noddl() RETURNS event_trigger46    AS 'noddl' LANGUAGE C;47 48CREATE EVENT TRIGGER noddl ON ddl_command_start49    EXECUTE FUNCTION noddl();50</pre><p>51   </p><p>52    Now you can test the operation of the trigger:53</p><pre class="screen">54=# \dy55                     List of event triggers56 Name  |       Event       | Owner | Enabled | Function | Tags57-------+-------------------+-------+---------+----------+------58 noddl | ddl_command_start | dim   | enabled | noddl    |59(1 row)60 61=# CREATE TABLE foo(id serial);62ERROR:  command "CREATE TABLE" denied63</pre><p>64   </p><p>65    In this situation, in order to be able to run some DDL commands when you66    need to do so, you have to either drop the event trigger or disable it.  It67    can be convenient to disable the trigger for only the duration of a68    transaction:69</p><pre class="programlisting">70BEGIN;71ALTER EVENT TRIGGER noddl DISABLE;72CREATE TABLE foo (id serial);73ALTER EVENT TRIGGER noddl ENABLE;74COMMIT;75</pre><p>76    (Recall that DDL commands on event triggers themselves are not affected by77    event triggers.)78   </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="event-trigger-interface.html" title="40.3. Writing Event Trigger Functions in C">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="event-triggers.html" title="Chapter 40. Event Triggers">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="event-trigger-table-rewrite-example.html" title="40.5. A Table Rewrite Event Trigger Example">Next</a></td></tr><tr><td width="40%" align="left" valign="top">40.3. Writing Event Trigger Functions in C </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 16.3 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 40.5. A Table Rewrite Event Trigger Example</td></tr></table></div></body></html>
codekingpro/portable-devtools · Team Ai