1
我繼承了Postgres數據庫,目前正在清理它。我創建了一個算法,以找到數據不好的行。該算法被編碼爲名爲checkProblems()
的函數。利用這一點,我可以選擇包含壞行的行,如下圖所示...清理壞行Postgres表
schema = findTables(dbName)
conn = psycopg2.connect("dbname='%s' user='postgres' host='localhost'"%dbName)
cur = conn.cursor()
results = []
for t in tqdm(sorted(schema.keys())):
n = 0
cur.execute('select * from %s'%t)
for i, cs in enumerate(tqdm(cur)):
if checkProblem(cs):
n += 1
results.append({
'tableName': t,
'totalRows': i+1,
'badRows' : n,
})
cur.close()
conn.close()
print pd.DataFrame(results)[['tableName', 'badRows', 'totalRows']]
現在,我需要刪除是壞的行。我有兩種不同的做法。首先,我可以將乾淨的行寫入臨時表中,並重命名該表。我認爲這個選項過於耗費內存。如果我能夠刪除光標處的特定記錄,情況會好得多。這甚至是一個選擇?
否則,在這種情況下刪除記錄的最佳方式是什麼?我猜測這應該是數據庫管理員做的比較常見的事情......