Di PostgreSQL, pg_typeof()
fungsi memungkinkan Anda mendapatkan tipe data dari nilai apa pun.
Lebih khusus lagi, ini mengembalikan OID dari tipe data dari nilai yang diteruskan ke sana. Ini mengembalikan regtype
, yang merupakan tipe alias OID. Oleh karena itu sama dengan OID untuk tujuan perbandingan tetapi ditampilkan sebagai nama jenis.
Sintaks
Fungsi tersebut memiliki sintaks berikut:
pg_typeof(any)
Dimana any
adalah nilai apapun.
Contoh
Berikut adalah contoh dasar untuk didemonstrasikan.
SELECT pg_typeof(100);
Hasil:
integer
String Sewenang-wenang
Di Postgres, ada lebih dari satu jenis string (mis. char
, varchar
, text
). Oleh karena itu, Anda tidak bisa hanya mengapit argumen dalam tanda kutip tunggal dan berharap argumen tersebut mengetahui tipe datanya.
SELECT pg_typeof('Elephant');
Hasil:
unknown
Oleh karena itu, Anda harus menentukan tipe data aktualnya.
SELECT pg_typeof('Elephant'::varchar);
Hasil:
character varying
Di Postgres, character varying
adalah nama untuk varchar
(sebenarnya, varchar
adalah alias untuk character varying
).
Contoh terakhir ini agak berlebihan, karena saya secara eksplisit menyatakan tipe variabel, yang berarti bahwa saya sudah tahu seperti apa hasilnya.
Di dunia nyata, kemungkinan besar Anda akan mencoba mendapatkan tipe data dari suatu variabel.
Tipe Pengembalian Variabel
Dalam contoh ini, saya memasukkan string sebelumnya ke dalam variabel, lalu mendapatkan tipe datanya.
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Hasil:
NOTICE: Value: Elephant Type: character varying
Ini dia lagi, kecuali bahwa saya mengubah tipe data ke tipe string yang berbeda (char(8)
).
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$
Hasil:
NOTICE: Value: Elephant Type: character
Nilai Boolean
Berikut ini contoh pemberian nilai boolean secara eksplisit.
SELECT
pg_typeof(true),
pg_typeof(false);
Hasil:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
Mengembalikan Jenis Fungsi
Sekali lagi, sepertinya Anda tidak akan secara eksplisit memberikan true
atau false
untuk fungsi ini. Kemungkinan besar itu berasal dari variabel.
Tapi Anda juga bisa menggunakan pg_typeof()
untuk mengetahui tipe kembalian suatu fungsi.
Ini contohnya.
SELECT pg_typeof(isfinite(date '2020-07-18'));
Hasil:
boolean
Dalam hal ini saya melewati isfinite()
fungsi ke pg_typeof()
berfungsi sebagai argumennya.
Dan inilah contoh lain. Dalam hal ini saya mendapatkan tipe data dari nilai kembalian make_date()
fungsi.
SELECT pg_typeof(make_date('1999', '09', '19'));
Hasil:
date
Tipe Data Kolom
Berikut adalah contoh mengembalikan tipe data kolom database.
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;
Hasil:
timestamp without time zone
Dalam hal ini saya memeriksa tipe data actor.last_update
kolom di pagila
contoh basis data.
Mari kita periksa kolom lain:
SELECT pg_typeof(name)
FROM language
LIMIT 1;
Hasil:
character
Kolom ini ditampilkan sebagai bpchar
di antarmuka saya, yang tampaknya merupakan nama tipe internal untuk CHAR(n)
.
Omong-omong, Anda dapat menanyakan information_schema.columns
untuk tipe data kolom.
Oleh karena itu, kita dapat menggunakan kueri berikut sebagai gantinya:
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language';
Hasil:
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
Dalam hal ini saya mengembalikan tipe data untuk semua kolom dalam tabel.