Xin lưu ý rằng, trong Postgres, hành vi mặc định cho các bảng tạm thời là chúng không tự động bị loại bỏ và dữ liệu được duy trì khi cam kết. Xem ON COMMIT
.
Tuy nhiên, bảng tạm thời bị loại bỏ khi kết thúc phiên cơ sở dữ liệu:
Các bảng tạm thời sẽ tự động bị loại bỏ vào cuối phiên, tùy chọn khi kết thúc giao dịch hiện tại.
Có nhiều cân nhắc bạn phải tính đến:
- Nếu bạn muốn
DROP
một cách rõ ràng một bảng tạm thời khi kết thúc giao dịch, hãy tạo bảng đó bằngCREATE TEMPORARY TABLE ... ON COMMIT DROP
cú pháp. - Trong trường hợp tổng hợp kết nối , một phiên cơ sở dữ liệu có thể kéo dài nhiều phiên khách hàng; để tránh xung đột trong
CREATE
, bạn nên bỏ các bảng tạm thời của mình - trước khi trả lại kết nối với nhóm (ví dụ:bằng cách thực hiện mọi thứ bên trong giao dịch và sử dụngON COMMIT DROP
cú pháp tạo), hoặc trên cơ sở khi cần thiết (bằng cách đặt trước bất kỳCREATE TEMPORARY TABLE
nào câu lệnh vớiDROP TABLE IF EXISTS
, có lợi thế là cũng làm việc với các giao dịch bên ngoài, ví dụ:nếu kết nối được sử dụng ở chế độ tự động cam kết.) - Khi bảng tạm thời đang được sử dụng, bao nhiêu phần trăm của nó sẽ vừa trong bộ nhớ trước khi tràn vào đĩa? Xem
temp_buffers
tùy chọn trongpostgresql.conf
- Tôi nên lo lắng về điều gì khác khi thường xuyên làm việc với bảng tạm thời? Nên hút chân không sau khi bạn đã DROPped các bảng tạm thời, để làm sạch bất kỳ thùng rác nào khỏi danh mục. Postgres sẽ tự động hút bụi 3 phút một lần cho bạn khi sử dụng cài đặt mặc định (
auto_vacuum
).
Ngoài ra, không liên quan đến câu hỏi của bạn (nhưng có thể liên quan đến dự án của bạn):hãy nhớ rằng, nếu bạn phải chạy truy vấn đối với bảng tạm thời sau bạn đã điền nó, thì bạn nên tạo các chỉ mục thích hợp và phát hành ANALYZE
trên bàn tạm thời trong câu hỏi sau bạn đã hoàn tất việc chèn vào nó. Theo mặc định, trình tối ưu hóa dựa trên chi phí sẽ giả định rằng bảng tạm thời mới được tạo có ~ 1000 hàng và điều này có thể dẫn đến hiệu suất kém nếu bảng tạm thời thực sự chứa hàng triệu hàng.