<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2" -->

---
title: This New Postgres Feature Is Crazy Powerful | daily.dev
description: Postgres 19 introduces several powerful new features. The headline addition is native graph query support via SQL/PGQ, allowing developers to define a property...
canonical: https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: This New Postgres Feature Is Crazy Powerful | daily.dev
og:description: Postgres 19 introduces several powerful new features. The headline addition is native graph query support via SQL/PGQ, allowing developers to define a property...
og:url: https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2
og:image: https://api.daily.dev/og/posts/KT2rmgBn2.png
og:image:alt: This New Postgres Feature Is Crazy Powerful
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# This New Postgres Feature Is Crazy Powerful

**[YouTube](https://daily.dev/sources/youtube)** · 7 min read · 1 upvotes · 0 comments

## Summary

Postgres 19 introduces several powerful new features. The headline addition is native graph query support via SQL/PGQ, allowing developers to define a property graph over existing tables and traverse relationships using graph syntax instead of complex multi-table joins — without changing the underlying schema. Other notable features include: `ON CONFLICT DO SELECT` for atomic upsert-and-return in a single query, a built-in `REPACK` command (with `CONCURRENTLY` support) to reclaim disk space without locking tables, query plan pinning via `pg_plan_advice`, JIT compilation disabled by default, parallel vacuum index cleanup, automatic GROUP BY inference, and native JSON export via COPY. Beta 2 is available, with final release expected around September or October.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=_0A2BnRYVCo>

## Questions this post answers

### How does ON CONFLICT DO SELECT work in Postgres 19 and how is it different from ON CONFLICT DO NOTHING?

ON CONFLICT DO SELECT in Postgres 19 lets you insert a row and, if a conflict occurs, return the existing row — all in a single atomic statement. Previously, ON CONFLICT DO NOTHING returned nothing when a row already existed, requiring a follow-up SELECT that made the operation non-atomic. The new syntax also supports FOR UPDATE to lock the returned row within the same statement.

_Developers upgrading Postgres codebases track changes like this on daily.dev._

### Does Postgres 19 native graph support replace Neo4j or a dedicated graph database?

Postgres 19 graph support is not a replacement for dedicated graph databases like Neo4j when you need graph-native storage and traversal performance. It is best suited for simplifying complex multi-table joins using graph syntax over existing relational schemas. You define a property graph pointing at existing tables — vertex tables hold data, edge tables define relationships — and query them without schema changes.

_Teams deciding between Postgres and a dedicated graph database can follow the trade-off discussion on daily.dev._

### What is the REPACK feature in Postgres 19 and how does it differ from VACUUM FULL?

REPACK in Postgres 19 rewrites an entire table into a fresh file, reclaiming dead space and returning it to the OS — something VACUUM alone cannot do. Unlike VACUUM FULL, which locks the table for the entire rewrite, REPACK supports a CONCURRENTLY keyword that keeps the table readable and writable during the operation. A caveat: you need free disk space equal to a second copy of the table and its indexes.

_Postgres operators managing large tables can find related tuning discussions on daily.dev._

## Similar posts on daily.dev

- [PostgreSQL 19 Beta Introduces SQL Graph Queries and Concurrent Table Repacking](https://daily.dev/posts/postgresql-19-beta-introduces-sql-graph-queries-and-concurrent-table-repacking-2adopzbmz) · InfoQ · 91 upvotes · 4 comments
- [SQL/PGQ in PostgreSQL 19: Graph Queries Without the Graph Database](https://daily.dev/posts/sql-pgq-in-postgresql-19-graph-queries-without-the-graph-database-jjw0uthjc) · Planet PostgreSQL · 14 upvotes · 2 comments

---

Tags: [#backend](https://daily.dev/tags/backend), [#sql](https://daily.dev/tags/sql), [#postgresql](https://daily.dev/tags/postgresql)

[View this post on daily.dev](https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"This New Postgres Feature Is Crazy Powerful","url":"https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2"},"datePublished":"2026-08-11T07:43:47.310Z","dateModified":"2026-08-16T05:31:22.171Z","description":"Postgres 19 introduces several powerful new features. The headline addition is native graph query support via SQL/PGQ, allowing developers to define a property...","image":"https://i.ytimg.com/vi/_0A2BnRYVCo/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/_0A2BnRYVCo/sddefault.jpg","isAccessibleForFree":true,"articleSection":"YouTube","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"YouTube","logo":"https://media.daily.dev/image/upload/s--W5zMumpP--/f_auto/v1725350181/logos/youtube","url":"https://daily.dev/sources/youtube"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"backend,sql,postgresql","timeRequired":"PT7M","video":{"@type":"VideoObject","name":"This New Postgres Feature Is Crazy Powerful","description":"Postgres 19 introduces several powerful new features. The headline addition is native graph query support via SQL/PGQ, allowing developers to define a property...","thumbnailUrl":"https://i.ytimg.com/vi/_0A2BnRYVCo/sddefault.jpg","uploadDate":"2026-08-11T07:43:47.310Z","duration":"PT7M","url":"https://api.daily.dev/r/KT2rmgBn2","embedUrl":"https://www.youtube.com/embed/_0A2BnRYVCo"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"YouTube","item":"https://daily.dev/sources/youtube"},{"@type":"ListItem","position":3,"name":"This New Postgres Feature Is Crazy Powerful"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/this-new-postgres-feature-is-crazy-powerful-kt2rmgbn2#faq","mainEntity":[{"@type":"Question","name":"How does ON CONFLICT DO SELECT work in Postgres 19 and how is it different from ON CONFLICT DO NOTHING?","acceptedAnswer":{"@type":"Answer","text":"ON CONFLICT DO SELECT in Postgres 19 lets you insert a row and, if a conflict occurs, return the existing row — all in a single atomic statement. Previously, ON CONFLICT DO NOTHING returned nothing when a row already existed, requiring a follow-up SELECT that made the operation non-atomic. The new syntax also supports FOR UPDATE to lock the returned row within the same statement. Developers upgrading Postgres codebases track changes like this on daily.dev."}},{"@type":"Question","name":"Does Postgres 19 native graph support replace Neo4j or a dedicated graph database?","acceptedAnswer":{"@type":"Answer","text":"Postgres 19 graph support is not a replacement for dedicated graph databases like Neo4j when you need graph-native storage and traversal performance. It is best suited for simplifying complex multi-table joins using graph syntax over existing relational schemas. You define a property graph pointing at existing tables — vertex tables hold data, edge tables define relationships — and query them without schema changes. Teams deciding between Postgres and a dedicated graph database can follow the trade-off discussion on daily.dev."}},{"@type":"Question","name":"What is the REPACK feature in Postgres 19 and how does it differ from VACUUM FULL?","acceptedAnswer":{"@type":"Answer","text":"REPACK in Postgres 19 rewrites an entire table into a fresh file, reclaiming dead space and returning it to the OS — something VACUUM alone cannot do. Unlike VACUUM FULL, which locks the table for the entire rewrite, REPACK supports a CONCURRENTLY keyword that keeps the table readable and writable during the operation. A caveat: you need free disk space equal to a second copy of the table and its indexes. Postgres operators managing large tables can find related tuning discussions on daily.dev."}}]}
```

