0
我試圖找出一種方法來縮小表的大小,通過合併類似條目來增加到驚人的大小。我已經得到了一個工作的「分組依據」查詢,按照我的意願捲起數據,但我不確定如何刪除現有條目並根據該選擇語句插入新數據。我想最直接的方法是運行select,將這些結果保存到內存中,刪除表條目,然後插入合併條目。但這似乎效率低下,會使用大量的內存,希望也許有一種方法來執行一些SQL魔法,並使這一次發生。SQL組按現有行刪除它們並按組結果插入按結果
這是我的 '集團通過' 選擇:
select SUM(user_in),
SUM(user_out),
SUM(user_total),
name,
device_type,
device_os,
ownership,
host_name
FROM user_usage
GROUP BY name,
device_type,
device_os,
ownership,
host_name;
謝謝!萬一別人永遠運行到這樣的事情
,這個功能能實現整合,同時非常有效:
CREATE OR REPLACE FUNCTION consolidate_user_bandwidths(
IN _tbl REGCLASS,
IN _savetime TIMESTAMP
) RETURNS void AS
$BODY$
BEGIN
EXECUTE 'CREATE TEMP TABLE user_bandwidths_temp ON COMMIT DROP AS
SELECT MAX(id) AS id, SUM(bandwidth_in) AS bandwidth_in,
SUM(bandwidth_out) AS bandwidth_out,
'''|| _savetime ||'''::timestamp AS created_at,
SUM(bandwidth_total) AS bandwidth_total, name,
device_type, device_os,
ownership, host_name
FROM '|| _tbl ||'
GROUP BY name, device_type,
device_os, ownership, host_name';
EXECUTE 'TRUNCATE TABLE '|| _tbl ||'';
EXECUTE 'INSERT INTO '|| _tbl ||' SELECT * FROM user_bandwidths_temp';
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
什麼是您的關係型數據庫? –
如果您收到大量不需要的重複項,您應該查看將條目添加到user_usage表的 – SpacePhoenix
添加表模式的代碼邏輯。 – McNets