可能重复:
Postgres的动态查询功能
我希望用从查询返回的字符串以下为其他查询表名。
SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')
你可以看到它返回一个字符串。 我想使用它作为一个输入另一个查询,如
CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd'))
AS * SELECT FROM backup
能不能做到? 任何线索怎么样?
您将需要使用PL / pgSQL的EXECUTE
语句 ,通过DO
块或PL / pgSQL函数( CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
)。 动态SQL是不是在PostgreSQL要用普通的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(...)
函数的%I
和%L
格式指定符做适当的识别符和文字分别引用。
对于文字,我建议使用EXECUTE ... USING
,而不是format(...)
与%L
,但对于像表/列名称的标识符,格式%I
模式是一个不错的简洁替代长篇大论quote_ident
电话。