我觉得这应该非常简单,但我似乎无法找到解决方案。
我正在尝试创建一个plpgsql函数,该函数将开始日期和结束日期作为输入,然后生成两个日期之间的一系列年份,我可以将其用作新表的列。
例如,如果我打电话
my_function('2010-01-01', '2015-01-1')
我想要一个包含2010,2011,2012,2013,2014和2015列的新表。
我倾向于使用generate_series()函数来执行此操作,但我无法弄清楚如何实际存储它返回的值并将其拉出以创建我的表。
我使用的是Postgres 9.5.3
答案 0 :(得分:1)
将动态sql与execute format
一起使用。
假设新表应该有文本列:
create or replace function create_table(table_name text, from_year int, to_year int)
returns void language plpgsql as $$
begin
execute format('create table %I(%s)',
table_name,
string_agg(concat('"', y::text, '" text'), ','))
from generate_series(from_year, to_year) y;
end $$;
select create_table('my_table', 2010, 2015);
\d my_table
Table "public.my_table"
Column | Type | Modifiers
--------+------+-----------
2010 | text |
2011 | text |
2012 | text |
2013 | text |
2014 | text |
2015 | text |