Come migliore visualizzazione del Terminal un MySQL SELEZIONA ritorno troppi campi?
-
06-09-2019 - |
Domanda
PuTTY per eseguire:
mysql> SELECT * FROM sometable;
sometable
ha molti campi e questo si traduce in molte colonne che cercano di essere visualizzati nel terminale. I campi avvolgono sulla riga successiva, quindi è molto difficile allineare titoli delle colonne con i valori di campo.
Quali soluzioni ci sono per la visualizzazione di tali dati nel terminale?
Non ho né voglio l'accesso a phpMyAdmin - o di qualsiasi altra interfaccia GUI. Sto cercando le soluzioni della riga di comando come questo: Salva MySQL Query si traduce in file di testo o CVS
Soluzione
Termina la query con \G
al posto di ;
. Ad esempio:
SELECT * FROM sometable\G
Questa query mostra le righe verticalmente, in questo modo:
*************************** 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
...
Altri suggerimenti
Si potrebbe anche trovare questo utile (non solo Windows):
mysql> pager less -SFX
mysql> SELECT * FROM sometable;
Questo tubo volontà outut attraverso la linea di comando less
che - con questi parametri - darà un output tabulare che può essere fatto scorrere orizzontalmente e verticalmente con i tasti cursore
Lascia questo punto di vista premendo il tasto q
, che chiudere lo strumento less
.
Prova ad attivare la modalità verticale, utilizzando \G
per eseguire la query anziché ;
:
mysql> SELECT * FROM sometable \G
I risultati verranno elencati in modo verticale, così ogni valore di colonna saranno stampati su una linea separata. L'uscita sarà più ristretto ma ovviamente molto più a lungo.
È possibile utilizzare l'opzione --table
o -t
, che sarà in uscita un bel guardare insieme di risultati
echo 'desc table_name' | mysql -uroot database -t
o qualche altro metodo per passare una query mysql, come:
mysql -uroot table_name --table < /tmp/somequery.sql
uscita:
+--------------+--------------+------+-----+---------+----------------+
| 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 | |
+--------------+--------------+------+-----+---------+----------------+
Comando mysql
Uso del ego
Dalla comando mysql
di help
:
Io (\ G) Invia comando per server MySQL, risultato display verticalmente.
Quindi, aggiungendo un \G
al vostro select
, è possibile ottenere un'uscita verticale molto pulito:
mysql> SELECT * FROM sometable \G;
Utilizzo di un pager
Si può dire a MySQL di utilizzare il cercapersone less
con l'opzione -S
che taglia le linee larghe e ti dà un output che è possibile scorrere con i tasti freccia:
mysql> pager less -S
Quindi, la prossima volta che si esegue un comando con un ampio uscita, MySQL vi permetterà di navigare l'uscita con il cercapersone less
:
mysql> SELECT * FROM sometable;
Se hai finito con il cercapersone e vuole tornare alla uscita regolare su stdout
, utilizzare questo:
mysql> nopager
Il pager di default è stdout. Lo stdout ha la limitazione colonna, quindi l'uscita verrebbe avvolto. È possibile impostare altri strumenti come cercapersone per formattare l'output. Ci sono due metodi. Uno è quello di limitare la colonna, l'altra è per elaborati in vim.
Il primo metodo:
➜ ~ 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>
L'uscita non è completa. Il contenuto si adatta al vostro schermo.
La seconda:
Impostare la modalità vim per NOWRAP nel vostro .vimrc
➜ ~ 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
+-----------+------------+------------+-------------+-------------+----------
~
~
~
Proprio per completare la risposta che ho pensato meglio, io uso anche less -SFX
, ma in un modo diverso: mi piace annuncio al mio file .my.cnf
nella mia cartella home, un file CNF esempio si presenta così:
[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'
La cosa buona di avere in questo modo, è che less
viene utilizzato solo quando l'output di una query è in realtà più di una pagina lunga, ecco la spiegazione di tutte le bandiere:
- -S:. Singola linea, non saltare la linea quando la linea è più ampia dello schermo, invece permette di scorrere a destra
- -F:. Esci se uno schermo , se il contenuto non ha bisogno di scorrimento poi basta inviare allo stdout
- -X:. No init, disabilita qualsiasi uscita "meno" potrebbe essere configurato per l'uscita ogni volta che si carica
Nota: nel file .my.cnf
non mettere il comando pager
sotto la parola chiave [client]
; anche se potrebbe funzionare con mysql
bene, mysqldump
si lamenterà di non riconoscerlo.
Se si sta utilizzando MySQL in modo interattivo, è possibile impostare il cercapersone per usare sed
in questo modo:
$ 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"
Se non si utilizza sed
come il cercapersone, l'output è in questo modo:
"blah":"blah","blah":"blah","blah":"blah"
ho scritto pspg
- https://github.com/okbob/pspg
Questa pager è stato progettato per i dati tabulari -. E MySQL è supportato troppo
MariaDB [sakila]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen PAGER set to 'pspg -s 14 -X --force-uniborder --quit-if-one-screen' MariaDB [sakila]> select now(); MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100;
Credo stucco ha un numero massimo di colonne è possibile specificare per la finestra.
Per Windows Io personalmente uso di Windows PowerShell e impostare la larghezza buffer dello schermo ragionevolmente alto. La larghezza della colonna rimane fisso ed è possibile utilizzare una barra di scorrimento orizzontale per visualizzare i dati. Ho avuto lo stesso problema che stai avendo ora.
modifica: Per gli host remoti che si devono SSH si può usare qualcosa di simile a Plink + Windows PowerShell
È possibile utilizzare tee
per scrivere il risultato della query in un file:
tee somepath\filename.txt
Utilizzo del comando di Windows Prompt è possibile aumentare la dimensione del buffer della finestra tanto si desidera visualizzare il numero di colonne. Questo dipende il no di colonne nella tabella.