【发布时间】:2018-02-15 02:53:56
【问题描述】:
我想在 Postgresql 中创建一个表(如果它不存在的话)并在其中插入一些数据。
该表必须具有以下命名约定,即 test_yyyymm,其中 yyyymm 是当前年份和月份。
我尝试了各种方法并停止了动态sql。
DO
$$
BEGIN
EXECUTE 'CREATE TABLE IF NOT EXISTS ' || 'select concat(''test_'', (select to_char(now(), ''yyyymm'')))::text'|| ' (temp_id INT NOT NULL,
temp_name varchar(150),
PRIMARY KEY (temp_id))';
END;
$$
如果我只选择这部分
select concat('test_', (select to_char(now(), 'yyyymm')))::text
我得到了我想要的名称,但它在动态 sql 中不起作用。
我尝试删除该行并将其替换为静态名称,它就像一个魅力,所以我确信问题出在表名中。
DO $$
BEGIN
EXECUTE 'CREATE TABLE IF NOT EXISTS ' || 'test_table' || ' (temp_id INT NOT NULL,
temp_name varchar(150),
PRIMARY KEY (temp_id))';
END;
$$
我怎样才能以人道的方式实现这一目标?
提前致谢!
【问题讨论】:
标签: sql postgresql