Bỏ qua, đến nội dung

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:

  1. PostgreSQL chưa chạy hoặc không lắng nghe trên port được chỉ định
  2. Firewall chặn kết nối từ IP của server Digiforce
  3. 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 status hoặ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.conf cho 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 SELECT trê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:

  1. Kiểm tra quyền: SELECT * FROM information_schema.table_privileges WHERE grantee = 'your_user';
  2. Xác nhận schema: chỉ định đúng schema trong cấu hình (ví dụ: sales, inventory)
  3. Nhấn nút Refresh để introspect lại
  4. 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ẽ:

  1. Phát hiện cột có kiểu ARRAY
  2. Truy vấn information_schema.element_types để xác định kiểu phần tử
  3. Ánh xạ sang field type phù hợp với elementType tươ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ự:

  1. Kiểm tra PostgreSQL đã bật SSL: SHOW ssl; (phải trả về on)
  2. Nếu dùng self-signed certificate, cung cấp đường dẫn CA certificate trong cấu hình SSL
  3. Thử đặt Reject unauthorized = false để debug (không nên dùng trên production)
  4. Đảm bảo chế độ SSL phù hợp: dùng VERIFY-CA hoặc VERIFY-FULL khi 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ốngKhuyến nghị
Dữ liệu thay đổi thường xuyên bởi hệ thống khácDùng plugin (truy vấn real-time)
Dữ liệu tĩnh, ít thay đổiCó thể import vào database nội bộ
Cần join giữa bảng nội bộ và bên ngoàiImport (cross-datasource relation chưa hỗ trợ)
Database rất lớn, chỉ cần xemDùng plugin (tránh duplicate dữ liệu)