Postgresql データベース timescaledb timescaledb 問題 大容量データテーブルをスーパーテーブルに変換すること
前書き
ここ数日、timescaledbライブラリのテーブルの一部がsupertablesでないことが判明し、ライブラリを構築する際に変更していなかったようで、挿入やクエリの効率に影響が出ています。
業務上の都合により、内容の一部を非公開とさせていただきます。
I 新しいテーブルを作成する
まず、timescaledbライブラリでsupertableを作成するには、データのないテーブルでなければならないので
そこで、最初のステップは、元のテーブルと全く同じテーブルを作成することです(テーブル名の後に_csが付きます) テーブル構築文をコピーするか、ツールで直接テーブル構造をコピーすることができます
2 新しいテーブルをsupertableに変更する
新しいテーブルを7日パーティションでスーパーテーブルに変更する
--I am partitioning on a 7-day basis
SELECT create_hypertable('table_name_cs', 'alarm_time', chunk_time_interval => INTERVAL '7 day');
-- Add an index
CREATE INDEX "table_name_cs_create_time_idx" ON "hrmw". "table_name_cs" USING btree (
"create_time" "code". "column_name" DESC NULLS FIRST
);
III データを挿入する
1. データ量が少ない場合は直接挿入できます
INSERT into table_cs SELECT * from table_name;
2. データ量が多い場合、1日ずつ、1ヶ月ずつ、数ヶ月ずつ挿入することができます。
INSERT into table_cs SELECT * from table_name where alarm_time >= '2020-9-1';
INSERT into table_name_cs SELECT * from table_name where alarm_time >= '2020-10-1' and alarm_time < '2020-11-1' ;
3. 関数(ストアドプロシージャ)の使用
テーブルのデータ量が大きすぎるため、一日一回の挿入は、ストアドプロシージャ(Postgresqlのデータベースは関数と呼ばれる)を使用することができます。
以下は、私が書いた関数です。を参考にしてください。
CREATE
OR REPLACE PROCEDURE "hrmw". "sp_into_table_name_pt" ( ) AS $BODY$ BEGIN
-- Generally build functions by table name
DECLARE -- I declare a bit too many variables, so let's go by the actual ones
target_text TEXT;
sqltext TEXT;
sqltext1 TEXT;
sqltext2 TEXT;
rd record;
nloop INT;
isexist TEXT;
datestr TEXT;
begindate TEXT;
n INT;
BEGIN
--query the time of the earliest day
sqltext := 'select to_char(min(alarm_time),''yyyy-mm-dd'') datestr from tb_hrmw_moni_target';
EXECUTE sqltext INTO begindate;
n := date_part( 'day', now( ) - begindate :: DATE );
--enddate:=(to_char(now(),'yyyy-mm-dd'))::text;
FOR nloop IN 0..n
LOOP
datestr := ( begindate :: DATE + nloop ) :: TEXT;
sqltext2 := '
insert into table name_cs
select
column_name1,
code,
column_name2,
alarm_time,
column_name3,
column_name4
from table name
where alarm_time >= ''' || datestr || ' 00:00:00''
and alarm_time <= ''' || datestr || ' 23:59:59''
';
EXECUTE sqltext2;
COMMIT;
END loop;
RETURN;
END;
END $BODY$ LANGUAGE plpgsql
IV 結果を見る
以下のパターン _timescaledb_internal はパーティションです。
この記事postgresqlデータベースtimescaledbのtimescaledbライブラリ変換大きなデータテーブルをsupertablesについてすべてです、より関連postgresqlデータベースtimescaledb timescaledbライブラリコンテンツは、スクリプト家の前の記事を検索するか、次の関連記事を閲覧し続けるあなたは、今後、よりスクリプト家をサポートします願っています!.
関連
-
Postgresqlの行から列への高度な応用と要約のアイデア
-
Postgresqlのユーザーログインエラーの回数を制限するサンプルコード
-
Postgresqlへのリモートアクセスの設定方法(ファイアウォールの設定またはOFFが必要です。)
-
Postgresqlのデータベース権限まとめ
-
GROUP BY句での定数使用に関するPostgreSQLの特別な制限について説明します。
-
postgreSQLのクエリ結果に自己インクリメントシーケンス演算が追加されました。
-
PostgreSQLはバッチ実行のためにSQLをファイルに実装しています。
-
Postgresqlのデータベースにおける配列の作成と変更に関する操作
-
PostgreSqlのhash_code関数の使用法
-
PostgreSQLで時間指定タスクを実装する4つの方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PostgreSQLでバッファキャッシュにデータを読み込む方法
-
PostgreSQLのユーザーログイン失敗時の自動ロック解決策
-
エクセルテーブルのデータをpostgresqlのデータベースにインポートする方法
-
postgresql いくつかのメソッドは、要約の重複するデータを削除する
-
pgAdmin for postgreSQLでサーバーのデータをバックアップする方法
-
Postgresqlのシーケンススキップの問題を解決する
-
oracle_fdwを介してOracleデータにアクセスするためのPostgreSQLの手順
-
PostgreSQLのデータベースでLIKE文の効率を確保する方法(推奨)
-
postgresqlのjsonbデータの問い合わせと変更方法
-
PostgreSQLにおけるVACUUMコマンドの使用方法