我在生產資料庫中有數百萬條記錄(每 5 個表可能有 1000 萬條記錄),我想僅使用虛擬資料將它們復制到另一個資料庫中,因為我無法真正匯出這些資料,因為它是 PROD 資料庫并且有員工資訊。
我現在主要是通過使用LOOP和這個查詢來插入虛擬資料
DO $$
DECLARE
table1_id uuid;
table2_id uuid;
table3_id uuid;
BEGIN
FOR counter IN 1..500000 LOOP
INSERT INTO table1
VALUES ('random', 'data', 'here')
RETURNING id INTO table1_id;
INSERT INTO table2
VALUES ('random', 'data', 'here')
RETURNING id INTO table2_id;
INSERT INTO table3
VALUES ('random', 'data', 'here')
RETURNING id INTO table3_id;
INSERT INTO table4
VALUES (random', 'data', 'here');
INSERT INTO table5
VALUES ('random', 'data', 'here');
END LOOP;
END; $$
我知道插入單條記錄和迭代非常慢,但是我如何才能批量執行此操作?另外,還有比手動加載更好的方法嗎?正如我之前所說,匯出 PROD 資料并在此處使用它對我來說是不現實的。
我想這樣做的原因是我想用我的一個 API 查詢這個新加載的資料庫并測驗每個查詢的延遲時間,但我希望記錄計數類似于 PROD 的記錄計數以保留某種型別的受控環境,除非有人建議這樣做的更好方法。謝謝
uj5u.com熱心網友回復:
您可以在單個陳述句中完成所有操作,這很可能是最快的方法:
with t1 as (
INSERT INTO table1
select 'random', 'data', 'here'
from generate_series(1,50000)
RETURNING id
), t2 as (
INSERT INTO table2
select id, 'random', 'data', 'here'
from t1
returning id
), t3 as (
INSERT INTO table3
select id, 'random', 'data', 'here'
from t2
returning id
), t4 as (
INSERT INTO table4
VALUES ('random', 'data', 'here')
)
INSERT INTO table5
VALUES ('random', 'data', 'here');
uj5u.com熱心網友回復:
這些查詢是比隨機資料更隨意的資料。生成具有正確屬性的隨機資料以進行實際測驗是一門藝術(更不用說它本身的研究領域)
對于亂數,您可以使用 random() 結合算術對其進行縮放,并在需要時將 floor() 將其轉換為整數。如果您需要非均勻分布,您還可以使用 sqrt() 或 ln() 或 power() 對其進行轉換。
對于隨機字串,您可以使用類似 md5(random()::text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350030.html
標籤:数据库 PostgreSQL 批量处理 加载 批量插入
