<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[Tiger Data Blog]]></title>
        <description><![CDATA[Insights, product updates, and tips from TigerData (Creators of TimescaleDB) engineers on Postgres, time series & AI. IoT, crypto, and analytics tutorials & use cases.]]></description>
        <link>https://www.tigerdata.com/blog</link>
        <image>
            <url>https://www.tigerdata.com/icon.ico</url>
            <title>Tiger Data Blog</title>
            <link>https://www.tigerdata.com/blog</link>
        </image>
        <generator>RSS for Node</generator>
        <lastBuildDate>Sat, 08 Aug 2026 06:57:24 GMT</lastBuildDate>
        <atom:link href="https://www.tigerdata.com/blog" rel="self" type="application/rss+xml"/>
        <ttl>60</ttl>
        <item>
            <title><![CDATA[The Postgres Developer's Guide to Vector Index Tradeoffs]]></title>
            <description><![CDATA[Vector search becomes an index design problem as your data grows. Here's how to make the right call without leaving Postgres.]]></description>
            <link>https://www.tigerdata.com/blog/the-postgres-developers-guide-to-vector-index-tradeoffs</link>
            <guid isPermaLink="true">https://www.tigerdata.com/blog/the-postgres-developers-guide-to-vector-index-tradeoffs</guid>
            <category><![CDATA[pg_textsearch]]></category>
            <category><![CDATA[PostgreSQL]]></category>
            <category><![CDATA[PostgreSQL Extensions]]></category>
            <dc:creator><![CDATA[Hien Phan]]></dc:creator>
            <pubDate>Tue, 26 May 2026 14:23:55 GMT</pubDate>
            <media:content medium="image" href="https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/2026/05/thumbnail-blog-thumbnail-1280x720--5-.png">
            </media:content>
            <content:encoded><![CDATA[<p>Vector search in Postgres usually starts simply. You add an embedding column, run a nearest-neighbor query, and order by distance.</p><pre><code class="language-sql">SELECT content
FROM documents
ORDER BY embedding &lt;=&gt; '[0.1, 0.2, ...]'
LIMIT 10;</code></pre><p>For a while, that is enough.</p><p>That simplicity breaks down as the workload becomes real. The table grows, filters become part of the query path, and recall starts affecting user experience. The index still has to stay fast while new data keeps arriving.</p><p>That is when vector search stops being a query pattern and becomes an index design problem.</p><p>Most vector search advice starts with algorithms: HNSW, IVFFlat, DiskANN, recall, latency. That is useful, but incomplete once vector search lives inside Postgres. Postgres developers do not choose algorithms in the abstract. They choose indexes under constraints: memory, recall, write volume, filter selectivity, and the operational cost of adding another system.</p><p>The right index is not the best ANN algorithm in isolation. It is the index that fits the constraint your workload hits first: memory, recall, writes, or filters.</p><p>This article maps those constraints to real Postgres index choices: what each one costs, when it becomes the binding variable, and which index type it points to.</p><h2 id="when-exact-search-stops-being-enough">When exact search stops being enough</h2><p>Exact k-nearest neighbor search compares the query vector against every vector in the table. It gives perfect recall because it does not approximate the result set. It also scales linearly with the number of rows.</p><p>That tradeoff is fine early on. Exact search is the right starting point when the dataset is small, the query rate is low or you are still validating whether embeddings work for your application. It also gives you a useful baseline because the results are not affected by index tuning.</p><p>The problem shows up when the table grows into millions or tens of millions of vectors, or when users expect low latency. At that point, scanning every vector for every query becomes too expensive.</p><p>Approximate nearest neighbor search, or ANN search, exists for this moment. ANN indexes organize vectors ahead of time so the database can search only the most promising candidates instead of scanning the full table. The index gives up a small, controlled amount of accuracy in exchange for much lower query latency.</p><p>That is the first tradeoff: ANN is not magic. You are deciding how much recall you can afford to exchange for speed, memory efficiency, and lower infrastructure cost.</p><h2 id="the-four-constraints-behind-every-vector-index">The four constraints behind every vector index</h2><p>The right vector index is usually decided by four constraints: whether the working set fits in memory, how much recall the application needs, how often the data changes and how selective the surrounding filters are.</p><h3 id="memory">Memory</h3><p>Memory is fast and low-latency, but expensive. SSDs are cheaper and can still work well for many workloads. Object storage is cheaper still, but its higher latency makes it a poor fit for index designs that require many small random reads.</p><p>Vector indexes do not all touch storage the same way. Graph-based indexes follow connections between vectors through the index. That access pattern works very well when the graph is in memory and becomes more expensive when each hop risks a disk read. Partitioning-based indexes group vectors into regions and scan the most promising ones, which can be more memory efficient but usually requires more tuning.</p><p>In Postgres, the practical question is whether the index working set fits comfortably in <code>shared_buffers</code> and the operating system page cache. If it does, an in-memory graph index can perform very well. If it does not, the storage access pattern starts to dominate the design.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/2026/05/digram-A.png" class="kg-image" alt="" loading="lazy" width="2000" height="1194" srcset="https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w600/2026/05/digram-A.png 600w, https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w1000/2026/05/digram-A.png 1000w, https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w1600/2026/05/digram-A.png 1600w, https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w2400/2026/05/digram-A.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Storage changes the index tradeoff. Graph-based indexes perform best when traversal stays hot in memory. Disk-aware and partition-based designs become increasingly important as the working set migrates to SSD or object storage.</em></i></figcaption></figure><h3 id="recall">Recall</h3><p>Recall measures how close approximate search gets to exact search. Higher recall usually costs more because the index has to inspect more candidates, traverse more of a graph or scan more partitions.</p><p>For some applications, slightly lower recall is acceptable if latency improves dramatically. For others, especially RAG systems where missing the right document leads to a bad answer, recall is part of product quality.</p><p>The honest way to set this tradeoff is to measure against your own data. Embedding model, dimensionality, filters, and query distribution all affect the result.</p><h3 id="writes">Writes</h3><p>Some vector workloads are mostly read-heavy. You build the index, query it many times, and update it occasionally. Other workloads change constantly. New documents arrive, old ones are deleted, embeddings are regenerated.</p><p>A structure optimized for high-recall reads may have higher write or maintenance costs. A lighter-weight index may be easier to update but require more tuning to reach the same recall.</p><h3 id="filters">Filters</h3><p>Real Postgres queries rarely search vectors alone. A query might ask for the nearest vectors, but only within a specific customer, time range, tenant or category.</p><p>Those predicates change the shape of the search problem. If a filter is highly selective, it may be cheaper to narrow the rows first and then search. If the filter is broad, it may be better to use the vector index first and apply the filter after. The right plan depends on the data distribution, the selectivity of the filter, and the index available to the planner.</p><p>That is one reason vector benchmarks can vary so much. Vector search without filters is not the same workload as vector search inside a real application query.</p><p>That is why there is no universal best vector index. There is only the index that best matches the shape of your workload.</p><h2 id="the-ann-algorithms-behind-postgres-index-choices">The ANN algorithms behind Postgres index choices</h2><p>The point of understanding ANN algorithms is not to memorize every paper. It is to understand why each index behaves differently as your workload changes. Most of the indexes discussed below fall into two broad patterns.</p><p>Graph-based indexes, such as HNSW and DiskANN-style designs, search by moving through connections between nearby vectors. Spatial partitioning indexes, such as IVFFlat and SPANN-style designs, divide the vector space into regions and search the most promising ones.</p><p>That distinction matters because graph-based indexes tend to optimize for high recall when the working set is hot, while partitioning-based indexes often trade more tuning for lower memory and maintenance overhead.</p><p>Each algorithm below is best understood as a response to a specific pressure: memory, write cost, disk access, or update churn.</p><h3 id="hnsw-when-the-index-fits-in-memory">HNSW: When the index fits in memory</h3><p>Your dataset fits in memory and you need high recall at high query throughput. HNSW is built for this.</p><p><a href="https://arxiv.org/abs/1603.09320"><u>Hierarchical Navigable Small Worlds</u></a> organizes vectors as a layered graph where each node connects to nearby vectors across multiple levels of granularity. A query enters at the top layer, moves toward the target neighborhood, then descends to finer layers until it converges on the best candidates.</p><p>The layered structure is what gives HNSW its speed-recall profile. The upper layers help the search move quickly across the vector space. The lower layers refine the candidate set around the target neighborhood. When the graph is in memory, that traversal can be fast and accurate.</p><p>The tradeoffs show up on the write side and at scale. Each node stores multiple edge pointers, so the index carries a higher memory footprint than simpler partitioning-based alternatives. Inserts and deletes require maintaining graph structure, which makes writes more expensive. And when the index grows beyond available memory, latency can climb.</p><p>In <code>pgvector</code>, HNSW is often the first ANN index Postgres developers try when query latency and recall matter most. For a practical look at how it performs, see <a href="https://www.tigerdata.com/blog/vector-database-basics-hnsw"><u>Vector Database Basics: HNSW</u></a>.</p><h3 id="ivfflat-when-memory-and-writes-matter-more">IVFFlat: When memory and writes matter more</h3><p>Your write throughput matters, or your index cannot comfortably fit in memory. IVFFlat is worth considering.</p><p>IVF stands for inverted file. The basic idea is to partition the vector space into lists, then search only the most promising lists at query time. In <code>pgvector</code>, this index type is exposed as ivfflat.</p><p>Compared with HNSW, IVFFlat is usually lighter to build and maintain. Inserts are simpler because adding a vector means assigning it to a list rather than updating a graph of neighboring nodes.</p><p>The tradeoff is that recall is more sensitive to tuning. If you create 1,000 lists and set <code>probes = 10</code>, the query searches a small fraction of the partitioned index. Increasing probes gives the query more chances to find the true nearest neighbors, but it also pushes the query closer to a broader scan. IVFFlat tuning is about finding the lowest probes value that still meets your recall target.</p><p>That is the core IVFFlat tradeoff: lower memory and maintenance overhead, but more responsibility for tuning lists and probes against your workload.</p><h3 id="diskann-when-the-index-needs-to-live-partly-on-disk">DiskANN: When the index needs to live partly on disk</h3><p>HNSW assumes the graph fits comfortably in memory. At tens of millions of high-dimensional vectors, that often stops being practical.</p><p><a href="https://www.microsoft.com/en-us/research/publication/diskann-fast-accurate-billion-point-nearest-neighbor-search-on-a-single-node/"><u>DiskANN</u></a>, developed at Microsoft Research, was built for this case. It is a graph-based algorithm designed for datasets too large to fit entirely in RAM. At a high level, it keeps enough compressed information in memory to guide the search while storing more of the full index and vector data on SSD.</p><p>The lesson for Postgres developers is the storage pattern. A vector index that works well in RAM may behave very differently when the query path depends on repeated disk reads. Disk-aware indexes are designed around that constraint instead of treating it as an afterthought.</p><p>DiskANN still carries higher update costs than many partitioning-based approaches. But for read-heavy workloads on large datasets, it explains the shape of the problem that disk-aware Postgres vector indexing is trying to solve. See <a href="https://www.tigerdata.com/blog/understanding-diskann"><u>Understanding DiskANN</u></a> for a deeper look.</p><h3 id="spfresh-the-update-problem-at-scale">SPFresh: The update problem at scale</h3><p>Large vector indexes create another problem: updates.</p><p>Many ANN systems handle inserts and deletes by buffering changes, maintaining secondary structures, or periodically rebuilding parts of the index. Those approaches can work, but at very large scale they require either accepting stale index state or paying an increasingly expensive maintenance cost to keep the index current.</p><p>SPFresh, from Microsoft Research, is one such direction. It builds on partitioning-oriented ideas to reduce the need for global rebuilds, incrementally rebalancing partitions as vectors are inserted, deleted, or updated. Partition assignments are not fixed. They can drift and be corrected over time.</p><p>SPFresh is not implemented in Postgres today. But it is not purely academic either. The ideas behind it have already shaped how production vector systems outside Postgres are being designed. Turbopuffer is one example: an object-storage-first vector search service whose architecture is built around centroid-based indexing and minimizing storage round trips. Turbopuffer is not a Postgres system. But the tradeoffs it navigates (high-update workloads, disk-based search, incremental index maintenance without global rebuilds) are real problems the Postgres ecosystem will need to address as vector workloads become more dynamic.</p><p>This is worth tracking because the maintenance cost of a vector index is not static. It grows with update frequency and dataset size. For read-heavy workloads on stable datasets, this is not a near-term concern. For teams with high insert and delete rates (documents being added, embeddings regenerated, records retired), it is worth understanding now, before the index becomes the bottleneck.</p><h2 id="the-postgres-vector-search-stack">The Postgres vector search stack</h2><p>The algorithms above map to real problems Postgres developers run into. HNSW is useful for in-memory performance, IVFFlat for lighter-weight indexing and write-sensitive workloads, and DiskANN-style designs for larger datasets where memory becomes the constraint.</p><p>Here is how the Postgres ecosystem addresses those problems today.</p><h3 id="pgvector">pgvector</h3><p><a href="https://github.com/pgvector/pgvector"><u>pgvector</u></a> is the starting point. It adds a native vector column type to Postgres and supports both HNSW and IVFFlat indexes directly.</p><p>An HNSW index looks like this:</p><pre><code class="language-sql">CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);</code></pre><p>For IVFFlat, you define the number of lists and tune the number of probes:</p><pre><code class="language-sql">CREATE INDEX ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 1000);
SET ivfflat.probes = 10;</code></pre><p>The query planner can use these indexes for nearest-neighbor queries, and you can combine vector search with standard SQL filters, joins and CTEs in the same query. For many teams already running Postgres, this can remove the need to operate a separate vector database.</p><p><code>pgvector</code> can start to show limits at larger scale, especially with high-dimensional embeddings at tens of millions of rows and indexes that no longer fit comfortably in memory. That is the problem <code>pgvectorscale</code> was built to address.</p><h3 id="pgvectorscale">pgvectorscale</h3><p>The DiskANN section above describes a specific problem: vector workloads that have grown too large to keep the working index in memory. For Postgres, <a href="https://github.com/timescale/pgvectorscale" rel="noreferrer"><code>pgvectorscale</code></a> addresses that directly. It introduces a StreamingDiskANN index type that keeps a compressed representation in memory to guide search while storing the full index on disk.</p><p>On a <a href="https://www.tigerdata.com/blog/pgvector-is-now-as-fast-as-pinecone-at-75-less-cost"><u>Tiger Data benchmark</u></a> of 50 million Cohere embeddings at 768 dimensions, Postgres with <code>pgvector</code> and <code>pgvectorscale</code> achieved 28x lower p95 latency and 16x higher query throughput compared to Pinecone's storage-optimized index at 99% recall. This was a vendor-run benchmark. Treat it as directionally useful, not universally predictive. Results will vary with embedding model, dimensionality, filters, recall target, and hardware.</p><p>The relevant point is that <code>pgvectorscale</code> stays inside the Postgres operational model. It remains composable with <code>pgvector</code> data types and standard SQL patterns. If your index has outgrown memory, you do not need a different system. You need a different index type.</p><h3 id="pgtextsearch-and-paradedb">pg_textsearch and ParadeDB</h3><p>Vector similarity handles the semantic side of search well, but it is not the whole retrieval problem. Keyword-based retrieval still matters. It catches exact matches that embeddings miss, and for many queries, users know precisely what they are looking for.</p><p>This is where <code>pg_textsearch</code> and ParadeDB come in.</p><p><a href="https://github.com/timescale/pg_textsearch"><u>pg_textsearch</u></a>, also from Tiger Data, brings BM25-based search into Postgres. BM25 accounts for term frequency saturation and document length normalization, which is why it is often a stronger ranking model for keyword search than simple term matching.</p><p>ParadeDB takes a related position as a Postgres distribution, bundling <a href="https://github.com/paradedb/paradedb/tree/main/pg_search"><u>pg_search</u></a> for BM25-based full-text search and <a href="https://github.com/paradedb/pg_analytics"><u>pg_analytics</u></a> for analytical query execution. If you want Elasticsearch-style search quality and are open to running a Postgres distribution rather than adding individual extensions, ParadeDB belongs on your evaluation list. When you are operating a small dataset, BM25 relevance ranking may not be a key requirement and <code>pg_search</code> will suffice. However, <code>pg_textsearch</code> is a better option when you need true BM25 relevance ranking with term saturation (how many times a term appears) or document length normalization to match the experience of Lucene (that powers Elasticsearch) or the algorithms that power Google.</p><p>The real payoff of having both vector search and BM25 inside Postgres is hybrid search: combining vector similarity and keyword scoring in a single query. For many RAG applications, this is often a stronger retrieval pattern than vector search alone because each approach covers the other's blind spots. Vector search captures semantic meaning. BM25 catches exact matches.</p><h3 id="a-simple-hybrid-search-pattern-in-sql">A simple hybrid search pattern in SQL</h3><p>One common way to merge vector and keyword results is Reciprocal Rank Fusion, or RRF.</p><p>RRF avoids averaging scores across different scales. Instead, it combines rank positions. A result that appears near the top of either list gets a boost.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/2026/05/digram-B.png" class="kg-image" alt="" loading="lazy" width="2000" height="1667" srcset="https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w600/2026/05/digram-B.png 600w, https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w1000/2026/05/digram-B.png 1000w, https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w1600/2026/05/digram-B.png 1600w, https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/size/w2400/2026/05/digram-B.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><i><em class="italic" style="white-space: pre-wrap;">Hybrid search combines semantic and lexical retrieval. Vector search finds meaning. BM25 catches exact matches. RRF merges the ranked lists without comparing raw scores directly.</em></i></figcaption></figure><p>The exact syntax depends on which BM25 extension you use, but the query shape looks like this:</p><pre><code class="language-sql">WITH keyword_results AS (
&nbsp;&nbsp;SELECT
&nbsp;&nbsp;&nbsp;&nbsp;id,
&nbsp;&nbsp;&nbsp;&nbsp;content,
&nbsp;&nbsp;&nbsp;&nbsp;paradedb.score(id) AS bm25_score,
&nbsp;&nbsp;&nbsp;&nbsp;ROW_NUMBER() OVER (ORDER BY paradedb.score(id) DESC) AS keyword_rank
&nbsp;&nbsp;FROM documents
&nbsp;&nbsp;WHERE content @@@ 'vector search'
&nbsp;&nbsp;LIMIT 60
),
vector_results AS (
&nbsp;&nbsp;SELECT
&nbsp;&nbsp;&nbsp;&nbsp;id,
&nbsp;&nbsp;&nbsp;&nbsp;content,
&nbsp;&nbsp;&nbsp;&nbsp;1 - (embedding &lt;=&gt; '[0.1, 0.2, ...]') AS similarity_score,
&nbsp;&nbsp;&nbsp;&nbsp;ROW_NUMBER() OVER (ORDER BY embedding &lt;=&gt; '[0.1, 0.2, ...]') AS vector_rank
&nbsp;&nbsp;FROM documents
&nbsp;&nbsp;LIMIT 60
),
combined AS (
&nbsp;&nbsp;SELECT
&nbsp;&nbsp;&nbsp;&nbsp;COALESCE(k.id, v.id) AS id,
&nbsp;&nbsp;&nbsp;&nbsp;COALESCE(k.content, v.content) AS content,
&nbsp;&nbsp;&nbsp;&nbsp;COALESCE(1.0 / (60 + k.keyword_rank), 0) +
&nbsp;&nbsp;&nbsp;&nbsp;COALESCE(1.0 / (60 + v.vector_rank), 0) AS rrf_score
&nbsp;&nbsp;FROM keyword_results k
&nbsp;&nbsp;FULL OUTER JOIN vector_results v ON k.id = v.id
)
SELECT id, content
FROM combined
ORDER BY rrf_score DESC
LIMIT 10;</code></pre><p>This retrieves candidates from both systems, ranks them separately, and merges the ranked lists.</p><p>This is one of the strongest reasons to keep search in Postgres. Your embeddings, documents, metadata filters, joins, keyword search, and application data can live in one query model.</p><p>Learn more: <a href="https://www.tigerdata.com/docs/build/examples/hybrid-search"><u>how to build Hybrid Search in Postgres using pg_textsearch and pgvectorscale</u></a>, and <a href="https://www.tigerdata.com/blog/hybrid-search-postgres-you-probably-should"><u>why hybrid search outperforms vector-only retrieval</u></a>.</p><h2 id="what-this-guide-does-not-decide-for-you">What this guide does not decide for you</h2><p>No article can tell you the right vector index without your data.</p><p>Embedding model, dimensionality, filter selectivity, recall target, update rate, hardware, concurrency, and query distribution all change the answer. Even two datasets with the same number of rows can behave differently if their vectors cluster differently or their filters have different selectivity.</p><p>The point of this guide is not to replace benchmarking. It is to help you know what to benchmark first. Start with the simplest index that matches the shape of your workload. Measure it against exact search where possible. Tune recall and latency together. Then move to a more specialized index only when the workload gives you a reason.</p><h2 id="which-postgres-vector-index-should-you-use">Which Postgres vector index should you use?</h2>
<!--kg-card-begin: html-->
<table style="border:none;border-collapse:collapse;table-layout:fixed;width:468pt"><colgroup><col><col><col></colgroup><thead><tr style="height:0pt"><th style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;" scope="col"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Workload pattern</span></p></th><th style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;" scope="col"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Start with</span></p></th><th style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;" scope="col"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Why</span></p></th></tr></thead><tbody><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Small dataset or still validating the application</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Exact search</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Simple, accurate and useful as a recall baseline</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Starting a serious Postgres vector search workload</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:'Roboto Mono',monospace;color:#188038;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">pgvector</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> with HNSW</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Strong speed-recall tradeoff for read-heavy workloads</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lighter index or higher write throughput matters</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:'Roboto Mono',monospace;color:#188038;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">pgvector</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> with IVFFlat</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Lower memory and maintenance overhead, with more tuning required</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Index no longer fits comfortably in memory</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:'Roboto Mono',monospace;color:#188038;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">pgvectorscale</span><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;"> with </span><span style="font-size:11pt;font-family:'Roboto Mono',monospace;color:#188038;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">StreamingDiskANN</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Disk-aware vector indexing while staying inside Postgres</span></p></td></tr><tr style="height:0pt"><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Retrieval quality is the bottleneck</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Hybrid search with vector plus BM25</span></p></td><td style="border-left:solid #000000 1pt;border-right:solid #000000 1pt;border-bottom:solid #000000 1pt;border-top:solid #000000 1pt;vertical-align:top;padding:5pt 5pt 5pt 5pt;overflow:hidden;overflow-wrap:break-word;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;white-space:pre-wrap;">Combines semantic similarity with exact keyword matching</span></p></td></tr></tbody></table>
<!--kg-card-end: html-->
<p>The path usually looks like this: start with exact search while the dataset is small, move to HNSW when latency requires ANN, consider IVFFlat when memory or write cost matters more, evaluate disk-aware indexing when the working set outgrows memory, and add BM25 when retrieval quality needs more than semantic similarity alone.</p><h2 id="where-things-stand-and-where-they-are-going">Where things stand and where they are going</h2><p>The practical rule is simple: benchmark the workload you actually run, not the cleanest version of vector search.</p><p>Start with exact search while the dataset is small. Move to HNSW when latency requires ANN. Consider IVFFlat when memory or write cost matters more. Evaluate StreamingDiskANN when the working set outgrows memory. Add BM25 when retrieval quality needs more than semantic similarity.</p><p>The one gap that remains is what SPFresh points toward: high-update workloads at scale without global index rebuilds. That capability is not yet in Postgres, but it is already showing up in production vector systems outside the Postgres ecosystem. </p><p>Whether it eventually appears as an extension, a fork or something nobody has named yet, the pattern is familiar: a hard problem gets real and someone in this community builds the thing.</p><p>Want to dig in further? Look at Tiger Data docs for <a href="https://github.com/timescale/pgvectorscale"><u>pgvectorscale</u></a> and <a href="https://github.com/timescale/pg_textsearch"><u>pg_textsearch</u></a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing Agentic Postgres Free Plan: The Fastest Way to Experiment with AI on Postgres]]></title>
            <description><![CDATA[Experiment with AI on Postgres. The Tiger Free Plan offers database forks, vector search, and real-time analytics. No credit card required. Built for developers and agents: Agentic Postgres.]]></description>
            <link>https://www.tigerdata.com/blog/introducing-agentic-postgres-free-plan-experiment-ai-on-postgres</link>
            <guid isPermaLink="true">https://www.tigerdata.com/blog/introducing-agentic-postgres-free-plan-experiment-ai-on-postgres</guid>
            <category><![CDATA[Announcements & Releases]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[AI agents]]></category>
            <category><![CDATA[PostgreSQL]]></category>
            <dc:creator><![CDATA[Hien Phan]]></dc:creator>
            <pubDate>Tue, 21 Oct 2025 13:47:05 GMT</pubDate>
            <media:content medium="image" href="https://storage.ghost.io/c/6b/cb/6bcb39cf-9421-4bd1-9c9d-fa7b6755ba0e/content/images/2025/10/ABL--free-tier-Blog-thumbnail.png">
            </media:content>
            <content:encoded><![CDATA[<p><em>TLDR:</em>&nbsp;<em>A new chapter for Postgres starts today: Agentic Postgres, the first </em><a href="https://www.tigerdata.com/blog/postgres-for-agents" rel="noreferrer"><em>database for agents</em></a><em>, brings new architecture for the age of agents, and free access for everyone who builds with them.</em></p><p>We're launching a free tier. No credit card, no time limit, no catch.</p><p>AI development moves at the speed of thought. You’re constantly experimenting, testing a vector search strategy, forking a database to try a new schema, or spinning up an instance for a weekend project. The friction of “will this cost me money?” shouldn’t slow you down.</p><p>Today, we’re launching the Tiger Free Plan, a fully managed Postgres built for how AI development actually works: experimental, iterative, and increasingly agent-driven. It’s the same Tiger managed cloud experience developers already love, now free for every idea.</p><p>The Tiger Free Plan should be the database you reach for every time you want to test an idea.&nbsp;</p><h2 id="what-makes-this-free-plan-different">What Makes This Free Plan Different</h2><p>Most free database tiers are built for yesterday’s users. They gate core features, expire trials, or remind you what you don’t get. We built ours for how development actually happens today.</p><p>Because the <a href="https://www.tigerdata.com/blog/postgres-for-agents" rel="noreferrer">database has a new user</a>. Developers aren’t working alone anymore. They’re building alongside agents that write code, run migrations, and query data through APIs. That changes what experimentation means. You don’t just need a place to store data, you need a system where your tools, scripts, and agents can spin up, fork, and reason over automatically.</p><p>The Tiger Cloud Free Plan is built for that reality. It’s not designed for production. It's designed for progress, for the 90 percent of work that happens before you know if something is worth scaling.</p><p>Other free tiers optimize for control. Ours optimizes for momentum. When you’re experimenting, you shouldn’t have to think about limits, billing, or setup. You should be able to fork your database, test a schema, or try a new retrieval strategy in seconds, whether you’re doing it yourself or your agent is doing it for you.</p><p>That’s why it includes the tools modern AI workflows actually rely on. You can fork your database to test safely and recover fast, run vector search to compare retrieval and embedding strategies in real time, and analyze live data with built-in time-series and columnar features so you can see what’s happening as it happens. Because Tiger Cloud runs the same APIs across every plan, moving from free to production is instant: no migration, no rework, no context lost.</p><p>This isn’t a teaser or a trial. It's part of a new architecture for Postgres, one built for builders: humans and agents alike.&nbsp;</p><h2 id="what%E2%80%99s-included">What’s Included</h2><h3 id="compute-storage">Compute &amp; storage:</h3><ul><li>Shared compute</li><li>Up to 750 MB of storage per service</li><li>Limit of 2 free services per account</li><li>Available in us-east-1 (EU expansion coming soon)</li></ul><h3 id="features-that-matter">Features that matter:</h3><ul><li><strong>Database forks:</strong> <a href="https://www.tigerdata.com/blog/fast-zero-copy-database-forks" rel="noreferrer">Branch your database</a> like your code. Test safely, recover fast, or try something bold.</li><li><strong>AI-native retrieval:</strong> Build RAG and other AI-powered features with <a href="https://www.tigerdata.com/blog/introducing-pg_textsearch-true-bm25-ranking-hybrid-retrieval-postgres" rel="noreferrer">native hybrid and vector search</a> support (pgvectorscale + BM25).</li><li><strong>Real-time analytics:</strong> Hypertables, continuous aggregates, and columnar storage. Run <a href="https://assets.timescale.com/docs/downloads/tigerdata-whitepaper.pdf"><u>analytics in Postgres</u></a> without extra systems.</li><li><strong>Insights:</strong> View performance on a per-query basis over time, and get optimization recommendations, so you spend less time guessing.&nbsp;</li><li><strong>Automated Management: </strong>Upgrades, tuning, and maintenance handled for you, so your database always runs at its best.</li><li><strong>50+ Postgres Extensions. </strong>All your favorite extensions, from PostGIS to pgvector, built in and ready to go.</li><li><strong>Connection management:</strong> Simplified, secure handling that just works.</li></ul><h2 id="what-happens-when-you-hit-the-limits">What Happens When You Hit the Limits</h2><p>At 750 MB, your service switches to read-only mode. You’ll get warnings as you approach the limit, and you can:</p><ul><li>Fork to an earlier point in time (PITR - 24-hour point in time recovery)</li><li>Clean up data</li><li>Or upgrade to a paid plan and migrate in minutes</li></ul><p>Free services can be upgraded directly. When your project grows, you can quickly convert it in place to remove storage limits. Your free services coexist perfectly with your paid ones, so you can test safely alongside production.</p><p>Connection poolers are not included in the Free Plan. Dedicated support is not included either, but Free Plan users are encouraged to join our <a href="https://slack.timescale.com/?__hstc=231067136.9958a7ac0060b2f1fd85cea041eba3e1.1752754343277.1760925381027.1760962725002.277&amp;__hssc=231067136.5.1760962725002&amp;__hsfp=839360075"><u>community Slack</u></a> to ask questions, share ideas, and see what others are building.</p><h3 id="built-for-the-builders-developers-and-agents-alike">Built for the builders: Developers and agents alike</h3><p>If you're new to Tiger, you can start with the free plan or take a 30-day performance trial. If you're already a customer, you can add two free services right inside your existing account for testing, sandboxing, or side projects.</p><p>The Free Plan is our way of lowering the floor for experimentation. We want more developers and agents building together on postgres without friction. It's a small change with a big goal: making it effortless to start, learn, and build.</p><p><strong>Get Started</strong></p><p>From the command line via the Tiger CLI (<a href="https://github.com/timescale/tiger-cli"><u>Download from GitHub</u></a>) </p><pre><code class="language-Shell">$ curl -fsSL https://cli.tigerdata.com | sh
$ tiger auth login 
$ tiger service create
</code></pre><p>From the cloud console:</p><ol><li><a href="https://console.cloud.timescale.com/signup"><u>Sign up</u></a></li><li>Select “Free Plan” (vs. the free 30-day trial)</li><li>Create a service and get building!</li></ol><hr><h2 id="frequently-asked-questions">Frequently Asked Questions</h2><h3 id="about-the-free-plan">About the Free Plan</h3><ol><li><strong>What is included in the Free Plan?</strong><ol><li>Up to 2 free services per account</li><li>Developer experience features: database forks (24-hour PITR), Insights dashboard, pgvector, real-time analytics/time-series (hypertables, continuous aggregates, columnar storage), connection management</li><li>MFA for secure login</li><li>IP Allow list for security</li><li>Database logs</li><li>A large suite of Postgres extensions, like PostGIS and pg_cron</li><li>Available in us-east-1 (EU region coming soon)</li></ol></li><li><strong>What is excluded in the Free Plan?</strong><ol><li>Connection pooler</li><li>Compute resizing</li><li>Dedicated support (community Slack available)</li><li>High-availability configurations</li><li>Advanced security features</li><li>Advanced enterprise features</li></ol></li><li><strong>What are the specs of a free service?</strong><ol><li>Each free service includes:<ol><li>Shared compute</li><li>Storage: Up to 750 MB for user data</li><li>Backup: 24-hour point-in-time recovery for forking</li><li>Connections: Limited (exact number TBD, designed to balance usability and system health)</li></ol></li></ol></li><li><strong>Is a credit card required to create Free Plan services?</strong><ol><li>No. You can sign up and create free services without entering payment information.</li></ol></li><li><strong>What happens if I reach my storage limit?</strong><ol><li>You'll receive warnings as you approach 750 MB. Once you hit the limit, your service switches to <strong>read-only mode</strong>. You can:<ol><li>Fork your service to an earlier point in time (within the 24-hour PITR window)</li><li>Delete data to free up space before reaching the limit</li><li>Upgrade to a Performance or Scale plan and “Convert to a standard service without storage limits”</li></ol></li></ol></li><li><strong>Can I upgrade free services?</strong><ol><li>Yes. If your project outgrows the Free Plan, you can:<ol><li>Switch to a Performance or Scale plan</li><li>Convert your free service to a standard service to remove storage limitations and get access to higher levels of compute</li></ol></li></ol></li><li><strong>What is the difference between Free Plan and Performance Plan?</strong><ol><li>Performance Plan offers:<ol><li>Scalable compute (starting at 0.5 CPU / 2 GB RAM, up to 16 CPU / 128 GB RAM)</li><li>Storage up to 16 TB (pay-as-you-go by the GB)</li><li>Connection pooling</li><li>High availability options</li><li>Dedicated support</li><li>Virtual Private Cloud peering</li><li>Production-grade SLAs</li></ol></li><li>The Free Plan is optimized for experimentation; Performance is optimized for production.</li></ol></li><li><strong>Can I start a Performance trial if I already have a Free Plan?</strong><ol><li>Yes! Every project gets one free trial of Performance or Scale. You can start it at any point, even after creating free services. Your free services remain active during and after the trial.</li></ol></li><li><strong>Does my free trial automatically convert to a Free Plan when my trial expires?</strong><ol><li>If you start with a Performance or Scale trial, here's what happens when it ends:<ol><li>Trial services (on Performance/Scale) are paused, then eventually deleted</li><li>Any free services remain active</li><li>Your account converts to the Free Plan</li><li>You can create up to 2 free services (if you haven't already)</li><li>No charges occur unless you explicitly upgrade</li></ol></li></ol></li><li><strong>Do I keep my free services if I upgrade my Free Plan to Performance or Scale?</strong><ol><li>Yes! Free services are available on all plans. You can have up to 2 free services alongside your paid services.</li></ol></li><li><strong>If I am already a Tiger Data customer, can I also use the free services?</strong><ol><li>Yes! Existing Performance, Scale, and Enterprise customers can create up to 2 free services within their accounts. Use them for testing, sandboxes, or side projects.</li></ol></li><li><strong>Will I have access to free services in my paid plan?</strong><ol><li>Yes. All plans (Free, Performance, Scale, Enterprise) include access to up to 2 free services. They coexist with your development and production databases.</li></ol></li><li><strong>Should I start with the Free Plan or the Free Trial?</strong><ol><li><strong>Start with Free Plan if:</strong><ol><li>You're prototyping or experimenting</li><li>You're not sure what you're building yet</li><li>You want to test Tiger Data without commitment</li></ol></li><li><strong>Start with a Performance/Scale trial if:</strong><ol><li>You're ready to test Tiger Cloud with production-like workloads</li><li>You have large datasets to migrate</li><li>You need higher compute or storage immediately</li><li>You want to evaluate enterprise features</li></ol></li><li>You can always start a trial later. Each project gets one trial, and you choose when to use it.</li></ol></li><li><strong>Is Tiger Fluid Storage available on Performance and Scale plans?</strong><ol><li>No, Tiger Fluid Storage is not available on Performance and Scale plans today.</li></ol></li></ol><hr><p><strong>About the authors</strong></p><p><strong>Hien Phan</strong><br><br>An AI, Data, and Infrastructure Marketing Leader, Hien Phan is the Head of Marketing at Tiger Data. He has led Product, Partner, and Customer Marketing at Pinecone. He and his team launched a game-changing serverless architecture and introduced Pinecone Assistant, marking a significant leap in our product offerings.</p><p>At Amplitude, Hien’s team championed solutions that empowered product and marketing teams to excel in a product-led growth. This role sharpened his ability to drive growth through strategic marketing initiatives, solidifying that brand as an indispensable tool for product experimentation and analytics category.</p><p>Hien lives in the Bay Area with his two lovely dogs and makes a mean roasted chicken.<br></p>]]></content:encoded>
        </item>
    </channel>
</rss>