亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在postgres中使用存儲過程批量插入數據

發布時間:2021-02-03 16:43:09 來源:億速云 閱讀:280 作者:Leah 欄目:開發技術

如何在postgres中使用存儲過程批量插入數據?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

參考官方文檔

create or replace function creatData2() returns 
boolean AS
$BODY$
declare ii integer;
 begin
 II:=1;
 FOR ii IN 1..10000000 LOOP
 INSERT INTO ipm_model_history_data (res_model, res_id) VALUES (116, ii);
 end loop;
 return true;
 end;
$BODY$
LANGUAGE plpgsql;
select * from creatData2() as tab;

插入1千萬條數據耗時610s,當然字段不多的情況下。

補充:Postgresql存儲過程--更新或者插入數據

要記錄某一時段機器CPU、內存、硬盤的信息,展示的時間粒度為分鐘,但是為了精確,輸入數據源的時間粒度為6s。這個統計過程可以在應用層做好,每分鐘插入一次,也可以在數據庫層寫個存儲過程來完成,根據傳入數據的時間來判斷是更新數據庫舊數據還是插入新數據。

同時,這些數據只需要保留一周,更老的數據需要被刪除。刪除動作可以每天定時執行一次,也可以寫在存儲過程中每次檢查一下。

考慮到性能在此時沒什么太大約束,而后面存儲過程的接口方式更漂亮些,不用應用層去關心數據到底組織成什么樣,因此實現了一個如下:

Postgresql V8.3
CREATE OR REPLACE FUNCTION insert_host_status(_log_date timestamp without time zone, _host inet, _cpu integer, _mem integer, _disk integer)
 RETURNS void AS
$BODY$
DECLARE
  new_start timestamp without time zone;
  current_start timestamp without time zone;
  c_id integer;
  c_log_date timestamp without time zone;
  c_cpu integer;
  c_mem integer;
  c_disk integer;
  c_count integer;
  date_span interval;
BEGIN
  -- insert or update
  SELECT id, log_date, cpu, mem, disk, count INTO c_id, c_log_date, c_cpu, c_mem, c_disk, c_count FROM host_status_byminute WHERE host=_host ORDER BY id DESC limit 1;
  SELECT timestamp_mi(_log_date, c_log_date) INTO date_span;
  IF date_span >= '00:00:60' OR c_id IS NULL THEN
    INSERT INTO host_status_byminute (log_date, host, cpu, mem, disk, count) values (_log_date, _host, _cpu, _mem, _disk, 1);
  ELSIF date_span >= '-00:00:60' THEN
    c_mem := ((c_mem * c_count) + _mem)/(c_count + 1);
    c_cpu := ((c_cpu * c_count) + _cpu)/(c_count + 1);
    c_disk := ((c_disk * c_count) + _disk)/(c_count + 1);
    c_count := c_count + 1;
    UPDATE host_status_byminute SET mem=c_mem, cpu=c_cpu, disk=c_disk, count=c_count WHERE id=c_id;
  END IF;
  -- delete old data
  SELECT date_mii(date(now()), 6) INTO new_start;
  SELECT date(log_date) from host_status_byminute limit 1 INTO current_start; -- omit a bug happened when date is disordered.
  IF new_start > current_start THEN
    DELETE FROM host_status_byminute where log_date < new_start;
  END IF;
END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE
 COST 100;
ALTER FUNCTION insert_host_status(timestamp without time zone, inet, integer, integer, integer) OWNER TO dbuser_test;

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石台县| 四子王旗| 浦北县| 郴州市| 乌恰县| 乌拉特中旗| 张家港市| 凤台县| 鄱阳县| 饶河县| 阳曲县| 麦盖提县| 壤塘县| 拜泉县| 库车县| 梓潼县| 达拉特旗| 吉木萨尔县| 布拖县| 泰来县| 衡山县| 尼勒克县| 湘潭县| 策勒县| 闸北区| 资中县| 古蔺县| 丘北县| 隆林| 观塘区| 太保市| 龙海市| 铜陵市| 横峰县| 修水县| 西峡县| 寿宁县| 和林格尔县| 平和县| 铁力市| 凯里市|