可能的重复:
Postgres动态查询功能 https://stackoverflow.com/questions/10639963/postgres-dynamic-query-function
我希望使用下面的查询返回的字符串作为其他查询的表名。
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/SQLEXECUTE陈述 http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html, via a DO
块或 PL/PgSQL 函数(CREATE OR REPLACE FUNCTION ... LANGUAGE plpgsql
)。 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;
The format(...)功能 http://www.postgresql.org/docs/current/static/functions-string.html's %I
and %L
格式说明符分别执行正确的标识符和文字引用。
对于文字,我建议使用EXECUTE ... USING
而不是format(...)
with %L
,但对于像表/列名称这样的标识符,格式%I
模式是冗长的简洁替代品quote_ident
calls.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)