SQL

SQL फ़ाइल क्या होती है?

एक तालिका, INSERT कमांड में बदली हुई, डेटाबेस में लादने के लिए तैयार।

SQL है क्या

SQL एक सादा टेक्स्ट फ़ॉर्मेट है, जो किसी भी एडिटर में खुल जाता है। इसका इस्तेमाल प्रोग्रामों के बीच डेटा ले जाना और सहेजना के लिए होता है।

एक्सटेंशन .sql है और पूरा नाम SQL Insert Statements। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।

SQL आया कहाँ से

यह 1986 तक पीछे जाता है। विनिर्देश ISO/IEC 9075 है।

जो फ़ॉर्मेट इतने लंबे समय तक पढ़ा जाता रहा हो, उसे वह चीज़ सौंपी जा सकती है जो आपको दस साल बाद वापस चाहिए।

विनिर्देश सार्वजनिक है

यह पूरा प्रकाशित है, इसलिए कोई भी इसे देखकर अंदाज़ा लगाने के बजाय दस्तावेज़ पढ़कर लागू कर सकता है। यही वजह है कि यह फ़ॉर्मेट इतने सारे प्रोग्रामों में मिलता है, और यही वजह है कि बीस साल पहले लिखी गई फ़ाइलें आज भी खुल जाती हैं। पर विनिर्देश का प्रकाशित होना और उसका रॉयल्टी-मुक्त होना एक बात नहीं है: जहाँ फ़ॉर्मेट किसी कोडेक को अपने अंदर लपेटता है, वहाँ पेटेंट का लाइसेंस एक अलग सवाल है, और मानक उसका जवाब नहीं देता।

इसमें टिप्पणी छोड़ी जा सकती है

SQL फ़ाइल में टिप्पणी लिखने का तरीक़ा मौजूद है — और यही उस फ़ाइल में, जिसे कोई इंसान सँभालता है, और उसमें, जिसे कोई प्रोग्राम लिखता है, फ़र्क़ करता है। बिना टिप्पणी वाले फ़ॉर्मेट में बदलते समय सबसे पहले यही जाती हैं, और चेतावनी कोई नहीं देता।

SQL को खोलता कौन है

PostgreSQL, MySQL और DBeaver इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।

फ़ाइल न खुले तो कसूर फ़ॉर्मेट का शायद ही कभी होता है — अक्सर प्रोग्राम ही फ़ॉर्मेट से पुराना होता है। किसी पुरानी चीज़ में बदल लेना इससे निकलने का भरोसेमंद रास्ता है, और इस वेबसाइट का बाक़ी हिस्सा इसी के लिए है।

इसे ब्राउज़र में खोलना

इसे कोई भी ब्राउज़र नहीं पढ़ता।

इसे बदलने की सबसे आम वजह यही है: फ़ॉर्मेट ख़राब है, ऐसा नहीं — बात यह है कि जहाँ आप फ़ाइल दिखाना चाहते हैं वह जगह उसे पढ़ ही नहीं सकती।

यह काम करने का फ़ॉर्मेट है

SQL इसलिए बना है कि इसे खोला और बदला जाए। जब तक काम चल रहा है फ़ाइल इसी फ़ॉर्मेट में रखिए, और जब भी बनी हुई प्रति चाहिए हो, इसी से निर्यात कीजिए।

एक भाषा, और संयोग से उसे रखने वाली फ़ाइल

SQL 1986 से मानकीकृत क्वेरी भाषा है। .sql फ़ाइल उसके statement रखने वाली टेक्स्ट फ़ाइल है, और यही पूरा फ़ॉर्मेट है — कोई हेडर नहीं, कोई संरचना नहीं। यह टेबल बना सकती है, दस लाख पंक्तियाँ डाल सकती है, स्कीमा बदल सकती है, या बस तीन क्वेरी रख सकती है।

व्यवहार में जो फ़ाइलें लोग बदलते हैं वे दो समूहों में आती हैं। dump वह है जो डेटाबेस या टेबल को statement के रूप में दोबारा लिखता है ताकि कहीं और वह बन सके। migration वह स्क्रिप्ट है जो नियंत्रित तरीक़े से स्कीमा बदलती है।

dump में असल में क्या होता है

आमतौर पर क्रम में तीन चीज़ें। टेबल मौजूद होने पर उसे हटाने वाला statement, यही वजह है कि लाइव डेटाबेस पर dump चलाना पलटा न जा सकने वाली क्रिया है। CREATE TABLE statement जो कॉलम और उनके प्रकार परिभाषित करता है। फिर पंक्तियाँ, INSERT statement के रूप में।

इनके इर्द-गिर्द असली dump घर-गृहस्थी के काम जोड़ता है: कैरेक्टर-सेट घोषणाएँ, डेटा लोड होते वक़्त इंडेक्स दोबारा-बनना रोकने वाली सेटिंग, और transaction रैपर। यह घर-गृहस्थी डेटाबेस-ख़ास होती है, और यही मुख्य वजह है कि एक डेटाबेस का dump दूसरे में नहीं लोड होता।

बोलियाँ ही असली समस्या हैं

मानक एक कोर तय करता है, और हर डेटाबेस उसे बढ़ाता है। पहचानकर्ता उद्धरण अलग है — MySQL में backtick, PostgreSQL में दोहरा उद्धरण, SQL Server में square bracket। ऑटो-बढ़ती कुंजियाँ तीन अलग-अलग तरीक़ों से लिखी जाती हैं।

तो MySQL dump PostgreSQL में लोड नहीं होता, और आमतौर पर एरर चौथी लाइन पर सिंटैक्स की शिकायत होती है। दो बोलियों के बीच बदलना असली काम है और ज़्यादातर यांत्रिक; अगर आप स्कीमा नहीं, डेटा हिला रहे हैं, तो CSV से गुज़रना अक्सर SQL अनुवाद करने से तेज़ और ज़्यादा भरोसेमंद है।

बिना ग्राफ़िकल औज़ार के इसे लोड करना

कमांड लाइन पर हर डेटाबेस का अपना क्लाइंट है और आह्वान छोटा है: PostgreSQL के लिए psql, MySQL और MariaDB के लिए mysql क्लाइंट, SQLite के लिए sqlite3, सब फ़ाइल को इनपुट की तरह लेते हैं। बड़े dump के लिए यह सबसे तेज़ रास्ता है।

इसे चलाने से पहले दो काम कीजिए। फ़ाइल का ऊपरी हिस्सा पढ़िए कि यह कुछ हटा तो नहीं रहा। और अगर dump ख़ुद गंतव्य डेटाबेस नहीं बनाता, तो पहले इसे बना लीजिए।

बड़ा आयात बीच में क्यों असफल हो जाता है

आमतौर पर चार में से एक। बड़े batched INSERT से टकराने वाली पैकेट या statement आकार सीमा — सर्वर की सीमा, फ़ाइल की नहीं। ग्राफ़िकल क्लाइंट का टाइमआउट। कैरेक्टर-सेट बेमेल, जो एरर की जगह बिगड़ा पाठ दिखाता है। या ऐसी foreign key शर्त जो अपनी संदर्भित टेबल से पहले आई पंक्तियाँ ठुकरा देती है।

आख़िरी वजह सबसे आम और सबसे कम साफ़ है। Dump आमतौर पर लोड के इर्द-गिर्द constraint जाँच बंद करके इसे सँभालते हैं, और हाथ से संपादित dump वह सुरक्षा खो देता है। निर्भरता क्रम में लोड करना सुधार है।

कब dump आपके पास मौजूद चीज़ के लिए ग़लत फ़ॉर्मेट है

dump डेटाबेस दोबारा बनाने के लिए है। अगर चाहिए सिर्फ़ डेटा है — विश्लेषण के लिए, स्प्रेडशीट में, बिना डेटाबेस वाले किसी को — CSV बेहतर कंटेनर है, और बड़े होने पर Parquet उससे भी बेहतर।

