用名称中的当前日期创建模式

时间:2018-11-02 15:40:54

标签: sql postgresql

我正在尝试使用名称中的今天日期创建一个新模式。这样命名

select concat('Copy_', replace(now()::date::text,'-',''))
Copy_20181102

所以我尝试:

CREATE SCHEMA concat('Copy_', replace(now()::date::text,'-',''))
    AUTHORIZATION postgres;
  

错误:“(”或附近的语法错误:第1行:创建模式   concat('Copy_',replace(now():: date :: text,'-',... ^ SQL状态:42601   角色:21

我该如何解决?

2 个答案:

答案 0 :(得分:3)

使用纯SQL不能做到这一点。您需要改用程序语言:

--Anonymous block
DO $$
BEGIN

    EXECUTE format('CREATE SCHEMA %I AUTHORIZATION postgres',
            concat('Copy_', replace(now()::date::text,'-','')));

END $$;

有关动态命令here的更多信息。

答案 1 :(得分:1)

您可以使用psql的\gexec功能,它将执行给定查询的输出。请注意,查询可以返回多行,从而导致多个sql指令。

SELECT format('CREATE SCHEMA %I AUTHORIZATION postgres',
       concat('Copy_', replace(now()::date::text,'-','')));\gexec