我正在尝试使用名称中的今天日期创建一个新模式。这样命名
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
我该如何解决?
答案 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