在 postgres/timescaledb 中,对于匹配过滤器的所有表,获取符合条件的所有结果

In postgres/timescaledb, for all tables that match filter get all results with condition

我有一个时间刻度数据库,其中多个 table 具有相同的结构。

我想从每个 table 的值为真的行中检索最近的行。

我的逻辑是

  1. 检索 table 的所有 table 名称,其中此条件可能为真
  2. 遍历 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;

翻译您的问题

  1. 查找 table 在架构中具有特定列名称的。 How to find a table having a specific column in postgresql
  2. 先条件满足再循环。 Function to loop through and select data from multiple tables
  3. 最棘手的问题是 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;