JavaScript और PostgreSQL का साथ क्यों ज़रूरी है?
\n\nअगर आप JavaScript (खासकर Node.js) में कोड लिखते हैं और अब भी प्रोडक्शन में MySQL या SQLite का उपयोग कर रहे हैं, तो आप पैसे और समय दोनों गंवा रहे हैं। PostgreSQL सिर्फ एक और डेटाबेस नहीं है। यह डेटा के लिए एक स्विस आर्मी नाइफ है जो जटिल JOIN से लेकर JSON दस्तावेज़, फुल-टेक्स्ट सर्च और जियो-क्वेरी तक सब कुछ कर सकता है। JavaScript + PostgreSQL की जोड़ी वेब ऐप्स, माइक्रोसर्विसेज और एनालिटिक्स के लिए आधुनिक मानक है।
\n\nइस गाइड में हम वह सब कुछ कवर करेंगे जो एक Node.js डेवलपर को जानना चाहिए: ड्राइवर इंस्टॉल करने से लेकर ट्रांजैक्शन, माइग्रेशन और ऑप्टिमाइज़ेशन तक। कोई बकवास नहीं — सिर्फ कोड और प्रैक्टिस।
\n\nचरण 1: pg ड्राइवर इंस्टॉल और सेटअप
\n\nPostgreSQL को JavaScript से जोड़ने के लिए pg पैकेज का उपयोग किया जाता है — यह ऑफिशियल क्लाइंट है। इसे इंस्टॉल करने में एक सेकंड लगता है:
npm install pg\n\nअब कनेक्शन बनाते हैं। दो तरीके हैं: Client (एक कनेक्शन) और Pool (कनेक्शन पूल)। प्रोडक्शन के लिए हमेशा Pool का उपयोग करें — यह कनेक्शन को रीयूज़ करता है और लोड के समय डेटाबेस को क्रैश नहीं होने देता।
\n\nconst { Pool } = require('pg');\n\nconst pool = new Pool({\n user: 'your_user',\n host: 'localhost',\n database: 'your_db',\n password: 'your_password',\n port: 5432,\n max: 20, // पूल में अधिकतम कनेक्शन\n idleTimeoutMillis: 30000,\n connectionTimeoutMillis: 2000,\n});\n\n// कनेक्शन टेस्ट\npool.query('SELECT NOW()')\n .then(res => console.log('✅ कनेक्टेड:', res.rows[0].now))\n .catch(err => console.error('❌ त्रुटि:', err));\n\nमहत्वपूर्ण: पासवर्ड को कभी हार्डकोड न करें। एनवायरनमेंट वेरिएबल (process.env.DATABASE_URL) या सीक्रेट मैनेजर का उपयोग करें।
चरण 2: CRUD — बुनियादी संचालन
\n\nकिसी भी ऐप की शुरुआत CRUD (Create, Read, Update, Delete) से होती है। आइए JavaScript के साथ PostgreSQL में हर ऑपरेशन को समझते हैं।
\n\nटेबल बनाना (DDL)
\n\nconst createTable = async () => {\n const query = `\n CREATE TABLE IF NOT EXISTS users (\n id SERIAL PRIMARY KEY,\n name VARCHAR(100) NOT NULL,\n email VARCHAR(255) UNIQUE NOT NULL,\n age INTEGER CHECK (age > 0),\n created_at TIMESTAMP DEFAULT NOW()\n );\n `;\n await pool.query(query);\n console.log('✅ users टेबल बन गई');\n};\n\ncreateTable();\n\nINSERT — डेटा जोड़ना
\n\nconst addUser = async (name, email, age) => {\n // पैरामीटराइज़्ड क्वेरी — SQL इंजेक्शन से बचाव!\n const query = `\n INSERT INTO users (name, email, age)\n VALUES ($1, $2, $3)\n RETURNING *;\n `;\n const values = [name, email, age];\n const res = await pool.query(query, values);\n console.log('✅ यूज़र जोड़ा गया:', res.rows[0]);\n return res.rows[0];\n};\n\n// उदाहरण कॉल\naddUser('राहुल शर्मा', 'rahul@example.com', 28);\n\nSELECT — फ़िल्टर के साथ डेटा पढ़ना
\n\nconst getUsers = async (minAge = 0) => {\n const query = 'SELECT * FROM users WHERE age > $1 ORDER BY created_at DESC';\n const res = await pool.query(query, [minAge]);\n console.log(`📊 कुल यूज़र मिले: ${res.rowCount}`);\n return res.rows;\n};\n\ngetUsers(25).then(users => console.log(users));\n\nUPDATE — रिकॉर्ड अपडेट करना
\n\nconst updateUserEmail = async (id, newEmail) => {\n const query = `\n UPDATE users\n SET email = $2, updated_at = NOW()\n WHERE id = $1\n RETURNING *;\n `;\n const res = await pool.query(query, [id, newEmail]);\n if (res.rowCount === 0) {\n console.log('⚠️ यूज़र नहीं मिला');\n return null;\n }\n console.log('✅ ईमेल अपडेट हुआ:', res.rows[0]);\n return res.rows[0];\n};\n\nDELETE — डेटा हटाना
\n\nconst deleteUser = async (id) => {\n const query = 'DELETE FROM users WHERE id = $1 RETURNING *';\n