Cài đặt Driver PostgreSQL cho Python và NodeJS
Chuẩn bị môi trường Python
Để Python giao tiếp với Neon (PostgreSQL), ta cần cài đặt driver psycopg2. Trên Ubuntu 24.04, cần cài đặt các package hệ thống build-essential và libpq-dev trước khi dùng pip để compile C-extension.
Mục đích: Cung cấp các header files và compiler cần thiết để build thư viện psycopg2 từ nguồn.
Kết quả mong đợi: Hệ thống báo thành công cài đặt các package dependency.
sudo apt update
sudo apt install -y python3-pip python3-venv build-essential libpq-dev
Cài đặt thư viện psycopg2
Tạo một môi trường ảo (virtual environment) để cô lập các thư viện Python của dự án, sau đó cài đặt driver.
Mục đích: Tránh xung đột package với hệ thống Ubuntu và đảm bảo phiên bản driver tương thích với Neon.
Kết quả mong đợi: Thư mục venv được tạo và lệnh pip install hoàn tất.
mkdir -p ~/neon-project
cd ~/neon-project
python3 -m venv venv
source venv/bin/activate
pip install psycopg2-binary
Chú ý: Dùng psycopg2-binary để tránh lỗi compile phức tạp trên môi trường Ubuntu mới, phù hợp cho triển khai nhanh.
Cài đặt thư viện pg cho NodeJS
Chuyển sang môi trường NodeJS, ta cần driver pg (PostgreSQL client) để kết nối.
Mục đích: Khởi tạo dự án NodeJS và cài đặt package client chính thức của PostgreSQL.
Kết quả mong đợi: File package.json được tạo và thư viện pg nằm trong node_modules.
cd ~/neon-project
npm init -y
npm install pg
Cấu hình Biến Môi trường (Environment Variables)
Tạo file cấu hình .env
Không bao giờ hardcode (viết chết) thông tin kết nối vào code. Ta sẽ lưu Connection String của Neon vào file .env.
Mục đích: Bảo mật thông tin nhạy cảm (User, Password, Host) và dễ dàng thay đổi khi chuyển môi trường (Dev -> Prod).
Kết quả mong đợi: File .env được tạo trong thư mục dự án với nội dung chứa Connection String.
cat > ~/neon-project/.env
Thay thế các giá trị user, password, host trong dòng trên bằng thông tin thực tế từ trang quản trị Neon.
Thư viện để đọc biến môi trường
Cần cài đặt thư viện python-dotenv cho Python và dotenv cho NodeJS để đọc file .env.
Mục đích: Load các biến môi trường từ file vào runtime của ứng dụng.
Kết quả mong đợi: Các thư viện được cài đặt thành công trong môi trường ảo của Python và NodeJS.
cd ~/neon-project
# For Python (ensure venv is active)
source venv/bin/activate
pip install python-dotenv
# For NodeJS
npm install dotenv
Viết Script Mẫu CRUD cho Python
Script Python: create_db_ops.py
Viết script Python thực hiện tạo bảng, chèn dữ liệu, đọc dữ liệu và xóa dữ liệu cơ bản.
Mục đích: Kiểm chứng khả năng kết nối, giao dịch (transaction) và thực thi SQL của driver psycopg2 với Neon.
Kết quả mong đợi: Console in ra thông báo thành công từng bước và dữ liệu đã được lưu vào Neon.
cat > ~/neon-project/create_db_ops.py
Chạy và kiểm tra Script Python
Thực thi script để xác nhận toàn bộ luồng CRUD chạy mượt mà trên Neon.
Mục đích: Verify kết quả kết nối và thao tác dữ liệu.
Kết quả mong đợi: Xuất hiện các dòng [OK] tương ứng với từng thao tác.
cd ~/neon-project
source venv/bin/activate
python create_db_ops.py
Viết Script Mẫu CRUD cho NodeJS
Script NodeJS: db_ops.js
Viết script NodeJS tương đương với Python, sử dụng thư viện pg để thực hiện các thao tác CRUD.
Mục đích: Minh họa cách sử dụng Promise/Async-Await trong NodeJS khi làm việc với database serverless.
Kết quả mong đợi: Console NodeJS in ra kết quả tương tự như Python.
cat > ~/neon-project/db_ops.js 0) {
console.log(`[OK] Đọc dữ liệu: ${JSON.stringify(result.rows[0])}`);
} else {
console.log("[WARN] Không tìm thấy sản phẩm.");
}
// 4. UPDATE: Cập nhật giá (Optional - để demo thêm)
const updateQuery = 'UPDATE products SET price = $1, updated_at = CURRENT_TIMESTAMP WHERE name = $2';
const updateValues = [19.99, values[0]];
await client.query(updateQuery, updateValues);
console.log(`[OK] Đã cập nhật giá mới: $${updateValues[0]}`);
// 5. DELETE: Xóa dữ liệu
const deleteQuery = 'DELETE FROM products WHERE name = $1';
await client.query(deleteQuery, [values[0]]);
console.log("[OK] Đã xóa sản phẩm.");
} catch (err) {
console.error("Lỗi thực thi:", err);
// Rollback không tự động trong Pool, cần dùng Transaction nếu cần rollback toàn bộ
} finally {
client.release();
await pool.end();
console.log("Kết thúc kết nối.");
}
}
main();
EOF
Chạy và kiểm tra Script NodeJS
Thực thi script NodeJS để xác nhận driver pg hoạt động tốt với Neon.
Mục đích: Verify kết quả kết nối và thao tác dữ liệu trên môi trường Node.
Kết quả mong đợi: Xuất hiện các dòng [OK] tương ứng với từng thao tác.
cd ~/neon-project
node db_ops.js
Verify kết quả cuối cùng
Để chắc chắn dữ liệu đã được ghi và xóa đúng, hãy truy cập vào Dashboard của Neon.
Mục đích: Kiểm tra trực quan trên giao diện quản trị Neon xem bảng có được tạo và dữ liệu có được thao tác không.
Kết quả mong đợi: Trong mục Table Explorer của Neon, bảng users và products sẽ xuất hiện nhưng nội dung sẽ trống (do script đã xóa sau khi demo).
Điều hướng series:
Mục lục: Series: Triển khai Database Serverless với Neon và Ubuntu 24.04
« Phần 2: Khám phá kiến trúc Serverless và kết nối cơ sở dữ liệu đầu tiên
Phần 4: Tận dụng tính năng Branching để phát triển và kiểm thử an toàn »