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. |