我有一个大型数据库(在PostgreSQL 8.4中),我尝试在较小的部分进行分析。为此,我将大数据库的部分内容复制到其他模式(我知道它在某种程度上违背了复制数据的数据库的理念,但没有这一步,分析太慢了。)
我需要执行相当多的SQL命令,以获得包含其中所有必要表的新架构。但是,创建一个模式与创建另一个模式之间的区别非常小(原则上它只是模式的名称和“WHERE”中的不同值 - 声明)。
我的问题如下:
是否可以编写一个以某个值作为参数的函数,并在where子句中使用此参数(以及作为模式的名称?) 如果有可能,你会建议哪种程序语言(也许是plpgsql),这样的脚本会是什么样子(就像骨架一样)?
提前谢谢!
答案 0 :(得分:2)
我不确定我是否完全理解你的问题,但听起来应该使用临时架构:
create temporary table foo as select * from bar where ...
有时使用相同名称也很有用:
create temporary table foo as select * from foo where ...
否则,动态SQL有效:
create function do_stuff(_table regclass) returns void as $$
begin
execute 'select 1 from ' || _table;
end; $$ language plpgsql strict;
select do_stuff('schemaname.tablename');