![](/img/trans.png)
[英]SQLAlchemy: How to transfer data from one table in an old DB to another table in a new/different DB?
[英]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
,我希望有人對如何執行此數據傳輸有一個很好的主意,而無需創建重復項。
我希望我能詳細列出所有細節,如果沒有,請告訴我,我會提供。
我想提到我在原始數據庫中遇到的問題是一個好主意[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.