Postgres chạy một số kiểm tra đơn giản đối với hàm bạn đang cố tạo và nó tìm thấy (chính xác) rằng bảng work_list
không (chưa) tồn tại. Tôi thấy hai tùy chọn:
1. "Giả mạo nó cho đến khi bạn thành công"
Trên thực tế, hãy tạo bảng (tạm thời) trước khi bạn tạo hàm. Bảng tạm thời sẽ biến mất vào cuối phiên, nhưng khi hàm được tạo, bạn đã vượt qua bài kiểm tra này một cách xuất sắc.
Rõ ràng, bạn phải bỏ bảng đó trước khi chạy hàm tương tự. phiên để tránh xung đột. Tuy nhiên, tốt hơn:hãy sử dụng CREATE TEMP TABLE IF NOT EXISTS
trong chức năng của bạn (Postgres 9.1+). Bạn có thể muốn cắt bớt bảng nếu nó đã tồn tại ...
Tuy nhiên (xem các bình luận bên dưới), trích dẫn hướng dẫn sử dụng
Điểm nhấn đậm của tôi.
2. Sử dụng PL / pgSQL thay thế
Kiểm tra ít kỹ lưỡng hơn trong plpgsql. Nếu Postgres vẫn phàn nàn (điều này không xảy ra trong trường hợp này), bạn cũng có thể thực thi SQL động với EXECUTE
.
Ngoài ra:Trong nhiều trường hợp, có một giải pháp hiệu quả hơn mà không cần đến bảng tạm thời ...