Apakah ada kueri atau perintah PostgreSQL yang mengembalikan nama bidang dan jenis bidang kueri, tabel, atau tampilan?
Misalnya, solusi jika diterapkan pada permintaan SELECT sederhana seperti SELECT * from person
harus mengembalikan daftar seperti:
Column Name | Column Type
===========================
First Name | character
Last Name | character
Age | integer
Date of Birth | date
Saya telah melihat information_schema
pandangan yang dijelaskan dalam jawaban di bawah ini dan tampaknya mencakup tabel dengan cukup baik, dan saya menduga itu mencakup pandangan juga, tetapi saya belum memeriksanya.
Yang terakhir adalah setiap permintaan SELECT yang sewenang-wenang tetapi valid misalnya melibatkan JOINS
,, UNIONS
dll, pada basis data. Apakah ada prosedur bawaan, atau prosedur atau skrip tersimpan lainnya yang dapat mengembalikan yang sama untuk QUERY yang valid sama sekali?
Saya mengembangkan program yang membuat data dan formulir permintaan dan informasi diperlukan untuk fungsi validasi data dan mengeksekusi pada data yang dikembalikan.
sumber
SELECT
kueri, yaitu non-pendefinisian data atau kueri manipulasi data, baik pada tabel, tampilan, atau kueri lain, mengembalikan baris dan kolom data, sehingga PostgreSQL harus dapat mengembalikan suatu daftar nama kolom dan tipe datanya. Tampilan yanginformation_schema
disebutkan di bawah dalam jawaban tampaknya menjawabnya untuk tabel dan tampilan. Pertanyaan SELECT sewenang-wenang adalah batas akhir. Saya akan mengedit jawaban untuk menjelaskan lebih baikJawaban:
Skema informasi vs. katalog sistem
Kami telah berdiskusi tentang hal ini berkali-kali. Skema informasi melayani tujuan tertentu. Jika Anda tahu jalan di katalog sistem, yang melayani sebagian besar tujuan lebih baik , IMO. Katalog sistem adalah sumber aktual semua informasi.
The informasi skema menyediakan standar pandangan yang membantu dengan portabilitas, sebagian besar di versi Postgres besar, karena portabilitas di seluruh platform RDBMS yang berbeda biasanya adalah ilusi sekali pertanyaan Anda yang cukup canggih untuk kebutuhan untuk mencari katalog sistem. Dan, terutama, Oracle masih tidak mendukung skema informasi.
Tampilan dalam skema informasi harus melewati banyak rintangan untuk mencapai format yang memenuhi standar. Ini membuat mereka lambat, terkadang sangat lambat. Bandingkan paket dan kinerja untuk objek-objek dasar ini:
Perbedaannya luar biasa. Itu benar-benar tergantung pada apa yang Anda cari.
Contoh anda
Sebagai contoh Anda
SELECT * from tbl
, bandingkan dua kueri di bawah ini untuk tabel sederhana ini:Menggunakan
pg_attribute
:format_type()
mengembalikan tipe lengkap dengan semua pengubah:Juga perhatikan bahwa para pemain untuk
regclass
menyelesaikan nama tabel agak cerdas sesuai dengan saat inisearch_path
. Itu juga menimbulkan pengecualian jika nama tidak valid. Detail:Menggunakan
information_schema.columns
:Informasi terstandarisasi, tetapi tidak lengkap :
Untuk mendapatkan informasi lengkap untuk tipe data, Anda perlu mempertimbangkan semua kolom ini sebagai tambahan:
Jawaban terkait:
Daftar pro & kontra , pro terbesar (IMO) dicetak tebal:
Tampilan skema informasi
Katalog sistem
oid
termasuk)Permintaan sewenang-wenang
Untuk mendapatkan daftar nama dan tipe kolom yang sama dari kueri, Anda bisa menggunakan trik sederhana: BUAT tabel sementara dari output kueri, lalu gunakan teknik yang sama seperti di atas.
Anda dapat menambahkan
LIMIT 0
, karena Anda tidak memerlukan data aktual:Untuk mendapatkan tipe data dari masing-masing kolom, Anda juga dapat menggunakan fungsi
pg_typeof()
:sumber
Anda dapat menggunakan
psql
klien baris perintah.\dt
akan menampilkan daftar tabel\dv
akan menampilkan daftar tampilan\d [object_name]
akan menjelaskan skema tabel atau tampilanTidak yakin bagaimana Anda akan menggambarkan kueri.
Info lebih lanjut: https://manikandanmv.wordpress.com/tag/basic-psql-commands/
sumber
Jika Anda memiliki akses ke pg_catalog dan menggunakan PgAdmin3, saya sangat merekomendasikan solusi yang saya temukan di blog Tech Valentine ( http://tech.valgog.com/2011/02/pgadmin-iii-macros-get-table-fields. html ). Ini adalah makro PgAdmin3 yang dapat diakses dengan pintasan untuk menampilkan definisi nama tabel yang dipilih.
Bekerja seperti pesona dan sangat berguna.
sumber
Gunakan dengan
information_schema
pandangan , mereka SQL-standar dan mengandung informasi yang Anda inginkan.Anda juga dapat langsung akses
pg_class
,pg_attribute
, dll, tapi itu unportable dan sering fiddlier; Anda mungkin perlu fungsi pembantu sepertioidvectortypes
,pg_get_function_arguments
, dll untuk beberapa hal.Jika Anda ingin melihat bagaimana
psql
mengeksekusi sesuatu seperti\dt
, jalankanpsql -E
- itu akan mencetak kueri. Namun, biasanya lebih baik menggunakaninformation_schema
jika itu akan memenuhi kebutuhan Anda.sumber
Ini mungkin terlalu sederhana, tetapi pgAdmin4 menunjukkan tipe bidang dalam hasil keluaran. Solusi lain di atas mungkin lebih elegan, tetapi ketika saya hanya perlu jawaban cepat, saya menemukan permintaan GUI pgAdmin4 bekerja dengan sangat baik. Mencoba mengetahui tipe bidang dari bidang terhitung yang dikembalikan oleh tampilan atau fungsi bisa rumit.
sumber