<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<title>My Blog</title>
	<subtitle>My blog site.</subtitle>
	<link rel="self" type="application/atom+xml" href="https://su-ekachai.github.io/eakkz-blog/posts/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://su-ekachai.github.io/eakkz-blog/posts/"/>
  
	<updated>2025-09-15T00:00:00+00:00</updated>
	
	<id>https://su-ekachai.github.io/eakkz-blog/posts/feed.xml</id>
	<entry xml:lang="en">
		<title>Installing TimescaleDB on macOS with Postgres.app</title>
		<published>2025-09-15T00:00:00+00:00</published>
		<updated>2025-09-15T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="https://su-ekachai.github.io/eakkz-blog/posts/installing-timescaledb-on-macos-with-postgres-app/"/>
		<id>https://su-ekachai.github.io/eakkz-blog/posts/installing-timescaledb-on-macos-with-postgres-app/</id>
    
		<content type="html" xml:base="https://su-ekachai.github.io/eakkz-blog/posts/installing-timescaledb-on-macos-with-postgres-app/">&lt;h2 id=&quot;why-the-easy-way-didn-t-work&quot;&gt;Why the &quot;Easy Way&quot; Didn&#x27;t Work&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-the-easy-way-didn-t-work&quot; aria-label=&quot;Anchor link for: why-the-easy-way-didn-t-work&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;If you are a macOS user like me, you probably love using &lt;a rel=&quot;nofollow noreferrer external&quot; href=&quot;https:&#x2F;&#x2F;postgresapp.com&#x2F;&quot;&gt;Postgres.app&lt;&#x2F;a&gt;. It&#x27;s just the easiest way to manage PostgreSQL on a Mac. But recently, I ran into a bit of a headache when I tried to add &lt;strong&gt;TimescaleDB&lt;&#x2F;strong&gt; to the mix.&lt;&#x2F;p&gt;
