Saya mencari informasi dalam database yang tidak saya ketahui.
Ini adalah produk pihak ke-3, mereka lambat dalam menjawab beberapa pertanyaan, dan saya tahu datanya ada di dalam db itu, jadi saya ingin melakukan sedikit teknik retro.
Diberikan satu tabel, apakah mungkin untuk memiliki daftar nama-nama kolom untuk tabel ini?
Sebagai contoh di SqlServer, dimungkinkan untuk membuang tabel ke CREATE
pernyataan yang dapat digunakan kembali , yang secara tekstual mencantumkan semua kolom yang terdiri dari tabel tersebut.
postgresql
information-schema
catalogs
Stephane Rolland
sumber
sumber
\dt[+] table_name
masukpsql
.Jawaban:
Selain baris perintah
\d+ <table_name>
yang sudah Anda temukan, Anda juga bisa menggunakan Skema Informasi untuk mencari data kolom, menggunakaninformation_schema.columns
:Catatan: Seperti contoh di atas, pastikan nilainya tertutup dalam tanda kutip.
sumber
\x on
atau\pset expanded on
untuk membuat hasil kueri linear (bukan tabular) dan dengan demikian lebih mudah dibaca stackoverflow.com/a/9605093/513397\d+ public.*
untuk mendapatkan deskripsi (skema + indeces / fkeys / trigger) dari semua tabel dan tampilan dipublic
skema. Kami menggunakannya dalam skrip kait pra-komit kami untuk melacak git perubahan dalam DB yang dibuat oleh setiap komit.Sebagai pelengkap jawaban lain, bahkan pernyataan SELECT yang tidak mengembalikan baris akan memaparkan nama kolom kepada Anda dan kode aplikasi.
Izin mungkin ikut bermain dengan salah satu dari pendekatan ini.
sumber
The informasi skema adalah cara lambat dan pasti: itu adalah standar dan sebagian besar portabel untuk database lain yang mendukungnya. Dan itu akan terus bekerja di versi utama.
Namun, pandangan dalam skema informasi sering kali bergabung dalam banyak tabel dari katalog sistem untuk memenuhi format standar yang ketat - banyak di antaranya hanya barang mati sebagian besar. Ini membuat mereka lambat .
Pengembang Postgres tidak membuat janji, tetapi dasar-dasar (seperti apa yang dibutuhkan di sini) tidak akan berubah di berbagai versi utama.
psql
(antarmuka baris perintah asli) mengambil jalur cepat, tentu saja, dan menanyakan sumber secara langsung. Jika Anda mulaipsql
dengan parameter-E
, SQL di belakang perintah backslash suka\d
ditampilkan. Atau\set ECHO_HIDDEN on
dari baris perintah psql. Mulai dari sana Anda dapat membangun jawaban untuk pertanyaan Anda.Lebih cepat dari permintaan
information_schema.columns
. CobaEXPLAIN ANALYZE
lihat sendiri. Masih sulit untuk satu kali pencarian. Tetapi mungkin membuat perbedaan jika digunakan dalam kueri / fungsi yang diulang berkali-kali.Ada juga perbedaan visibilitas yang halus. Perbandingan rinci:
sumber
-E
dan menunjukkan kepada orang-orang cara mendapatkan sql dari psql.psql
pada PostgreSQL 11+Jika Anda sedang mencari jenis kolom pada query, Anda dapat menggunakan
psql
's\gdesc
sumber
Hanya PostgreSQL
Ini agak tipu tetapi bisa menjadi penantang jika Anda mencari SQL sesingkat mungkin:
atau bahkan lebih pendek (dengan asumsi setidaknya ada satu baris yang ada di tabel)
Daftar mempertahankan pesanan. Jika Anda tidak peduli dengan pesanan dan
hstore
memasang ekstensi, Anda dapat melakukan lebih pendeksumber