我想在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;
$$
我怎样才能以人道的方式实现这一目标?
提前致谢!
答案 0 :(得分:1)
你很亲密。不需要select
,只需按原样使用转化。
DO $$
BEGIN
EXECUTE 'CREATE TABLE IF NOT EXISTS ' || concat('Log_',to_char(now(), 'yyyymm')) || ' (temp_id INT NOT NULL,
temp_name varchar(150),
PRIMARY KEY (temp_id))';
END;
$$