【问题标题】:Create schema with current date in name使用名称中的当前日期创建模式
【发布时间】:2018-11-02 15:40:53
【问题描述】:

我正在尝试创建一个名称中包含今天日期的新架构。像这样命名

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

所以我试试:

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

错误:“(”处或附近的语法错误第 1 行:CREATE SCHEMA concat('Copy_', replace(now()::date::text,'-',... ^ SQL 状态:42601 字符:21

我该如何解决这个问题?

【问题讨论】:

  • replace(now()::date::text,'-','') 最好写成to_char(now(), 'yyyymmdd')to_char(current_date, 'yyyymmdd')

标签: sql postgresql


【解决方案1】:

纯 SQL 无法做到这一点。您需要改用程序语言:

--Anonymous block
DO $$
BEGIN

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

END $$;

更多关于动态命令的信息here

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多