Python PostgreSQL-将数据从一个数据库传输到另一个数据库
我有一个原始数据库[1],在其中我删除了很多我不想使用错误查询的数据 我创建了一个备份数据库[2],它是我删除任何内容之前从中删除的原始数据库[1]的副本。现在,我想将错误删除的数据从备份数据库[2]移动到原始数据库[1] 我需要确保在此过程中不会创建重复项,因为某些数据仍在原始数据库中[1] 我的数据库具有以下结构:Python PostgreSQL-将数据从一个数据库传输到另一个数据库,python,database,postgresql,pgadmin,Python,Database,Postgresql,Pgadmin,我有一个原始数据库[1],在其中我删除了很多我不想使用错误查询的数据 我创建了一个备份数据库[2],它是我删除任何内容之前从中删除的原始数据库[1]的副本。现在,我想将错误删除的数据从备份数据库[2]移动到原始数据库[1] 我需要确保在此过程中不会创建重复项,因为某些数据仍在原始数据库中[1] 我的数据库具有以下结构: ----------------------------------------------------- | id (serial - auto incrementing in
-----------------------------------------------------
| 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是否已经存在就足够了。如果是,我应该跳过有问题的那一行,如果不是,我应该转移这一行
欢迎提出任何建议!我不是最聪明的鹰派 您可以在本地机器上恢复的psql-h db2_中使用copy:
\copy datastore to '/tmp/d.csv'
然后在本地计算机psql-h db1_original上:
它将通过网络连接到您的机器,然后返回到RDS,从这一点来看,效率很低,但使用dblink将需要更改创建扩展、配置RDS以相互通信等等。如果您选择dblink-逻辑保持不变-使用PK识别缺少的键您可以使用从db复制到csv abd,然后从csv复制到另一个db。或者使用dblink。但从你的描述中,我有一种感觉,当你说数据库时,你说的是桌子。请使用您使用的备份和还原命令更新post否。我说的是数据库。不是桌子。我有两个数据库。备份数据库是另一个(我的原始数据库)的AWS备份。如果我没有错的话,这两个数据库都运行在不同的虚拟机上。谢谢你的回复。我会看看我能用它做什么;使用aws,您需要设置连接安全组吗?子网?同样取决于其RDS或EC2是否使用dblink或复制到本地磁盘。再次,请向我们展示您使用的备份命令-这将非常有助于您理解setup@Zeliax如果有一种方法可以识别不涉及主键的重复项,那么您可以执行简单的选择和插入。根据数据在表中的结束方式,时间戳列可能是放置唯一约束、拒绝任何重复项的最佳候选者。如果您有两个rds-copy和dblink都适用于您,我将尝试此方法。不过只有一个问题。我应该从哪里运行\copy命令?哦。我想我明白了。我应该在我还原的db上用cmd编写以下代码:psql-h db2_restored\copy datastore to'/tmp/d.csv'?如果您在任何客户端上使用psql的\copy,请运行它。RDS不允许您运行psql,因为它没有外壳,所以您必须在笔记本电脑上运行它
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
;