diff options
Diffstat (limited to 'doc/src/sgml/html/contrib-spi.html')
-rw-r--r-- | doc/src/sgml/html/contrib-spi.html | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/doc/src/sgml/html/contrib-spi.html b/doc/src/sgml/html/contrib-spi.html new file mode 100644 index 0000000..67566a3 --- /dev/null +++ b/doc/src/sgml/html/contrib-spi.html @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!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>F.41. spi</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="sepgsql.html" title="F.40. sepgsql" /><link rel="next" href="sslinfo.html" title="F.42. sslinfo" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">F.41. spi</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="sepgsql.html" title="F.40. sepgsql">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="contrib.html" title="Appendix F. Additional Supplied Modules">Up</a></td><th width="60%" align="center">Appendix F. Additional Supplied Modules</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 15.4 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="sslinfo.html" title="F.42. sslinfo">Next</a></td></tr></table><hr /></div><div class="sect1" id="CONTRIB-SPI"><div class="titlepage"><div><div><h2 class="title" style="clear: both">F.41. spi</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="sect2"><a href="contrib-spi.html#id-1.11.7.50.5">F.41.1. refint — Functions for Implementing Referential Integrity</a></span></dt><dt><span class="sect2"><a href="contrib-spi.html#id-1.11.7.50.6">F.41.2. autoinc — Functions for Autoincrementing Fields</a></span></dt><dt><span class="sect2"><a href="contrib-spi.html#id-1.11.7.50.7">F.41.3. insert_username — Functions for Tracking Who Changed a Table</a></span></dt><dt><span class="sect2"><a href="contrib-spi.html#id-1.11.7.50.8">F.41.4. moddatetime — Functions for Tracking Last Modification Time</a></span></dt></dl></div><a id="id-1.11.7.50.2" class="indexterm"></a><p> + The <span class="application">spi</span> module provides several workable examples + of using the <a class="link" href="spi.html" title="Chapter 47. Server Programming Interface">Server Programming Interface</a> + (<acronym class="acronym">SPI</acronym>) and triggers. While these functions are of + some value in + their own right, they are even more useful as examples to modify for + your own purposes. The functions are general enough to be used + with any table, but you have to specify table and field names (as described + below) while creating a trigger. + </p><p> + Each of the groups of functions described below is provided as a + separately-installable extension. + </p><div class="sect2" id="id-1.11.7.50.5"><div class="titlepage"><div><div><h3 class="title">F.41.1. refint — Functions for Implementing Referential Integrity</h3></div></div></div><p> + <code class="function">check_primary_key()</code> and + <code class="function">check_foreign_key()</code> are used to check foreign key constraints. + (This functionality is long since superseded by the built-in foreign + key mechanism, of course, but the module is still useful as an example.) + </p><p> + <code class="function">check_primary_key()</code> checks the referencing table. + To use, create a <code class="literal">BEFORE INSERT OR UPDATE</code> trigger using this + function on a table referencing another table. Specify as the trigger + arguments: the referencing table's column name(s) which form the foreign + key, the referenced table name, and the column names in the referenced table + which form the primary/unique key. To handle multiple foreign + keys, create a trigger for each reference. + </p><p> + <code class="function">check_foreign_key()</code> checks the referenced table. + To use, create a <code class="literal">BEFORE DELETE OR UPDATE</code> trigger using this + function on a table referenced by other table(s). Specify as the trigger + arguments: the number of referencing tables for which the function has to + perform checking, the action if a referencing key is found + (<code class="literal">cascade</code> — to delete the referencing row, + <code class="literal">restrict</code> — to abort transaction if referencing keys + exist, <code class="literal">setnull</code> — to set referencing key fields to null), + the triggered table's column names which form the primary/unique key, then + the referencing table name and column names (repeated for as many + referencing tables as were specified by first argument). Note that the + primary/unique key columns should be marked NOT NULL and should have a + unique index. + </p><p> + There are examples in <code class="filename">refint.example</code>. + </p></div><div class="sect2" id="id-1.11.7.50.6"><div class="titlepage"><div><div><h3 class="title">F.41.2. autoinc — Functions for Autoincrementing Fields</h3></div></div></div><p> + <code class="function">autoinc()</code> is a trigger that stores the next value of + a sequence into an integer field. This has some overlap with the + built-in <span class="quote">“<span class="quote">serial column</span>”</span> feature, but it is not the same: + <code class="function">autoinc()</code> will override attempts to substitute a + different field value during inserts, and optionally it can be + used to increment the field during updates, too. + </p><p> + To use, create a <code class="literal">BEFORE INSERT</code> (or optionally <code class="literal">BEFORE + INSERT OR UPDATE</code>) trigger using this function. Specify two + trigger arguments: the name of the integer column to be modified, + and the name of the sequence object that will supply values. + (Actually, you can specify any number of pairs of such names, if + you'd like to update more than one autoincrementing column.) + </p><p> + There is an example in <code class="filename">autoinc.example</code>. + </p></div><div class="sect2" id="id-1.11.7.50.7"><div class="titlepage"><div><div><h3 class="title">F.41.3. insert_username — Functions for Tracking Who Changed a Table</h3></div></div></div><p> + <code class="function">insert_username()</code> is a trigger that stores the current + user's name into a text field. This can be useful for tracking + who last modified a particular row within a table. + </p><p> + To use, create a <code class="literal">BEFORE INSERT</code> and/or <code class="literal">UPDATE</code> + trigger using this function. Specify a single trigger + argument: the name of the text column to be modified. + </p><p> + There is an example in <code class="filename">insert_username.example</code>. + </p></div><div class="sect2" id="id-1.11.7.50.8"><div class="titlepage"><div><div><h3 class="title">F.41.4. moddatetime — Functions for Tracking Last Modification Time</h3></div></div></div><p> + <code class="function">moddatetime()</code> is a trigger that stores the current + time into a <code class="type">timestamp</code> field. This can be useful for tracking + the last modification time of a particular row within a table. + </p><p> + To use, create a <code class="literal">BEFORE UPDATE</code> + trigger using this function. Specify a single trigger + argument: the name of the column to be modified. + The column must be of type <code class="type">timestamp</code> or <code class="type">timestamp with + time zone</code>. + </p><p> + There is an example in <code class="filename">moddatetime.example</code>. + </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sepgsql.html" title="F.40. sepgsql">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="contrib.html" title="Appendix F. Additional Supplied Modules">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sslinfo.html" title="F.42. sslinfo">Next</a></td></tr><tr><td width="40%" align="left" valign="top">F.40. sepgsql </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 15.4 Documentation">Home</a></td><td width="40%" align="right" valign="top"> F.42. sslinfo</td></tr></table></div></body></html>
\ No newline at end of file |