Đây là vấn đề read-your-own-writes khi replication là bất đồng bộ: INSERT đã commit trên primary nhưng chưa replay xong trên replica tại thời điểm request đọc tới.
Các cách xử lý, từ đơn giản đến chặt chẽ:
1. Route theo ngữ cảnh (dùng nhiều nhất). Sau một thao tác ghi, cho request đọc tiếp theo của chính user đó đi vào primary trong một khoảng ngắn (vd 5–10 giây), thường bằng một cờ trong session hoặc cookie. Đơn giản, không cần thay đổi hạ tầng.
2. Ghim theo LSN (chính xác nhất). Sau khi ghi, lấy vị trí WAL rồi bắt replica chờ tới vị trí đó, hoặc chọn replica đã replay qua nó.
-- on primary, right after the write
select pg_current_wal_lsn();
-- on the replica, before reading
select pg_last_wal_replay_lsn() >= $1;3. Phân loại truy vấn ngay từ thiết kế. Chỉ đẩy sang replica những truy vấn chịu được dữ liệu cũ: báo cáo, dashboard, export, tìm kiếm. Màn hình phản hồi ngay sau hành động của user thì đọc primary.
4. Tránh cách sai. sleep rồi retry chỉ giấu vấn đề và làm chậm phản hồi. Chuyển sang synchronous replication để "cho chắc" sẽ đẩy độ trễ ghi lên toàn hệ thống chỉ vì một màn hình.
Dù chọn cách nào, cần giám sát lag (pg_last_xact_replay_timestamp) và tự động rút replica khỏi vòng đọc khi lag vượt ngưỡng, nếu không lỗi sẽ quay lại vào đúng lúc tải cao.