Bagaimana saya mendapatkan tipe data bidang tertentu dari tabel di postgres? Sebagai contoh, saya memiliki tabel berikut ini, student_details (stu_id integer, stu_name varchar (30), join_date timestamp);
Dalam hal ini menggunakan nama bidang / atau cara lain, saya perlu mendapatkan tipe data dari bidang tertentu. Apakah ada kemungkinan?
postgresql
Nathan Villaescusa
sumber
sumber
Jawaban:
Anda bisa mendapatkan tipe data dari information_schema (8,4 dokumen yang dirujuk di sini, tetapi ini bukan fitur baru):
sumber
where table_catalog = ? and table_schema = ? and table_name = ?;
Tetapi tampilan information_schema ini tidak mempertimbangkan bahwa DDL mungkin menggunakan domain .pg_typeof
Anda dapat menggunakan fungsi pg_typeof () , yang juga berfungsi dengan baik untuk nilai arbitrer.
sumber
SELECT pg_typeof( date_part( 'year', now() ) ) AS expr
mungkin berbeda dari yang Anda harapkan.pg_typeof
bekerja untuk bidang yang keluar dari prosedur tersimpan, yang tabel backend, jika bahkan ada, tidak diketahui / tidak jelas.select state, qstart, pg_typeof(qstart) as ty_qstart from listconn()
. information_schema tidak akan banyak membantu di sini.Coba permintaan ini:
sumber
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';
jalankan
psql -E
lalu\d student_details
sumber
Jika Anda menyukai solusi 'Mike Sherrill' tetapi tidak ingin menggunakan psql, saya menggunakan kueri ini untuk mendapatkan informasi yang hilang:
dengan hasil:
sumber
Tampilan skema informasi dan pg_typeof () mengembalikan informasi tipe yang tidak lengkap. Dari jawaban-jawaban ini,
psql
berikan informasi jenis yang paling tepat. (OP mungkin tidak membutuhkan informasi yang tepat seperti itu, tetapi harus mengetahui keterbatasannya.)Menggunakan
psql
dan\d public.test
dengan benar menunjukkan penggunaan tipe datatest_domain
, panjang kolom varchar (n), dan ketepatan dan skala kolom numerik (p, s).Permintaan ini terhadap tampilan information_schema tidak menunjukkan penggunaan
test_domain
sama sekali. Itu juga tidak melaporkan detail kolom varchar (n) dan numerik (p, s).Anda mungkin bisa mendapatkan semua informasi itu dengan bergabung dengan pandangan information_schema lain, atau dengan menanyakan tabel sistem secara langsung.
psql -E
mungkin membantu dengan itu.Fungsi
pg_typeof()
dengan benar menunjukkan penggunaantest_domain
, tetapi tidak melaporkan detail kolom varchar (n) dan numerik (p, s).sumber
Menarik tipe data dari
information_schema
dimungkinkan, tetapi tidak nyaman (perlu menggabungkan beberapa kolom dengancase
pernyataan). Atau seseorang dapat menggunakanformat_type
fungsi bawaan untuk melakukan itu, tetapi ia bekerja pada pengidentifikasi tipe internal yang terlihatpg_attribute
tetapi tidak diinformation_schema
. ContohBerdasarkan https://gis.stackexchange.com/a/97834 .
sumber
b.relfilenode
denganb.oid