PostgreSQL - Tipe Data

Pada bab ini, kita akan membahas tentang tipe data yang digunakan di PostgreSQL. Saat membuat tabel, untuk setiap kolom, Anda menentukan tipe data, misalnya, jenis data apa yang ingin Anda simpan di bidang tabel.

Ini memungkinkan beberapa manfaat -

  • Consistency - Operasi terhadap kolom dengan tipe data yang sama memberikan hasil yang konsisten dan biasanya tercepat.

  • Validation - Penggunaan tipe data yang tepat menyiratkan validasi format data dan penolakan data di luar cakupan tipe data.

  • Compactness - Karena kolom dapat menyimpan satu jenis nilai, ia disimpan dengan cara yang ringkas.

  • Performance- Penggunaan tipe data yang tepat memberikan penyimpanan data yang paling efisien. Nilai yang disimpan dapat diproses dengan cepat, yang meningkatkan kinerja.

PostgreSQL mendukung berbagai Jenis Data. Selain itu, pengguna dapat membuat tipe data khusus mereka sendiri menggunakan perintah CREATE TYPE SQL. Ada berbagai kategori tipe data di PostgreSQL. Mereka dibahas di bawah ini.

Jenis Numerik

Jenis numerik terdiri dari bilangan bulat dua-byte, empat-byte, dan delapan-byte, bilangan floating-point empat-byte dan delapan-byte, dan desimal presisi yang dapat dipilih. Tabel berikut mencantumkan tipe yang tersedia.

Nama Ukuran Penyimpanan Deskripsi Jarak
smallint 2 byte integer jarak kecil -32768 hingga +32767
bilangan bulat 4 byte pilihan khas untuk integer -2147483648 hingga +2147483647
bigint 8 byte integer jarak besar -9223372036854775808 hingga 9223372036854775807
desimal variabel presisi yang ditentukan pengguna, tepat hingga 131072 digit sebelum koma desimal; hingga 16383 digit setelah koma desimal
numerik variabel presisi yang ditentukan pengguna, tepat hingga 131072 digit sebelum koma desimal; hingga 16383 digit setelah koma desimal
nyata 4 byte presisi variabel, tidak tepat 6 digit desimal presisi
presisi ganda 8 byte presisi variabel, tidak tepat Presisi 15 digit desimal
smallserial 2 byte integer autoincrementing kecil 1 hingga 32767
serial 4 byte integer autoincrementing 1 hingga 2147483647
bigserial 8 byte bilangan bulat autoincrementing besar 1 hingga 9223372036854775807

Jenis Moneter

The uang tipe menyimpan sejumlah mata uang dengan presisi pecahan tetap. Nilai tipe data numerik, int, dan bigint dapat diubah menjadi uang . Menggunakan angka floating point tidak disarankan untuk menangani uang karena potensi kesalahan pembulatan.

Nama Ukuran Penyimpanan Deskripsi Jarak
uang 8 byte jumlah mata uang -92233720368547758.08 hingga +92233720368547758.07

Jenis Karakter

Tabel yang diberikan di bawah ini mencantumkan tipe karakter tujuan umum yang tersedia di PostgreSQL.

No. S. Nama & Deskripsi
1

character varying(n), varchar(n)

variabel-panjang dengan batas

2

character(n), char(n)

panjang tetap, empuk kosong

3

text

variabel panjang tidak terbatas

Tipe Data Biner

The bytea tipe data memungkinkan penyimpanan string biner seperti pada tabel di bawah ini.

Nama Ukuran Penyimpanan Deskripsi
bytea 1 atau 4 byte ditambah string biner aktual string biner panjang variabel

Jenis Tanggal / Waktu

PostgreSQL mendukung set lengkap jenis tanggal dan waktu SQL, seperti yang ditunjukkan pada tabel di bawah ini. Tanggal dihitung menurut kalender Gregorian. Di sini, semua tipe memiliki resolusi1 microsecond / 14 digits kecuali date jenis, yang resolusinya day.

Nama Ukuran Penyimpanan Deskripsi Nilai rendah Bernilai tinggi
stempel waktu [(p)] [tanpa zona waktu] 8 byte baik tanggal dan waktu (tanpa zona waktu) 4713 SM 294276 M.
TIMESTAMPTZ 8 byte baik tanggal dan waktu, dengan zona waktu 4713 SM 294276 M.
tanggal 4 byte tanggal (tidak ada waktu dalam sehari) 4713 SM 5874897 M.
waktu [(p)] [tanpa zona waktu] 8 byte waktu hari (tanpa tanggal) 00:00:00 24:00:00
waktu [(p)] dengan zona waktu 12 byte waktu dalam sehari saja, dengan zona waktu 00: 00: 00 + 1459 24: 00: 00-1459
interval [bidang] [(p)] 12 byte jarak waktu -178000000 tahun 178000000 tahun

