簡體   English   中英

PostgreSQL-將數據從一個數據庫傳輸到另一個數據庫

[英]PostgreSQL - Transfer data from one db to another

我有一個原始數據庫[1],其中我刪除了很多我不希望通過使用錯誤查詢而准備刪除的數據。

我創建了一個備份數據庫[2],該數據庫是在刪除任何內容之前從其中刪除的原始數據庫[1]的副本。 現在,我想將錯誤刪除的數據從備份數據庫[2]移到原始數據庫[1]

我需要確保在此過程中不會創建任何重復項,因為某些數據仍在我的原始數據庫中[1]。

我的數據庫具有以下結構:

-----------------------------------------------------
| id (serial - auto incrementing int) | - primary key
| did (varchar) |
| sid (int) |
| timestamp (bigint) |
| data (json) | 
| db_timestamp (bigint) |
-----------------------------------------------------

我嘗試通過谷歌搜索找到解決方案,但無濟於事。 根據我的SQL知識,我認為無法做到這一點(從一個數據庫到另一個數據庫),但是我已經准備好實現Python腳本(如果需要這樣做的話)(我在Python中很全面)。 我正在運行PostgreSQL 9.6,並且正在使用pgAdmin 3將查詢寫入數據庫。

我需要從中傳輸的表稱為datastore ,我希望有人對如何執行此數據傳輸有一個很好的主意,而無需創建重復項。

我希望我能詳細列出所有細節,如果沒有,請告訴我,我會提供。

UPDATE

我想提到我在原始數據庫中遇到的問題是一個好主意[1],因為我刪除了一些數據。 我要傳輸的行是我不小心刪除的行。

因此,我認為檢查每行的ID是否已經存在就足夠了。 如果是這樣,我應該跳過相關的行,否則請轉移該行。

歡迎任何建議! 我不是最聰明的SQL鷹;)

您可以為此使用copy (在本地計算機上的psql -h db2_restored ):

\copy datastore to '/tmp/d.csv'

然后在本地計算機psql -h db1_original

create table tt as select * from datastore where false;
\copy tt from '/tmp/d.csv'
insert into datastore 
  select * 
  from tt 
  join datastore orig on tt.id = orig.id 
  where orig.id is null
;

它會通過網絡連接到您的計算機,然后再返回到RDS,從這一點來看效率很低,但是使用dblink會需要進行更改(創建擴展名,配置RDS以相互通信等等)。 而且,如果您選擇dblink-邏輯保持不變-使用PK識別丟失的密鑰

暫無
暫無

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

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