उलटा भी जानने लायक़ है। स्प्रेडशीट को INSERT statement में बदलना उस हालत में टेबल डेटाबेस में डालने का मानक तरीक़ा है जहाँ सीधा कनेक्शन नहीं — प्रबंधित होस्टिंग में आम हालत: कोई पोर्ट खुला नहीं, पर फ़ाइल पेस्ट करके चलाने वाला क्वेरी कंसोल है।

इसे सुरक्षित रूप से पढ़ना और संपादित करना

यह पाठ है, इसलिए कोई भी एडिटर खोलता है। SQL वाक्य-रचना समझने वाला एडिटर चलाने वाली किसी भी चीज़ के लिए काम आता है, क्योंकि यह statement रंगेगा और असंतुलित उद्धरण डेटाबेस से पहले दिखा देगा।

dump बहुत बड़ा हो सकता है, और कई-गीगाबाइट वाली फ़ाइल जाँचने का समझदार तरीक़ा है पहली और आख़िरी कुछ दर्जन लाइन देखना, पूरा खोलने के बजाय। पहली लाइनें बोली और कैरेक्टर सेट बताती हैं; आख़िरी बताती हैं dump पूरा हुआ या नहीं।

ज़रूरी जानकारी, एक जगह

SQL फ़ॉर्मेट की पहचान और उसका स्रोत।
एक्सटेंशन.sql
मीडिया टाइपapplication/sql
पहली बार प्रकाशित1986
विनिर्देशISO/IEC 9075

SQL फ़ाइलें: आम सवाल

SQL फ़ाइल कैसे खोलूँ

कोई भी टेक्स्ट एडिटर इसे खोलता है, क्योंकि यह सादा पाठ है। SQL वाक्य-रचना समझने वाला एडिटर या डेटाबेस औज़ार चलाने वाली किसी भी चीज़ के लिए बेहतर है, क्योंकि यह statement हाइलाइट करेगा।

SQL फ़ाइल डेटाबेस में कैसे आयात करूँ

डेटाबेस के अपने कमांड-लाइन क्लाइंट का इस्तेमाल कीजिए, फ़ाइल को इनपुट की तरह — PostgreSQL के लिए psql, MySQL और MariaDB के लिए mysql क्लाइंट, SQLite के लिए sqlite3। बड़ी फ़ाइलों के लिए यह ग्राफ़िकल औज़ार से काफ़ी तेज़ और भरोसेमंद है।

क्या MySQL dump PostgreSQL में लोड होगा

लगभग निश्चित रूप से नहीं। पहचानकर्ता उद्धरण, ऑटो-इंक्रीमेंट वाक्य-रचना, प्रकार नाम और फ़ंक्शन नाम सब अलग हैं, इसलिए लोड आमतौर पर कुछ लाइनों में असफल हो जाता है। डेटा हिला रहे हों तो CSV में निर्यात करना आमतौर पर तेज़ है।

मेरा आयात बीच में क्यों रुक जाता है

आम वजहें हैं बड़े batched INSERT से टकराती statement-आकार सीमा, ग्राफ़िकल क्लाइंट का टाइमआउट, या ऐसी foreign key शर्त जो अपनी संदर्भित टेबल से पहले आई पंक्तियाँ ठुकरा देती है।

क्या SQL फ़ाइल एक डेटाबेस है

नहीं। यह एक बनाने के निर्देशों का सेट है। डेटाबेस वह है जो फ़ाइल चलने के बाद मौजूद होता है — फ़ाइल ख़ुद पाठ है जिसे कोई भी एडिटर पढ़ सकता है और जो कुछ नहीं करती जब तक कुछ इसे चलाए नहीं।

डेटा हिलाने के लिए SQL या CSV इस्तेमाल करूँ

CSV अगर गंतव्य स्प्रेडशीट, विश्लेषण औज़ार या अलग डेटाबेस इंजन है। SQL dump अगर आप कहीं और वही डेटाबेस दोबारा बना रहे हैं और स्कीमा, प्रकार, कुंजियाँ व इंडेक्स साथ चाहिए।