<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Get Started &amp; Installation on Mooncake</title>
    <link>https://mooncake.pgsty.com/docs/getting-started/</link>
    <description>Recent content in Get Started &amp; Installation on Mooncake</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    
    
    
      <lastBuildDate>Thu, 05 Nov 2026 19:17:16 +0800</lastBuildDate>
    
    
      <atom:link href="https://mooncake.pgsty.com/docs/getting-started/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>Hello World Tutorial</title>
        <link>https://mooncake.pgsty.com/docs/getting-started/hello-world/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://mooncake.pgsty.com/docs/getting-started/hello-world/</guid>
        <description>&lt;p&gt;This tutorial walks through the core operations of &lt;code&gt;pg_mooncake&lt;/code&gt;: creating a regular PostgreSQL rowstore table, creating a real-time columnstore mirror (&lt;code&gt;USING mooncake&lt;/code&gt;), running transactional &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt; statements, testing rollback semantics, and joining columnstore and rowstore tables.&lt;/p&gt;&#xA;&lt;h2 id=&#34;enable&#34;&gt;1. Enable the Extension&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Connect to your PostgreSQL database and ensure &lt;code&gt;pg_mooncake&lt;/code&gt; (along with &lt;code&gt;pg_duckdb&lt;/code&gt;) is enabled:&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-b465ca7d-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;sql&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-b465ca7d-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXTENSION&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;IF&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NOT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;EXISTS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_mooncake&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;CASCADE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;create-mirror&#34;&gt;2. Create a Rowstore Table &amp;amp; Columnstore Mirror&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;First, create a standard PostgreSQL heap table (&lt;code&gt;user_activity&lt;/code&gt;) for your transactional writes, then call &lt;code&gt;mooncake.create_table&lt;/code&gt; to create its real-time columnstore mirror (&lt;code&gt;user_activity_columnstore&lt;/code&gt;):&lt;/p&gt;</description>
      </item>
    <item>
        <title>Known Limitations</title>
        <link>https://mooncake.pgsty.com/docs/getting-started/known-limitations/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://mooncake.pgsty.com/docs/getting-started/known-limitations/</guid>
        <description>&lt;p&gt;Before deploying &lt;code&gt;pg_mooncake&lt;/code&gt; (&lt;code&gt;v0.3.0&lt;/code&gt;) in production, review the following architectural constraints and known limitations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;read-only-mirror&#34;&gt;1. Read-Only Columnstore Mirror Tables&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Tables created with &lt;code&gt;CALL mooncake.create_table(dst, src)&lt;/code&gt; use the &lt;code&gt;USING mooncake&lt;/code&gt; table access method and are &lt;strong&gt;read-only replicas&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Direct &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, or &lt;code&gt;COPY&lt;/code&gt; statements targeting the &lt;code&gt;USING mooncake&lt;/code&gt; table are rejected by PostgreSQL (&lt;code&gt;ERROR:cannot modify table &amp;quot;...&amp;quot; because it uses the mooncake access method&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Always execute DML operations against the source rowstore table (&lt;code&gt;src&lt;/code&gt;); changes replicate automatically via &lt;a href=&#34;https://mooncake.pgsty.com/docs/intro/moonlink/&#34;&gt;&lt;code&gt;moonlink&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;replica-identity&#34;&gt;2. Primary Keys &amp;amp; &lt;code&gt;REPLICA IDENTITY FULL&lt;/code&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;To replicate &lt;code&gt;UPDATE&lt;/code&gt; and &lt;code&gt;DELETE&lt;/code&gt; operations accurately over PostgreSQL logical replication, the source table must provide complete old-row identification in the WAL stream:&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
