PostgreSQL的 - 动态值表名称[复制](PostgreSQL - dynamic valu

2019-07-03 16:13发布

可能重复:
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

能不能做到? 任何线索怎么样?

Answer 1:

您将需要使用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电话。



文章来源: PostgreSQL - dynamic value as table name [duplicate]