Bạn sẽ cần sử dụng PL / PgSQL EXECUTE
câu lệnh, thông qua DO
khối hoặc hàm PL / PgSQL (CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
). SQL động không được hỗ trợ trong phương ngữ SQL thông thường được PostgreSQL sử dụng, chỉ trong biến thể PL / PgSQL thủ tục.
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
Định dạng format(...)
của hàm %I
và %L
định dạng-specifier thực hiện định danh thích hợp và trích dẫn theo nghĩa đen, tương ứng.
Đối với các chữ, tôi khuyên bạn nên sử dụng EXECUTE ... USING
chứ không phải định dạng format(...)
với %L
, nhưng đối với các số nhận dạng như tên bảng / cột, định dạng %I
mẫu là một sự thay thế ngắn gọn tốt đẹp cho quote_ident
dài dòng cuộc gọi.