Skip to content

Tipe data PostgreSQL dijelaskan

Semua tipe data kolom PostgreSQL yang umum, dikelompokkan per keluarga: bilangan bulat, desimal, teks, waktu, boolean dan UUID, JSON, alamat jaringan, tipe komposit, dan tipe ekstensi. Setiap baris menunjukkan apa yang disimpan tipe tersebut dan kapan memilihnya.

PostgreSQL memiliki puluhan tipe, tetapi desain skema sehari-hari memakai satu set inti. Pilihan yang berulang: integer versus numeric untuk angka, varchar versus text untuk string (text biasanya cukup), timestamp versus timestamptz (utamakan timestamptz untuk apa pun di dunia nyata), dan json versus jsonb (utamakan jsonb, biner dan bisa diindeks). Pilih tipe paling spesifik yang masih muat; database yang menegakkannya untukmu.

Tabel referensi · 46 entri
46 of 46 rows
Bilangan bulat
Integer 2 byte dari -32768 sampai 32767.Jarang; hanya saat harus menghemat ruang.
Integer 4 byte, sekitar plus/minus 2 miliar.Kolom bilangan bulat bawaan.
Integer 8 byte, sekitar plus/minus 9 kuintiliun.Hitungan sangat besar atau ID eksternal.
Integer 4 byte yang bertambah otomatis.Kunci bernomor otomatis warisan; sejak PG 10, GENERATED AS IDENTITY adalah pengganti yang disarankan.
Varian serial 2 byte dan 8 byte.Penomoran otomatis yang dipasangkan dengan kolom smallint atau bigint.
Integer yang dibuatkan oleh tabel untukmu (GENERATED ALWAYS AS IDENTITY).Serial modern; standar SQL dan lebih aman dari insert manual.
Desimal & float
Desimal eksak dengan presisi arbitrer.Uang dan apa pun yang tak boleh ada galat pembulatan.
Float presisi tunggal 4 byte.Nilai ilmiah perkiraan yang presisinya tidak kritis.
Float presisi ganda 8 byte.Geospasial, statistik, dan nilai fitur ML.
Jumlah mata uang dengan lokal tetap.Jarang; numeric dengan kode mata uang di sisi aplikasi lebih portabel.
Teks
Teks panjang tetap, diberi spasi hingga penuh.Kode dengan lebar yang sudah diketahui; jarang diperlukan.
Teks panjang variabel dengan batas opsional.String berbatas seperti nama pengguna atau email.
Teks panjang variabel tanpa batas panjang.Kolom string serbaguna; tidak ada penalti performa dibanding varchar.
Waktu
Tanggal kalender tanpa waktu.Tanggal lahir dan tanggal jatuh tempo.
Waktu dalam sehari, dengan atau tanpa zona waktu.Alarm harian atau jam buka toko.
Tanggal dan waktu tanpa zona waktu.Skema warisan; hindari untuk pekerjaan baru.
Tanggal dan waktu disimpan sebagai UTC, ditampilkan di zona klien.Pilihan bawaan untuk momen dunia nyata mana pun; utamakan ini daripada timestamp.
Rentang waktu, seperti 2 hari atau 3 jam.Durasi dan aritmetika tanggal.
Boolean, UUID & byte
Benar atau salah.Flag dan sakelar.
Pengidentifikasi unik universal 128-bit.ID non-berurutan yang aman diekspos (buat di aplikasi atau dengan gen_random_uuid).
Byte biner mentah.Blob, gambar, dan payload opaque; utamakan object storage untuk file besar.
String bit dengan panjang tetap atau variabel.Flag terpadatkan dan bidang protokol; satu nilai nyala/mati tetap boolean.
JSON & semi-terstruktur
JSON yang diurai ke bentuk biner yang bisa diindeks.Data fleksibel atau bersarang; kolom JSON yang disarankan (mendukung indeks GIN).
JSON yang disimpan sebagai teks asli.Jarang; hanya saat harus mempertahankan urutan kunci atau spasi persis.
Teks XML.Integrasi warisan yang mewajibkan XML.
Ekspresi path terkompilasi untuk menavigasi data JSON.Penyaringan di dalam jsonb dengan jsonb_path_query dan operator SQL/JSON.
Jaringan & pencarian
Alamat host IPv4 atau IPv6.Menyimpan IP klien atau server.
Blok jaringan IP, seperti 10.0.0.0/24.Aturan firewall dan rentang subnet.
Alamat MAC 6 byte atau 8 byte (EUI-64).Pengidentifikasi perangkat dan antarmuka jaringan.
Teks yang diproses lebih dulu untuk pencarian teks penuh.Pencarian bawaan Postgres sebelum beralih ke mesin pencari terpisah.
Istilah pencarian yang digabung dengan operator AND, OR, dan prefiks.Sisi kueri dari pencarian teks penuh, dicocokkan ke tsvector dengan @@.
Posisi write-ahead log, nomor urut log.Pemantauan lag replikasi dan backup.
Komposit & lanjutan
Array dari tipe dasar mana pun, mis. integer[].Daftar nilai sederhana; beralih ke tabel anak saat elemen memerlukan kolomnya sendiri.
Satu nilai dari daftar tetap yang kamu definisikan.Kolom status dengan set opsi yang stabil.
Tipe baris kustom dari beberapa bidang.Kelompok bidang berulang yang dipakai bersama antar tabel.
Rentang berkesinambungan antara dua batas.Jadwal, pita harga, dan rentang versi, dengan operator overlap.
Tipe dasar yang dibungkus constraint yang kamu definisikan.Aturan yang dapat dipakai ulang, seperti email non-kosong, ditegakkan di setiap kolom yang memakainya.
Baris tanpa nama dari nilai-nilai bertipe.Nilai kembalian fungsi PL/pgSQL dan hasil kueri perantara.
Nilai geometri dua dimensi bawaan.Geometri bidang sederhana; lokasi dunia nyata butuh PostGIS.
Pengidentifikasi objek sistem 4 byte tanpa tanda.Join katalog sistem; bukan untuk kolom aplikasi.
String pengidentifikasi internal 63 karakter.Kueri katalog; text biasa untuk apa pun yang tampil ke pengguna.
Tipe ekstensi
Pasangan kunci/nilai string dalam satu nilai (ekstensi).Map datar; jsonb menutupi ini lebih baik saat ini.
Path label hierarkis seperti news.tech.ai (ekstensi).Pohon dengan kueri leluhur dan keturunan.
Teks yang dibandingkan tanpa memedulikan huruf besar/kecil (ekstensi).Keunikan case-insensitive seperti email, tanpa indeks lower().
Objek geografis dan geometris dari ekstensi PostGIS.Kueri jarak, penahanan, dan indeks spasial.
Fungsi ekstensi yang menghasilkan nilai UUID.Generasi warisan; sejak PG 13, gen_random_uuid() sudah bawaan.