टर्मिनल में MySQL का चयन करने के लिए सबसे अच्छा प्रदर्शन कैसे करें कई क्षेत्रों में वापसी?


271

मैं चलाने के लिए PuTTY का उपयोग कर रहा हूं :

mysql> SELECT * FROM sometable;

sometableकई फ़ील्ड हैं और इससे कई कॉलम टर्मिनल में प्रदर्शित होने का प्रयास करते हैं। फ़ील्ड अगली पंक्ति में लिपटे रहते हैं, इसलिए फ़ील्ड मानों के साथ कॉलम शीर्षक को पंक्तिबद्ध करना बहुत कठिन है।

टर्मिनल में ऐसे डेटा को देखने के लिए क्या समाधान हैं?

मेरे पास न तो phpMyAdmin - या किसी अन्य GUI इंटरफेस तक पहुंच है। मैं इस तरह के एक के रूप में कमांड लाइन समाधान के लिए देख रहा हूँ: पाठ या CVS फ़ाइल में MySQL क्वेरी परिणाम सहेजें


समाधान डेवलपर के लिए बग को ठीक करने के लिए है जो एकल स्क्रीन की तुलना में व्यापक तक विस्तारित होने वाले टर्मिनल को रोकता है।
उल्लू

@ क्या, यह वास्तव में एक बग है? क्या यहां दिए गए समाधान से समस्या हल नहीं हुई है?
गताइड

जवाबों:


531

के \G स्थान पर क्वेरी को समाप्त करें ;। उदाहरण के लिए:

SELECT * FROM sometable\G

यह क्वेरी इस तरह पंक्तियों को लंबवत प्रदर्शित करती है:

*************************** 1. row ***************************
                 Host: localhost
                   Db: mydatabase1
                 User: myuser1
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          ...
*************************** 2. row ***************************
                 Host: localhost
                   Db: mydatabase2
                 User: myuser2
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          ...

9
Windows केस-संवेदी नहीं होने के बावजूद, इसे Gकैपिटल किया जाना चाहिए।
राफेल बैरोस

3
उपरोक्त टिप्पणी को स्पष्ट करने के लिए, जब आप टाइप SELECT * FROM sometable\Gकरते हैं तो आप स्ट्रिंग को mysql कमांड लाइन क्लाइंट को भेज रहे हैं, न कि विंडोज़, यही वजह है कि Gमामला संवेदनशील है
तूफान हैमिल्टन

2
सिवाय इसके कि यह अच्छी तरह से रिकॉर्ड की बड़ी मात्रा के साथ काम नहीं करता है।
बलोएज माइकेल

1
लिंक किए गए दस्तावेज़ में कहा गया है: "अहंकार (\ G) mysql सर्वर को कमांड भेजें, परिणाम को लंबवत रूप से प्रदर्शित करें। एक सीमांकक को परिभाषित करने के बारे में सावधान रहें जो अन्य शब्दों के भीतर हो सकता है। उदाहरण के लिए, यदि आप सीमांकक को एक्स के रूप में परिभाषित करते हैं, तो आप असमर्थ होंगे। शब्दों में INDEX शब्द का उपयोग करें। "
बेंजामिन

मैंने इसका सामना किया। क्या आप मुझे बता सकते हैं कि इसे कैसे ठीक किया जाए? sh: 1: less: not found 44 rows in set (0.01 sec)
क्व तांग

347

आपको यह उपयोगी (केवल गैर-विंडोज) भी मिल सकता है:

mysql> pager less -SFX
mysql> SELECT * FROM sometable;

यह lessकमांड लाइन टूल के माध्यम से आउटुट को पाइप करेगा - इन मापदंडों के साथ - आपको एक सारणीबद्ध आउटपुट देगा जो कर्सर की कुंजियों के साथ क्षैतिज और लंबवत स्क्रॉल किया जा सकता है।

qकुंजी को दबाकर इस दृश्य को छोड़ दें , जो lessउपकरण को छोड़ देगा ।


23
यह प्रतिभा है। उत्कृष्ट टिप। जब से मैंने यह चाहा है, तब से।
रिचर्ड एच।

60
nopager का उपयोग करके रीसेट किया जा सकता है।
२१:२१ बजे २१:११

3
कम में खोज मार से की जाती है /और फिर खोज स्ट्रिंग लिखी जाती है, जिसे रीजेक्स भी किया जा सकता है, और फिर एंटर दबाएं। आगे nऔर पीछे की ओर दबाकर खोजें N( Shift + n)।
Krøllebølle

5
lessऔर भी अच्छी चीजें कर सकते हैं। &आप का उपयोग करके फ़िल्टर कर सकते हैं (केवल मिलान लाइनों को दिखाने के लिए) परिणाम नियमित अभिव्यक्ति का उपयोग कर आगे। यह /खोज के अतिरिक्त काम करता है (जो अभी भी हाइलाइटिंग का कारण बनेगा)। फ़िल्टर को &फिर से दबाकर रीसेट करें और फिर रिटर्न दबाएं।
डैनियल श्नाइलर

