两个具有不同结构的数据库之间的数据迁移(Postgresql)

时间:2015-07-04 17:00:16

标签: postgresql database-migration

我有两个数据库,old_db和new_db,我想要做的是将数据记录从old_db传输到new-db但具有不同的结构或不同的列。我正在创建一个sql脚本,将old_db上传到new_db,然后我可以从old_db获取数据到new_db。

old_db中的一个表是这样的:

tbl_person:

person_id bigint,

last_name text,

first_name text,

现在我想将数据传输到new_db,结构如下所示,new_id列将生成新的id号,person_id将被引用或转移到ref_id列:

tbl_person:

new_id bigint, ---this column is where the new id will be generated

last_name text,

first_name text,

ref_id bigint; ---this column is where the person_id will be copied

如何创建一个sql脚本,以便从old_db到new_db正确引用这些数据?我不是要求一个工具或GUI而是一个我将在shell脚本中执行的sql脚本。我正在使用postgresql作为我的DBMS,因此我还需要有关pg_dump或pg_restore的帮助,以便在new_db中上传old_db。 TIA。

1 个答案:

答案 0 :(得分:0)

这个的根源是直接从旧表中将数据插入到新表中。注意:我没有运行此代码。

INSERT INTO new_db.tbl_person (last_name, first_name, ref_id)
(SELECT last_name, first_name, person_id FROM old_db.tbl_person)

如果两个DB都在同一个Postgres实例中运行,那么这将自行运行。如果他们在彼此可见的主机上的不同实例中,您可以使用dblink,这使得SELECT查询类似于:

SELECT * FROM
dblink(
  'host=otherhost user=me password=pass dbname=old_db',
  'SELECT last_name, first_name, person_id FROM tbl_person'
) AS tbl_old_person(last_name text, first_name test, person_id integer)

如果主持人无法看到对方,那么pg_dumppg_restore上的StackOverflow会有很多帮助: