簡體   English   中英

Postgres 備份並覆蓋一張表

[英]Postgres backup and overwrite one table

我有一個 postgres 數據庫,我正在嘗試使用以下內容備份表:

pg_dump --data-only --table=<table> <db> > dump.sql

然后幾天后,我試圖通過以下方式覆蓋它(基本上是想刪除所有數據並從我的轉儲中添加數據):

psql -d <db> -c --table=<table> < dump.sql

但它不會覆蓋,它會在不刪除現有數據的情況下添加它。

任何建議都會很棒,謝謝!

您基本上有兩種選擇,具體取決於您的數據和 fkey 約束。

如果表沒有 fkeys,那么最好的辦法是在加載之前截斷表。 請注意,truncate 在事務中的表現有點奇怪,所以最好的做法是(在事務塊中):

  1. 鎖上桌子
  2. 截短
  3. 加載

這將避免其他事務看到空表。

如果您有 fkeys,那么您可能希望加載到臨時表中,然后執行更新插入。 在這種情況下,如果其他事務可能想要寫入表(也在事務塊中),您可能仍然希望鎖定表以避免競爭條件:

  1. 將數據加載到臨時表中
  2. 鎖定目標表(可選,見上文)
  3. 使用可寫的 cte 在表中“插入”。
  4. 使用單獨的刪除語句從表中刪除數據。

第 3 階段有點棘手。 您可能需要提出一個單獨的問題,但基本上您將有兩個階段(並與文檔協商編寫):

  1. 更新現有記錄
  2. 插入不存在的記錄

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM