我正在使用postgreSQL。我想从表中选择数据。此表名包含当前年份。比如abc2013。我试过了
select * from concat('abc',date_part('year',current_date))
select *from from concat('abc', extract (year from current_date))
那么如何动态地从这样的表中获取数据呢?
答案 0 :(得分:2)
请不要这样做 - 首先要仔细查看备选方案,从partitioning and constraint exclusion开始。
如果必须使用动态表名,请在查询生成期间在应用程序级别执行此操作。
如果所有其他方法都失败了,您可以使用PL / PgSQL程序,如:
CREATE OR REPLACE pleasedont(int year) RETURNS TABLE basetable AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT col1, col2, col3 FROM %I', 'basetable_'||year);
END;
$$ LANGUAGE plpgsql;
仅当您具有与子表具有相同结构的基表时,此方法才有效。当你开始添加限定符(where子句约束等)时,使用它也会非常痛苦,并且它会阻止任何类型的计划缓存或有效的预处理语句使用。