Giao diện
Câu hỏi thường gặp (FAQ) — PostgreSQL Data Source
Cài đặt và kết nối
Không thể kết nối đến PostgreSQL, báo lỗi timeout?
Nguyên nhân phổ biến:
- PostgreSQL chưa chạy hoặc không lắng nghe trên port được chỉ định
- Firewall chặn kết nối từ IP của server Digiforce
- Sai host hoặc port trong cấu hình
Cách khắc phục:
- Kiểm tra PostgreSQL đang chạy:
sudo systemctl status postgresql - Xác nhận port đang lắng nghe:
ss -tlnp | grep 5432 - Kiểm tra firewall:
sudo ufw statushoặc kiểm tra security group (nếu dùng cloud) - Thử kết nối từ server Digiforce:
psql -h <host> -p <port> -U <user> -d <database> - Kiểm tra file
pg_hba.confcho phép kết nối từ IP của Digiforce
Kết nối thành công nhưng không thấy bảng nào?
Nguyên nhân có thể:
- User PostgreSQL không có quyền
SELECTtrên các bảng - Database name không đúng
- Bảng nằm trong schema khác (không phải
public) - Đặt Table prefix không khớp với tên bảng thực tế
Cách khắc phục:
- Kiểm tra quyền:
SELECT * FROM information_schema.table_privileges WHERE grantee = 'your_user'; - Xác nhận schema: chỉ định đúng schema trong cấu hình (ví dụ:
sales,inventory) - Nhấn nút Refresh để introspect lại
- Bỏ trống trường Table prefix nếu không chắc chắn
Có cần tạo user riêng cho Digiforce không?
Khuyến nghị: Có, nên tạo user riêng với quyền tối thiểu cần thiết.
sql
-- User chỉ đọc
CREATE USER digiforce_readonly WITH PASSWORD 'strong_password';
GRANT CONNECT ON DATABASE my_erp TO digiforce_readonly;
GRANT USAGE ON SCHEMA public TO digiforce_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO digiforce_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO digiforce_readonly;
-- User đọc/ghi
CREATE USER digiforce_rw WITH PASSWORD 'strong_password';
GRANT CONNECT ON DATABASE my_erp TO digiforce_rw;
GRANT USAGE ON SCHEMA public TO digiforce_rw;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO digiforce_rw;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO digiforce_rw;Báo lỗi "schema xxx not exists" khi test kết nối?
Plugin kiểm tra schema tồn tại bằng cách truy vấn information_schema.schemata. Nếu bạn chỉ định schema không tồn tại, lỗi này sẽ xuất hiện. Kiểm tra lại tên schema hoặc để trống (mặc định là public).
Sử dụng hàng ngày
Dữ liệu trên Digiforce có đồng bộ real-time với PostgreSQL không?
Có. Plugin truy vấn trực tiếp PostgreSQL mỗi lần có request — không có cache layer trung gian. Dữ liệu luôn phản ánh trạng thái mới nhất của database.
TIP
Vì không có cache, hiệu năng phụ thuộc hoàn toàn vào PostgreSQL. Đảm bảo có index phù hợp cho các trường thường xuyên filter/sort.
Có thể tạo relation giữa bảng nội bộ và bảng PostgreSQL không?
Hiện tại không hỗ trợ. Quan hệ (relation) chỉ hoạt động giữa các bảng trong cùng một data source. Không thể tạo liên kết cross-datasource.
Hiệu năng như thế nào với bảng lớn (hàng triệu bản ghi)?
- Plugin sử dụng connection pool để tối ưu kết nối
- Phân trang mặc định 20 bản ghi/trang, giảm tải cho mỗi query
- Khuyến nghị: Tạo index trên PostgreSQL cho các trường thường xuyên được filter/sort
- Với bảng > 1 triệu bản ghi, introspect lần đầu có thể mất vài giây
Bảng có cột ARRAY hoạt động như thế nào?
Plugin hỗ trợ kiểu ARRAY của PostgreSQL. Khi introspect, plugin sẽ:
- Phát hiện cột có kiểu
ARRAY - Truy vấn
information_schema.element_typesđể xác định kiểu phần tử - Ánh xạ sang field type phù hợp với
elementTypetương ứng
Lỗi thường gặp
Lỗi "Access denied" khi ghi dữ liệu?
User kết nối không có quyền INSERT, UPDATE hoặc DELETE. Cấp quyền phù hợp trên PostgreSQL:
sql
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO your_user;Lỗi "Unknown column" sau khi thay đổi cấu trúc bảng?
Khi bạn thay đổi cấu trúc bảng trên PostgreSQL (thêm/xóa/đổi tên cột), metadata trong Digiforce sẽ lỗi thời. Cần vào Data Sources → Refresh để cập nhật lại metadata.
Lỗi SSL handshake failed?
Cách khắc phục theo thứ tự:
- Kiểm tra PostgreSQL đã bật SSL:
SHOW ssl;(phải trả vềon) - Nếu dùng self-signed certificate, cung cấp đường dẫn CA certificate trong cấu hình SSL
- Thử đặt Reject unauthorized = false để debug (không nên dùng trên production)
- Đảm bảo chế độ SSL phù hợp: dùng
VERIFY-CAhoặcVERIFY-FULLkhi cần xác minh chứng chỉ
Lỗi khi introspect bảng không có primary key?
Plugin vẫn cho phép introspect bảng không có primary key, nhưng các thao tác get, update, destroy sẽ không hoạt động. Chỉ thao tác list được hỗ trợ. Nếu cần CRUD đầy đủ, hãy thêm primary key vào bảng trên PostgreSQL.
Vấn đề khác
Có thể kết nối nhiều PostgreSQL instance cùng lúc không?
Có. Tạo nhiều data source với type postgres, mỗi cái trỏ đến một instance khác nhau. Không có giới hạn số lượng data source.
Plugin có hỗ trợ read replica không?
Hiện tại mỗi data source trỏ đến một endpoint duy nhất. Để sử dụng read replica, tạo data source riêng trỏ đến replica endpoint.
Có hỗ trợ PostgreSQL extension (PostGIS, hstore, v.v.) không?
- hstore: Có hỗ trợ cơ bản thông qua package
pg-hstore - PostGIS: Kiểu dữ liệu geometry/geography chưa được ánh xạ tự động
- Các extension khác: dữ liệu vẫn đọc được dưới dạng text/json, nhưng không có field type chuyên biệt
Khi nào cần dùng plugin này thay vì import dữ liệu?
| Tình huống | Khuyến nghị |
|---|---|
| Dữ liệu thay đổi thường xuyên bởi hệ thống khác | Dùng plugin (truy vấn real-time) |
| Dữ liệu tĩnh, ít thay đổi | Có thể import vào database nội bộ |
| Cần join giữa bảng nội bộ và bên ngoài | Import (cross-datasource relation chưa hỗ trợ) |
| Database rất lớn, chỉ cần xem | Dùng plugin (tránh duplicate dữ liệu) |