2015-07-04 2 views
3

У меня есть две базы данных, old_db и new_db, то, что я хотел сделать, это перенести записи данных из old_db в new-db, но с разными структурами или разными столбцами. Я создаю sql-скрипт, который будет загружать old_db в new_db, и оттуда я могу получить данные из old_db в new_db.Миграция данных Между двумя базами данных с различными структурами (Postgresql)

Одна из таблиц в old_db выглядит следующим образом:

tbl_person:

person_id bigint, 

last_name text, 

first_name text, 

Теперь я хочу, чтобы передать данные в new_db со структурой, как это, где new_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 ??? Я не прошу инструмент или графический интерфейс вместо скрипта sql, который я буду выполнять в сценарии оболочки. Я использую postgresql в качестве моей СУБД, поэтому мне также нужна помощь относительно pg_dump или pg_restore для загрузки old_db в new_db. ТИА.

+0

Это слишком общий вопрос, поскольку он стоит. Можете ли вы представить пару реальных примеров ссылок между старым и новым, что вы действительно хотите сделать. Я бы посмотрел «взгляды» на «старые» и «новые» ссылки и использовал эти «взгляды» для замены «старых» таблиц? –

+0

Пример: old_db (person_id, last_name, first_name) значения (1234, Smith, John) | Теперь я хочу переместить эти данные в new_db таким образом, чтобы новый идентификатор был сгенерирован, а person_id будет перемещен в столбец ref_id, например: new_db (new_id, last_name, first_name, ref_id) значения (1, Smith, John, 1234) Как я это сделаю ?? @Ryan –

ответ

0

Корень этого будет заключаться в том, чтобы вставлять данные в новую таблицу непосредственно из старой таблицы. NB: Я не запускаю этот код.

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

Если обе БД работают в одном экземпляре 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) 

Если хозяева не могут видеть друг друга, есть много помощи вокруг StackOverflow на pg_dump и pg_restore:

+0

Спасибо. Но я сделал то, что я загрузил old_db в new_db. Мне интересно, как я могу использовать запрос UPDATE для обновления данных из старых таблиц old_db в таблицы new_db. @Kristjan –

+0

Похоже, что вы действительно можете искать [ALTER TABLE] (http://www.postgresql.org/docs/9.4/static/sql-altertable.html). –

Смежные вопросы