<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Types on DPG — Declarative PG</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/types/</link><description>Recent content in Types on DPG — Declarative PG</description><generator>Hugo</generator><language>en</language><atom:link href="https://thec1oud.github.io/dpg/docs/schema-objects/types/index.xml" rel="self" type="application/rss+xml"/><item><title>ENUM</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/types/enum/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/types/enum/</guid><description>&lt;h2 id="basic-enum">Basic ENUM&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>user_status&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>ENUM&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&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 style="color:#0a3069">&amp;#39;suspended&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;deleted&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;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 (new type)
&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">TYPE&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;user_status&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>ENUM&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&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 style="color:#0a3069">&amp;#39;suspended&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;deleted&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="enum-with-comment">ENUM with 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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>invoice_status&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>ENUM&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#39;draft&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;sent&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;paid&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;void&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;overdue&amp;#39;&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:#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;Billing lifecycle states for customer invoices&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:#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">TYPE&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;invoice_status&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>ENUM&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#39;draft&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;sent&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;paid&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;void&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#39;overdue&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">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">TYPE&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;invoice_status&amp;#34;&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;Billing lifecycle states for customer invoices&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="adding-a-value">Adding a value&lt;/h2>
&lt;p>Add a value to the end of the list (or use &lt;code>BEFORE&lt;/code>/&lt;code>AFTER&lt;/code> positioning in source — the compiler preserves order).&lt;/p></description></item><item><title>Composite</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/types/composite/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/types/composite/</guid><description>&lt;h2 id="basic-composite-type">Basic composite type&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>address&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:#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>street&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>city&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">state&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">CHAR&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">2&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>postal_code&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>country&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">CHAR&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">2&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:#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">TYPE&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;address&amp;#34;&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:#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:#0a3069">&amp;#34;street&amp;#34;&lt;/span>&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:#0a3069">&amp;#34;city&amp;#34;&lt;/span>&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:#0a3069">&amp;#34;state&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">char&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">2&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:#0a3069">&amp;#34;postal_code&amp;#34;&lt;/span>&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:#0a3069">&amp;#34;country&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#6639ba">char&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">2&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:#1f2328">);&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="adding-an-attribute">Adding an attribute&lt;/h2>
&lt;p>Adding an attribute emits &lt;code>ALTER TYPE ... ADD ATTRIBUTE&lt;/code> — &lt;code>SAFE&lt;/code>.&lt;/p>
&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">-- before
&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>contact&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:#1f2328">(&lt;/span>name&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>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>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff">&lt;/span>&lt;span style="color:#57606a">-- after (add phone)
&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>contact&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:#1f2328">(&lt;/span>name&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>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>phone&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;/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 (SAFE)
&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">ALTER&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">TYPE&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;contact&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ADD&lt;/span>&lt;span style="color:#fff"> &lt;/span>ATTRIBUTE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;phone&amp;#34;&lt;/span>&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;/code>&lt;/pre>&lt;/div>&lt;h2 id="attribute-comments-and-renames">Attribute comments and renames&lt;/h2>
&lt;p>Each attribute can carry its own &lt;code>{ }&lt;/code> block, written with PostgreSQL&amp;rsquo;s own &lt;code>ATTRIBUTE&lt;/code> keyword. It accepts &lt;code>COMMENT&lt;/code> and &lt;code>RENAMED FROM&lt;/code>.&lt;/p></description></item><item><title>Range</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/types/range/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/types/range/</guid><description>&lt;h2 id="basic-range-type">Basic range type&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>float8range&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>RANGE&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>SUBTYPE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>float8&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>SUBTYPE_DIFF&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>float8mi&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;/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">TYPE&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;float8range&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>RANGE&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>SUBTYPE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>float8&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>SUBTYPE_DIFF&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>float8mi&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="range-type-with-operator-class-and-collation">Range type with operator class and collation&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>ci_text_range&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>RANGE&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>SUBTYPE&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">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>SUBTYPE_OPCLASS&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>text_pattern_ops&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">COLLATION&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:#0a3069">&amp;#34;und-u-ks-level2&amp;#34;&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;/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">TYPE&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;ci_text_range&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>RANGE&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>SUBTYPE&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">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>SUBTYPE_OPCLASS&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>text_pattern_ops&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">COLLATION&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:#0a3069">&amp;#34;und-u-ks-level2&amp;#34;&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;/code>&lt;/pre>&lt;/div>&lt;p>Any change to a range type&amp;rsquo;s parameters requires &lt;code>DROP TYPE CASCADE&lt;/code> then &lt;code>CREATE TYPE&lt;/code> — &lt;code>DESTRUCTIVE&lt;/code>.&lt;/p></description></item><item><title>Domain</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/types/domain/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/types/domain/</guid><description>&lt;h2 id="basic-domain">Basic domain&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">DOMAIN&lt;/span>&lt;span style="color:#fff"> &lt;/span>positive_integer&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:#6639ba">INTEGER&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">DEFAULT&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:#cf222e">CONSTRAINT&lt;/span>&lt;span style="color:#fff"> &lt;/span>positive_only&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">CHECK&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>VALUE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">&amp;gt;&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">CONSTRAINT&lt;/span>&lt;span style="color:#fff"> &lt;/span>reasonable_max&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">CHECK&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>VALUE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">&amp;lt;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">1000000&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:#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">DOMAIN&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;positive_integer&amp;#34;&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:#6639ba">integer&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">DEFAULT&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>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">CONSTRAINT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;positive_only&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">CHECK&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>VALUE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">&amp;gt;&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">CONSTRAINT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;reasonable_max&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">CHECK&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>VALUE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">&amp;lt;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">1000000&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="domain-with-not-null">Domain with NOT NULL&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">DOMAIN&lt;/span>&lt;span style="color:#fff"> &lt;/span>email_address&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:#6639ba">TEXT&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">NOT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NULL&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">CONSTRAINT&lt;/span>&lt;span style="color:#fff"> &lt;/span>valid_email&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">CHECK&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>VALUE&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;^[^@]+@[^@]+\.[^@]+$&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;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">DOMAIN&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;email_address&amp;#34;&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:#6639ba">text&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">NOT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NULL&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">CONSTRAINT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;valid_email&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">CHECK&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>VALUE&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;^[^@]+@[^@]+\.[^@]+$&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="altering-a-domain-constraint">Altering a domain constraint&lt;/h2>
&lt;p>Adding a new constraint emits &lt;code>ALTER DOMAIN ADD CONSTRAINT&lt;/code>. Removing one emits &lt;code>ALTER DOMAIN DROP CONSTRAINT&lt;/code>. Changing the base type or a &lt;code>NOT NULL&lt;/code> constraint is &lt;code>DESTRUCTIVE&lt;/code>.&lt;/p></description></item><item><title>Virtual</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/types/virtual/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/types/virtual/</guid><description>&lt;p>Virtual types are DPG DDL constructs that give a structural schema to &lt;code>JSON&lt;/code>/&lt;code>JSONB&lt;/code> columns and JSON array columns. They generate no PostgreSQL DDL — no &lt;code>CREATE TYPE&lt;/code>, &lt;code>ALTER TYPE&lt;/code>, or &lt;code>DROP TYPE&lt;/code> is ever emitted. When a column or composite type attribute is typed as a virtual type, DPG resolves it to &lt;code>jsonb&lt;/code> (or &lt;code>jsonb[]&lt;/code>) in all generated SQL.&lt;/p>
&lt;p>The structured body is stored in the snapshot so downstream consumers — ORMs, type-safe query builders — can read type information via the snapshot JSON or the &lt;code>pkg/dpg&lt;/code> Go API.&lt;/p></description></item><item><title>Base (Shell) Type</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/types/base/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/types/base/</guid><description>&lt;p>Base types (also called shell types) are for C-implemented custom types. They require input and output functions already installed in the database.&lt;/p>
&lt;h2 id="base-type-declaration">Base type declaration&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>mytype&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">INPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>mytype_in&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">OUTPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>mytype_out&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>INTERNALLENGTH&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:#0550ae">16&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>ALIGNMENT&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>&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;/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">TYPE&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;mytype&amp;#34;&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">INPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>mytype_in&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">OUTPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>mytype_out&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>INTERNALLENGTH&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:#0550ae">16&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>ALIGNMENT&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>&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="full-base-type-with-all-options">Full base type with all options&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">TYPE&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex&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">INPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_in&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">OUTPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_out&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>RECEIVE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_recv&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>SEND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_send&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>INTERNALLENGTH&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:#0550ae">16&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>ALIGNMENT&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:#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">STORAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>plain&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>PASSEDBYVALUE&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;/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">TYPE&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;complex&amp;#34;&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">INPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_in&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">OUTPUT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_out&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>RECEIVE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_recv&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>SEND&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>complex_send&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>INTERNALLENGTH&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:#0550ae">16&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>ALIGNMENT&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:#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">STORAGE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>plain&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>PASSEDBYVALUE&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;p>Any change to a base type requires &lt;code>DROP TYPE CASCADE&lt;/code> then &lt;code>CREATE TYPE&lt;/code> — &lt;code>DESTRUCTIVE&lt;/code>.&lt;/p></description></item></channel></rss>