Postgres 19 में नया क्या है: बीटा रिलीज़ का गहन विश्लेषण
(snowflake.com)- बड़े पैमाने के production databases के लिए
REPACK CONCURRENTLYcore में built-in है, और SQL property graph queries, logical replication, VACUUM, performance समेत सभी क्षेत्रों में व्यापक सुधारों वाला beta release - partition merge/split support और sequence value synchronization से चल रहे operations के दौरान design changes और data movement काफी आसान हो जाते हैं
- autovacuum में parallel workers और priority scoring system पेश किए गए हैं, जिससे maintenance tasks की throughput और visibility बेहतर होती है
- SQL/PGQ की शुरुआत से relational model छोड़े बिना मौजूदा data को graph के रूप में query किया जा सकता है
- किसी एक headline feature के बजाय breadth ही मुख्य बात है; applications, operations, performance और extensibility सभी में एक साथ प्रगति
REPACK अब built-in
- लंबे समय से चल रहे operational environments में table bloat reclaim करने, tables rewrite करने और data reorganize करने के दौरान
VACUUM FULLयाCLUSTERके साथ आने वाले locks से बचने की जरूरत बार-बार सामने आती है- इस समस्या को हल करने वाला extensions ecosystem मौजूद था, और खास तौर पर
pg_repackइस gap को भरता रहा
- इस समस्या को हल करने वाला extensions ecosystem मौजूद था, और खास तौर पर
- Postgres 19
REPACKcommand को core में लाता है, जिसमेंREPACK CONCURRENTLYsupport भी शामिल है- यह ऐसा feature माना जा रहा है जिस पर production users, average release notes reader की अपेक्षा से ज्यादा ध्यान देंगे
partitioning की practical usefulness मजबूत
- Postgres 19 partition merge/split support जोड़ता है
- partitioning strategy अक्सर अधूरी जानकारी के आधार पर चुनी जाती है, और workload, retention period या data growth rate बदलने पर कुछ partitions बहुत बड़े या जरूरत से ज्यादा छोटे हो सकते हैं
- split/merge संभव होने से शुरुआत से सब कुछ rebuild किए बिना design को समय के साथ evolve करने की गुंजाइश मिलती है
- Q1 और Q2 partitions को एक single partition में merge करना:
ALTER TABLE customer_orders MERGE PARTITIONS (orders_2026_q1, orders_2026_q2) INTO orders_2026_h1; - Q3 partition को monthly units में split करने वाले
SPLIT PARTITIONका example दिया गया है
- Q1 और Q2 partitions को एक single partition में merge करना:
logical replication की maturity
- logical replication migration, upgrades, reporting systems, data movement, selective replication, high availability और operational workflows के लिए उपयोगी है
- सबसे बड़ा सुधार sequence value synchronization है, जिससे subscriber publisher से बेहतर तरीके से match करता है
- sequence state के बिना replication करने पर data तो move हो जाता है, लेकिन cutover के बाद next generated ID mismatch होने की समस्या आती है
- publication में
ALL SEQUENCESsupport, sequence sync error reporting, और sequence-related subscription refresh behavior में सुधार जोड़े गए हैं
- publish करते समय सभी tables publish करके उनमें से कुछ को exclude करने के लिए
EXCEPTclause इस्तेमाल किया जा सकता है - जरूरत पड़ने पर
wal_level = replicalogical replication को automatically enable करता है, और actual behavior report करने वाला नयाeffective_wal_levelconfiguration mistakes कम करता है और visibility बढ़ाता है
ज्यादा smart और ज्यादा visible autovacuum
- autovacuum parallel vacuum workers का उपयोग कर सकता है, और इसे global तथा table-level पर control किया जा सकता है
- global setting का example:
ALTER SYSTEM SET autovacuum_max_parallel_workers = 4;
- global setting का example:
- tables किस order में vacuum होंगे, इसे control करने वाला नया scoring system पेश किया गया है, जिससे कौन-सा table सबसे urgent है इसका priority decision बेहतर होता है
- per-table weights adjust करने का example: insert-based vacuum urgency 3.0, सामान्य update/delete vacuum urgency 0.5
- नया
pg_stat_autovacuum_scoresview decision-making process की visibility देता है- vacuum/analyze progress views की detailed information,
VACUUM VERBOSEऔर autovacuum logs में memory usage/parallelism, और अलगlog_autoanalyze_min_durationजोड़कर maintenance observability मजबूत की गई है
- vacuum/analyze progress views की detailed information,
SQL property graph queries की शुरुआत
- SQL/PGQ (SQL property graph queries) जोड़ा गया है
- vertex/edge model के लिए उपयोगी workloads के रूप में fraud detection, recommendations, network analysis, permission graphs, supply chain और org charts जैसे use cases बताए गए हैं
- property graph definition example:
CREATE PROPERTY GRAPH store_graphसे VERTEX TABLES और EDGE TABLES specify करना
- relational model छोड़े बिना, पहले से मौजूद data को query करने का एक और तरीका जोड़ने वाला approach
- यह उसी तरह की दिशा है जैसे JSONB, full-text search और extensions ने मौजूदा architecture बदलने के लिए मजबूर नहीं किया था
- developer perspective से separate datastore, synchronization path, operational surface area या रात 2 बजे debug करने वाली चीजें बढ़ाए बिना graph-style queries इस्तेमाल की जा सकती हैं
COPY अब ज्यादा उपयोगी
COPY FROMmultiple header lines skip करने का support करता है- top पर extra metadata lines जोड़ने वाले vendor/internal tools/export CSV को process करने में उपयोगी
COPY FROMमेंON_ERROR SET_NULLजोड़ा गया है, जिससे invalid input values को null पर set किया जा सकता है; यह "पूरा load fail" और "पहले से cleansing" के बीच एक विकल्प देता है- price column में 'N/A' और 'MISSING' मिले हुए file को load करने का example दिया गया है
COPY TOsingle JSON array सहित JSON format output दे सकता है, और partitioned tables को भी directly output कर सकता है (पहलेCOPY (SELECT ...)की जरूरत थी)- table को valid JSON array के रूप में export करने का example:
WITH (FORMAT JSON, ARRAY true)
- table को valid JSON array के रूप में export करने का example:
SQL convenience improvements
GROUP BY ALLnon-aggregate, non-window target list expressions को automatically group करता है, जिससे exploratory SQL और reporting queries ज्यादा साफ तरीके से लिखी जा सकती हैं- window functions में
IGNORE NULLS·RESPECT NULLSsupportlead,lag,first_value,last_value,nth_valueमें जोड़ा गया है INSERT ... ON CONFLICT DO SELECT ... RETURNINGजोड़कर upsert में conflicting row को ज्यादा directly return किया जा सकता हैUPDATE·DELETE FOR PORTION OFजोड़कर temporal operations के लिए support जारी है, जिसमें extendedRANDOM()time function शामिल है
पूरे stack में performance improvements
- planner और executor में anti-join, semi-join, constant folding, append paths में incremental sort, join से पहले aggregation processing, join selectivity calculation, function statistics आदि में कई सुधार
- Postgres common query shapes को बेहतर पहचानने और unnecessary work घटाने की दिशा में आगे बढ़ रहा है
- कुछ aggregation processing join से पहले की जाती है, जिससे processed rows की संख्या घटती है
NOT INऔरLEFT JOINके और ज्यादा cases efficient anti-join में बदलते हैं- Memoize की
EXPLAINvisibility बेहतर हुई, radix sort से sorting performance सुधरी, foreign key constraint checks तेज हुए, औरCOPY FROMtext/CSV input में SIMD instructions का उपयोग हुआ
- कई मामलों में application code बदले बिना सिर्फ upgrade से बेहतर behavior मिल सकता है
Postgres 19 क्यों महत्वपूर्ण है
- कोई single feature नहीं, बल्कि breadth खास तौर पर नजर आती है
- application developers के लिए: graph queries, बेहतर SQL syntax, window function improvements, बेहतर upsert behavior
- operators के लिए:
REPACK CONCURRENTLY, improved autovacuum, बेहतर monitoring, online checksum changes, replication visibility का विस्तार - performance-focused users के लिए: planner improvements, SIMD improvements, async I/O visibility, तेज foreign key checks, improved sorting
- Postgres पर build करने वालों के लिए: new hooks, planner advice modules, extension improvements, FDW statistics retrieval, extension ecosystem में लगातार investment
- यह single workload या persona के लिए नहीं, बल्कि application, operations, analytics और extensible database/platform के रूप में एक साथ evolve हो रहा है
- अभी GA नहीं है, इसलिए testing का यही समय है — applications चलाएं, migrations test करें, extensions check करें, key query plans verify करें, logical replication और maintenance workflows inspect करें
1 टिप्पणियां
Hacker News टिप्पणियां
मैंने real-world projects में Postgres, Oracle, MS SQL Server, MySQL इस्तेमाल किए हैं, और SQLite को गहराई से नहीं इस्तेमाल किया, लेकिन उसे एक बेहतरीन विकल्प मानता हूं
आजकल अपने लिए मैं Oracle और MySQL/MariaDB से हमेशा बचता हूं
Postgres शानदार है, लेकिन काश इसमें हल्के connections और synchronously refreshed materialized views होते। connection poolers स्थिति सुधारते हैं, फिर भी प्रति concurrent connection memory usage अब भी असामान्य रूप से बड़ा है, और SQL Server के indexed views जैसी सुविधा complex data situations में elegant, trivial और हमेशा सही implementation संभव बनाती है
SQL Server महंगा हो सकता है, लेकिन कई मामलों में अपनी कीमत वसूल है, और अगर data store ध्यान से चुना जाए तो भविष्य की बहुत-सी सिरदर्दियां कम हो सकती हैं
अगर free provider इस्तेमाल करना है तो SQLite को हराना मुश्किल है, और यह आज ज्यादातर use cases संभाल लेता है। हालांकि backup, replication और tooling के मामले में यह लड़खड़ाने लगता है। अगर system availability और disaster recovery की जिम्मेदारी मेरी हो, तो risk कम करने के लिए पैसा खर्च करने में मुझे झिझक नहीं होती
अगर थोड़ा भी पैसा देना है तो मैं पूरा आगे जाता हूं। MSSQL के आसपास developer experience बेजोड़ है, और मेरे हिसाब से SSMS और Visual Studio के SQL projects आजकल के Entity Framework जैसी चीजों से कहीं बेहतर हैं। RedGate जैसे third-party tools जोड़ दें तो यह लाखों डॉलर के consulting packages की जगह ले सकता है
मैं नया Oracle या DB2 server खड़ा करने की सलाह नहीं दूंगा, लेकिन अगर पहले से मौजूद है तो उसे हटाने के लिए refactor करने का मैं अंत तक विरोध करूंगा। ऐसी databases के साथ आम तौर पर बहुत सारी डरावनी कहानियां जुड़ी होती हैं, और उन अजीब side effects को नए engine में दोहराने की कोशिश में, अगर कोई और विकल्प न हो, तो business ही टूट सकता है
DBA के तौर पर जब आप भारी DBA tasks बहुत करते हैं, तो Postgres, SQL Server से अलग ही league में है। Postgres Linux-native और open source है, इसलिए flexibility, internal observability और operability में SQL Server से तुलना ही नहीं है
मौजूदा tech landscape में SQL Server मेरे हिसाब से व्यावहारिक रूप से dead है। इसे इस्तेमाल करने वाली companies बस legacy Windows-केंद्रित organizations हैं, और वे भी धीरे-धीरे कम हो रही हैं
इसके साथ deferred refresh option भी अच्छा होता। इसमें आखिरी refresh के बाद बदले records को ही ध्यान में रखकर कई updates एक साथ process किए जाते हैं, हालांकि Oracle तकनीकी रूप से यह कैसे करता है, मुझे ठीक से नहीं पता। यह feature लगभग हर open source OLTP database की तुलना में शानदार addition होगा
OrioleDB project को लेकर भी मैं सच में उत्सुक हूं: https://github.com/orioledb/orioledb/releases
कुछ साल पहले temporary table जैसी जगह पर लगातार बहुत सारे random inserts/deletes हो रहे थे, जिससे vacuum के कारण काफी परेशानी हुई। मैंने बदलावों को RAM में ज्यादा इकट्ठा करके फिर table में flush करने के तरीके से हल किया, ताकि प्रति page बदली rows की संख्या बढ़े, लेकिन अच्छा balance खोजने में काफी जूझना पड़ा
science field में 15 साल से ज्यादा Postgres इस्तेमाल करने के अनुभव से, PostgreSQL में column-oriented storage न होना मुझे चिंता में डालने लगा है
datasets जैसे-जैसे बड़े हो रहे हैं, PG storage की सीमाएं और ज्यादा महसूस हो रही हैं। cetus जैसे कई extensions यह functionality दे सकते हैं, लेकिन तब उस extension के आगे भी supported रहने पर निर्भर रहना पड़ता है और complexity भी बढ़ती है
शुरुआत में लगा कि Postgres tables को storage के रूप में और Postgres executor को इस्तेमाल करने में intrinsic overhead बहुत ज्यादा होगा, इसलिए अगर Timescale performance तक पहुंच जाए तो काफी अच्छा होगा। मुझे नहीं लगा था कि यह dedicated analytics database के करीब पहुंच सकता है
लेकिन project आगे बढ़ने के साथ performance लगातार बेहतर हुई, और अब मैं Postgres + extension से analytics workloads चलाने के पक्ष में मजबूती से हूं
यह Apple के washing machines न बेचने पर चिंता करने जैसा है
आजकल कई companies अपनी main app में relational database के साथ key-value database या document store भी साथ में इस्तेमाल करती हैं
समझ नहीं आता कि यह बात क्यों नहीं आई कि PostgreSQL 19 SQL:2011 standard पर आधारित native application-time temporal data support ला रहा है: https://www.depesz.com/2026/04/02/waiting-for-postgresql-19-...
_archiveshadow table को मैन्युअली जोड़कर implement किया जाता था: https://www.postgresql.org/docs/current/tcn.htmlअगर यह native हो जाए, तो ज़्यादातर PostgreSQL implementations की तरह यह सच में शानदार होगा
https://news.ycombinator.com/item?id=48413655
समझ नहीं आ रहा कि यह article LLM training data में over-sampled style इस्तेमाल कर रहा है, या इसे polish करने में बहुत AI का इस्तेमाल हुआ है। मेरा झुकाव दूसरी तरफ है
Claude का “X को लंबे समय से करते आए व्यक्ति के रूप में” जैसे sentence लिखना मुझे एक तरह का alignment failure लगता है। LLM को ऐसा नहीं लिखना चाहिए जैसे उसके पास personal experience हो। training data में इंसान इस तरह बोले होंगे, लेकिन सिर्फ statistically plausible token sequence होने के बावजूद LLM को ऐसे life experience का दावा नहीं करना चाहिए जो उसके पास हैं ही नहीं
COPY और logical replication improvements पसंद आए। अभी मैं PG database को sidecar Databasus instance में back up करता हूँ, लेकिन वह पूरे backend + DB + Caddy से भी भारी है
नीचे LLM style को लेकर शिकायत है
“यही अपने-आप बताता है: users की असली जरूरत थी, और ecosystem ने वह gap भर दिया”, “यह simple दिखता है, लेकिन real operational problem solve करता है”, “यह दुनिया नहीं बदलता, लेकिन रोज़मर्रा के data workflows को बेहतर बनाता है” जैसे वाक्य पढ़ने पड़ें, तो अगर Orwell आज जीवित होते, शायद वे English illiteracy घोषित करके Klingon सीख लेते
graph database feature दिलचस्प लगता है, लेकिन
GRAPH_TABLEsyntax बहुत ही भयानक हैSELECT customer_name FROM GRAPH_TABLE (myshop MATCH (c IS customers)-[IS customer_orders]->(o IS orders WHERE o.ordered_when = current_date) COLUMNS (c.name AS customer_name));यह neo4j की याद दिलाता है, लेकिन 2026 में किसी serious tool को हूबहू copy करने लायक चीज़ वह नहीं है
अंत में असली सवाल speed का है। row-level security बहुत उपयोगी feature है, लेकिन Postgres implementation से कोई serious चीज़ बनाना reckless है। planner गड़बड़ा जाता है और हर row पर match करके performance बर्बाद कर देता है
यह Neo4J की Cypher language से निकला है और अब SQL standard का हिस्सा बन चुका SQL/PGQ है
PostgreSQL में row compression के साथ-साथ block compression भी आ जाए तो अच्छा होगा। सिर्फ row compression का असर बहुत limited है
ZFS pool में data रखकर block compression चालू किया जा सकता है, लेकिन native support हो तो setup का बोझ कम होगा और performance भी बेहतर हो सकती है
GROUP BY ALL के बारे में सोचें तो यह सच में बहुत logical लगता है, लेकिन पहले कभी ध्यान में नहीं आया था, इसलिए मज़ेदार है
DevOps के करीब वाले नजरिए से, अच्छा होगा अगर PostgreSQL आखिरकार consecutive major versions के बीच in-place upgrade support करे
ज़्यादातर distributions
pg_upgradeके लिए पुराने और नए version को साथ चलाने वाली झंझट वाली बात संभाल सकते हैं, लेकिन Docker इस्तेमाल करने पर नए major version में upgrade करना सचमुच बहुत painful होता हैGROUP BY ALL आने से खुशी है। मेरी जानकारी में यह DuckDB द्वारा introduced concept है
DuckDB docs में भी लिखा है कि कई features पहले DuckDB में introduced हुए, और
GROUP BY ALLजैसे features बाद में दूसरे systems ने adopt किएhttps://duckdb.org/docs/lts/sql/dialect/friendly_sql