Với đơn giản CREATE INDEX
, bảng sẽ bị khóa để ghi nhưng không đọc.
Sử dụng CREATE INDEX CONCURRENTLY
để tránh khóa viết là tốt.
Từ các tài liệu PostgreSQL trênCREATE INDEX
:
Khi tùy chọn này được sử dụng, PostgreSQL sẽ xây dựng chỉ mục mà không cần thực hiện bất kỳ khóa nào ngăn chặn việc chèn, cập nhật hoặc xóa đồng thời trên bảng; trong khi đó một bản dựng chỉ mục tiêu chuẩn khóa ghi (nhưng không đọc) trên bảng cho đến khi hoàn thành. Có một số lưu ý cần lưu ý khi sử dụng tùy chọn này - xem Chỉ mục xây dựng đồng thời .
Và cụ thể hơn (Like @ypercube đã nhận xét ):
PostgreSQL hỗ trợ xây dựng các chỉ mục mà không khóa ghi . Phương pháp này được gọi bằng cách chỉ định CONCURRENTLY
tùy chọn CREATE INDEX
. Khi tùy chọn này được sử dụng, PostgreSQL phải thực hiện hai lần quét bảng và ngoài ra, nó phải chờ tất cả các giao dịch hiện tại có khả năng sử dụng chỉ mục để chấm dứt. Do đó phương pháp này đòi hỏi tổng công việc nhiều hơn so với xây dựng chỉ mục tiêu chuẩn và mất nhiều thời gian hơn để hoàn thành. Tuy nhiên, vì nó cho phép các hoạt động bình thường tiếp tục trong khi chỉ mục được xây dựng, phương pháp này rất hữu ích để thêm các chỉ mục mới trong môi trường sản xuất.
Nhấn mạnh đậm của tôi.