Yuan のノート
心之所至,隨意亂書
如何在 Postgresql 資料庫中的刪除大量資料
Mon Jun 20, 2022
🏷️

前言

一開始為了收集、分析資料,筆者把所有的記錄都保存起來。隨著專案的進行我們只需要保留特定條件的記錄。想說就趁著這次順手記錄起來吧。

主要內容

登入資料庫

1
psql -h myhost -d mydb -U myuser [-W]

列出所有資料表

1
postgres=# \dt

or

1
2
3
4
5
SELECT *
FROM pg_catalog.pg_tables
WHERE 1 = 1 AND
    schemaname != 'pg_catalog' AND 
    schemaname != 'information_schema';

透過建立臨時表來刪除大量資料

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
BEGIN;

SET LOCAL temp_buffers = '1000MB';

-- copy surviving rows into temporary table
CREATE TEMP TABLE tmp AS
SELECT u.*
FROM users u
WHERE u.id IS NULL;

-- empty table
TRUNCATE users;

-- insert back surviving rows
INSERT INTO users TABLE tmp;

COMMIT;
如果途中有出現錯誤,則要使用 END; 進行退回 (Rollback)。

參考連結