Postgres का उपयोग करने के तरीके
(github.com/Olshansk)- यह रिपॉज़िटरी “Keep It Simple Stupid, just use postgres” दिशा के तहत, Postgres को विभिन्न उपयोगों में काम में लेने वाले टूल और उदाहरणों को एकत्र कर दिखाती है
- यह सूची Amazing CTO के Postgres for Everything लेख और @cpursley के GitHub gist से प्रेरित है, और Postgres पर नए टूल व उपयोग के तरीके लगातार सामने आने की वजह से इसे बनाए रखा जाता है
- इसका दायरा cron jobs, embeddable Postgres, message queues, analytics, GIS, audit logs, access control, search, time series, NoSQL, graph, HTTP, API, CDC, caching, testing, migration, performance tuning, monitoring, extension, UI, CLI, visualization, package management, security, और financial ledger तक फैला है
- हर आइटम को Postgres extensions, libraries, API platforms, लेखों और tools के लिंक-केंद्रित रूप में व्यवस्थित किया गया है, और कुछ DuckDB, pgvector, PostGIS, PgBouncer, GraphQL, CDC जैसी विशिष्ट तकनीकों से जुड़े हैं
- जो उपयोगकर्ता किसी खास code snippet, tool, या project को उदाहरण के रूप में जोड़ना चाहते हैं, उन्हें लिंक के साथ PR खोलना होगा और नया pull request template इस्तेमाल करना होगा
रिपॉज़िटरी का उद्देश्य और रखरखाव का तरीका
- Postgres for Everything रिपॉज़िटरी का लक्ष्य यह दिखाना है कि Postgres को कई तरह के उपयोगों में कैसे इस्तेमाल किया जा सकता है
- यह रिपॉज़िटरी निम्नलिखित स्रोतों से प्रेरित है
- Postgres पर नए tools या नए उपयोग के तरीके लगातार आते रहते हैं, इसलिए इसे उन्हें ट्रैक करने की जगह के रूप में बनाए रखा जाता है
- यदि आपके पास अन्य उदाहरण हैं, तो आप PR जमा कर सकते हैं
- यदि आप code snippets, tools, या projects दिखाना चाहते हैं, तो लिंक के साथ PR खोलें और pull request template का उपयोग करें
पढ़ने की सामग्री और उदाहरण लेख
- इसमें Postgres scalability, patterns, database functions के उपयोग, PostgreSQL optimization और features पर लेख शामिल हैं
कार्य निष्पादन, embedding, queue
-
Cron Jobs
-
Embeddable Postgres
-
Message Queues
- tembo-io/pgmq
- SKIP LOCKED
- sequinstream/sequin: Postgres rows और changes को Kafka, SQS जैसे streaming platforms और queues में भेजने वाला CDC tool
- janbjorge/pgqueuer: PostgreSQL का उपयोग करने वाली Python job queue library
- smartpricing/queen: independent FIFO partitions, Kafka-style consumer groups, और exactly-once delivery देने वाली PostgreSQL-आधारित message queue
analytics, maps, audit, permissions
-
Analytics
- paradedb/pg_analytics: Postgres में DuckDB-आधारित data lake analytics प्रदान करता है
- duckdb/pg_duckdb: DuckDB के लिए आधिकारिक Postgres extension
- BemiHQ/BemiDB: analytics के लिए optimized Postgres read replica
- Mooncake-Labs/pg_mooncake: Postgres के भीतर columnar storage और DuckDB vectorized execution जोड़ने वाला extension
- ClickHouse/pg_clickhouse: SQL rewrite के बिना PostgreSQL में ClickHouse analytics queries चलाता है
-
GIS & Mapping
-
Audit Logs
- supabase/supa_audit
- pgMemento/pgMemento
- pgaudit/pgaudit
- BemiHQ/Bemi: PostgreSQL data changes को अपने आप ट्रैक करता है
-
Access Control & Authorization
सर्च, टाइम सीरीज़, कॉलमनर, NoSQL, ग्राफ
-
Full Text Search
- Postgres Full Text Search: संबंधित लिंक का संग्रह
- pg_search: BM25 का उपयोग करने वाला Postgres फुल-टेक्स्ट सर्च
- plpgsql_bm25: PL/pgSQL में इम्प्लीमेंट किया गया BM25 सर्च
-
Vector Search
- pgvector/pgvector
- tensorchord/VectorChord: PostgreSQL के लिए वेक्टर similarity search एक्सटेंशन, जिसका लक्ष्य scalability, high performance और disk efficiency है
- timescale/pgai: pgvector-आधारित एक्सटेंशन, जो Postgres के अंदर RAG, semantic search और AI application development को सपोर्ट करता है
- timescale/pgvectorscale: pgvector को पूरक करने वाला DiskANN vector index implementation
-
Hybrid Search
- plpgsql_bm25rrf.sql: BM25 और pgvector को Reciprocal Rank Fusion के साथ जोड़ने वाला hybrid search
-
Time Series
- timescale/timescaledb: टाइम सीरीज़ और events के लिए PostgreSQL++
- tembo-io/pg_timeseries: PostgreSQL के लिए open source time-series एक्सटेंशन
-
Column Oriented
- paradedb/paradedb: search और analytics के लिए Postgres
- pg_duckdb: Postgres के अंदर DuckDB column storage
-
NoSQL
- JSON Types: PostgreSQL में JSON के लिए native support
- Using JSONB in PostgreSQL: PostgreSQL में JSON data को store और index करने के तरीके
-
Graph Data
- Apache Age: PostgreSQL के लिए graph database, जो relational database में graph data processing और analytics capabilities प्रदान करता है
बाहरी डेटा, HTTP, API, GraphQL, CDC
-
Foreign Data
-
HTTP
-
API Platforms
- PostgREST: मौजूदा PostgreSQL database से RESTful API बनाना
- Hasura GraphQL Engine: metadata-आधारित API platform
-
GraphQL and Alternative Query Languages
- PostGraphile: PostgreSQL के लिए auto-generated GraphQL API
- supabase/pg_graphql: एक single SQL function के जरिए GraphQL queries सक्षम करने वाला PostgreSQL एक्सटेंशन
- dosco/graphjin: GraphQL को अपने-आप SQL query में बदलता है
- kaspermarstal/plprql: PRQL में functions लिखने के लिए PostgreSQL एक्सटेंशन
-
Events, Replication, CDC
- aws/pgactive: active-active database बनाने के लिए AWS का replication एक्सटेंशन
- xataio/pgstream: DDL changes सहित Postgres replication को output target तक भेजने वाला CDC CLI और library
- electric-sql/electric: Postgres database के Shapes को sync करने वाला HTTP API
- SQL Notify
- debezium/debezium
- 2ndQuadrant/pglogical
कैशिंग, टेस्टिंग, एप्लिकेशन, माइग्रेशन
-
Caching
- tidwall/pogocache: latency और CPU efficiency पर केंद्रित caching layer
- readysettech/readyset
-
Unit Tests
-
HTML & Applications
-
Migrations
- purcell/postgresql-migrations
- Bytebase
- xataio/pgroll
- stripe/pg-schema-diff
- pgschema/pgschema: Postgres के लिए Terraform-स्टाइल declarative schema migration workflow प्रदान करने वाला CLI
परफ़ॉर्मेंस, मॉनिटरिंग, स्केलिंग, UI
-
Performance Tuning
- Supabase Index Advisor
- Dexter
- HypoPG
- pg_hint_plan
- PGHero
- pg_incremental: तेज़ और भरोसेमंद incremental batch processing के लिए extension
- pgassistant: PostgreSQL परफ़ॉर्मेंस को समझने और optimize करने में मदद करने वाला डेवलपर assistant
-
Monitoring
-
Testing
- regresql: PostgreSQL को सपोर्ट करने वाला SQL query regression testing tool
-
Scaling & Storage
- Snowflake-Labs/pg_lake: Postgres को standalone lakehouse system के रूप में इस्तेमाल करता है, और S3 जैसे object storage में मौजूद Iceberg tables के लिए transactions और queries को सपोर्ट करता है
- pgdogdev/pgdog: PostgreSQL sharding को सपोर्ट करने वाला transaction pooler और logical replication manager
- pgbouncer/pgbouncer: PostgreSQL के लिए lightweight connection pooler
- orioledb.com: on-disk और in-memory engines के फ़ायदों को जोड़ने वाला PostgreSQL extension
-
User Interfaces & Dashboards
- Baserow
- NocoDB
- AppSmith
- mathesar-foundation/mathesar: spreadsheet-जैसा interface, जिससे अलग-अलग तकनीकी स्तर के यूज़र Postgres data को देख, एडिट, query और collaborate कर सकते हैं
डेवलपर टूल्स, visualization, package, security, finance
-
CLIs
- dbcli/pgcli: autocomplete और syntax highlighting देने वाला Postgres client
- sosedoff/pgweb: web-आधारित cross-platform PostgreSQL database explorer
- Maxteabag/sqlit: PostgreSQL सहित SQL databases के लिए TUI
-
Visualization
- dr-jts/pg_svg: PostGIS geometry को styled SVG documents में बदलने वाले PostgreSQL functions का संग्रह
- Evidence
- Metabase
- Hopara: manufacturing, IoT, life sciences और data lakes के लिए real-time data visualization platform
- posit-dev/ggsql: Grammar of Graphics पर आधारित declarative data visualization SQL extension
-
Package Management
-
Language Servers
- supabase/postgres-language-server: Postgres के लिए language tools और LSP implementations का संग्रह
-
Data Privacy & Security
- neondatabase/postgresql_anonymizer: PII या व्यावसायिक रूप से संवेदनशील data को सीधे mask या replace करने वाला PostgreSQL extension
-
Financial Ledgers
- pgledger: PostgreSQL में implement किया गया double-entry ledger
-
Miscellaneous
- Very comprehensive list of Postgres tooling
- Unsupported PostgreSQL features in Aurora DSQL: AWS Aurora DSQL में unsupported PostgreSQL features की सूची
1 टिप्पणियां
Hacker News की राय
जब टीम 100 से ज़्यादा engineers तक बढ़ती है, तो एक ही Postgres DB को हर चीज़ के लिए इस्तेमाल न करना बेहतर होता है
आखिरकार ऐसी स्थिति से बचना मुश्किल है जहाँ database ही API बन जाता है
अगर आपके पास ऐसी technical leadership है जो logical और physical boundaries को अच्छी तरह बाँट सके और हर unit को अपना Postgres देते हुए scale कर सके, तो “Postgres for everything” भी एक मज़बूत विकल्प है
लेकिन ऐसे मुश्किल काम को अंजाम देने वाले CTO सोच से भी कम मिले हैं
ज़्यादातर कंपनियाँ 100 से ज़्यादा engineers तक पहुँचती ही नहीं, इसलिए पहले ship करें और ऐसी चिंता बहुत बाद में भी की जा सकती है
असल में users 2 भी नहीं हैं और सिर्फ 1 overworked engineer है, लेकिन server 40 रखे गए हैं और architecture ऐसा है जैसे लाखों engineers और अरबों visitors आने वाले हों—ऐसी कंपनियों को देखकर लगता है कि overengineering ज़िंदगी को और कठिन बना देती है
इन लोगों ने सच में product launch किया है
कई databases में migrate करना और user information को sync करना क्रमिक milestones हैं, हर पल ज़रूरी precondition नहीं
खासकर तब, जब हर customer को single-tenant shard बेचा जाता हो और नतीजतन हर customer को अलग database मिलता हो
जब product अभी domain और बिकने वाले features तक नहीं जानता, तब पहले से logical software boundaries खींच देना काफ़ी जोखिम भरा होता है
यह GraphQL से expose की गई 100 services से कहीं कम fragile हो सकता है
मुझे Postgres बहुत पसंद है, लेकिन team के बाहर के लोगों के लिए database से generate की गई API को सीधे expose करना नहीं करना चाहिए
ऐसा करने पर data को store करने का तरीका बदलने की क्षमता बहुत सीमित हो जाती है
मैंने पहले इस विषय पर लिखा था, और अब भी मेरी राय ज़्यादा नहीं बदली है
ऐसी tight coupling कोई नहीं चाहेगा: https://wundergraph.com/blog/six-year-graphql-recap#generate...
क्या मतलब यह है कि बाद में database column नाम बदलने पर भी API न बदलनी पड़े, इसलिए format A को format B में translate करने के लिए एक पूरी अतिरिक्त layer जोड़नी होगी?
हाल ही में यह जानकर झुंझलाहट हुई कि Postgres indexes skip scan को support नहीं करते
string में null character
\u0000भी नहीं डाला जा सकताशानदार DB है, लेकिन जगह-जगह अजीब gaps हैं
https://wiki.postgresql.org/wiki/Loose_indexscan
https://stackoverflow.com/questions/28813409/are-null-bytes-...
पहली प्रतिक्रिया तो यही है कि null वाले strings को स्वाभाविक रूप से reject कर देना चाहिए
यह भी थोड़ा खटकता है कि cache-जैसे उपयोग के लिए first-class feature नहीं है
unlogged tables काफ़ी उपयोगी हैं और temporary tables भी अच्छे हैं, लेकिन कुल मिलाकर यह झंझटभरा, असहज और वास्तविक ज़रूरत से अलग महसूस होता है
PGQueuer PostgreSQL पर बना Python के लिए एक lightweight job queue है
efficient और safe job processing के लिए यह
SKIP LOCKEDका इस्तेमाल करता है, और simplicity के साथ performance बनाए रखने के लिए minimal design अपनाता हैअगर आप पहले से Postgres इस्तेमाल कर रहे हैं और बिना अतिरिक्त infrastructure के Python-friendly तरीके से background jobs manage करना चाहते हैं, तो इसे देखना ठीक रहेगा: GitHub - https://github.com/janbjorge/pgqueuer
यह उलटी दिशा में dashboard, workflow, और mixed-mode workers जैसी सुविधाएँ शामिल करने की कोशिश करता है
documentation के similar projects section को देखें तो Postgres-आधारित job queues काफ़ी मिलते हैं
SKIP LOCKEDसच में इतना efficient हैअगर बहुत छोटे jobs और लंबे jobs मिले-जुले हों, तो एक लंबे job के खत्म होने तक सैकड़ों या हज़ारों छोटे jobs चल सकते हैं
उस स्थिति में लंबे job वाली rows locked रहती हैं और job table में उन्हें सैकड़ों बार skip किया जाता है
एक साथ लंबे समय तक चलने वाले jobs जितने ज़्यादा होंगे, locked rows को बार-बार skip करने की बर्बादी उतनी बढ़ेगी, इसलिए कम load पर तो यह ठीक हो सकता है, लेकिन अलग “running” table में move करने वाला ढाँचा ज़्यादा efficient हो सकता है
कुछ projects में MariaDB/MySQL से बँधा होने के कारण मैंने हाल में PostgreSQL से तुलना की, और पाया कि JSON, system-versioned temporary tables, और columnar/vector stores जैसी कई expanded features वहाँ भी मौजूद थीं
LISTEN/NOTIFYजैसी सुविधाएँ कम दिखीं, लेकिन कुल मिलाकर यह देखकर हैरानी हुई कि वे काफ़ी आगे तक पहुँच चुके हैंफिर भी, बहुत-सी legacy apps में शायद इन सुविधाओं का लगभग कोई इस्तेमाल नहीं होगा
यह प्रचार भी जोड़ दिया जाए तो अच्छा होगा: https://github.com/jankovicsandras/plpgsql_bm25
यह उन वातावरणों आदि के लिए PL/pgSQL-आधारित ओपन सोर्स BM25 search है जहाँ Rust extension इस्तेमाल नहीं किए जा सकते, और
pgvectorतथा Reciprocal Rank Fusion का उपयोग करने वाली hybrid search भी सपोर्ट करता हैsupabase में भी इसी विषय पर सीधे चर्चा हुई थी
https://github.com/orgs/supabase/discussions/18061#discussio...
सुबह “Amazing CTO की इस पोस्ट से प्रेरणा मिली” यह पंक्ति देखी, और यह पता चलना कि मेरी पोस्ट का संदर्भ दिया गया है, बहुत अच्छा लगा
https://www.amazingcto.com/postgres-for-everything/
Postgres full-text search बहुत सीमित है और user-friendly भी नहीं है
अगर कई सुविधाओं तक पहुँचने के लिए एक ही API हो, तो उसके कई फायदे दिखते हैं
उदाहरण के लिए, message queue के साथ integration करने की बजाय सिर्फ
INSERTकरना पड़े, तो friction काफी कम हो जाता हैvector search भी बिल्कुल समझ में आता है
जब एक ही चीज़ से सब हो सकता है, तो दो database रखने की वजह नहीं बनती
लेकिन Postgres से HTML generate करना थोड़ा सवाल खड़ा करता है
मैंने खुद नहीं किया है, पर इसे user interface बनाने का व्यावहारिक तरीका मानना मुश्किल लगता है
सोच रहा हूँ कि self-hosted Postgres database के लिए कोई अच्छा resource है क्या
मैं कई personal projects के लिए DB server खुद चलाना चाहता हूँ, इसलिए backup, optimization, Docker इस्तेमाल करना चाहिए या नहीं, जैसी tips और best practices अच्छे से जानना चाहता हूँ
यह सोच से ज़्यादा आसान है
https://youtube.com/playlist?list=PLBrWqg4Ny6vVwwrxjgEtJgdre...
in-place upgrade, Litestream के ज़रिए आसान backup जैसी चीज़ें सरल हैं
Postgres major version upgrade ही self-host न करने की मुख्य वजह है, लेकिन शायद इस पर फिर से सोचना चाहिए
pg_dumpअच्छा और सरल हैtuning के लिए postgresqlco.nf बेहतरीन है
https://postgresqlco.nf/tuning-guide
मैं छोटे MVP projects लगातार deploy करना चाहता था, लेकिन Render पर हर project के लिए अलग DB service का खर्च नहीं उठाना चाहता था
https://www.thenile.dev/pricing शायद unlimited databases सपोर्ट करता है
cloud या Kubernetes में तो managed DB इस्तेमाल करना ही बेहतर है, और मेरी समझ में Kubernetes पर DB खुद सेट करना filesystem की वजह से मुश्किल होता है
graph data के लिए Apache Age integrate करने में मैंने लगभग 2 हफ्ते लगा दिए, फिर समझ आया कि project ठहरा हुआ है और हालत खराब है
ऐसी सूचियों पर आँख बंद करके भरोसा नहीं करना चाहिए
अब DGraph से बेहतर नतीजों की उम्मीद है, लेकिन graph databases का ecosystem भी कुछ अस्थिर सा लगता है
शायद कुछ होंगे, लेकिन तुरंत ध्यान में नहीं आते, जबकि ऐसे मामले देखे हैं जहाँ graph DB को वहाँ इस्तेमाल किया गया जहाँ वह सही fit नहीं था
Neo4j की जगह इसे न चुनने की वजह क्या होगी?
जिन graph DB projects में मैं शामिल रहा हूँ, उनमें सभी ने Neo4j ही इस्तेमाल किया; अगर कोई अच्छा alternative है तो जानना चाहूँगा
अगर आप थोड़ा और विस्तार से बता सकें तो अच्छा होगा
आखिरी बार जब देखा था, Apache Age Neo4j से बहुत पीछे था
तकनीकी रूप से यह मौजूद है और सूची में जगह पाने लायक भी है, लेकिन serious workloads के लिए इसकी सिफारिश नहीं करूँगा