3
एफ तुरंत कम छोड़ देगा, अगर आउटपुट पहले से ही स्क्रीन पर फिट बैठता है। एक्स को स्क्रीन को बाहर निकलने से रोकने की कोशिश करने से कम रोकना है। कम मैन पेज देखें।
डैनियल श्नाइलर

46

\Gइसके बजाय क्वेरी को निष्पादित करने के लिए , वर्टिकल मोड को सक्षम करने का प्रयास करें ;:

mysql> SELECT * FROM sometable \G

आपके परिणाम ऊर्ध्वाधर मोड में सूचीबद्ध होंगे, इसलिए प्रत्येक स्तंभ मान को एक अलग लाइन पर मुद्रित किया जाएगा। उत्पादन संकरा होगा, लेकिन जाहिर तौर पर बहुत लंबा होगा।


2
के पूरक के रूप में \G, आप भी \gएक प्रतिस्थापन के रूप में उपयोग कर सकते हैं ;, मुझे पता है, जो ऐसा करेगा, लेकिन यह इस बात का संदर्भ देता है कि \Gपहली जगह में काम क्यों करना है।
सैंटियागो एरीज़टी

25

का उपयोग करते हुए mysqlकी egoकमान

से mysqlकी helpकमान:

अहंकार (\ G) mysql सर्वर को कमांड भेजें, परिणाम को लंबवत प्रदर्शित करें।

तो \Gअपने selectआप को जोड़कर , आप एक बहुत साफ ऊर्ध्वाधर उत्पादन प्राप्त कर सकते हैं:

mysql> SELECT * FROM sometable \G

पेजर का उपयोग करना

आप MySQL को lessअपने -Sविकल्प के साथ पेजर का उपयोग करने के लिए कह सकते हैं जो चौड़ी लाइनों को काटता है और आपको एक आउटपुट देता है जिसे आप तीर कुंजी के साथ स्क्रॉल कर सकते हैं:

mysql> pager less -S

इस प्रकार, अगली बार जब आप एक विस्तृत आउटपुट के साथ कमांड चलाते हैं, तो MySQL आपको lessपेजर के साथ आउटपुट ब्राउज़ करने देगा :

mysql> SELECT * FROM sometable;

यदि आप पेजर के साथ कर रहे हैं और नियमित आउटपुट पर वापस जाना चाहते हैं stdout, तो इसका उपयोग करें:

mysql> nopager

2
यह! सुंदर, केवल इसे और अधिक परिपूर्ण बनाने का एक तरीका यह देखना है कि कॉलम क्षैतिज रूप से कितनी दूर तक फैला है। स्क्रॉलबार की तरह। फिर भी, महान समाधान।
ब्रैंडन बेनिफिट

24

आप --tableया -tविकल्प का उपयोग कर सकते हैं , जो परिणामों के एक अच्छे दिखने वाले सेट का उत्पादन करेगा

echo 'desc table_name' | mysql -uroot database -t

या mysql को क्वेरी पास करने के लिए कोई अन्य विधि, जैसे:

mysql -uroot table_name --table < /tmp/somequery.sql

उत्पादन:

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| username     | varchar(30)  | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(30)  | NO   |     | NULL    |                |
| email        | varchar(75)  | NO   |     | NULL    |                |
| password     | varchar(128) | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| last_login   | datetime     | NO   |     | NULL    |                |
| date_joined  | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

8

डिफ़ॉल्ट पेजर stdout है। स्टडआउट में स्तंभ सीमा होती है, इसलिए आउटपुट लपेटा जाएगा। आप आउटपुट फॉर्मेट करने के लिए पेजर के रूप में अन्य टूल सेट कर सकते हैं। दो विधियाँ हैं। एक कॉलम को सीमित करना है, दूसरा इसे विम में संसाधित करना है।

पहली विधि:

  ~  echo $COLUMNS
179

mysql> nopager
PAGER set to stdout
mysql> pager cut -c -179
PAGER set to 'cut -c -179'
mysql> select * from db;
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
| Host      | Db         | User       | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv |
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
| %         | test       |            | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| %         | test\_%    |            | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| localhost | phpmyadmin | phpmyadmin | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| localhost | it         | it         | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
4 rows in set (0.00 sec)

mysql>

आउटपुट पूर्ण नहीं है। सामग्री आपकी स्क्रीन पर फिट होती है।

दूसरा एक:

अपने .vimrc में अब रैप करने के लिए vim मोड सेट करें

  ~  tail ~/.vimrc

" no-wrap for myslq cli
set nowrap

mysql> pager vim -
PAGER set to 'vim -'
mysql> select * from db;
    Vim: Reading from stdin...
+-----------+------------+------------+-------------+-------------+----------
| Host      | Db         | User       | Select_priv | Insert_priv | Update_pr
+-----------+------------+------------+-------------+-------------+----------
| %         | test       |            | Y           | Y           | Y
| %         | test\_%    |            | Y           | Y           | Y
| localhost | phpmyadmin | phpmyadmin | Y           | Y           | Y
| localhost | it         | it         | Y           | Y           | Y
+-----------+------------+------------+-------------+-------------+----------
~
~
~

