在 postgres/timescaledb 中,对于匹配过滤器的所有表,获取符合条件的所有结果
In postgres/timescaledb, for all tables that match filter get all results with condition
我有一个时间刻度数据库,其中多个 table 具有相同的结构。
我想从每个 table 的值为真的行中检索最近的行。
我的逻辑是
- 检索 table 的所有 table 名称,其中此条件可能为真
- 遍历 table 名称列表和 select 满足条件的行
我在 FOR 循环中遇到语法错误,但我希望我做错了更多事情。
有人可以提出解决方案吗?提前谢谢你。
DECLARE
tablename text;
BEGIN
FOR tablename IN
SELECT table_name FROM information_schema.tables
WHERE table_name LIKE 'ohlc%'
LOOP
SELECT WHERE tablename.is_active is TRUE
ORDER BY time_stamp DESC
Limit 1
END LOOP;
END;
翻译您的问题
- 查找 table 在架构中具有特定列名称的。
How to find a table having a specific column in postgresql
- 先条件满足再循环。 Function to loop through and select data from multiple tables
- 最棘手的问题是 quote_ident。
create or replace function test0()
returns table (_is_active boolean, id int) as
$$
declare tbl text;
begin
for tbl in
select quote_ident( table_name)
from information_schema.columns
where table_schema = 'public'
and table_name ilike 'ohlc%'
and column_name = 'is_active'
loop
return query EXECUTE
'select ' || quote_ident('is_active') || ' , ' || quote_ident('id') || ' from ' || tbl || ' where '|| quote_ident('is_active') ||' is true';
end loop;
end
$$ language plpgsql;
我有一个时间刻度数据库,其中多个 table 具有相同的结构。
我想从每个 table 的值为真的行中检索最近的行。
我的逻辑是
- 检索 table 的所有 table 名称,其中此条件可能为真
- 遍历 table 名称列表和 select 满足条件的行
我在 FOR 循环中遇到语法错误,但我希望我做错了更多事情。
有人可以提出解决方案吗?提前谢谢你。
DECLARE
tablename text;
BEGIN
FOR tablename IN
SELECT table_name FROM information_schema.tables
WHERE table_name LIKE 'ohlc%'
LOOP
SELECT WHERE tablename.is_active is TRUE
ORDER BY time_stamp DESC
Limit 1
END LOOP;
END;
翻译您的问题
- 查找 table 在架构中具有特定列名称的。 How to find a table having a specific column in postgresql
- 先条件满足再循环。 Function to loop through and select data from multiple tables
- 最棘手的问题是 quote_ident。
create or replace function test0()
returns table (_is_active boolean, id int) as
$$
declare tbl text;
begin
for tbl in
select quote_ident( table_name)
from information_schema.columns
where table_schema = 'public'
and table_name ilike 'ohlc%'
and column_name = 'is_active'
loop
return query EXECUTE
'select ' || quote_ident('is_active') || ' , ' || quote_ident('id') || ' from ' || tbl || ' where '|| quote_ident('is_active') ||' is true';
end loop;
end
$$ language plpgsql;