Jenis Boolean

PostgreSQL menyediakan Boolean tipe SQL standar. Tipe data Boolean dapat memiliki status true , false , dan status ketiga, tidak diketahui , yang diwakili oleh nilai SQL null.

Nama Ukuran Penyimpanan Deskripsi
boolean 1 byte keadaan benar atau salah

Jenis yang Dicacah

Tipe enumerasi (enum) adalah tipe data yang terdiri dari kumpulan nilai statis yang diurutkan. Mereka setara dengan jenis enum yang didukung dalam sejumlah bahasa pemrograman.

Tidak seperti tipe lainnya, Enumerated Type perlu dibuat menggunakan perintah CREATE TYPE. Jenis ini digunakan untuk menyimpan sekumpulan nilai yang statis dan teratur. Misalnya arah kompas, yaitu UTARA, SELATAN, TIMUR, dan BARAT atau hari dalam seminggu seperti gambar dibawah -

CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

Enumerated, setelah dibuat, dapat digunakan seperti tipe lainnya.

Tipe Geometris

Tipe data geometris merepresentasikan objek spasial dua dimensi. Jenis yang paling mendasar, titik, menjadi dasar untuk semua jenis lainnya.

Nama Ukuran Penyimpanan Perwakilan Deskripsi
titik 16 byte Arahkan ke pesawat (x, y)
garis 32 byte Garis tak terbatas (tidak diterapkan sepenuhnya) ((x1, y1), (x2, y2))
lseg 32 byte Segmen garis hingga ((x1, y1), (x2, y2))
kotak 32 byte Kotak persegi panjang ((x1, y1), (x2, y2))
jalan 16 + 16n byte Jalur tertutup (mirip dengan poligon) ((x1, y1), ...)
jalan 16 + 16n byte Jalan terbuka [(x1, y1), ...]
poligon 40 + 16n Poligon (mirip dengan jalur tertutup) ((x1, y1), ...)
lingkaran 24 byte Lingkaran <(x, y), r> (titik pusat dan radius)

Jenis Alamat Jaringan

PostgreSQL menawarkan tipe data untuk menyimpan alamat IPv4, IPv6, dan MAC. Lebih baik menggunakan jenis ini daripada jenis teks biasa untuk menyimpan alamat jaringan, karena jenis ini menawarkan pemeriksaan kesalahan masukan serta operator dan fungsi khusus.

Nama Ukuran Penyimpanan Deskripsi
cidr 7 atau 19 byte Jaringan IPv4 dan IPv6
inet 7 atau 19 byte Host dan jaringan IPv4 dan IPv6
macaddr 6 byte Alamat MAC

Jenis String Bit

Jenis String Bit digunakan untuk menyimpan bit mask. Mereka bisa 0 atau 1. Ada dua jenis bit SQL:bit(n) dan bit varying(n), di mana n adalah bilangan bulat positif.

Jenis Pencarian Teks

Jenis ini mendukung pencarian teks lengkap, yang merupakan aktivitas mencari melalui kumpulan dokumen bahasa alami untuk menemukan dokumen yang paling cocok dengan kueri. Ada dua Jenis Data untuk ini -

No. S. Nama & Deskripsi
1

tsvector

Ini adalah daftar diurutkan dari kata-kata berbeda yang telah dinormalisasi untuk menggabungkan varian berbeda dari kata yang sama, yang disebut sebagai "lexemes".

2

tsquery

