我知道如何在 MySQL 和 MSSQL 中做到这一点,但我正在努力在 Postgres 10.12 中做同样的事情。我有大约 200 个视图要创建,每个视图的唯一区别是模式位置和 where 子句。
例如:
create or replace view SCHEMA1.myview as
select * from SHAREDSCHEMA.sometable where MYCOL = 'ABC';
所以我需要做的是创建该视图大约 200 次,每次迭代为:
SCHEMA1.myview
SCHEMA2.myview
SCHEMA3.myview
etc...
MYCOL = 'ABC'
MYCOL = 'EFG'
MYCOL = 'HIJ'
etc...
希望这是有道理的。同样,每次迭代之间的唯一区别是模式名称更改和 where 子句更改。
我可能会编写一些 Python 脚本或其他东西来生成代码,但如果可能的话,我宁愿在 Postgres 中进行。
我知道这不是有效的代码,但基本上这就是我想要做的:
do $$
declare
myschema varchar(10) := 'SCHEMA1';
mywhere varchar(3) := 'ABC';
begin
create or replace view @[email protected] as
select * from SHAREDSCHEMA.sometable where MYCOL = @mywhere@;
end $$;
然后每次我运行它时,我只需更改@myschema
and @mywhere
。
任何帮助,将不胜感激。
谢谢!
为此,您需要动态 SQL:
format()
在创建动态 SQL 以正确处理标识符和常量值时,强烈建议使用该函数。您还可以将其放入函数(或较新版本中的过程)中:
然后你可以运行:
如果需要,可以使用它一次性创建所有视图: