在 SQL 中,不支援動態 SQL,除了 PL/PgSQL 變體,它可以建立動態查詢。若要將一個查詢的結果用作另一個查詢中的表格名稱,您可以使用 PL/PgSQL EXECUTE 語句。
這裡有一個範例:
DO $$ BEGIN EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd')); END; $$ LANGUAGE plpgsql;
中的 %I 格式說明符format 函數正確引用標識符,包括表名,因此無需使用 quote_ident 明確引用。
防止 SQL 注入漏洞,請考慮對文字使用 EXECUTE ... USING 語句,而不是帶有 %L 的 format(...)。對於像表/列名這樣的標識符,%I 模式的簡潔性仍然是 quote_ident 的有用替代方案。
以上是PostgreSQL中如何動態產生表名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!