Создать схему с текущей датой в названии - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать новую схему с сегодняшней датой в названии. Назван так

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 голосов
/ 02 ноября 2018

Вы можете использовать функциональность \gexec psql, которая будет выполнять вывод данного запроса. Отметим, что запрос может возвращать несколько строк, что приводит к нескольким инструкциям sql.

SELECT format('CREATE SCHEMA %I AUTHORIZATION postgres',
       concat('Copy_', replace(now()::date::text,'-','')));\gexec
0 голосов
/ 02 ноября 2018

Вы не можете сделать это с чистым SQL. Вам нужно использовать процедурный язык вместо:

--Anonymous block
DO $$
BEGIN

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

END $$;

Подробнее о динамических командах здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...