<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Views on DPG — Declarative PG</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/views/</link><description>Recent content in Views on DPG — Declarative PG</description><generator>Hugo</generator><language>en</language><atom:link href="https://thec1oud.github.io/dpg/docs/schema-objects/views/index.xml" rel="self" type="application/rss+xml"/><item><title>Regular Views</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/views/regular/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/views/regular/</guid><description>&lt;p>The &lt;code>AS query&lt;/code> clause is Part 1, terminated with &lt;code>;&lt;/code>. An optional &lt;code>{ }&lt;/code> block holds grants, comments, and the owner.&lt;/p>
&lt;h2 id="basic-view">Basic view&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">VIEW&lt;/span>&lt;span style="color:#fff"> &lt;/span>active_users&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;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>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>email&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>created_at&lt;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>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">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:#fff"> &lt;/span>&lt;span style="color:#cf222e">AND&lt;/span>&lt;span style="color:#fff"> &lt;/span>deleted_at&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:#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:#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">VIEW&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_users&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>&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>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>email&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>created_at&lt;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>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">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:#fff"> &lt;/span>&lt;span style="color:#cf222e">AND&lt;/span>&lt;span style="color:#fff"> &lt;/span>deleted_at&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:#cf222e">NULL&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="view-with-explicit-column-aliases">View with explicit column aliases&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">VIEW&lt;/span>&lt;span style="color:#fff"> &lt;/span>user_summary&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>user_id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>email&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>order_count&lt;span style="color:#1f2328">)&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>&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>u&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>u&lt;span style="color:#1f2328">.&lt;/span>email&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:#1f2328">(&lt;/span>o&lt;span style="color:#1f2328">.&lt;/span>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">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>u&lt;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">LEFT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">JOIN&lt;/span>&lt;span style="color:#fff"> &lt;/span>orders&lt;span style="color:#fff"> &lt;/span>o&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>o&lt;span style="color:#1f2328">.&lt;/span>user_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>u&lt;span style="color:#1f2328">.&lt;/span>id&lt;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>u&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>u&lt;span style="color:#1f2328">.&lt;/span>email&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">VIEW&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_summary&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;user_id&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;email&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;order_count&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&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>&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>u&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>u&lt;span style="color:#1f2328">.&lt;/span>email&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:#1f2328">(&lt;/span>o&lt;span style="color:#1f2328">.&lt;/span>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">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>users&lt;span style="color:#fff"> &lt;/span>u&lt;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">LEFT&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">JOIN&lt;/span>&lt;span style="color:#fff"> &lt;/span>orders&lt;span style="color:#fff"> &lt;/span>o&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>o&lt;span style="color:#1f2328">.&lt;/span>user_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>u&lt;span style="color:#1f2328">.&lt;/span>id&lt;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>u&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>u&lt;span style="color:#1f2328">.&lt;/span>email&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="view-with-security_barrier">View with &lt;code>security_barrier&lt;/code>&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">VIEW&lt;/span>&lt;span style="color:#fff"> &lt;/span>secure_user_view&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WITH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>security_barrier&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">true&lt;/span>&lt;span style="color:#1f2328">)&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>&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>id&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:#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>tenant_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>current_tenant&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">VIEW&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;secure_user_view&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WITH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>security_barrier&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">true&lt;/span>&lt;span style="color:#1f2328">)&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:#cf222e">SELECT&lt;/span>&lt;span style="color:#fff"> &lt;/span>id&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:#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>tenant_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>current_tenant&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>&lt;code>security_invoker&lt;/code> works the same way. An option written without a value, such as &lt;code>WITH (security_barrier)&lt;/code>, means &lt;code>true&lt;/code>.&lt;/p></description></item><item><title>Materialized Views</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/views/materialized/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/views/materialized/</guid><description>&lt;h2 id="basic-materialized-view">Basic materialized view&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>analytics&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>MATERIALIZED&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VIEW&lt;/span>&lt;span style="color:#fff"> &lt;/span>daily_revenue&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;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>date_trunc&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#39;day&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&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:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">day&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_amount&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>revenue&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 style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>order_count&lt;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>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;completed&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:#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:#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>MATERIALIZED&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VIEW&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;analytics&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;daily_revenue&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>&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>date_trunc&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#39;day&amp;#39;&lt;/span>&lt;span style="color:#1f2328">,&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:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">day&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_amount&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>revenue&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 style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>order_count&lt;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>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;completed&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:#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:#1f2328">;&lt;/span>&lt;span style="color:#fff">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="with-storage-options-and-with-no-data">With storage options and &lt;code>WITH NO DATA&lt;/code>&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>MATERIALIZED&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VIEW&lt;/span>&lt;span style="color:#fff"> &lt;/span>product_stats&lt;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">WITH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>fillfactor&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">90&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>TABLESPACE&lt;span style="color:#fff"> &lt;/span>analytics_space&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;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>product_id&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:#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">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>purchases&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AVG&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>price&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>avg_price&lt;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>order_items&lt;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>product_id&lt;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">WITH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NO&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DATA&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>INDEXES&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#f6f8fa;background-color:#82071e">{&lt;/span>&lt;span style="color:#fff"> &lt;/span>idx_product_stats_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>product_id&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>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">SELECT&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_readonly&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>MATERIALIZED&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VIEW&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_stats&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:#cf222e">WITH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>fillfactor&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">90&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>TABLESPACE&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;analytics_space&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>&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>product_id&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:#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">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>purchases&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AVG&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>price&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">AS&lt;/span>&lt;span style="color:#fff"> &lt;/span>avg_price&lt;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>order_items&lt;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>product_id&lt;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">WITH&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">NO&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">DATA&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">SELECT&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:#0a3069">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#0a3069">&amp;#34;product_stats&amp;#34;&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_readonly&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>&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">INDEX&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">IF&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">EXISTS&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;idx_product_stats_id&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:#cf222e">ON&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_stats&amp;#34;&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;product_id&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="diffing-behaviour">Diffing behaviour&lt;/h2>
&lt;p>Any change to a materialized view&amp;rsquo;s query (beyond whitespace, which is normalized away before comparison) emits &lt;code>DROP MATERIALIZED VIEW&lt;/code> then &lt;code>CREATE MATERIALIZED VIEW&lt;/code> — always &lt;code>DESTRUCTIVE&lt;/code>. Unlike regular views, there is no &lt;code>CREATE OR REPLACE MATERIALIZED VIEW&lt;/code>.&lt;/p></description></item><item><title>Recursive Views</title><link>https://thec1oud.github.io/dpg/docs/schema-objects/views/recursive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thec1oud.github.io/dpg/docs/schema-objects/views/recursive/</guid><description>&lt;h2 id="recursive-view">Recursive view&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">RECURSIVE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VIEW&lt;/span>&lt;span style="color:#fff"> &lt;/span>org_tree&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#1f2328">(&lt;/span>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>parent_id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>depth&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>path&lt;span style="color:#1f2328">)&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>&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>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>parent_id&lt;span style="color:#1f2328">,&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 style="color:#6639ba">ARRAY&lt;/span>&lt;span style="color:#1f2328">[&lt;/span>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">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>departments&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>parent_id&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:#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">UNION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ALL&lt;/span>&lt;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>d&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#1f2328">.&lt;/span>parent_id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#1f2328">.&lt;/span>depth&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">1&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#1f2328">.&lt;/span>path&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">||&lt;/span>&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#1f2328">.&lt;/span>id&lt;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>departments&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">JOIN&lt;/span>&lt;span style="color:#fff"> &lt;/span>org_tree&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#1f2328">.&lt;/span>parent_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#1f2328">.&lt;/span>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:#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">RECURSIVE&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">VIEW&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;org_tree&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:#0a3069">&amp;#34;id&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;parent_id&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;depth&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0a3069">&amp;#34;path&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&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>&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>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>parent_id&lt;span style="color:#1f2328">,&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 style="color:#6639ba">ARRAY&lt;/span>&lt;span style="color:#1f2328">[&lt;/span>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">FROM&lt;/span>&lt;span style="color:#fff"> &lt;/span>departments&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">WHERE&lt;/span>&lt;span style="color:#fff"> &lt;/span>parent_id&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:#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">UNION&lt;/span>&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ALL&lt;/span>&lt;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>d&lt;span style="color:#1f2328">.&lt;/span>id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#1f2328">.&lt;/span>parent_id&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#1f2328">.&lt;/span>depth&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">1&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#1f2328">.&lt;/span>path&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">||&lt;/span>&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#1f2328">.&lt;/span>id&lt;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>departments&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">JOIN&lt;/span>&lt;span style="color:#fff"> &lt;/span>org_tree&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#cf222e">ON&lt;/span>&lt;span style="color:#fff"> &lt;/span>d&lt;span style="color:#1f2328">.&lt;/span>parent_id&lt;span style="color:#fff"> &lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#fff"> &lt;/span>t&lt;span style="color:#1f2328">.&lt;/span>id&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>Recursive views follow the same &lt;a href="../regular/">diffing rules as regular views&lt;/a>: query body changes emit &lt;code>CREATE OR REPLACE&lt;/code>; output column list changes emit &lt;code>DROP&lt;/code> + &lt;code>CREATE&lt;/code> (&lt;code>DESTRUCTIVE&lt;/code>).&lt;/p></description></item></channel></rss>