2016-11-15 10 views
1

スキーマ内に10個のテーブルがあり、すべてに 'measurementdatetime'フィールドがあります。私はtablenameとそれぞれの最大測定日時を示す各テーブルの行を返すスクリプトを書こうとしています。スキーマ内のすべてのテーブルで同じフィールドの最大値を取得

私はまた(

「をmy_tablename1が存在しないエラー関係」を取得

SELECT table_name AS table_full_name, 
    MAX (table_name || '.measurementdatetime' ) AS max_timestamp 
    FROM information_schema.tables 
    WHERE table_schema = 'temp_work_w_roof' 
    GROUP BY tables.table_name 
    ORDER BY pg_total_relation_size('"' || table_name || '"') DESC 

を私はそれがこのような何かをコーディングする必要があります理解しますが、私は正確な構文を把握することはできません。ビューとしてこれをコンパイルすることが可能である&はそうだとすれば、彼らはこのような動的ならビューの前の「フィールド名」をコーディングする方法)

答えて

1

あなたが例えば、plpgsql language dynamic commandを使用する必要があります。??

create or replace function get_max_measurementdatetime() 
returns table (table_name text, max_value timestamp) 
language plpgsql as $$ 
declare 
    r record; 
begin 
    for r in 
     select i.table_name, i.table_schema 
     from information_schema.tables i 
     where table_schema = 'temp_work_w_roof' 
     and table_type = 'BASE TABLE' 
    loop 
     execute format (
      'select max(measurementdatetime) from %I.%I', 
      r.table_schema, r.table_name) 
     into max_value; 
     table_name := r.table_name; 
     return next; 
    end loop; 
end $$; 

select * 
from get_max_measurementdatetime(); 
+0

ああ、それは私のレーダーから離れていた、ありがとう、そんなにうまくいきます。 – SolarBrian

+0

それはinformation_schema.tablesから私は多くの実行時間を増加させるテーブルとスキーマを返すようだが、ビューを除外するWHERE句をコーディングする方法はありますか? – SolarBrian

+1

修正された答えのように 'where table_type = 'BASE TABLE''を使ってテーブルだけを選択することができます。 – klin

関連する問題