gpt4 book ai didi

postgresql - Postgres 查询中的动态表名

转载 作者:行者123 更新时间:2023-12-04 04:12:45 36 4
gpt4 key购买 nike

有没有办法用存储在另一个表中的值替换查询中的表名?这是在 postgres sql 中

例如

元表

col1    | col 2
Table 1 | val1
Table 2 | val2

我的需求

select * 
from (select col1 from meta_table where col2 = val2)

最佳答案

可能最灵活、最有效的方法是使用函数动态创建临时 View :

create or replace function f_prepare(tname text, vname text) returns text language plpgsql as $$
begin
execute format(
'create or replace temporary view %I as select * from %I',
vname, tname);
return vname;
end $$;

然后你就可以像往常一样使用创建的 View 了,例如;

select f_prepare('pg_class', 'v_class');
select * from v_class where relname = 'pg_database'; -- Index on the source table will be used here

并使用您的代码:

select f_prepare((select col1 from meta_table where col2 = 'val2'), 'v');
select * from v;

与任何其他临时对象一样,创建的 View 不会与其他 session 冲突,并且会在断开连接时被丢弃。

关于postgresql - Postgres 查询中的动态表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61443766/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com