Ini menyimpan leksem yang akan dicari, dan menggabungkannya dengan menghormati operator Boolean & (AND), | (Atau dan ! (TIDAK). Tanda kurung dapat digunakan untuk memaksakan pengelompokan operator.

Jenis UUID

UUID (Pengenal Unik Universal) ditulis sebagai urutan digit heksadesimal huruf kecil, dalam beberapa kelompok yang dipisahkan oleh tanda hubung, khususnya kelompok delapan digit, diikuti oleh tiga kelompok empat digit, diikuti oleh kelompok 12 digit, untuk total 32 digit mewakili 128 bit.

Contoh UUID adalah - 550e8400-e29b-41d4-a716-446655440000

Jenis XML

Tipe data XML bisa digunakan untuk menyimpan data XML. Untuk menyimpan data XML, pertama-tama Anda harus membuat nilai XML menggunakan fungsi xmlparse sebagai berikut -

XMLPARSE (DOCUMENT '<?xml version="1.0"?>
<tutorial>
<title>PostgreSQL Tutorial </title>
   <topics>...</topics>
</tutorial>')

XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')

Jenis JSON

The json tipe data dapat digunakan untuk menyimpan JSON (JavaScript Object Notation) data. Data semacam itu juga dapat disimpan sebagai teks , tetapi tipe data json memiliki keunggulan karena memeriksa bahwa setiap nilai yang disimpan adalah nilai JSON yang valid. Ada juga fungsi dukungan terkait yang tersedia, yang dapat digunakan secara langsung untuk menangani tipe data JSON sebagai berikut.

Contoh Contoh Hasil
larik_to_json ('{{1,5}, {99,100}}' :: int []) [[1,5], [99.100]]
row_to_json (baris (1, 'foo')) {"f1": 1, "f2": "foo"}

Jenis Array

PostgreSQL memberikan kesempatan untuk mendefinisikan kolom tabel sebagai array multidimensi panjang variabel. Array dari tipe dasar bawaan atau yang ditentukan pengguna, tipe enum, atau tipe komposit dapat dibuat.

Deklarasi Array

Jenis array dapat dideklarasikan sebagai

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer[],
   scheme text[][]
);

atau dengan menggunakan kata kunci "ARRAY" sebagai

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer ARRAY[4],
   scheme text[][]
);

Memasukkan nilai

Nilai array dapat disisipkan sebagai konstanta literal, mengapit nilai elemen dalam tanda kurung kurawal dan memisahkannya dengan koma. Contohnya ditunjukkan di bawah ini -

INSERT INTO monthly_savings 
VALUES (‘Manisha’, 
‘{20000, 14600, 23500, 13250}’, 
‘{{“FD”, “MF”}, {“FD”, “Property”}}’);

Mengakses Array

Contoh untuk mengakses Array ditunjukkan di bawah ini. Perintah yang diberikan di bawah ini akan memilih orang-orang yang tabungannya lebih banyak di kuartal kedua daripada kuartal keempat.

SELECT name FROM monhly_savings WHERE saving_per_quarter[2] > saving_per_quarter[4];

Memodifikasi Array

Contoh memodifikasi array seperti yang ditunjukkan di bawah ini.

UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}'
WHERE name = 'Manisha';

atau menggunakan sintaks ekspresi ARRAY -

UPDATE monthly_savings SET saving_per_quarter = ARRAY[25000,25000,27000,27000]
WHERE name = 'Manisha';

Mencari Array

Contoh array pencarian adalah seperti yang ditunjukkan di bawah ini.

SELECT * FROM monthly_savings WHERE saving_per_quarter[1] = 10000 OR
saving_per_quarter[2] = 10000 OR
saving_per_quarter[3] = 10000 OR
saving_per_quarter[4] = 10000;

Jika ukuran array diketahui, metode pencarian yang diberikan di atas dapat digunakan. Lain, contoh berikut menunjukkan bagaimana mencari ketika ukurannya tidak diketahui.

SELECT * FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);

Jenis Komposit

Tipe ini merepresentasikan daftar nama field dan tipe datanya, misalnya struktur baris atau record tabel.

Deklarasi Jenis Komposit

Contoh berikut menunjukkan cara mendeklarasikan tipe komposit

CREATE TYPE inventory_item AS (
   name text,
   supplier_id integer,
   price numeric
);

Tipe data ini dapat digunakan dalam buat tabel seperti di bawah ini -

CREATE TABLE on_hand (
   item inventory_item,
   count integer
);

Input Nilai Komposit

Nilai komposit dapat disisipkan sebagai konstanta literal, mengapit nilai bidang dalam tanda kurung dan memisahkannya dengan koma. Contohnya ditunjukkan di bawah ini -

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);

Ini berlaku untuk inventory_item yang ditentukan di atas. Kata kunci ROW sebenarnya opsional selama Anda memiliki lebih dari satu bidang dalam ekspresi.

Mengakses Jenis Komposit

