Postgres.js - Node.js और Deno के लिए PostgreSQL क्लाइंट
(github.com/porsager)- Node.js और Deno में उपयोग होने वाला PostgreSQL क्लाइंट, जिसका मुख्य API ES6 tagged template strings है और जिसे npm पैकेज
postgresके रूप में इंस्टॉल किया जाता है - क्वेरी पैरामीटर interpolation से पहले प्रोसेस किए जाते हैं और PostgreSQL प्रोटोकॉल placeholders
$1, $2, ...से बदले जाते हैं, जबकि values अलग से database को भेजी जाती हैं ताकि escaping और casting का काम database संभाले sql``...``कॉल सुरक्षित क्वेरी निर्माण और dynamic query composition को सपोर्ट करता है, और सामान्य string concatenation से होने वाले SQL injection जोखिम के बिना partial queries, dynamic filters, dynamic sorting, और table name·column name identifiers का निर्माण संभालता है- कनेक्शन को
postgres://URL, options object, याpsqlमें उपयोग होने वाले environment variables के आधार पर कॉन्फ़िगर किया जा सकता है, और options object के values URL के values को override करते हैं - क्वेरी
awaitकिए जाने पर execute होती है और परिणाम column names को हर row object से मैप करने वालेResultarray के रूप में लौटते हैं, जबकि.execute()का उपयोग करने पर इसे तुरंत चलाया जा सकता है - मुख्य उपयोग प्रवाह में dynamic insert/update, multiple row insert,
where invalue list, transactionsql.begin, savepoint, prepared transaction, file-based query, cursor, और.forEach,.describe,.values,.rawजैसे advanced query methods शामिल हैं - PostgreSQL फीचर्स इंटीग्रेशन के रूप में
LISTEN/NOTIFY, logical replication protocol आधारित real-time subscriptions,COPY ...के लिए Node.js stream exposure, और चल रही queries को cancel करने का समर्थन शामिल है- real-time subscriptions के लिए database publication बनाना,
postgresql.confमेंwal_level = logical, और replication user या superuser connection की आवश्यकता होती है COPY ...stream API type safety प्रदान नहीं करता, और copy query parameters को Node.js stream read/write code तथा backpressure handling के साथ सही तरह मिलाना पड़ता है
- real-time subscriptions के लिए database publication बनाना,
- data transformation options में camelCase, PascalCase, Kebab-Case और snake_case के बीच conversion,
undefinedvalue conversion, और user-defined column/value/row transform functions का समर्थन है - connection pool क्वेरी बनते समय lazily बनाया जाता है, डिफ़ॉल्ट अधिकतम कनेक्शन संख्या
max: 10है, और transaction के दौरान connection को pool से reserve करके समाप्ति के बाद वापस किया जाता है - Cloudflare Workers के TCP socket API का समर्थन है, और Workers environment में चलाने के लिए
wrangler.tomlमेंcompatibility_flags = ["nodejs_compat"]सेट करना आवश्यक है - TypeScript support का लक्ष्य public API types प्रदान करना है, लेकिन feature addition या changes के समय types हमेशा साथ में अपडेट हों, यह सुनिश्चित नहीं है
1 टिप्पणियां
Hacker News की राय
अगर आप Postgres की अच्छी खूबियों का फायदा उठाते हुए सीधे SQL लिखना चाहते हैं, तो इस लाइब्रेरी के साथ काम करना वाकई मज़ेदार है
Prisma जैसी चमकदार, आधुनिक दिखने का दिखावा करने वाली abstraction नहीं, दूसरी TypeScript लाइब्रेरीज़ जैसी जटिल type annotations नहीं; बस JavaScript के अंदाज़ में साधारण SQL statements लिखिए
कुछ साल पहले Prisma को जबरन फिट करके इस्तेमाल करते-करते तंग आकर मैंने Postgres को ठीक से सीखना शुरू किया और कई alternatives आज़माए, लेकिन इसे कुछ मिनट इस्तेमाल करते ही लगा कि अब वापस नहीं जाऊँगा
यह लाइब्रेरी सचमुच तेज़ है। सिर्फ मिलती-जुलती string template syntax देखकर इसे दूसरी लाइब्रेरीज़ से compare करते हुए असली बात मिस नहीं करनी चाहिए
यह
pgपर निर्भर नहीं है और इसने अपना low-level client implement किया हैमैंने इससे ऐसा system बनाया जो एक बार में 10,000 records के batch कई बार load करता था, और performance जबरदस्त थी
use case के हिसाब से सिर्फ यह भी game-changer हो सकता है, और अगर आप Ruby जैसे environments में संभव माने जाने वाले benchmarks के आदी हैं, तो यह और भी प्रभावशाली लगता है
साथ ही यह logical decoding भी support करता है, जिससे transition event handling के लिए कई संभावनाएँ खुलती हैं। वाकई प्रभावशाली project है, इसे नज़रअंदाज़ करना अफसोस की बात होगी
संबंधित लेख:
Show HN: Postgres.js – Fastest Full-Featured PostgreSQL Client for Node and Deno - https://news.ycombinator.com/item?id=30794332 - मार्च 2022, 83 comments
Show HN: Postgres.js – Fast PostgreSQL Client for Node.js - https://news.ycombinator.com/item?id=21864245 - दिसंबर 2019, 12 comments
शायद इसमें मूल पोस्ट की लाइब्रेरी जितने features न हों, लेकिन https://pgtyped.dev/ भी उपयोगी रहा
queries को SQL file के रूप में लिखने पर pgtyped query parameters के साथ call की जा सकने वाली typed functions बना देता है
मैं लेखक हूँ। यह भी जोड़ना चाहता हूँ कि अब यह Cloudflare को भी support करता है
मुझे यह बात पसंद है कि इसकी dependencies 0 हैं
“जिन सभी queries को static query के रूप में infer किया जा सकता है, उनके लिए prepared statements अपने आप generate हो जाते हैं” इस वाक्य का असल मतलब क्या है, यह जानना चाहता हूँ
क्या इसका मतलब है कि binding variables न हों और query सिर्फ एक बार execute हो, फिर भी DB session में सचमुच एक prepared statement बनता है?
अगर ऐसा है तो दिलचस्प है, लेकिन यह काफी मजबूत राय वाला approach लगता है
हालांकि आम तौर पर unnamed prepared statement या portal इस्तेमाल होता है, और PostgreSQL इसे clean up कर देता है, इसलिए session, यानी connection प्रति व्यवहार में सिर्फ एक ही बना रहता है
वह वाक्य समझ नहीं आया, इसलिए मैंने code देखा; यहाँ मतलब यह था कि named prepared statements अपने आप इस्तेमाल करके PostgreSQL और driver internals में prepared statements cache किए जाते हैं। यह statement signature बना रहा है, इसलिए यह निश्चित रूप से opinionated design है
parse/describe/bind/execute/sync data मुख्य रूप से जहाँ बनता है, उस code को व्यक्तिगत रूप से मैं काफी खराब मानता हूँ: https://github.com/porsager/postgres/blob/bf082a5c0ffe214924...
यह https://www.postgresql.org/docs/current/sql-prepare.html में समझाया गया है, और plan type के लिए “Notes” section देखें
यहाँ Zapatos का भी जिक्र होना चाहिए। यह template strings के अंदर SQL लिखने वाले बहुत similar design वाला एक और Postgres JavaScript client है, लेकिन पूरी type safety देता है
अगर आपको TypeScript पसंद है, तो यह पसंद आ सकता है: https://jawj.github.io/zapatos/
व्यक्तिगत रूप से मुझे यह design और documentation के लिहाज से सबसे अच्छी TypeScript libraries में से एक लगता है, और अफसोस है कि यह ज्यादा मशहूर नहीं है
विकल्प के तौर पर PgTyped चुना, और 2 साल बाद अब लगता है कि switch करना वाकई सही फैसला था
pgपर निर्भर क्यों हैउत्सुकता हुई कि यह project कितना पुराना है, तो देखा:
v1.0.1 - जनवरी 2020
v2.0.0 - जून 2020, लेकिन beta से बाहर नहीं आ पाया
v3.0.0 - मार्च 2022, इस समय से project सच में शुरू हुआ लगता है
काफी दिलचस्प दिखता है, इसलिए यह कितना robust है यह भी जानना चाहता हूँ
Postgres.js अब तक इस्तेमाल की गई libraries में सबसे बेहतरीन में से है
JavaScript के templates का इसका इस्तेमाल वाकई intuitive है