psql: SELECT * ... kecuali satu kolom

10

Saya mencari cara sederhana untuk memilih semua kolom kecuali satu di psql.

Dengan psqlMaksudku baris perintah interaktif.

Saya akan senang dengan alat yang diperluas ke *daftar nama kolom yang dikutip. Lalu saya bisa menghapus kolom untuk menghapus dengan tangan.

Pertanyaan saya hanyalah tentang penggunaan interaktif psql. Ini bukan duplikat pertanyaan orang yang tidak puas dengan standar sql dan yang ingin mengeksekusi sesuatu seperti "select * -foo".

guettli
sumber
3
Tidak ada, maaf. Anda dapat melakukan query information_schemamelalui fungsi pl / pgsql untuk menghasilkan daftar dengan cukup mudah, tetapi dengan cara itu akan ada dua query.
Craig Ringer
2
Sebagian besar alat GUI dapat melakukannya. Tetapi jika Anda ingin (atau harus) tetap pada baris perintah, mungkin ini akan membantu: github.com/dbcli/pgcli
a_horse_with_no_name
@a_horse_with_no_name Saya ingin menerima "jawaban" Anda. Bisakah Anda memposting jawaban dan menjelaskan penggunaan alat pgcli memecahkan pertanyaan.
guettli
kecuali kolom yang mana? yang terakhir? yang pertama? Atau yang acak?
BAE
1
@ChengchengPei: tidak ada descperintah dipsql
a_horse_with_no_name

Jawaban:

4

Untuk mendapatkan daftar kolom dalam urutan default, tanpa kolom yang buruk:

SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytable'::regclass
AND    NOT attisdropped  -- no dropped (dead) columns
AND    attnum > 0        -- no system columns
AND    attname <> 'bad_column'  -- case sensitive!

Atau hanya WHERE attrelid = 'mytable'::regclassjika Anda mempercayai jalur pencarian untuk menyelesaikan skema yang tepat.

quote_ident() menambahkan tanda kutip ganda jika perlu.

Saya mengajukan pertanyaan yang sama pada 2007 tentang pgsql-general . Itu Postgres 8.2 saat itu. Memori yang manis ...

Terkait:

Erwin Brandstetter
sumber
1
Kedengarannya seperti item yang harus dilakukan, untuk menambahkan perintah backslash ke psql yang akan memancarkan string yang merupakan daftar semua kolom untuk tabel, dikutip dengan tepat. Dan Anda bisa menghilangkan kolom yang dimasukkan sebagai argumen tambahan untuk perintah. Jadi secara hipotesis \dq thetable bad_column.
jjanes
@jjanes: Saya tidak yakin itu bisa menghasilkan permintaan yang cukup untuk meyakinkan pengembang inti untuk mengalokasikan surat gratis quntuk tugas tersebut. Mungkin opsi umum untuk seluruh keluarga \dperintah untuk menunjukkan daftar nama-nama yang digabungkan? Suka \d- tbl(mnemonik: kebalikan dari \d+, yang menunjukkan lebih banyak detail). Hal ini akan memungkinkan untuk mendapatkan pada dasarnya setiap daftar telanjang objek. Tabel dalam skema: \dt- public.*, fungsi dimulai dengan "f_foo": \df- f_foo*dll - atau kolom dalam sebuah tabel: \d- mytbl. Mirip dengan apa yang dilakukan perintah shell ls...
Erwin Brandstetter
Aku memberimu hadiah. Tetapi sesuatu yang terintegrasi dengan psql akan menjadi fitur yang sangat bagus. Terima kasih Erwin :-)
guettli
0

Saya pikir saya telah menemukan apa yang Anda cari tetapi saya belum mengujinya sendiri.

Ada perangkat lunak yang disebut SequelPro yang akan memungkinkan Anda untuk memilih bidang dari tabel yang diberikan tetapi hanya untuk MySQL. Silakan baca dari bawah dari suatu tempat di tengah halaman:

http://www.afterelpro.com/docs/Working_with_Query_Favorites

Ada perangkat lunak lain bernama PSequel yang hanya berjalan di Mac dan mengklaim itu adalah tipe SequelPro yang dibuat untuk Postgres:

http://www.p berikutnyael.com/

Semoga ini membantu.

Tidak terikat
sumber