यह मेरे लिए हल्के डॉकटर कंटेनर में सबसे अच्छा काम करता है। pager cut -c -200। यहाँ अधिक स्वीकृत उत्तरों से मुझे अनावश्यक निर्भरताएँ डाउनलोड करने की आवश्यकता पड़ी।
गेब्रियल गेट्स

7

बस उस उत्तर को पूरक करने के लिए जिसे मैंने सबसे अच्छा सोचा था, मैं भी उपयोग करता हूं less -SFXलेकिन एक अलग तरीके से: मैं इसे .my.cnfअपने घर के फ़ोल्डर में अपनी फ़ाइल में विज्ञापन देना पसंद करता हूं, एक उदाहरण cnf फ़ाइल इस तरह दिखता है:

[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'

इसे इस तरह से रखने के बारे में अच्छी बात यह है कि lessइसका उपयोग केवल तब किया जाता है जब किसी क्वेरी का आउटपुट वास्तव में एक पृष्ठ से अधिक लंबा हो, यहां सभी झंडों की व्याख्या है:

  • -S: सिंगल लाइन, स्क्रीन से लाइन चौड़ी होने पर लाइन को स्किप न करें, इसके बजाय दाईं ओर स्क्रॉल करने की अनुमति दें।
  • -F: एक स्क्रीन से बाहर निकलें , अगर सामग्री को स्क्रॉल करने की आवश्यकता नहीं है, तो बस stdout को भेजें।
  • -X: नहीं init, किसी भी आउटपुट "कम" को अक्षम करता है जो हर बार लोड होने पर आउटपुट में कॉन्फ़िगर हो सकता है।

नोट: .my.cnfफाइल pagerमें [client]कीवर्ड के नीचे कमांड नहीं है ; हालाँकि यह mysqlअच्छी तरह से काम कर सकता है, लेकिन इसे mysqldumpपहचानने की नहीं।


ध्यान दें कि यदि आप एक बड़ी सीमा पर "सीमा-कम" क्वेरी निष्पादित करते हैं, तो आप इसके कारण होने वाली अराजकता को नोटिस नहीं lessकरेंगे क्योंकि आउटपुट की पहली पंक्ति के लिए लंगर रहेगा।
सैंटियागो एरीज़टी

2

यदि आप इंटरएक्टिव रूप से MySQL का उपयोग कर रहे हैं, तो आप sedइस तरह से उपयोग करने के लिए अपना पेजर सेट कर सकते हैं :

$ mysql -u <user> p<password>
mysql> pager sed 's/,/\n/g' 
PAGER set to 'sed 's/,/\n/g''
mysql> SELECT blah FROM blah WHERE blah = blah 
.
.
.
"blah":"blah"
"blah":"blah"
"blah":"blah"

यदि आप sedपेजर के रूप में उपयोग नहीं करते हैं , तो आउटपुट इस प्रकार है:

"blah":"blah","blah":"blah","blah":"blah"

1

मैंने लिखा pspg- https://github.com/okbob/pspg

यह पेजर सारणीबद्ध डेटा के लिए डिज़ाइन किया गया है - और MySQL भी समर्थित है।

MariaDB [sakila]> पेजर pspg -s 14 -X --force-uniborder --quit-if-one-screen
PAGER ने 'pspg -s 14 -X --force-uniborder --quit-if-one-screen' पर सेट किया
मारियाडीबी [साकिला]> अब चुनें ();
MariaDB [sakila]> nicer_but_slower_film_list सीमा 100 से * चयन करें;

0

मेरा मानना ​​है कि पोटीन में अधिकतम संख्या में कॉलम होते हैं जिन्हें आप विंडो के लिए निर्दिष्ट कर सकते हैं।

Windows के लिए मैं व्यक्तिगत रूप से Windows PowerShell का उपयोग करता हूं और स्क्रीन बफर चौड़ाई को काफी अधिक सेट करता हूं। कॉलम की चौड़ाई निश्चित रहती है और आप डेटा को देखने के लिए एक क्षैतिज स्क्रॉल बार का उपयोग कर सकते हैं। मुझे वही समस्या थी जो अब आप कर रहे हैं।

संपादित करें: दूरस्थ होस्ट्स के लिए जिन्हें आपको SSH में रखना है, आप पलक + विंडोज पॉवरशेल जैसे कुछ का उपयोग करेंगे


0

आप teeकिसी फ़ाइल में अपनी क्वेरी का परिणाम लिखने के लिए उपयोग कर सकते हैं :

tee somepath\filename.txt

-1

विंडोज कमांड प्रॉम्प्ट का उपयोग करके आप विंडो के बफर आकार को बढ़ा सकते हैं जितना आप कॉलम की संख्या देखना चाहते हैं। यह तालिका में स्तंभों की संख्या पर निर्भर करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.