Belajar PostgreSQL 18.6 untuk Newbie (Part 2): Dari Installation hingga DDL & DML dengan pgAdmin 4 Web
Bahagian 2 — Belajar PostgreSQL dengan pgAdmin 4 Web
Sekarang setup sudah selesai.
Bahagian ini lebih menarik kerana kita mula menggunakan database.
9. Membuat database testdb
Dalam pgAdmin:
Servers
└── PostgreSQL 18.6
└── DatabasesKita membuat database:
testdbPada peringkat ini kita sudah mempunyai:
PostgreSQL 18.6
└── testdb10. PostgreSQL mempunyai konsep Role
Ini antara perkara pertama yang mungkin mengelirukan pengguna MSSQL.
PostgreSQL banyak menggunakan istilah:
ROLERole boleh digunakan sebagai login role dan juga boleh mempunyai permission.
Untuk latihan kita, kita membuat:
testdb_appRole ini dibenarkan login tetapi bukan superuser.
Ini sangat penting.
Kita tidak mahu aplikasi biasa menggunakan:
postgressebagai user database.
Sebaliknya:
postgresdigunakan sebagai administrative account.
Manakala:
testdb_appdigunakan oleh aplikasi.
Secara konsep:
postgres
↓
Administrator
testdb_app
↓
Application userIni dipanggil prinsip least privilege.
Berikan aplikasi hanya permission yang diperlukan.
11. Database permission
Role testdb_app perlu diberi permission untuk connect kepada database testdb.
Dalam pgAdmin:
testdb
→ Properties
→ SecurityKita memberikan:
CONNECTkepada:
testdb_appDalam paparan privilege pgAdmin, huruf:
Cbermaksud:
CONNECT12. Schema public
Di dalam database testdb, kita akan melihat:
Schemas
└── publicIni ialah schema default yang biasa kita jumpa dalam PostgreSQL.
Di sinilah table latihan kita akan diletakkan.
Tetapi ada satu perkara penting.
Permission database dan permission schema ialah dua perkara berbeza.
Kita sudah memberikan:
CONNECTkepada database.
Sekarang testdb_app juga memerlukan permission terhadap schema.
Kita memberikan:
USAGEkepada public.
Dalam pgAdmin, U bermaksud:
USAGE13. USAGE sahaja tidak cukup
Ini ialah satu perkara yang saya sendiri jumpa semasa belajar.
Selepas memberikan:
USAGEsaya cuba membuat table:
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Tetapi PostgreSQL memberikan error:
permission denied for schema publicKenapa?
Kerana:
USAGEtidak bermaksud:
CREATEIa hanya membenarkan role menggunakan schema tersebut.
Jadi kita perlu memberikan:
CREATEjuga.
Dalam pgAdmin, permission akhirnya menjadi:
CUiaitu:
C = CONNECT
U = USAGEPerlu berhati-hati kerana huruf yang sama boleh muncul pada object berbeza mengikut context privilege.
Untuk schema public, kita memerlukan:
USAGE
CREATE14. Membuat table pertama
Sekarang testdb_app mempunyai permission yang diperlukan.
Kita buka:
PostgreSQL 18.6 - testdb_app
→ testdb
→ Query ToolKemudian:
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Query berjaya:
CREATE TABLEKemudian refresh:
Schemas
└── public
└── Tables
└── customersKita sudah mempunyai table pertama.
15. SERIAL — adakah ia datatype?
Ini merupakan salah satu perkara yang paling mengejutkan bagi pengguna MSSQL.
Kita menulis:
id SERIALTetapi apabila melihat structure table dalam pgAdmin, datatype column itu ialah:
integerPada mulanya mungkin kita fikir:
"Bukankah saya declare
SERIAL?"
Sebenarnya SERIAL bukan datatype sebenar seperti INTEGER.
Ia lebih sesuai difahami sebagai shortcut.
Secara konsep:
SERIAL
↓
INTEGER
+
SEQUENCE
+
DEFAULT nextval(...)Sebab itu id akhirnya mempunyai datatype:
integertetapi nombornya meningkat secara automatik.
Saya suka menganggap SERIAL sebagai:
arahan 3-in-1
16. Perbandingan SERIAL dengan MSSQL IDENTITY
Dalam SQL Server kita biasa melihat:
id INT IDENTITY(1,1)Secara konsep:
INT
+
IDENTITYPostgreSQL:
id SERIALsecara konsep menyediakan:
INTEGER
+
SEQUENCE
+
DEFAULTJadi jangan terkejut apabila pgAdmin menunjukkan:
integeruntuk column yang kita declare sebagai SERIAL.
PostgreSQL moden juga mempunyai:
id INTEGER GENERATED ALWAYS AS IDENTITYyang merupakan pendekatan yang lebih moden untuk auto-generated identity columns.
17. INSERT data
Sekarang kita gunakan DML.
Kita masukkan tiga rekod:
INSERT INTO customers (name, email)
VALUES
('Ali', 'ali@example.com'),
('Siti', 'siti@example.com'),
('Ahmad', 'ahmad@example.com');PostgreSQL memberikan:
INSERT 0 3Perhatikan sesuatu yang penting.
Kita tidak memasukkan id.
Namun PostgreSQL tetap menghasilkan nombor ID secara automatik.
Hasilnya lebih kurang:
id name email
1 Ali ali@example.com
2 Siti siti@example.com
3 Ahmad ahmad@example.comIni membuktikan bahawa SERIAL tadi memang menyediakan mekanisme auto-number.
18. Melihat data menggunakan GUI
Kalau sudah biasa dengan SSMS, bahagian ini sangat familiar.
Dalam pgAdmin:
customers
→ Right Click
→ View/Edit Data
→ All RowsKita akan nampak ketiga-tiga rekod.
Ini hampir sama dengan pengalaman:
SSMS
→ Right Click Table
→ Select Top 1000 RowsBezanya, pgAdmin juga membenarkan kita mengedit data secara terus melalui grid.
19. Edit data melalui pgAdmin
Contohnya kita ubah email Ali:
ali@example.comkepada:
ali@mycompany.comKemudian tekan:
Save Data ChangespgAdmin akan menjalankan operasi UPDATE kepada PostgreSQL di belakang tabir.
Secara konsep ia sama seperti:
UPDATE customers
SET email = 'ali@mycompany.com'
WHERE id = 1;Jadi GUI hanyalah satu cara untuk berinteraksi dengan SQL database.
Ia tidak menggantikan SQL.
Ia cuma menyediakan interface yang lebih mudah.
20. DDL dan DML
Bagi pembaca yang sudah biasa dengan SQL, konsep asas DDL dan DML dalam PostgreSQL tidaklah terlalu berbeza.
DDL
Data Definition Language:
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE INDEX
CREATE VIEWContoh:
CREATE TABLE customers (...);DML
Data Manipulation Language:
INSERT
UPDATE
DELETEDan untuk membaca data:
SELECTJadi seseorang yang sudah biasa dengan SQL Server tidak perlu belajar SQL dari kosong untuk menggunakan PostgreSQL.
Yang lebih penting ialah memahami perbezaan behaviour dan database architecture antara kedua-duanya.
21. Apa yang saya pelajari daripada latihan ini?
Selepas latihan ini, kita sudah membina keseluruhan flow:
Ubuntu Server
│
▼
PostgreSQL 18.6
│
▼
Database: testdb
│
▼
Role: testdb_app
│
├── CONNECT
│
▼
Schema: public
│
├── USAGE
└── CREATE
│
▼
Table: customers
│
├── id
├── name
├── email
└── created_at
│
▼
INSERT / UPDATE
│
▼
View/Edit Data melalui pgAdminIni sudah merupakan asas yang cukup baik untuk mula membina aplikasi sebenar.
22. Perkara yang paling penting untuk newbie MSSQL
Jika anda datang daripada Microsoft SQL Server, jangan cuba memaksa semua konsep PostgreSQL supaya kelihatan sama dengan MSSQL.
Sebaliknya, gunakan MSSQL sebagai titik perbandingan.
Contohnya:
MSSQL PostgreSQL
------------------------------------------------
SSMS pgAdmin
Login/User Role
INT INTEGER
IDENTITY IDENTITY / SERIAL
Database Database
Schema Schema
GRANT GRANT
DENY GRANT/REVOKE model
dbo Tidak ada konsep yang sama tepatAda persamaan, tetapi ada juga perbezaan architecture yang penting.
Kesimpulan
Belajar PostgreSQL tidak semestinya bermula dengan perkara yang complicated.
Untuk newbie, saya rasa lebih baik bermula dengan satu flow yang lengkap:
Install
↓
Configure
↓
Secure connection
↓
Install pgAdmin
↓
Connect pgAdmin
↓
Create database
↓
Create role
↓
Grant permission
↓
Create table
↓
INSERT
↓
View/Edit DataSelepas semua ini berjaya, barulah masuk kepada topik yang lebih mendalam seperti:
ROLEdan ownership- schema management
GRANTdanREVOKESEARCH_PATH- sequences
IDENTITY- foreign keys
- indexes
- transactions
EXPLAIN- backup/restore
- PostgreSQL performance
- connection pooling
- penggunaan PostgreSQL daripada aplikasi
Bagi saya, bahagian paling menarik daripada pengalaman ini ialah menyedari bahawa PostgreSQL bukanlah "SQL Server versi Linux".
Ia mempunyai konsepnya sendiri.
Tetapi jika anda sudah biasa dengan MSSQL, asas SQL yang anda sudah tahu sebenarnya memberikan kelebihan yang besar. Anda cuma perlu belajar bagaimana PostgreSQL melakukan sesuatu dengan cara yang sedikit berbeza.
Dan kadang-kadang perbezaan itu boleh menghasilkan kejutan kecil — contohnya:
Declare
SERIAL, tetapi pgAdmin tunjukinteger. 😄
Rupanya SERIAL bukan datatype baru pun.
Ia cuma shortcut 3-in-1.
Dan dari situlah pembelajaran PostgreSQL bermula.
Comments