<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Functions on DPG — Declarative PG</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/functions/</link><description>Recent content in Functions on DPG — Declarative PG</description><generator>Hugo</generator><language>en</language><atom:link href="https://thec1oud.github.io/dpg/docs/schema-objects/functions/index.xml" rel="self" type="application/rss+xml"/><item><title>SQL &amp; PL/pgSQL Functions</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/functions/sql-and-plpgsql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/functions/sql-and-plpgsql/</guid><description>&lt;p>Functions are written in complete, unmodified PostgreSQL syntax — &lt;code>CREATE OR REPLACE FUNCTION&lt;/code> with only the &lt;code>CREATE OR REPLACE&lt;/code> verb removed. The dollar-quoted body is Part 1. The &lt;code>{ }&lt;/code> block holds grants, comments, and deprecation notices.&lt;/p>
&lt;h2 id="simple-sql-function">Simple SQL function&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">SCHEMA&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">public&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>active_user_count&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">BIGINT&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>PARALLEL&lt;span style="color:#fff"> &lt;/span>SAFE&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COUNT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>status&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;active&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">-- emits
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">&lt;/span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;active_user_count&amp;#34;&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">bigint&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>PARALLEL&lt;span style="color:#fff"> &lt;/span>SAFE&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COUNT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>status&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;active&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="plpgsql-function-with-grants-and-comment">PL/pgSQL function with grants and comment&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>get_user&lt;span style="color:#1f2328">(&lt;/span>p_email&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SECURITY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFINER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SET&lt;/span>&lt;span style="color:#fff"> &lt;/span>search_path&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">public&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">DECLARE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>v_user&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">INTO&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STRICT&lt;/span>&lt;span style="color:#fff"> &lt;/span>v_user&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>email&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_email&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURN&lt;/span>&lt;span style="color:#fff"> &lt;/span>v_user&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">EXCEPTION&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHEN&lt;/span>&lt;span style="color:#fff"> &lt;/span>NO_DATA_FOUND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">THEN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>RAISE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXCEPTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;User not found: %&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_email&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COMMENT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;Fetch a user record by verified email address&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>GRANTS&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXECUTE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TO&lt;/span>&lt;span style="color:#fff"> &lt;/span>app_service&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">-- emits
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">&lt;/span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;get_user&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>p_email&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SECURITY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFINER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SET&lt;/span>&lt;span style="color:#fff"> &lt;/span>search_path&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">public&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">DECLARE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>v_user&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">INTO&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STRICT&lt;/span>&lt;span style="color:#fff"> &lt;/span>v_user&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>email&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_email&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURN&lt;/span>&lt;span style="color:#fff"> &lt;/span>v_user&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">EXCEPTION&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHEN&lt;/span>&lt;span style="color:#fff"> &lt;/span>NO_DATA_FOUND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">THEN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>RAISE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXCEPTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;User not found: %&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_email&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">COMMENT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;get_user&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;Fetch a user record by verified email address&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">GRANT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXECUTE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;get_user&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TO&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;app_service&amp;#34;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="set-returning-function-setof">Set-returning function (SETOF)&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>users_in_org&lt;span style="color:#1f2328">(&lt;/span>p_org_id&lt;span style="color:#fff"> &lt;/span>UUID&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SETOF&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>org_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_org_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ORDER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>email&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;users_in_org&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>p_org_id&lt;span style="color:#fff"> &lt;/span>uuid&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SETOF&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>org_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_org_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ORDER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>email&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="returns-table-inline">Returns TABLE inline&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>monthly_summary&lt;span style="color:#1f2328">(&lt;/span>p_year&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">INT&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#cf222e">month&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">INT&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>revenue&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">count&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">BIGINT&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXTRACT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#cf222e">MONTH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>created_at&lt;span style="color:#1f2328">)::&lt;/span>&lt;span style="color:#6639ba">INT&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SUM&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>total&lt;span style="color:#1f2328">),&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COUNT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>orders&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXTRACT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#cf222e">YEAR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>created_at&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_year&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">GROUP&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">1&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ORDER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">1&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;monthly_summary&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>p_year&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">integer&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;month&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">integer&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;revenue&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">numeric&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;count&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">bigint&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXTRACT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#cf222e">MONTH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>created_at&lt;span style="color:#1f2328">)::&lt;/span>&lt;span style="color:#6639ba">INT&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SUM&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>total&lt;span style="color:#1f2328">),&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COUNT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>orders&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXTRACT&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#cf222e">YEAR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>created_at&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_year&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">GROUP&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">1&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ORDER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">1&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="variadic-arguments">Variadic arguments&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>log_event&lt;span style="color:#1f2328">(&lt;/span>p_type&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>VARIADIC&lt;span style="color:#fff"> &lt;/span>p_tags&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#1f2328">[])&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>VOID&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">INSERT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">INTO&lt;/span>&lt;span style="color:#fff"> &lt;/span>event_log&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>event_type&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>tags&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VALUES&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>p_type&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_tags&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;log_event&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>p_type&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>VARIADIC&lt;span style="color:#fff"> &lt;/span>p_tags&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#1f2328">[])&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>void&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">INSERT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">INTO&lt;/span>&lt;span style="color:#fff"> &lt;/span>event_log&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>event_type&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>tags&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VALUES&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>p_type&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_tags&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="default-parameters">Default parameters&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>paginate_users&lt;span style="color:#1f2328">(&lt;/span>p_limit&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">INT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFAULT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">20&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_offset&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">INT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFAULT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SETOF&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LIMIT&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_limit&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OFFSET&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_offset&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;paginate_users&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>p_limit&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">integer&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFAULT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">20&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>p_offset&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">integer&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFAULT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SETOF&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">*&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LIMIT&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_limit&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OFFSET&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_offset&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="trigger-function">Trigger function&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>notify_email_change&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TRIGGER&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SECURITY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFINER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SET&lt;/span>&lt;span style="color:#fff"> &lt;/span>search_path&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">public&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>PERFORM&lt;span style="color:#fff"> &lt;/span>pg_notify&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#39;email_changed&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NEW&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">::&lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURN&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NEW&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;notify_email_change&amp;#34;&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">trigger&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SECURITY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFINER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SET&lt;/span>&lt;span style="color:#fff"> &lt;/span>search_path&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">public&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>PERFORM&lt;span style="color:#fff"> &lt;/span>pg_notify&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#39;email_changed&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NEW&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">::&lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURN&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NEW&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="named-dollar-quoting">Named dollar-quoting&lt;/h2>
&lt;p>Use a named tag when the function body itself contains &lt;code>$$&lt;/code> literals.&lt;/p></description></item><item><title>Function Attributes</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/functions/attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/functions/attributes/</guid><description>&lt;p>All attributes appear on the signature line in PostgreSQL&amp;rsquo;s own order — exactly as &lt;code>CREATE FUNCTION&lt;/code> writes them.&lt;/p>
&lt;h2 id="volatility">Volatility&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>rand_label&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VOLATILE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">...&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>now_tz&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">...&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>pi_val&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IMMUTABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">...&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;rand_label&amp;#34;&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VOLATILE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">...&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;now_tz&amp;#34;&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">...&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;pi_val&amp;#34;&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">numeric&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IMMUTABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">...&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Attribute&lt;/th>
 &lt;th>Meaning&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>VOLATILE&lt;/code>&lt;/td>
 &lt;td>Default. May modify DB; result may differ per call&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>STABLE&lt;/code>&lt;/td>
 &lt;td>Constant within a transaction for given inputs&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>IMMUTABLE&lt;/code>&lt;/td>
 &lt;td>Constant forever for given inputs; index-eligible&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="strict">STRICT&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>safe_div&lt;span style="color:#1f2328">(&lt;/span>a&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>b&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IMMUTABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STRICT&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>a&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">/&lt;/span>&lt;span style="color:#fff"> &lt;/span>b&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FUNCTION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;safe_div&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>a&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">numeric&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>b&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">numeric&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">RETURNS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">numeric&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">sql&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IMMUTABLE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STRICT&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>a&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">/&lt;/span>&lt;span style="color:#fff"> &lt;/span>b&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Returns &lt;code>NULL&lt;/code> immediately if any argument is &lt;code>NULL&lt;/code>.&lt;/p></description></item><item><title>Procedures</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/functions/procedures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/functions/procedures/</guid><description>&lt;p>Procedures follow the same &lt;a href="../../../fundamentals/two-part-syntax/">two-part syntax&lt;/a> as functions. The key difference: procedures may call &lt;code>COMMIT&lt;/code> mid-body.&lt;/p>
&lt;h2 id="basic-procedure">Basic procedure&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">SCHEMA&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">public&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PROCEDURE&lt;/span>&lt;span style="color:#fff"> &lt;/span>process_settlements&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SECURITY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFINER&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DECLARE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>v_id&lt;span style="color:#fff"> &lt;/span>settlements&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#0550ae">%&lt;/span>&lt;span style="color:#cf222e">TYPE&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FOR&lt;/span>&lt;span style="color:#fff"> &lt;/span>v_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IN&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>settlements&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>processed&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">false&lt;/span>&lt;span style="color:#fff"> &lt;/span>LOOP&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>PERFORM&lt;span style="color:#fff"> &lt;/span>settle_order&lt;span style="color:#1f2328">(&lt;/span>v_id&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COMMIT&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#fff"> &lt;/span>LOOP&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>GRANTS&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXECUTE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TO&lt;/span>&lt;span style="color:#fff"> &lt;/span>scheduler_role&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">-- emits
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">&lt;/span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PROCEDURE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;process_settlements&amp;#34;&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SECURITY&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFINER&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">DECLARE&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>v_id&lt;span style="color:#fff"> &lt;/span>settlements&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#0550ae">%&lt;/span>&lt;span style="color:#cf222e">TYPE&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FOR&lt;/span>&lt;span style="color:#fff"> &lt;/span>v_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IN&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>settlements&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>processed&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">false&lt;/span>&lt;span style="color:#fff"> &lt;/span>LOOP&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>PERFORM&lt;span style="color:#fff"> &lt;/span>settle_order&lt;span style="color:#1f2328">(&lt;/span>v_id&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COMMIT&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#fff"> &lt;/span>LOOP&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">GRANT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXECUTE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PROCEDURE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;process_settlements&amp;#34;&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TO&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;scheduler_role&amp;#34;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="procedure-with-parameters">Procedure with parameters&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">PROCEDURE&lt;/span>&lt;span style="color:#fff"> &lt;/span>archive_orders&lt;span style="color:#1f2328">(&lt;/span>p_before&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">DATE&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>p_target_schema&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">TEXT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFAULT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;archive&amp;#39;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#57606a">-- archiving logic
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COMMIT&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PROCEDURE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;archive_orders&amp;#34;&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>p_before&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">date&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>p_target_schema&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">text&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DEFAULT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;archive&amp;#39;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">LANGUAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>plpgsql&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">BEGIN&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#57606a">-- archiving logic
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COMMIT&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">END&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">$$&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="diffing-behaviour">Diffing behaviour&lt;/h2>
&lt;p>Procedure identity is &lt;code>(schema, name, argument_types)&lt;/code>. Any body change causes &lt;code>CREATE OR REPLACE PROCEDURE&lt;/code>. No semantic diff is performed.&lt;/p></description></item><item><title>Aggregates</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/functions/aggregates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/functions/aggregates/</guid><description>&lt;p>Aggregates use two &lt;code>( )&lt;/code> groups per PostgreSQL&amp;rsquo;s &lt;code>CREATE AGGREGATE&lt;/code> syntax — both are Part 1. The &lt;code>{ }&lt;/code> block holds grants and comments.&lt;/p>
&lt;h2 id="basic-aggregate">Basic aggregate&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">SCHEMA&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">public&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>product&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>float8mul&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>INITCOND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;1&amp;#39;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COMMENT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;Multiplicative aggregate over DOUBLE PRECISION values&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>GRANTS&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXECUTE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TO&lt;/span>&lt;span style="color:#fff"> &lt;/span>app_service&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">-- emits
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">&lt;/span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;product&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>float8mul&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>INITCOND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;1&amp;#39;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">COMMENT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;product&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;Multiplicative aggregate over DOUBLE PRECISION values&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">GRANT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">EXECUTE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;product&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TO&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;app_service&amp;#34;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="ordered-set-aggregate">Ordered-set aggregate&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>percentile_disc&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ORDER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>anyelement&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>ordered_set_transition&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>internal&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>FINALFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>percentile_disc_final&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>FINALFUNC_EXTRA&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">COMMENT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;Ordered-set percentile aggregate&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">}&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;percentile_disc&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ORDER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>anyelement&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>ordered_set_transition&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>internal&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>FINALFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>percentile_disc_final&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>FINALFUNC_EXTRA&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#cf222e">COMMENT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;percentile_disc&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>DOUBLE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">PRECISION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ORDER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">BY&lt;/span>&lt;span style="color:#fff"> &lt;/span>anyelement&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;Ordered-set percentile aggregate&amp;#39;&lt;/span>&lt;span style="color:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="aggregate-with-combine-and-serial-functions-parallel-safe">Aggregate with combine and serial functions (parallel-safe)&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>sum_parallel&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_add&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>INITCOND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;0&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>COMBINEFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_add&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SERIALFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_serialize&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>DESERIALFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_deserialize&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>PARALLEL&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>SAFE&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cf222e">CREATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">OR&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">REPLACE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AGGREGATE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;sum_parallel&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_add&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">STYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">NUMERIC&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>INITCOND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;0&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>COMBINEFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_add&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>SERIALFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_serialize&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>DESERIALFUNC&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>numeric_deserialize&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>PARALLEL&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>SAFE&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="diffing-behaviour">Diffing behaviour&lt;/h2>
&lt;p>Aggregate identity is &lt;code>(schema, name, input_types)&lt;/code>. Changes to &lt;code>SFUNC&lt;/code>, &lt;code>STYPE&lt;/code>, &lt;code>INITCOND&lt;/code>, &lt;code>FINALFUNC&lt;/code>, &lt;code>COMBINEFUNC&lt;/code>, or &lt;code>SERIALFUNC&lt;/code> require &lt;code>DROP AGGREGATE IF EXISTS&lt;/code> + &lt;code>CREATE AGGREGATE&lt;/code> — &lt;code>DESTRUCTIVE&lt;/code>.&lt;/p></description></item></channel></rss>