我想刪除表中沒有外鍵依賴關係的行。如果它們確實存在,則應將行標記爲「deadfiled」以維護關係完整性。目標是僅保留必要的數據。檢測對刪除的依賴關係
刪除將隻影響一行;它不會觸發級聯刪除,也不會嘗試刪除依賴項。例如,許多其他表格中引用了客戶行,例如發票,協議,更改訂單等,該客戶行應標記爲「deadfiled」。如果沒有這樣的參考,則客戶行可以從表中刪除。
我在尋找有關從客戶端應用程序代碼處理此問題的最佳方法的建議。我正在使用PostgreSQL 9.1。
這是目前的做法,依靠Postgres的外鍵依賴的‘知識’:
Begin transation
delete row x
if SQLSTATE Error Code = 23503
update row set deadfiled = true
if success
commit transaction
else rollback
在一些帖吧出現上述方法被認爲是脆弱的。有一個更好的方法嗎?
爲什麼不是總是設置'deadfiled'並且不打擾是否存在依賴關係?無論如何,你必須過濾'deadfiled'才能將生命與殭屍行分開。我懷疑物理刪除一些行會給你任何可衡量的性能提升。 – 2012-02-05 11:51:38
或做到這一點,並有一些「清理」任務,刪除沒有引用的死行。你甚至可以稱它爲「autovacuum」;) – araqnid 2012-02-05 17:05:19