Untuk mengakses bidang kolom komposit, gunakan titik diikuti dengan nama bidang, seperti memilih bidang dari nama tabel. Misalnya, untuk memilih beberapa subbidang dari tabel contoh on_hand kami, kueri akan seperti yang ditunjukkan di bawah ini -

SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

Anda bahkan dapat menggunakan nama tabel juga (misalnya dalam kueri yang banyak), seperti ini -

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;

Jenis Rentang

Tipe rentang mewakili tipe data yang menggunakan rentang data. Jenis rentang dapat berupa rentang diskrit (mis., Semua nilai integer 1 hingga 10) atau rentang kontinu (mis., Titik waktu mana pun antara pukul 10:00 dan 11:00).

Jenis kisaran built-in yang tersedia mencakup kisaran berikut -

  • int4range - Rentang bilangan bulat

  • int8range - Berbagai bigint

  • numrange - Rentang numerik

  • tsrange - Rentang cap waktu tanpa zona waktu

  • tstzrange - Rentang cap waktu dengan zona waktu

  • daterange - Rentang tanggal

Jenis rentang kustom dapat dibuat untuk membuat jenis rentang baru tersedia, seperti rentang alamat IP menggunakan jenis inet sebagai basis, atau rentang float menggunakan tipe data float sebagai basis.

Jenis rentang mendukung batas rentang inklusif dan eksklusif menggunakan karakter [] dan (), masing-masing. Misalnya '[4,9)' mewakili semua bilangan bulat mulai dari dan termasuk 4 hingga tetapi tidak termasuk 9.

Jenis Pengenal Objek

Pengidentifikasi objek (OID) digunakan secara internal oleh PostgreSQL sebagai kunci utama untuk berbagai tabel sistem. Jika WITH OIDS ditentukan atau variabel konfigurasi default_with_oids diaktifkan, hanya kemudian, dalam kasus seperti itu OID ditambahkan ke tabel yang dibuat pengguna. Tabel berikut mencantumkan beberapa tipe alias. Tipe alias OID tidak memiliki operasinya sendiri kecuali untuk rutinitas input dan output khusus.

Nama Referensi Deskripsi Contoh Nilai
oid apa saja pengenal objek numerik 564182
regproc pg_proc nama fungsi jumlah
regprocedure pg_proc berfungsi dengan tipe argumen jumlah (int4)
regoper pg_operator nama operator +
regoperator pg_operator operator dengan tipe argumen * (integer, integer) atau - (NONE, integer)
regclass pg_class nama relasi pg_type
regtype pg_type nama tipe data bilangan bulat
regconfig pg_ts_config konfigurasi pencarian teks Inggris
regdictionary pg_ts_dict kamus pencarian teks sederhana

Jenis Pseudo

Sistem tipe PostgreSQL berisi sejumlah entri dengan tujuan khusus yang secara kolektif disebut tipe semu. Pseudo-type tidak bisa digunakan sebagai tipe data kolom, tapi bisa digunakan untuk mendeklarasikan argumen fungsi atau tipe hasil.

Tabel yang diberikan di bawah ini mencantumkan tipe pseudo yang ada.

No. S. Nama & Deskripsi
1

any

Menunjukkan bahwa suatu fungsi menerima tipe data masukan apa pun.

2

anyelement

Menunjukkan bahwa suatu fungsi menerima tipe data apa pun.

3

anyarray

Menunjukkan bahwa suatu fungsi menerima tipe data larik apa pun.

4

anynonarray

Menunjukkan bahwa suatu fungsi menerima tipe data non-larik apa pun.

5

anyenum

Menunjukkan bahwa suatu fungsi menerima tipe data enum apa pun.

6

anyrange

Menunjukkan bahwa suatu fungsi menerima tipe data rentang apa pun.

7

cstring

Menunjukkan bahwa suatu fungsi menerima atau mengembalikan string C yang diakhiri dengan null.

8

internal

Menunjukkan bahwa suatu fungsi menerima atau mengembalikan tipe data server-internal.

9

language_handler

Penangan panggilan bahasa prosedural dideklarasikan untuk mengembalikan language_handler.

10

fdw_handler

Penangan pembungkus data asing dideklarasikan untuk mengembalikan fdw_handler.

11

record

Mengidentifikasi fungsi yang mengembalikan jenis baris yang tidak ditentukan.

12

trigger

Fungsi pemicu dideklarasikan untuk mengembalikan pemicu.

13

void

Menunjukkan bahwa suatu fungsi tidak mengembalikan nilai.