diff --git a/qdrant-landing/content/documentation/data-synchronization/pgvector-tradeoffs.md b/qdrant-landing/content/blog/pgvector-tradeoffs.md similarity index 78% rename from qdrant-landing/content/documentation/data-synchronization/pgvector-tradeoffs.md rename to qdrant-landing/content/blog/pgvector-tradeoffs.md index fe1c8f1f2..38be7400a 100644 --- a/qdrant-landing/content/documentation/data-synchronization/pgvector-tradeoffs.md +++ b/qdrant-landing/content/blog/pgvector-tradeoffs.md @@ -1,10 +1,19 @@ --- -title: pgvector Tradeoffs -weight: 10 +draft: false +title: "Start with pgvector: Why You'll Outgrow It Faster Than You Think" +short_description: "We analyzed 110+ community threads to test the 'just use pgvector' heuristic. Here are the six conditions that must all hold — and why most apps fail at least two." +description: "We analyzed 110+ community threads from Hacker News and Reddit to test the 'just use pgvector' heuristic. pgvector is a reasonable default, but only when six specific conditions hold simultaneously. Most applications hit its limits sooner than expected." +date: 2026-03-17T00:00:00Z +author: Nathan LeRoy +featured: false +preview_image: /blog/pgvector-tradeoffs/preview_image.png +social_image: /blog/pgvector-tradeoffs/preview_image.png +tags: + - pgvector + - vector-database + - postgres --- -# "Start with pgvector": Why You Might Outgrow It Faster Than You Think - The most common advice in every vector database thread online is some version of "start with pgvector, graduate later." We analyzed 110+ community threads from Hacker News and Reddit to see if the data supports this heuristic. The short answer is that it's more nuanced than it sounds, and most applications will hit its limits sooner than expected. --- @@ -23,7 +32,11 @@ The people giving this advice are usually running Postgres for transactional dat ## Six Conditions That Must All Hold -pgvector is a reasonable default, but only when six specific conditions hold *simultaneously*. +After reading through these 110+ threads, a clear pattern emerged. The developers who are happy with pgvector are more than just lucky. They share a specific set of circumstances. We distilled these into six conditions. When all six hold, pgvector is genuinely the right call: you get vector search without operational overhead, and the tradeoffs don't bite you. + +However, all six need to hold *simultaneously*. The moment one or two fall away, the pain points that dominate these threads start showing up: slow queries under load, broken filtered search, missing hybrid capabilities. These are scenarios most production applications land in within months of shipping. + +Here are the six conditions: **1. Your vector dataset is under ~1M vectors.** The community's empirical ceiling is around 10M, but the comfortable range is much lower. Above 1M you'll start hitting index-build times, memory pressure, and recall degradation under load. @@ -78,8 +91,4 @@ There's a reason the "start with pgvector" advice persists despite these limitat This is a legitimate concern, and we don't want to dismiss it. However, it's also a solved problem with well-known patterns, ranging from simple dual-writes for prototypes to transactional outbox patterns for production, to full CDC pipelines for high-throughput systems. -If you've decided you need a dedicated vector store, don't let sync anxiety push you back to pgvector. This guide walks through three progressively robust sync architectures — each with working code, failure mode analysis, and clear guidance on when to use which: - -1. **[Dual-Writes](/documentation/data-synchronization/dual-writes/)** — simple application-level sync for prototypes -2. **[Transactional Outbox](/documentation/data-synchronization/transactional-outbox/)** — production-grade at-least-once delivery -3. **[Change Data Capture](/documentation/data-synchronization/change-data-capture/)** — infrastructure-level sync for high-throughput systems +If you've decided you need a dedicated vector store, don't let sync anxiety push you back to pgvector. Our [Postgres-Qdrant Data Synchronization guide](/documentation/data-synchronization/) walks through three progressively robust sync architectures — each with working code, failure mode analysis, and clear guidance on when to use which. \ No newline at end of file diff --git a/qdrant-landing/content/documentation/data-synchronization/_index.md b/qdrant-landing/content/documentation/data-synchronization/_index.md index 6e3a108c3..940ee9771 100644 --- a/qdrant-landing/content/documentation/data-synchronization/_index.md +++ b/qdrant-landing/content/documentation/data-synchronization/_index.md @@ -1,8 +1,8 @@ --- -title: Data Synchronization -weight: 25 +title: Keeping Data in Sync +weight: 33 is_empty: false -partition: qdrant +partition: build --- # Keeping Postgres and Qdrant in Sync @@ -11,7 +11,7 @@ If you've migrated your vectors to Qdrant but still use Postgres as your source This section covers three progressively robust sync architectures — from simple application-level dual-writes to production-grade Change Data Capture — with working code, failure mode analysis, and clear guidance on when to use each. -Not sure if you need a dedicated vector store alongside Postgres? Read [pgvector Tradeoffs](/documentation/data-synchronization/pgvector-tradeoffs/) to understand the six conditions under which pgvector is sufficient — and when you'll outgrow it. +Not sure if you need a dedicated vector store alongside Postgres? Read our [pgvector tradeoffs blog post](/blog/pgvector-tradeoffs/) to understand the six conditions under which pgvector is sufficient — and when you'll outgrow it. ## Three Tiers of Sync diff --git a/qdrant-landing/content/documentation/dl-migrate.md b/qdrant-landing/content/documentation/dl-migrate.md index c53da04f2..a6a2fffb7 100644 --- a/qdrant-landing/content/documentation/dl-migrate.md +++ b/qdrant-landing/content/documentation/dl-migrate.md @@ -2,10 +2,10 @@ #Delimiter files are used to separate the list of documentation pages into sections. title: "Migrate to Qdrant" type: delimiter -weight: 22 # Change this weight to change order of sections +weight: 30 # Change this weight to change order of sections sitemapExclude: True _build: publishResources: false render: never -partition: qdrant +partition: build --- diff --git a/qdrant-landing/content/documentation/headless/content/tutorials/migrate.md b/qdrant-landing/content/documentation/headless/content/tutorials/migrate.md index c7a456442..a72b820cf 100644 --- a/qdrant-landing/content/documentation/headless/content/tutorials/migrate.md +++ b/qdrant-landing/content/documentation/headless/content/tutorials/migrate.md @@ -7,5 +7,4 @@ | [From Elasticsearch](/documentation/migrate-to-qdrant/from-elasticsearch/) | Migrate dense vectors from Elasticsearch. | CLI | 15m | Intermediate | | [From pgvector](/documentation/migrate-to-qdrant/from-pgvector/) | Migrate from PostgreSQL pgvector tables. | CLI | 15m | Intermediate | | [Migration Verification](/documentation/migration-verification/) | Verify data integrity and search quality. | Python | 1h+ | Intermediate | -| [pgvector Tradeoffs](/documentation/data-synchronization/pgvector-tradeoffs/) | When to outgrow pgvector for Qdrant. | None | 15m | Beginner | -| [Postgres-Qdrant Sync](/documentation/data-synchronization/) | Keep Postgres and Qdrant in sync. | Python | 30m | Intermediate | +| [Keeping Data in Sync](/documentation/data-synchronization/) | Keep your source of truth and Qdrant in sync. | Python | 30m | Intermediate | diff --git a/qdrant-landing/content/documentation/migrate-to-qdrant/_index.md b/qdrant-landing/content/documentation/migrate-to-qdrant/_index.md index 44790395c..01905fe47 100644 --- a/qdrant-landing/content/documentation/migrate-to-qdrant/_index.md +++ b/qdrant-landing/content/documentation/migrate-to-qdrant/_index.md @@ -1,8 +1,8 @@ --- title: Migration Tool -weight: 23 +weight: 31 is_empty: false -partition: qdrant +partition: build --- # Migrate to Qdrant @@ -53,4 +53,4 @@ These flags apply to all source types: Once your data is in Qdrant, verify that everything arrived correctly: - **[Migration Verification Guide](/documentation/migration-verification/)** — a structured framework covering data integrity checks and search quality validation. -- **[Data Synchronization](/documentation/data-synchronization/)** — if you're running Postgres alongside Qdrant, learn how to keep them in sync. +- **[Keeping Data in Sync](/documentation/data-synchronization/)** — if you're running a relational database alongside Qdrant, learn how to keep them in sync. diff --git a/qdrant-landing/content/documentation/migration-verification/_index.md b/qdrant-landing/content/documentation/migration-verification/_index.md index 21be674db..f6782a1a7 100644 --- a/qdrant-landing/content/documentation/migration-verification/_index.md +++ b/qdrant-landing/content/documentation/migration-verification/_index.md @@ -1,8 +1,8 @@ --- title: Migration Verification -weight: 24 +weight: 32 is_empty: false -partition: qdrant +partition: build --- # Migration Verification Guide diff --git a/qdrant-landing/static/blog/pgvector-tradeoffs/preview_image.png b/qdrant-landing/static/blog/pgvector-tradeoffs/preview_image.png new file mode 100644 index 000000000..57eb40551 Binary files /dev/null and b/qdrant-landing/static/blog/pgvector-tradeoffs/preview_image.png differ