PostgreSQL - 动态值作为表名

时间:2012-11-08 12:37:53

标签: sql postgresql postgresql-9.1 dynamic-sql

  

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

可以吗?有什么线索?

1 个答案:

答案 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>