R Academy · पाठ

PostgreSQL और MySQL से कनेक्ट करना

सर्वर-आधारित डेटाबेस से कनेक्ट करने के लिए RPostgres और RMySQL ड्राइवर का उपयोग करें।

पाठ 2, कुल 4 में से13 चरण

PostgreSQL और MySQL से कनेक्ट करना, CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

उत्पादन डेटाबेस कनेक्शन

RSQLite विकास और परीक्षण के लिए अच्छा है, लेकिन उत्पादन डेटा PostgreSQL, MySQL, SQL Server या क्लाउड डेटाबेस में रहता है। DBI इंटरफ़ेस वही रहता है — केवल ड्राइवर पैकेज और कनेक्शन तर्क बदलते हैं। यही DBI की मुख्य ताकत है।

library(DBI)

# Driver packages for each database:
# PostgreSQL  -> RPostgres::Postgres()
# MySQL       -> RMySQL::MySQL() or RMariaDB::MariaDB()
# SQL Server  -> odbc::odbc()
# BigQuery    -> bigrquery::bigquery()
# Redshift    -> RPostgres::Postgres()  (same protocol)
# DuckDB      -> duckdb::duckdb()

# All use the same DBI functions:
# dbConnect, dbGetQuery, dbExecute, dbDisconnect

PostgreSQL से कनेक्ट करना

RPostgres::Postgres() PostgreSQL का ड्राइवर है। कनेक्शन पैरामीटर दें: host, port (डिफ़ॉल्ट 5432), dbname, user और password। क्रेडेंशियल को कभी भी कोड में सीधे न लिखें — इसके बजाय पर्यावरण वेरिएबल का उपयोग करें।

library(DBI)
# library(RPostgres)  # Uncomment when available

# PostgreSQL connection pattern:
# con <- dbConnect(
#   RPostgres::Postgres(),
#   host     = 'db.example.com',
#   port     = 5432,
#   dbname   = 'analytics',
#   user     = 'analyst',
#   password = 'secretpassword'
# )

# Query exactly like SQLite:
# result <- dbGetQuery(con, 'SELECT * FROM sales LIMIT 5')
# dbDisconnect(con)

cat('PostgreSQL uses the same DBI interface as SQLite!')

क्रेडेंशियल के लिए पर्यावरण वेरिएबल का उपयोग

कोड में पासवर्ड सीधे लिखना सुरक्षा जोखिम है। क्रेडेंशियल को पर्यावरण वेरिएबल के रूप में संग्रहीत करें और उन्हें Sys.getenv() से पढ़ें। उत्पादन में इन्हें .Renviron, .env फ़ाइलों (जिन्हें git में शामिल न किया गया हो) या गुप्त जानकारी प्रबंधन प्रणालियों के माध्यम से सेट करें।

library(DBI)

# Set environment variables (normally done outside R):
# In .Renviron file:
# DB_HOST=db.example.com
# DB_NAME=analytics
# DB_USER=analyst
# DB_PASS=secretpassword

# Read credentials from environment
get_pg_connection <- function() {
  dbConnect(
    RPostgres::Postgres(),  # driver
    host     = Sys.getenv('DB_HOST'),
    port     = as.integer(Sys.getenv('DB_PORT', '5432')),
    dbname   = Sys.getenv('DB_NAME'),
    user     = Sys.getenv('DB_USER'),
    password = Sys.getenv('DB_PASS')
  )
}

cat('Sys.getenv() reads environment variables safely.')
cat('\nDB_HOST value:', nchar(Sys.getenv('DB_HOST')), 'chars')

MySQL / MariaDB से कनेक्ट करना

MySQL कनेक्शन में RMariaDB::MariaDB() (आधुनिक MySQL ड्राइवर) या RMySQL::MySQL() का उपयोग होता है। कनेक्शन तर्क PostgreSQL के समान हैं। MySQL और MariaDB दोनों सर्वरों के लिए MariaDB अनुशंसित ड्राइवर है।

library(DBI)

# MySQL / MariaDB connection pattern:
# library(RMariaDB)
# con <- dbConnect(
#   RMariaDB::MariaDB(),
#   host     = Sys.getenv('MYSQL_HOST'),
#   port     = 3306,
#   dbname   = Sys.getenv('MYSQL_DB'),
#   user     = Sys.getenv('MYSQL_USER'),
#   password = Sys.getenv('MYSQL_PASS')
# )

# SSL connection:
# con <- dbConnect(
#   RMariaDB::MariaDB(),
#   host = 'secure-db.example.com',
#   ssl.ca = '/path/to/ca-cert.pem'
# )

cat('RMariaDB supports both MySQL and MariaDB servers.')

कनेक्शन समय-सीमा और पुनः कनेक्शन

लंबे समय तक चलने वाली स्क्रिप्ट में कनेक्शन की समय-सीमा समाप्त हो सकती है। dbIsValid(con) से जाँचें कि कनेक्शन अभी मान्य है या नहीं। ETL स्क्रिप्ट के लिए, एक कनेक्शन को घंटों तक खुला रखने के बजाय प्रत्येक प्रसंस्करण बैच की शुरुआत में फिर से कनेक्ट करने पर विचार करें।

