在PostgreSQL中自动化模式创建(也许是plpgsql?)

时间:2011-06-16 13:42:02

标签: sql postgresql automation plpgsql

我有一个大型数据库(在PostgreSQL 8.4中),我尝试在较小的部分进行分析。为此,我将大数据库的部分内容复制到其他模式(我知道它在某种程度上违背了复制数据的数据库的理念,但没有这一步,分析太慢了。)

我需要执行相当多的SQL命令,以获得包含其中所有必要表的新架构。但是,创建一个模式与创建另一个模式之间的区别非常小(原则上它只是模式的名称和“WHERE”中的不同值 - 声明)。

我的问题如下:

是否可以编写一个以某个值作为参数的函数,并在where子句中使用此参数(以及作为模式的名称?) 如果有可能,你会建议哪种程序语言(也许是plpgsql),这样的脚本会是什么样子(就像骨架一样)?

提前谢谢!

1 个答案:

答案 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');

http://www.postgresql.org/docs/9.0/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN