CREATE TABLE AS được coi là một tuyên bố riêng biệt với một CREATE TABLE thông thường và cho đến phiên bản Postgres 9.5 (xem mục nhập bảng thay đổi) không hỗ trợ IF NOT EXISTS
mệnh đề. (Đảm bảo xem đúng phiên bản hướng dẫn cho phiên bản bạn đang sử dụng.)
Mặc dù không hoàn toàn linh hoạt nhưng CREATE TABLE ... LIKE
cú pháp có thể là một sự thay thế trong một số trường hợp; thay vì lấy cấu trúc (và nội dung) của nó từ SELECT
, nó sao chép cấu trúc của một bảng hoặc dạng xem khác.
Do đó, bạn có thể viết một cái gì đó như thế này (chưa được kiểm tra); chèn cuối cùng là một cách khá lộn xộn để không làm gì nếu bảng đã được điền:
CREATE OR REPLACE VIEW source_data AS SELECT * FROM foo NATURAL JOIN bar;
CREATE TABLE IF NOT EXISTS snapshot LIKE source_data;
INSERT INTO snapshot
SELECT * FROM source_data
WHERE NOT EXISTS ( SELECT * FROM snapshot );
Ngoài ra, nếu bạn muốn hủy dữ liệu trước đó (ví dụ:một bảng tạm thời bị bỏ qua), bạn có thể hủy bỏ bảng cũ có điều kiện và tạo bảng mới vô điều kiện:
DROP TABLE IF EXISTS temp_stuff;
CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;