LINUX.ORG.RU

[C/C++][PostgreSQL]Контроль версий таблиц

 


0

1

Возможно, хочу странного, но: есть две базы данных, изначально идентичных. Необходимо все изменения, произведенные в одной из баз данных в таблицах Table1, Table2 и Table3 перенести в другую базу, не потеряв изменений, сделанных в этой базе и аналогичных таблицах (остальные таблицы не должны измениться). При этом обмен должен происходить через файлы.

P.S. получилось сумбурно, но, вроде, смысл понятен


Ответ на: комментарий от anonymous

pg_dump тут вряд ли поможет. Ну выгрузит он мне sql скрипт по заполнению этих таблиц. А как отсечь данные, которые уже есть в базе получателе? Да и diff двух sql-скриптов, по-моему, странное решение

Torvus
() автор топика
Ответ на: комментарий от dizza

Насколько я понял из документации, основная задача репликации - распределение нагрузки на несколько серверов. А это не мой случай: прямого соединения между базами нет. По этому и приходится работать через файлы

Torvus
() автор топика
Ответ на: комментарий от anonymous

ты не продумал свое желание

мое желание прописано в тз. Просто человеческим языком сформулировать не получается

Torvus
() автор топика
Ответ на: комментарий от Torvus

То что прописано в тз, не значит что ты его продумал.

anonymous
()

Сливать данные из таблицы в свой формат файла, при добавлении проверять, есть ли такие данные в обновляемой таблице. Как решать проблему с PulicKey'ами (да и с другими уникальными полями) - не знаю.
Возможно, у каждой базы должен быть свой идентификатор в дополнение к таким полям.

trex6 ★★★★★
()
Ответ на: комментарий от MikeDM

А разве возможно настроить репликацию без соединения по сети между базами?

trex6 ★★★★★
()
Ответ на: комментарий от Torvus

Насколько я понял из документации, основная задача репликации - распределение нагрузки на несколько серверов.

Да нету никакой там основной задачи. Можно как онлайн бекап использовать.

А это не мой случай: прямого соединения между базами нет.

ИМХО, проще всего будет позаботится о том, что бы соединение было и настроить репликацию.

dizza ★★★★★
()
Ответ на: комментарий от trex6

Сливать данные из таблицы в свой формат файла, при добавлении проверять, есть ли такие данные в обновляемой таблице

Похоже, это единственное решение.

Как решать проблему с PulicKey'ами (да и с другими уникальными полями) - не знаю.

С этим проблем нет: все PrimaryKey - автоинкрементные

Torvus
() автор топика
Ответ на: комментарий от dizza

ИМХО, проще всего будет позаботится о том, что бы соединение было и настроить репликацию.

Это невозможно по ряду причин, главная из которых - безопасность (в базе могут находиться секретные данные)

Torvus
() автор топика
Ответ на: комментарий от Torvus

>С этим проблем нет: все PrimaryKey - автоинкрементные
Вот это и есть самое страшное.
Например: принес ты для таблицы данные, а там PrimaryKey уже заняты. При этом ты можешь потерять ссылки между объектами (подменять PrimaryKey в новой таблице не вариант, т.к. тебе потом в обратную сторону надо будет синхронизироваться).

Так что задачка совсем не тривиальная.

trex6 ★★★★★
()
Ответ на: комментарий от MikeDM

используй безопасные каналы

Как я уже сказал, канала между базами нет и не будет

Torvus
() автор топика
Ответ на: комментарий от Torvus

тогда есть вариант с промежуточной базой для репликации. распинаться перед тобой тут не буду, надо будет постучишь в джаббер.

MikeDM ★★★★★
()
Ответ на: комментарий от Torvus

Данные в одной таблице никак не связанны с другими? Тогда вообще странно, что используется база данных.

trex6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.