如何在 Postgresql 資料庫中的刪除大量資料
前言
一開始為了收集、分析資料,筆者把所有的記錄都保存起來。隨著專案的進行我們只需要保留特定條件的記錄。想說就趁著這次順手記錄起來吧。
主要內容
登入資料庫
1psql -h myhost -d mydb -U myuser [-W]
列出所有資料表
1postgres=# \dt
or
1SELECT *
2FROM pg_catalog.pg_tables
3WHERE 1 = 1 AND
4 schemaname != 'pg_catalog' AND
5 schemaname != 'information_schema';
透過建立臨時表來刪除大量資料
1BEGIN;
2
3SET LOCAL temp_buffers = '1000MB';
4
5-- copy surviving rows into temporary table
6CREATE TEMP TABLE tmp AS
7SELECT u.*
8FROM users u
9WHERE u.id IS NULL;
10
11-- empty table
12TRUNCATE users;
13
14-- insert back surviving rows
15INSERT INTO users TABLE tmp;
16
17COMMIT;
如果途中有出現錯誤,則要使用
END;
進行退回 (Rollback)。