Bạn có thể muốn CREATE TABLE AS
- cũng hoạt động cho TEMPORARY
(TEMP
) bảng:
CREATE TEMP TABLE temp1 AS
SELECT dataid
, register_type
, timestamp_localtime
, read_value_avg
FROM rawdata.egauge
WHERE register_type LIKE '%gen%'
ORDER BY dataid, timestamp_localtime;
Thao tác này tạo một bảng tạm thời và sao chép dữ liệu vào đó. Một ảnh chụp nhanh tĩnh của dữ liệu, phiền bạn. Nó giống như một bảng thông thường, nhưng nằm trong RAM nếu temp_buffers
được đặt đủ cao. Nó chỉ hiển thị trong phiên hiện tại và chết khi kết thúc nó. Khi được tạo bằng ON COMMIT DROP
nó chết khi kết thúc giao dịch .
Bảng tạm thời xuất hiện đầu tiên trong đường dẫn tìm kiếm giản đồ mặc định , ẩn các bảng hiển thị khác có cùng tên trừ khi đủ điều kiện giản đồ:
- Cách search_path ảnh hưởng đến độ phân giải của mã định danh và "giản đồ hiện tại"
Nếu bạn muốn động , bạn sẽ tìm kiếm CREATE VIEW
- một câu chuyện hoàn toàn khác.
Tiêu chuẩn SQL cũng định nghĩa và Postgres cũng hỗ trợ: . Nhưng việc sử dụng nó không được khuyến khích:SELECT INTO
Tốt nhất là sử dụng
CREATE TABLE AS
cho mục đích này trong mã mới.
Thực sự không cần biến thể cú pháp thứ hai và SELECT INTO
được sử dụng để gán trong plpgsql
, trong đó cú pháp SQL do đó không thể thực hiện được.
Có liên quan:
- Kết hợp hai bảng thành một bảng mới để các hàng chọn từ bảng kia bị bỏ qua
- LỖI:các tham số đầu vào sau một tham số có giá trị mặc định cũng phải có giá trị mặc định trong Postgres
CREATE TABLE LIKE (...)
chỉ sao chép cấu trúc từ một bảng khác và không có dữ liệu:
LIKE
mệnh đề chỉ định một bảng mà từ đó bảng mới tự động sao chép tất cả các tên cột, kiểu dữ liệu của chúng và các ràng buộcnot-null của chúng.
Nếu bạn cần một bảng "tạm thời" chỉ cho mục đích của một truy vấn (và sau đó loại bỏ nó) thì một "bảng dẫn xuất" trong một CTE hoặc một truy vấn con đi kèm với chi phí thấp hơn đáng kể:
- Thay đổi kế hoạch thực thi của truy vấn trong postgresql theo cách thủ công?
- Kết hợp hai truy vấn SELECT trong PostgreSQL
- Sử dụng lại giá trị chọn đã tính
- Nhiều CTE trong một truy vấn
- Cập nhật kết quả của một sql khác