2015-05-15 4 views
0

мне нужно создавать таблицы на ежедневной основе с именем даты в форме в (yyMMdd), я попытался это:Создать таблицу с именем переменной

dbadmin=> \set table_name 'select to_char(current_date, \'yyMMdd \')' 
dbadmin=> :table_name; 

to_char 
--------- 
150515 
(1 row) 

, а затем попытался создать таблицу с именем таблицы из заданного параметра : table_name, но получил это

dbadmin=> create table :table_name(col1 varchar(1)); 
ERROR 4856: Syntax error at or near "select" at character 14 
LINE 1: create table select to_char(current_date, 'yyMMdd ')(col1 va... 

есть ли способ, где я мог бы сохранить значение в переменной, а затем использовать эту переменную в качестве имени таблицы или назначить приоритет, что внутренний выбор заявление выполнить первое, чтобы дать мне имя, которое я требую.

Пожалуйста, предложите !!!

+0

Это может быть просто проще установить внешнюю процедуру, используя скрипт. – Kermit

ответ

1

Попробуйте

  • за то, что когда-либо причине переменная сохраненную поставляется с некоторыми пространства и я должен был удалить его, а также не могут начать называть таблицу начиная с номерами, так что я должен был что-то добавить в форме, подобной tbl_
  • Короче, вам просто нужно сохранить значение выхода, чтобы вам нужно было выполнить дополнительную работу и выполнить запрос.

    \set table_name `vsql -U dbadmin -w d -t -c "select concat('tbl_',replace(to_char(current_date, 'yyMMdd'),' ',''))"` 
    

Создать таблицу:

create table :table_name(col1 varchar(1)); 
([email protected]:5433) [dbadmin] *> \d tbl_150515 
Schema  | public 
Table  | tbl_150515 
Column  | col1 
Type  | varchar(1) 
Size  | 1 
Default  | 
Not Null | f 
Primary Key | f 
Foreign Key |