Possible Duplicate:
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

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

推荐答案

您需要通过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调用的一个简洁的替代方案.

Postgresql相关问答推荐

如何在gorm中创建一个可读但不可写的字段

在Docker Compose中获取CSV文件数据?

PostgreSQL\d命令:有办法只 Select 一列吗?

无法使用PGx连接到Postgres数据库AWS RDS

即使不对订阅服务器进行任何修改,Postgres逻辑复制也可能发生冲突吗?

错误:用户需要系统密码:postgres

如何在docker-compose中使用docker secrets设置ConnectionString?

postgresql中多个左连接的空结果

查找行中的最小值

我在try 访问我的数据库表时在 postgresql 中收到 aclcheck_error 错误

是否可以短时间运行 VACUUM FULL 并获得一些好处?

我应该 Select 哪种数据类型?

Windows上的psql:错误:编码UTF8的字节序列无效:0xc8 0x20

无法从在 wsl 2 上运行的服务之一连接到在 wsl 2 上的容器中运行的 postgres 数据库

Hibernate 将用户模型保存到 Postgres

Postgres 删除表语法错误

使用枚举与布尔值?

错误:表tablename上的更新或删除违反外键约束

Rails PG::UndefinedTable:错误:missing FROM-clause entry for table

使用python将数据从csv复制到postgresql