[英]PostgreSQL: How to add dynamic query as a column to query?
我的查詢:
select table_name,column_name,seq_name,nextval(seq_name::TEXT)
from
(
SELECT table_name,column_name,SUBSTRING(column_default,
strpos(column_default,'(')+2,
strpos(column_default,'::')-1 -(strpos(column_default,'(')+2)) as seq_name
FROM information_schema.columns
WHERE column_default LIKE 'nextval%'
) t;
如何在查詢中添加從當前表計算最大值的另一列? 像這樣:
(select coalesce(max(fname_id),1) from <current table>) as realmax
問題是當前行中的表名是一個字符串
您可以創建函數:
create or replace function ms(_t text, _a text) returns int as $$
declare
_m int;
begin
execute format('select coalesce(max(%I),1) from %I',_a,_t) into _m;
return _m;
end;
$$ language plpgsql;
並使用它:
select table_name,column_name,seq_name,nextval(seq_name::TEXT)
from
(SELECT table_name,column_name,SUBSTRING(column_default,
strpos(column_default,'(')+2,
strpos(column_default,'::')-1 -(strpos(column_default,'(')+2)) as seq_name
FROM information_schema.columns WHERE column_default LIKE 'nextval%') t;
另外請注意,您在這里不使用模式名稱。 可能需要
這可以在沒有動態SQL的情況下完成:
select table_name,column_name, nextval(seq_name),
(xpath('/table/row/max/text()', xml))[1]::text::int as max_val
from (
SELECT table_name,
column_name,
table_schema,
query_to_xml(format('select coalesce(max(%I),1) as max from %I.%I', column_name, table_schema, table_name), false, false, '') as xml
FROM information_schema.columns
where column_default LIKE 'nextval%'
) t;
這是我在這里回答的一個變體
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.