library(DBI)
library(RSQLite)

# Safe function with reconnection
query_with_check <- function(con, sql) {
  if (!dbIsValid(con)) {
    stop('Connection is no longer valid. Reconnect.')
  }
  dbGetQuery(con, sql)
}

# Demonstrate with SQLite
con <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con, 't', data.frame(x=1:3))

cat('Connection valid:', dbIsValid(con), '\n')
print(query_with_check(con, 'SELECT * FROM t'))

dbDisconnect(con)
cat('After disconnect, valid:', dbIsValid(con))

कनेक्शन पूलिंग की अवधारणा

हर प्रश्न के लिए नया डेटाबेस कनेक्शन खोलना महँगा होता है। कनेक्शन पूलिंग खुले कनेक्शन का एक समूह बनाए रखती है और उनका पुनः उपयोग करती है। वेब API और Shiny ऐप के लिए यह महत्वपूर्ण है, जहाँ हर सेकंड कई अनुरोध आते हैं।

# The 'pool' package provides connection pooling for R
# library(pool)

# Create a pool (connections managed automatically)
# my_pool <- pool::dbPool(
#   drv      = RPostgres::Postgres(),
#   dbname   = Sys.getenv('DB_NAME'),
#   host     = Sys.getenv('DB_HOST'),
#   user     = Sys.getenv('DB_USER'),
#   password = Sys.getenv('DB_PASS'),
#   minSize  = 2,   # Always keep 2 connections ready
#   maxSize  = 10   # Maximum 10 simultaneous connections
# )

# Use the pool like a regular connection:
# result <- dbGetQuery(my_pool, 'SELECT * FROM table')

# Close the pool on shutdown:
# pool::poolClose(my_pool)

cat('pool package: connection reuse for high-traffic apps!')

SQL पैरामीटर के साथ सुरक्षित प्रश्न

उपयोगकर्ता के इनपुट को कभी भी SQL स्ट्रिंग में जोड़कर न लिखें (SQL इंजेक्शन का जोखिम)। मानों को सुरक्षित रूप से जोड़ने के लिए sqlInterpolate(con, sql, .dots=list(...)) या glue पैकेज के glue_sql() के साथ पैरामीटरयुक्त प्रश्नों का उपयोग करें।

library(DBI)
library(RSQLite)

con <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con, 'students',
  data.frame(id=1:4, name=c('Alice','Bob','Carol','Dave'), score=c(85,92,78,88)))

# UNSAFE (SQL injection possible):
# name_input <- 'Alice' # imagine user-provided
# dbGetQuery(con, paste('SELECT * FROM students WHERE name =', name_input))

# SAFE: use sqlInterpolate
name_input <- 'Alice'
safe_sql <- sqlInterpolate(con,
  'SELECT * FROM students WHERE name = ?name',
  name = name_input
)
print(dbGetQuery(con, safe_sql))
dbDisconnect(con)

दूरस्थ डेटाबेस के लिए SSH टनलिंग

कई उत्पादन डेटाबेस इंटरनेट से सीधे पहुँच योग्य नहीं होते। एक सामान्य तरीका SSH टनलिंग है: SSH के माध्यम से स्थानीय पोर्ट को दूरस्थ डेटाबेस पोर्ट पर अग्रेषित करें, फिर R को localhost:local_port से कनेक्ट करें।

# SSH tunnel setup (run in terminal before connecting from R):
# ssh -N -L 5433:db-server.internal:5432 user@jump-host.example.com

# Then connect in R as if the DB is local:
# con <- dbConnect(
#   RPostgres::Postgres(),
#   host     = 'localhost',
#   port     = 5433,   # Local forwarded port
#   dbname   = 'analytics',
#   user     = Sys.getenv('DB_USER'),
#   password = Sys.getenv('DB_PASS')
# )

# You can also script the tunnel with:
# system('ssh -fN -L 5433:db:5432 user@jump-host')

cat('SSH tunneling makes private databases accessible to R.')

बड़ी तालिकाओं को खंडों में पढ़ना

जब डेटाबेस तालिका में लाखों पंक्तियाँ हों, तो सब कुछ एक साथ लोड करने से मेमोरी समाप्त हो सकती है। तालिका को खंडों में संसाधित करने के लिए LIMIT/OFFSET या कर्सर-आधारित प्राप्ति का उपयोग करें। स्ट्रीमिंग परिणामों के लिए इसे dbFetch() के साथ संयोजित करें।

library(DBI)
library(RSQLite)

con <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con, 'big_table', data.frame(id=1:100, value=rnorm(100)))

# Process in chunks of 25 rows
chunk_size <- 25
offset <- 0
total_processed <- 0

repeat {
  chunk <- dbGetQuery(con, sprintf(
    'SELECT * FROM big_table LIMIT %d OFFSET %d',
    chunk_size, offset
  ))
  if (nrow(chunk) == 0) break
  total_processed <- total_processed + nrow(chunk)
  offset <- offset + chunk_size
}

cat('Total rows processed:', total_processed, '\n')
dbDisconnect(con)

dbGetInfo() — कनेक्शन मेटाडेटा

dbGetInfo(con) कनेक्शन का मेटाडेटा लौटाता है: सर्वर संस्करण, डेटाबेस का नाम, उपयोगकर्ता आदि। यह लॉगिंग, निदान और कई परिवेशों में चलने वाली स्क्रिप्ट में सही डेटाबेस इंस्टेंस से कनेक्शन सत्यापित करने के लिए उपयोगी है।

library(DBI)
library(RSQLite)

con <- dbConnect(RSQLite::SQLite(), ':memory:')

info <- dbGetInfo(con)
print(info)

# For PostgreSQL, info would include:
# $host, $port, $dbname, $username, $server.version

dbDisconnect(con)

SQLite बनाम PostgreSQL का उपयोग

प्रोटोटाइप बनाने, एम्बेडेड डेटा और परीक्षण के लिए SQLite चुनें; उत्पादन वातावरण, कई उपयोगकर्ताओं की पहुँच और उन्नत SQL सुविधाओं के लिए PostgreSQL चुनें। DBI कोड लगभग समान होता है — केवल ड्राइवर और कनेक्शन पैरामीटर अलग होते हैं।

library(DBI)
library(RSQLite)

# SQLite (development/testing)
con_dev <- dbConnect(RSQLite::SQLite(), ':memory:')
dbWriteTable(con_dev, 'data', mtcars)
dev_result <- dbGetQuery(con_dev, 'SELECT COUNT(*) n FROM data')
cat('SQLite dev DB rows:', dev_result$n, '\n')
dbDisconnect(con_dev)

# PostgreSQL (production) — same interface:
# con_prod <- dbConnect(RPostgres::Postgres(),
#   host=Sys.getenv('PG_HOST'), dbname=Sys.getenv('PG_DB'),
#   user=Sys.getenv('PG_USER'), password=Sys.getenv('PG_PASS'))
# prod_result <- dbGetQuery(con_prod, 'SELECT COUNT(*) n FROM data')
# dbDisconnect(con_prod)

cat('Same DBI code works for both!')

त्वरित जाँच

R स्क्रिप्ट में डेटाबेस प्रमाण-पत्र देने का सुझाया गया तरीका क्या है?

पुनरावलोकन: PostgreSQL और MySQL कनेक्शन

उत्पादन डेटाबेस कनेक्शन के लिए मुख्य बातें:

  • PostgreSQL ड्राइवर: RPostgres::Postgres(), जिसमें host, port, dbname, user, password आर्ग्युमेंट होते हैं
  • MySQL/MariaDB ड्राइवर: RMariaDB::MariaDB(), जिसमें मिलते-जुलते आर्ग्युमेंट होते हैं
  • प्रमाण-पत्रों के लिए हमेशा Sys.getenv('VAR') का उपयोग करें — इन्हें कोड में सीधे कभी न लिखें
  • dbIsValid(con) जाँचता है कि कनेक्शन अभी सक्रिय है या नहीं
  • pool पैकेज अधिक ट्रैफ़िक वाले ऐप्स के लिए कनेक्शन पूल प्रबंधित करता है
  • sqlInterpolate() उपयोगकर्ता द्वारा दिए गए मानों से होने वाले SQL इंजेक्शन को रोकता है
  • SSH सुरंग: निजी डेटाबेस तक पहुँचने के लिए स्थानीय पोर्ट को अग्रेषित करें
  • सभी DBI फ़ंक्शन अलग-अलग बैकएंड पर एक ही तरह काम करते हैं
library(DBI)
library(RSQLite)

# Production-ready connection pattern (SQLite for demo)
open_connection <- function() {
  con <- dbConnect(RSQLite::SQLite(), ':memory:')
  if (!dbIsValid(con)) stop('Failed to connect')
  cat('Connected successfully\n')
  con
}

run_query <- function(con, sql) {
  if (!dbIsValid(con)) stop('Connection lost')
  dbGetQuery(con, sql)
}

con <- open_connection()
dbWriteTable(con, 't', data.frame(x=1:3, y=4:6))
print(run_query(con, 'SELECT * FROM t'))
dbDisconnect(con)
शुरुआत निःशुल्क

एआई शिक्षक के साथ R सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
43
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “PostgreSQL और MySQL से कनेक्ट करना” पाठ निःशुल्क है?

हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “PostgreSQL और MySQL से कनेक्ट करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“PostgreSQL और MySQL से कनेक्ट करना” में मैं क्या सीखूँगा?

सर्वर-आधारित डेटाबेस से कनेक्ट करने के लिए RPostgres और RMySQL ड्राइवर का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“PostgreSQL और MySQL से कनेक्ट करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. DBI और RSQLite की मूल बातें
  2. PostgreSQL और MySQL से कनेक्ट करना
  3. dbplyr: dplyr सिंटैक्स के माध्यम से SQL
  4. पैरामीटरयुक्त क्वेरी और लेन-देन
← R Academy पर वापस जाएँ