CSV (Comma-Separated Values) adalah format data yang paling umum digunakan karena sederhana, ringan, dan kompatibel dengan hampir semua sistem analitik. . Namun, ketika dataset berukuran besar digunakan—seperti Toy Store E-commerce dataset—maka PostgreSQL menjadi pilihan ideal untuk mengelola, membersihkan, dan menyiapkan data sebelum divisualisasikan di Power BI. Artikel ini membahas langkah teknis, tantangan umum, serta solusi praktis agar proses impor dapat berjalan lancar.
Langkah 1: Persiapan Awal
Sebelum melakukan impor, lakukan hal berikut ini:
- Pastikan PostgreSQL sudah didownload dan terinstal dengan baik:
- Versi terbaru (≥14) lebih stabil dan mendukung fitur modern.
- PgAdmin sebagai GUI untuk memudahkan manajemen database.
- Lakukan beberapa test awal untuk memastikan PostgreSQL dapat digunakan.
- Siapkan Dataset CSV:
- Download data pada link berikut ini:
https://mavenanalytics.io/data-playground/toy-store-e-commerce-database
- Pastikan agar semua data disimpan dalam satu folder yang dapat diakses oleh PostgreSQL.
- Identifikasi tipe delimited pada Data CSV.
- Buat Database & Tabel di PostgreSQL:
- Tentukan struktur tabel sesuai dengan kolom di CSV.
- Gunakan tipe data yang tepat (INTEGER, VARCHAR, DATE, NUMERIC).
Bagaimana cara mengidentifikasi tipe delimiter pada CSV?
Identifikasi tipe delimiter data CSV perlu dilakukan di awal untuk menghindari kesalahan dalam memasukkan tipe delimiter apakah “;” atau “,” yang tepat. Ada beberapa cara praktis untuk mengidentifikasi delimiter CSV yang bisa kamu lakukan sebelum mengimpor ke PostgreSQL:
- Gunakan Notepad, VS Code, atau Sublime Text.
Lihat baris pertama: biasanya terlihat jelas apakah dipisahkan dengan , (koma), ; (titik koma), atau \t (tab).
- Gunakan Excel atau Google Sheets
- Jika dibuka di Excel/Sheets, perhatikan bagaimana kolom terbagi.
- Jika semua data masuk ke satu kolom, berarti delimiter tidak sesuai default (Excel biasanya pakai , atau ; tergantung regional setting).
Biasanya CSV dari Excel Eropa/Indonesia biasanya menggunakan “;” karena setting regional. Lalu CSV dari sistem web/API biasanya menggunakan “,”. Dan CSV dari log sistem kadang menggunakan tab “(\t)”.
Data Apa Saja Yang Digunakan Oleh PostgreSQL?
Dalam melakukan import data ke PostgreSQL, maka kita perlu memahami tipe data yang tepat, sehingga menghindari error saat proses import data.
- Numeric Types
Digunakan untuk angka, baik integer maupun pecahan.
- smallint (2 byte): -32,768 hingga 32,767
- integer (4 byte): -2,147,483,648 hingga 2,147,483,647
- bigint (8 byte): -9,223,372,036,854,775,808 hingga 9,223,372,036,854,775,807
- decimal / numeric: presisi arbitrer, cocok untuk data keuangan
- real (4 byte) dan double precision (8 byte): angka floating-point
- serial / bigserial: integer auto-increment
- Monetary Types
- money: menyimpan nilai mata uang dengan format lokal.
- Character Types
Digunakan untuk teks.
- char(n): panjang tetap
- varchar(n): panjang variabel dengan batas maksimum
- text: panjang variabel tanpa batas
- Binary Data Types
- bytea: menyimpan data biner (misalnya file, gambar).
- Date/Time Types
- date: tanggal (tahun, bulan, hari)
- time [with/without time zone]: jam, menit, detik
- timestamp [with/without time zone]: kombinasi tanggal dan waktu
- interval: durasi waktu (misalnya “2 days”, “3 hours”)
- Boolean Type
- boolean: menyimpan nilai TRUE atau FALSE.
- Enumerated Types (ENUM)
- Membuat daftar nilai tetap (misalnya status: “pending”, “shipped”, “delivered”).
- Geometric Types
- point, line, circle, polygon: menyimpan data geometri.
- Network Address Types
- cidr, inet, macaddr: menyimpan alamat IP dan MAC.
- Bit String Types
- bit(n): string bit dengan panjang tetap.
- bit varying(n): string bit dengan panjang variabel.
- Text Search Types
- tsvector, tsquery: mendukung pencarian teks full-text.
- UUID
- uuid: menyimpan Universal Unique Identifier.
- JSON Types
- json: menyimpan data JSON tanpa validasi.
- jsonb: menyimpan data JSON dengan format biner, lebih efisien untuk query.
- Array Types
- PostgreSQL mendukung array untuk hampir semua tipe data. Contoh: integer[], text[].
- Composite Types
- Membuat tipe data gabungan dari beberapa kolom.
Insight Praktis dalam Menentukan Tipe Data:
- Gunakan numeric untuk data keuangan agar presisi tidak hilang.
- Gunakan text daripada varchar jika tidak ada batasan panjang, karena lebih fleksibel.
- Gunakan jsonb untuk data semi-terstruktur agar query lebih cepat.
- Gunakan timestamp with time zone untuk aplikasi global agar konsisten lintas zona waktu.
Kategori | Tipe Data | Deskripsi | Contoh Penggunaan (E-commerce) |
Numeric | smallint, integer, bigint | Bilangan bulat dengan ukuran berbeda | order_id (integer), customer_id (bigint) |
decimal, numeric | Angka presisi tinggi, cocok untuk keuangan | price (numeric), cogs (decimal) | |
real, double precision | Floating-point untuk data ilmiah | discount_rate (real) | |
serial, bigserial | Auto-increment integer | product_id (serial) | |
Monetary | money | Nilai mata uang dengan format lokal | total_revenue (money) |
Character/Text | char(n), varchar(n), text | Teks panjang tetap/variabel | product_name (varchar), description (text) |
Binary | bytea | Data biner (file, gambar) | product_image (bytea) |
Date/Time | date, time, timestamp | Tanggal dan waktu | order_date (date), created_at (timestamp) |
interval | Durasi waktu | delivery_time (interval) | |
Boolean | boolean | Nilai TRUE/FALSE | is_active (boolean), is_paid (boolean) |
Enumerated (ENUM) | ENUM | Daftar nilai tetap | order_status (ENUM: pending, shipped, done) |
Geometric | point, line, circle, polygon | Data geometri | Lokasi toko fisik (point) |
Network | cidr, inet, macaddr | Alamat IP dan MAC | user_ip (inet) |
Bit String | bit(n), bit varying(n) | String bit | Flag status tertentu |
Text Search | tsvector, tsquery | Full-text search | Pencarian produk berdasarkan deskripsi |
UUID | uuid | Universal Unique Identifier | session_id (uuid) |
JSON | json, jsonb | Data JSON (semi-terstruktur) | marketing_metadata (jsonb) |
Array | integer[], text[] | Array dari tipe data | tags (text[]), related_products (integer[]) |
Composite | Custom composite type | Gabungan beberapa kolom | customer_profile (gabungan nama, email, phone) |
Pada dataset Toy Store E-commerce tabel products, tipe datanya adalah sebagai berikut:
- product_id: INTEGER
- created_at: TIMESTAMP
- product_name: TEXT
Lalu untuk tabel order_items_refunds, tipe datanya sebagai berikut:
- order_item_refund_id: INTEGER
- created_at: TIMESTAMP
- order_item_id: INTEGER
- order_id: INTEGER
- refund_amount_usd: NUMERIC (10,2)
Tipe data untuk tabel lainnya dapat dilihat pada Youtube video berikut (insert link)
Langkah 2: Membuat Tabel di Database PostgreSQL
Setelah tipe delimiter dan tipe data dapat didentifikasi, maka tahap berikutnya adalah membuat tabel kosong pada PostgreSQL sebagai Frame untuk data yang akan diimport. Contoh syntax query untuk membuat tabel products adalah sebagai berikut:
CREATE TABLE products (
product_id INTEGER,
created_at TIMESTAMP,
product_name TEXT
);
Syntax query nya dapat diakses pada link berikut (insert link).
Langkah 3: Melakukan import data pada tabel yang sudah dibuat
Jika tabel pada PostgreSQL database sudah dibuat maka tahap berikutnya adal melakukan import data pada tabel tersebut.
Cara Paling Mudah untuk mengimport CSV data ke PostgreSQL
- Klik kanan tabel → Import/Export Data.
- Pilih file CSV → tentukan delimiter → klik OK.
- Data akan langsung masuk ke tabel.
Apa saja kesalahan dalam mengimport data CSV ke PostgreSQL?
- Delimiter Tidak Konsisten
- Masalah: CSV menggunakan ; bukan ,.
- Solusi: Tambahkan DELIMITER ‘;’ di query.
- Encoding Error
- Masalah: File CSV menggunakan encoding berbeda (UTF-8 vs ANSI).
- Solusi: Konversi file ke UTF-8 sebelum impor.
- Data Type Mismatch
- Masalah: Kolom price berisi teks “USD 100.000”.
- Solusi: Bersihkan data sebelum impor, atau gunakan fungsi REPLACE saat query.
- File Path Permission
- Masalah: PostgreSQL tidak bisa mengakses file CSV.
- Solusi:
- Simpan file di folder yang bisa diakses PostgreSQL.
- Gunakan \COPY jika file ada di lokal user.
Error yang sering muncul saat mengimport data:
Error | Penyebab | Solusi |
No such file or directory | Path file salah | Pastikan path benar atau gunakan \COPY |
extra data after last expected column | Delimiter tidak sesuai | Sesuaikan delimiter (;, ,, atau \t) |
missing data for column | Jumlah kolom tidak cocok | Pastikan kolom di query sesuai dengan CSV |
invalid input syntax for type numeric | Format data salah (misalnya “Rp 150000”) | Bersihkan CSV sebelum impor |
Permission denied | PostgreSQL tidak punya akses file | Ubah permission folder/file atau gunakan \COPY |
Tips dalam mengimport CSV Data ke PostgreSQL:
- Selalu cek delimiter sebelum impor.
- Gunakan staging table untuk uji coba sebelum data masuk ke tabel utama.
- Validasi dengan SELECT agar yakin data benar-benar masuk.
Jenis Error | Contoh Pesan Error | Penyebab | Solusi |
File Path Salah | ERROR: could not open file “/wrong/path/file.csv” for reading: No such file or directory | Path file tidak ditemukan atau tidak bisa diakses | Pastikan path benar, simpan file di folder yang bisa diakses PostgreSQL, atau gunakan \COPY untuk file lokal. |
Delimiter Tidak Sesuai | ERROR: extra data after last expected column CONTEXT: COPY ecommerce_sales, line 2: “101;1;55;2;150000” | CSV menggunakan ; bukan , | Gunakan DELIMITER ‘;’ atau sesuaikan delimiter dengan isi file. |
Jumlah Kolom Tidak Cocok | ERROR: missing data for column “price” | Kolom di query tidak sesuai dengan kolom di CSV | Pastikan jumlah kolom di query sama dengan jumlah kolom di CSV. |
Tipe Data Tidak Cocok | ERROR: invalid input syntax for type numeric: “Rp 150000” | Data berisi teks atau simbol yang tidak sesuai tipe | Bersihkan CSV (hapus “Rp”, simbol, atau ubah format) sebelum impor. |
Encoding Error | ERROR: invalid byte sequence for encoding “UTF8”: 0x00 | File CSV menggunakan encoding berbeda | Konversi file ke UTF-8 dengan iconv atau editor teks. |
Permission Error | ERROR: could not open file “/var/lib/postgresql/data/file.csv” for reading: Permission denied | PostgreSQL tidak punya izin akses file | Ubah permission folder/file atau gunakan \COPY dari client. |
Langkah 4: Melakukan validasi data yang sudah di import
Tahap berikutnya setelah berhasil mengimport data CSV ke PostgreSQL, perlu dilihat atau divalidasi datanya.
Cara Melihat Data CSV di PostgreSQL
- Gunakan SELECT untuk Menampilkan Data
- Cara untuk menampilkan seluruh isi tabel:
SELECT * FROM products;
- Jika dataset besar (misalnya pada tabel website_sessions), maka perlu tambahkan LIMIT agar tidak overload:
SELECT * FROM website_sessions LIMIT 10;
- Cek Jumlah Record
- Untuk memastikan jumlah baris sesuai dengan CSV:
SELECT COUNT(*) FROM website_sessions;
(Jika CSV berisi 1000 baris, hasil query harus menunjukkan 1000.)
- Cek Kolom Tertentu
Misalnya ingin melihat hanya order_id dan price:
SELECT order_id, price FROM orders LIMIT 5;
- Validasi dengan Kondisi
- Cek apakah data sesuai ekspektasi:
SELECT * FROM order_items WHERE cogs > 10;
- Bisa juga cek apakah ada nilai kosong:
SELECT * FROM order_itemss WHERE cogs IS NULL;
- Gunakan ORDER BY untuk Melihat Pola
Misalnya ingin melihat order terbaru:
SELECT * FROM orders ORDER BY order_id DESC LIMIT 10;
Beberapa tips untuk melihat data yang sudah berhasil diimport di PostgreSQL:
- Gunakan LIMIT agar tidak membebani sistem saat dataset besar.
- Cek COUNT untuk memastikan jumlah baris sesuai dengan CSV.
- Gunakan kondisi WHERE untuk validasi data spesifik (misalnya harga, tanggal).
Kesimpulan
Tahapan untuk mengimport dataset CSV ke PostgreSQL adalah mempersiapkan dataset CSV dan PostgreSQL yang akan digunakan serta mengetahui tipe delimiter dan tipe data yang digunakan. Lalu berikutnya membuat tabel baru di database PostgreSQL sesuai dengan nama data CSV yang mau diimport, dan jika tabelnya sudah berhasil dibuat maka bisa langsung melakukan import data CSV ke import ke tabel tersebut. Jika import data sudah berhasil, jangan lupa untuk melakukan validasi agar data yang diimport benar-benar sudah sesuai dengan raw data CSV yang original. Selamat mencoba.
Tonton tutorial Toy Store E-commerce Dashboard di sini.
Download template dashboard gratis.
Berlangganan untuk mendapatkan insight gratis setiap minggu.
Author: Hibrah Lukman
