Format output alternatif untuk psql


316

Saya menggunakan PostgreSQL 8.4 di Ubuntu. Saya punya tabel dengan kolom c1melalui cN. Kolom cukup lebar sehingga memilih semua kolom menyebabkan deretan hasil kueri untuk membungkus beberapa kali. Akibatnya, outputnya sulit dibaca.

Ketika hasil kueri hanya terdiri dari beberapa baris, akan lebih mudah jika saya dapat melihat hasil kueri sedemikian rupa sehingga setiap kolom dari setiap baris berada pada baris yang terpisah, misalnya

 c1: <value of row 1's c1>
 c2: <value of row 1's c1>
 ...
 cN: <value of row 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2's c1>
 etc.

Saya menjalankan kueri ini di server di mana saya lebih suka tidak menginstal perangkat lunak tambahan. Apakah ada pengaturan psql yang akan membiarkan saya melakukan sesuatu seperti itu?

Jawaban:


532

Saya hanya perlu menghabiskan lebih banyak waktu menatap dokumentasi. Perintah ini:

\x on

akan melakukan apa yang saya inginkan. Berikut adalah beberapa contoh keluaran:

select * from dda where u_id=24 and dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               | 
dda_nickname       | 
dda_account_name   | 
cu_id              | 1
abd_id             | 

8
Anda juga dapat mencoba \ pset format yang dibungkus (format yang dibolehkan tidak selaras, disejajarkan, dibungkus, html, lateks, troff-ms). Jika tampilan cukup sempit itu akan membungkus kata setiap kolom.
Bryce

12
\xsendiri akan beralih nilainya, menghemat tiga penekanan tombol! (Berguna saat Anda dengan cepat beralih antara output lebar dan sempit).
msanford

7
Jika Anda mencari yang setara dengan \Gdari Mysql, coba tambahkan \x\g\xke akhir kueri atau tentukan pintasan dalam ~/.psqlrcmenambahkan \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', kemudian gunakan di akhir :G. (perhatikan kurangnya titik koma)
Sławomir Lenart

5
Apakah mungkin untuk melewati " \x on" atau yang setara di baris perintah? Akan lebih baik jika saya bisa menyimpan (misalnya, dengan menggunakan alias bash shell) psql --somethingsehingga saya selalu memiliki opsi yang diaktifkan secara default.
machineghost

2
@machineghost Gunakan -P expanded=autoatau--pset expanded=auto
alecdwm

269

(Baru) Mode Otomatis yang Diperluas: \ x otomatis

Baru untuk Postgresql 9.2; PSQL secara otomatis menyesuaikan rekaman dengan lebar layar. sebelumnya Anda hanya mengaktifkan atau menonaktifkan mode yang diperluas dan harus beralih di antara mode yang diperlukan.

  • Jika catatan dapat masuk ke lebar layar; psql menggunakan pemformatan normal.
  • Jika catatan tidak dapat masuk ke dalam lebar layar; psql menggunakan mode diperluas.

Untuk mendapatkan ini gunakan: \ x otomatis

Postgresql 9.5 Dokumentasi pada perintah PSQL.


Layar lebar, pemformatan normal:

 id | time  |       humanize_time             | value 
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 rows)

Layar sempit, pemformatan yang diperluas:

-[ RECORD 1 ]-+---------------------------
id            | 1
time          | 09:30
humanize_time | Early Morning - (9.30 am)
value         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
time          | 11:30
humanize_time | Late Morning - (11.30 am)
value         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
time          | 13:30
humanize_time | Early Afternoon - (1.30pm)
value         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
time          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
value         | 930

Bagaimana cara memulai psql dengan \ x auto?

Konfigurasikan \x autoperintah pada startup dengan menambahkannya ke .psqlrcdalam folder rumah Anda dan restart psql. Lihat di bagian 'File' di psql doc untuk info lebih lanjut .

~ / .psqlrc

\x auto

70

Anda memiliki begitu banyak pilihan, bagaimana Anda bisa bingung :-)? Kontrol utama adalah:

# \pset format
# \H
# \x
# \pset pager off

Masing-masing memiliki opsi dan interaksi dengan yang lain. Opsi paling otomatis adalah:

# \x off;\pset format wrapped
# \x auto

Opsi "\ x auto" yang lebih baru hanya beralih ke tampilan baris demi baris "jika perlu".

-[ RECORD 1 ]---------------
id          | 6
description | This is a gallery of oilve oil brands.
authority   | I love olive oil, and wanted to create a place for
reviews and comments on various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A 
authority   | Testing

"\ Pset format yang dibungkus" yang lebih lama serupa dengan mencoba mencocokkan data dengan rapi di layar, tetapi kembali menjadi tidak selaras jika header tidak cocok. Berikut ini contoh yang dibungkus:

 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This is a gallery of oilve     | I love olive oil, and wanted to
    ; oil brands.                    ;  create a place for reviews and
    ;                                ;  comments on various types.
 19 | Test Test A                    | Testing

\x autodengan \pset pager offbagus.
mitnk

Apakah \x off; \pset format wrappeddan \x autodimaksudkan untuk digunakan bersama atau mereka saling eksklusif?
Demitri

20

Satu hal yang menarik adalah kita bisa melihat meja secara horizontal, tanpa melipat. kita bisa menggunakan PAGERvariabel lingkungan. psql memanfaatkannya. Anda dapat mengatur

export PAGER='/usr/bin/less -S'

atau hanya less -Sjika sudah tersedia di baris perintah, jika tidak dengan lokasi yang tepat. -S untuk melihat garis yang tidak dilipat. Anda dapat melewati setiap penampil kustom atau opsi lain dengannya.

Saya telah menulis lebih banyak di Tampilan Horisontal Psql


1
Jawabannya sangat bagus. Saya terkejut itu tidak ditandai lebih tinggi. Sempurna untuk siapa saja yang bekerja di terminal.
LUser

Ini sangat membantu
Merlin

Ini berguna, tetapi bagaimana Anda menggulir ke kanan?
Niel de Wet

18

pspg adalah alat sederhana yang menawarkan pemformatan tabel tingkat lanjut, pengguliran horizontal, pencarian dan banyak lagi fitur.

git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

kemudian pastikan untuk memperbarui PAGERvariabel mis. di~/.bashrc

export PAGER="pspg -s 6" 

di mana -ssingkatan skema warna ( 1-14). Jika Anda menggunakan repositori pgdg cukup instal paket (pada distribusi seperti Debian):

sudo apt install pspg

contoh pspg


7

Pastikan juga untuk memeriksa \ H, yang mengaktifkan / menonaktifkan output HTML. Tidak harus mudah dibaca di konsol, tetapi menarik untuk dibuang ke file (lihat \ o) atau menempel ke jendela editor / browser untuk dilihat, terutama dengan beberapa baris data yang relatif kompleks.


1

Anda dapat menggunakan zenity untuk menampilkan output kueri sebagai tabel html.

  • pertama-tama implementasikan skrip bash dengan kode berikut:

    cat> '/tmp/sql.op'; zenity --text-info --html --filename = '/ tmp / sql.op';

    simpan seperti mypager.sh

  • Kemudian ekspor variabel lingkungan PAGER dengan menetapkan path lengkap skrip sebagai nilai.

    misalnya: - export PAGER = '/ path / mypager.sh'

  • Kemudian login ke program psql kemudian jalankan perintah \ H

  • Dan akhirnya menjalankan kueri apa pun, output tabled akan ditampilkan dalam zenity dalam format tabel html.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.