Инструменты для перехода с SQLite на PostgreSQL

11

Мне нужно постоянно мигрировать с SQLite на PostgreSQL. Под непрерывностью я подразумеваю, что я буду ежедневно импортировать базу данных SQLite в PostgreSQL. Было бы хорошо, если бы я мог вносить изменения в таблицы в SQLite, как мне угодно, без необходимости вносить какие-либо изменения вручную в базу данных PostgreSQL. Я буду запускать миграцию из Python, но это может быть любой внешний инструмент, которым можно управлять из командной строки. Инструмент должен быть доступен для Linux, и было бы неплохо, если бы он работал и на Windows.

Дэвид
источник
1
Просто чтобы уточнить, нужно ли переносить как данные, так и схемы?
h0tw1r3
1
Проверено в PG вики ?
Дени де Бернарди
Не могли бы вы уточнить, почему вам нужно это сделать? Возможно, есть более эффективные способы решения вашей корневой проблемы, чем копирование и преобразование базы данных. Например, CleanFill предложил разработать ETL.
Ник Чаммас
@ Ник, извини, но это особый случай, который требует слишком много объяснений / обсуждений, чтобы описать.
Дэвид
@ Дэвид - Если вы хотите получить больше ответов, это может действительно помочь обобщить ваш вариант использования в другом абзаце настолько хорошо, насколько это возможно, без лишних объяснений / обсуждений. В настоящее время вы просите нас сделать слишком много догадок. Ссылки на другие сайты SE всегда полезны, если они помогают нам понять, откуда вы пришли.
говорит Джек, попробуйте topanswers.xyz

Ответы:

3

Я использую Navicat для миграции между базами данных (в первую очередь MSSQL / MySQL). Он работает на Linux и Windows, но в основном это инструмент с графическим интерфейсом. Если вы создаете профиль, его можно запустить из командной строки. Вы можете скачать 30-дневную пробную версию.

pritaeas
источник
Спасибо за совет. Может ли он запустить весь процесс миграции, используя один ввод командной строки?
Дэвид
1
Я предлагаю вам задать этот вопрос в службу поддержки Navicat. Они очень полезны (ИМО). Согласно веб-сайту это должно работать, но у меня никогда не было необходимости тестировать / использовать это.
pritaeas
4

Вы изучали использование инструментов ETL? Они внешние, и я верю, что pentaho работает как на Windows, так и на Linux и бесплатна. сайт Пентахо

CleanFill
источник
Привет и добро пожаловать на сайт! Я знаю о Пентахо, но я не знал, что это может решить эту проблему. Может ли это решить это подумать?
Дэвид
1
Я тоже думал об ETL, когда читал вопрос, но думаю, что затраты на обучение и кривую обучения довольно высоки. Кроме того, я не думаю, что будет легко выполнять миграцию «непрерывно».
DrColossos
Спасибо! Лично у меня больше опыта работы с SSIS, но он поставляется с SQL Server, и вам придется платить за лицензию SQL. Pentaho - это инструмент ETL, способный переносить данные из источника в место назначения. Вам понадобятся правильные драйверы для связи с источником / местом назначения. Есть немного кривой обучения с любым из инструментов ETL, но это еще один инструмент в вашем наборе инструментов, а? Будет несколько шагов 1 для переноса данных, еще один для переноса изменений DDL. Я бы начал с 1 - просто переместите данные (более простой шаг), как только вы это сделаете, вам будет удобнее продолжать.
CleanFill
Исходя из этого, я не уверен, что использование Pentaho будет быстрее, чем писать это с нуля на Java или Python, учитывая кривую обучения и сложность использования нового инструмента ETL.
Дэвид
@ Дэвид - изучение нового инструмента ETL, вероятно, будет значительно проще, чем повторное изобретение колеса IMO,
говорит Джек, попробуйте topanswers.xyz
2

Я думаю, что это возможно, но я не думаю, что многие люди будут довольны этим. В общем случае PosgreSQL и SQLite трактуют определения таблиц совершенно по-разному.

CREATE TABLE test (trans_date date primary key);

Если я дам содержимое этой таблицы из SQLite, вот что я получу.

sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE test (trans_date date primary key);
INSERT INTO "test" VALUES('2011-01-01');
INSERT INTO "test" VALUES('Oh, bugger.');
COMMIT;

Я думаю, что каждый столбец должен быть VARCHAR () на стороне PostgreSQL. Это может быть не так сложно написать скрипт для изменения всех типов данных SQLite на VARCHAR (). Но это похоже на то, как пнуть мертвых китов по пляжу.

Майк Шеррилл 'Cat Recall'
источник
Преобразование всех столбцов в VARCHAR будет недостаточно. Там должен быть инструмент для этого или какой-то правильный способ сделать это.
Дэвид
В приведенном выше примере таблицы вы можете создать таблицу со столбцом даты в PostgreSQL, но вы не можете импортировать в нее обе строки. Так что в общем случае я не думаю, что VARCHAR (n) может сработать.
Майк Шеррилл 'Cat Recall'
Почему вы получаете "О, черт возьми". значение из SQLite?
Дэвид
2
@David: потому что SQLite позволяет хранить «Ой, подонок» в столбце типа «дата». SQLite позволяет хранить практически все в любом столбце. Это одна из основных проблем при переносе SQLite на любые базы данных, которые приближаются к стандартам SQL.
Майк Шеррилл 'Cat Recall'
1

Ты можешь использовать

ESF Data Migration Toolkit .

Я попробовал его, он работает хорошо, и дает вам варианты для преобразования из нескольких типов баз данных в несколько типов баз данных: таких как sqlite, mysql, mssql, oracle, postgresql и просто много много!

Вы также просто посмотрите на его пробную / оценочную версию, результаты действительно удовлетворительные!

linuxeasy
источник