我希望使用下面查询中返回的字符串作为其他查询的表名。
SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')
你可以看到它返回一个字符串。我希望将它用作另一个查询的输入,例如
CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd'))
AS * SELECT FROM backup
可以吗?有什么线索?
答案 0 :(得分:41)
您需要通过DO
块或PL / PgSQL函数(CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
)使用PL/PgSQL EXECUTE
statement。 PostgreSQL使用的普通SQL方言不支持动态SQL,只能在程序PL / PgSQL变体中使用。
DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$ LANGUAGE plpgsql;
format(...)
function的%I
和%L
格式说明符分别执行正确的标识符和文字引用。
对于文字,我建议使用EXECUTE ... USING
而不是format(...)
和%L
,但对于表格/列名称这样的标识符,格式%I
模式是详细的简洁替代方法quote_ident
来电。{/ p>