&lt;p&gt;I started by following the official docs and tried the Homebrew method. &quot;Easy peasy,&quot; I thought. But nope. It turns out that Homebrew&#x27;s version of TimescaleDB is built for Homebrew&#x27;s PostgreSQL, not the one from Postgres.app. This led to all sorts of annoying issues:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Target Mismatch&lt;&#x2F;strong&gt;: The extension was compiled for the wrong Postgres version.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Missing Files&lt;&#x2F;strong&gt;: The &lt;code&gt;.so&lt;&#x2F;code&gt; library files weren&#x27;t where Postgres.app looked for them.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Path Nightmares&lt;&#x2F;strong&gt;: I had multiple Postgres installations fighting each other.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;After banging my head against the wall for a bit (and seeing a lot of empty directories where files &lt;em&gt;should&lt;&#x2F;em&gt; have been), I realized that &lt;strong&gt;compiling from source&lt;&#x2F;strong&gt; was actually the way to go.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-building-from-source-is-better-here&quot;&gt;Why Building from Source is Better Here&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-building-from-source-is-better-here&quot; aria-label=&quot;Anchor link for: why-building-from-source-is-better-here&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;When we build it ourselves, we can tell the build process &lt;em&gt;exactly&lt;&#x2F;em&gt; where our Postgres.app lives. This means:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It uses the correct &lt;code&gt;pg_config&lt;&#x2F;code&gt; from Postgres.app.&lt;&#x2F;li&gt;
&lt;li&gt;It puts the library files right where they need to be.&lt;&#x2F;li&gt;
&lt;li&gt;Everything is compatible with the specific version of Postgres you are running.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So, let&#x27;s get to it! Here is the step-by-step guide I wish I had when I started.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-by-step-installation&quot;&gt;Step-by-Step Installation&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-by-step-installation&quot; aria-label=&quot;Anchor link for: step-by-step-installation&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;a class=&quot;zola-anchor&quot; href=&quot;#prerequisites&quot; aria-label=&quot;Anchor link for: prerequisites&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;First off, make sure your Postgres.app is actually running. We also need to make sure your terminal knows where to find the Postgres tools.&lt;&#x2F;p&gt;
&lt;p&gt;Run this to check:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;which&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pg_config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; You want to see something like: &#x2F;Applications&#x2F;Postgres.app&#x2F;Contents&#x2F;Versions&#x2F;latest&#x2F;bin&#x2F;pg_config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If it shows a different path (like &lt;code&gt;&#x2F;usr&#x2F;local&#x2F;bin&#x2F;...&lt;&#x2F;code&gt;), you need to update your path. Add this to your &lt;code&gt;~&#x2F;.zshrc&lt;&#x2F;code&gt; or &lt;code&gt;~&#x2F;.bash_profile&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage&quot;&gt;export&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; PATH&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;Applications&#x2F;Postgres.app&#x2F;Contents&#x2F;Versions&#x2F;latest&#x2F;bin:&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;PATH&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Don&#x27;t forget to restart your terminal or run &lt;code&gt;source ~&#x2F;.zshrc&lt;&#x2F;code&gt; after saving!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-1-clean-slate-optional&quot;&gt;Step 1: Clean Slate (Optional)&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-1-clean-slate-optional&quot; aria-label=&quot;Anchor link for: step-1-clean-slate-optional&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;If you already tried the Homebrew method and it failed, let&#x27;s clean that up first so we don&#x27;t have conflicts.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; uninstall&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; timescaledb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; untap&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; timescale&#x2F;tap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;step-2-get-the-build-tools&quot;&gt;Step 2: Get the Build Tools&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-2-get-the-build-tools&quot; aria-label=&quot;Anchor link for: step-2-get-the-build-tools&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;We need &lt;code&gt;cmake&lt;&#x2F;code&gt; to build the project. If you don&#x27;t have it yet:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cmake&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;step-3-download-timescaledb&quot;&gt;Step 3: Download TimescaleDB&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-3-download-timescaledb&quot; aria-label=&quot;Anchor link for: step-3-download-timescaledb&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Let&#x27;s grab the code from GitHub.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; Clone the repo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; clone&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; https:&#x2F;&#x2F;github.com&#x2F;timescale&#x2F;timescaledb.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; timescaledb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; I&amp;#39;m using version 2.21.1 here, but feel free to check out the latest stable tag&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; checkout&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; 2.21.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;step-4-configure-the-build&quot;&gt;Step 4: Configure the Build&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-4-configure-the-build&quot; aria-label=&quot;Anchor link for: step-4-configure-the-build&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;This is the important part. We need to configure the build so it knows about our Postgres.app environment.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;OPENSSL_ROOT_DIR&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;h&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;m&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;e&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;r&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;e&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;w&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;e&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;l&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; .&#x2F;bootstrap&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;DREGRESS_CHECKS=OFF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Note for Intel Mac users:&lt;&#x2F;strong&gt; If the path above doesn&#x27;t work, your OpenSSL might be in a different spot. Try this instead:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;OPENSSL_ROOT_DIR&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;u&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;r&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;l&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;l&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;o&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;e&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;l&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; .&#x2F;bootstrap&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;DREGRESS_CHECKS=OFF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;Quick tip: We use &lt;code&gt;-DREGRESS_CHECKS=OFF&lt;&#x2F;code&gt; because the regression tests need some extra binaries that we don&#x27;t strictly need just to get the extension running.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-5-compile-and-install&quot;&gt;Step 5: Compile and Install&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-5-compile-and-install&quot; aria-label=&quot;Anchor link for: step-5-compile-and-install&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Time to build! This might take a few minutes, so maybe grab a coffee ☕.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; .&#x2F;build&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; make&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; make&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When you run &lt;code&gt;sudo make install&lt;&#x2F;code&gt;, it will copy the compiled files into your Postgres.app application bundle. This is exactly what we want!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-6-tell-postgres-about-it&quot;&gt;Step 6: Tell Postgres About It&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-6-tell-postgres-about-it&quot; aria-label=&quot;Anchor link for: step-6-tell-postgres-about-it&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Now we need to enable the library in your Postgres config.&lt;&#x2F;p&gt;
&lt;p&gt;Find your config file:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;psql&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;d&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; postgres&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;c&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;SHOW config_file;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Open that file in VS Code (or Vim if you&#x27;re feeling brave) and look for &lt;code&gt;shared_preload_libraries&lt;&#x2F;code&gt;. Change it to:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;shared_preload_libraries&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;timescaledb&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;step-7-restart-and-enable&quot;&gt;Step 7: Restart and Enable&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-7-restart-and-enable&quot; aria-label=&quot;Anchor link for: step-7-restart-and-enable&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Important:&lt;&#x2F;strong&gt; Quit Postgres.app completely (Command+Q) and open it again. Just restarting the server isn&#x27;t enough to load the new library.&lt;&#x2F;li&gt;
&lt;li&gt;Connect to your database and create the extension:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;CREATE&lt;&#x2F;span&gt;&lt;span&gt; EXTENSION &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;IF&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; NOT&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; EXISTS&lt;&#x2F;span&gt;&lt;span&gt; timescaledb;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you see the welcome message, congratulations! You did it! 🎉&lt;&#x2F;p&gt;
&lt;h3 id=&quot;step-8-let-s-test-it&quot;&gt;Step 8: Let&#x27;s Test It&lt;a class=&quot;zola-anchor&quot; href=&quot;#step-8-let-s-test-it&quot; aria-label=&quot;Anchor link for: step-8-let-s-test-it&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Just to be 100% sure, let&#x27;s make a quick hypertable.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;--&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; 1. Create a regular table&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;CREATE&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; TABLE&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; conditions&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;    time&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; TIMESTAMP&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;TZ&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; NOT NULL&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    location&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; TEXT&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; NOT NULL&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    temperature &lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;DOUBLE PRECISION&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; NULL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;--&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; 2. Turn it into a hypertable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; create_hypertable(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;conditions&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;time&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;--&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; 3. Add some data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;INSERT INTO&lt;&#x2F;span&gt;&lt;span&gt; conditions &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;VALUES&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;NOW&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Bangkok&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;NOW&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; INTERVAL &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;1 hour&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Chiang Mai&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;28&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment&quot;&gt;--&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; 4. Check if it&amp;#39;s there&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; *&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; FROM&lt;&#x2F;span&gt;&lt;span&gt; conditions &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;ORDER BY&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; time&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; DESC&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Hope this guide saved you some time! Happy coding! 🚀&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Welcome to My Blog</title>
		<published>2025-09-01T00:00:00+00:00</published>
		<updated>2025-09-01T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="https://su-ekachai.github.io/eakkz-blog/posts/welcome-to-my-blog/"/>
		<id>https://su-ekachai.github.io/eakkz-blog/posts/welcome-to-my-blog/</id>
    
		<content type="html" xml:base="https://su-ekachai.github.io/eakkz-blog/posts/welcome-to-my-blog/">&lt;p&gt;Hi, I’m &lt;strong&gt;Ekachai&lt;&#x2F;strong&gt; (Eakkz). Welcome to my unorganized blog!&lt;&#x2F;p&gt;
&lt;p&gt;I’m a data engineer from Thailand who loves working with data, and—most importantly—taking care of my &lt;strong&gt;7 cats&lt;&#x2F;strong&gt;. 🐈&lt;&#x2F;p&gt;
&lt;p&gt;To be honest, I’m someone who gets bored pretty easily. One day I might be deep into &lt;strong&gt;Data Engineering&lt;&#x2F;strong&gt; and &lt;strong&gt;Python&lt;&#x2F;strong&gt;, and the next I might be obsessing over &lt;strong&gt;Finance&lt;&#x2F;strong&gt;, &lt;strong&gt;Trading strategies&lt;&#x2F;strong&gt;, or just the latest gadget I bought.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;A quick heads-up:&lt;&#x2F;strong&gt; I’m not really a writer, so don&#x27;t expect long, poetic essays. Since I am from Thailand, you might find my content in both &lt;strong&gt;Thai&lt;&#x2F;strong&gt; and &lt;strong&gt;English&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So, this blog is going to be a bit of a mix. You’ll find:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Technical guides and coding tips (mostly so I don&#x27;t forget them myself).&lt;&#x2F;li&gt;
&lt;li&gt;Notes on data and technology.&lt;&#x2F;li&gt;
&lt;li&gt;Musings on finance and trading.&lt;&#x2F;li&gt;
&lt;li&gt;And probably some cat photos. 😸&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is just a space for me to document whatever I’m currently interested in. Whether you’re here for the code or just curious, I hope you find something useful!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for stopping by.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Full transparency:&lt;&#x2F;strong&gt; I sometimes use AI tools to help polish my writing. The ideas and experiences are 100% mine, but the smooth grammar? That might be the AI helping me out.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
	</entry>
</feed>
