postgresql-dynamic value作为表名

anauzrmj  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(319)

这个问题在这里已经有答案了

8年前关门了。
可能重复:
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

能做到吗?有什么线索吗?

nbewdwxp

nbewdwxp1#

您将需要使用pl/pgsql EXECUTE 声明,通过 DO block或pl/pgsql函数( CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql ). postgresql使用的普通sql方言不支持动态sql,只有过程pl/pgsql变量支持动态sql。

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 电话。

相关问题