Інструменти для переходу з SQLite на PostgreSQL


11

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


1
Просто для уточнення, чи потрібно вам перенести і дані, і схему?
h0tw1r3

1
Перевірено у вікі PG ?
Дені де Бернарді

Не могли б ви детальніше зупинитися на тому, для чого потрібно це робити? Можливо, є кращі способи наблизитись до вашої кореневої проблеми, ніж копінг та перетворення бази даних. Наприклад, CleanFill запропонував розробити ETL.
Нік Чамма

@ Nick Мені шкода, але це дуже особливий випадок, який потребує занадто багато пояснень / обговорень для опису.
Девід

@David - Якщо ви хочете отримати більше відповідей, це, можливо, допоможе узагальнити ваш випадок використання в іншому абзаці якнайкраще, не маючи зайвих пояснень / обговорень. На даний момент ви просите нас зробити занадто багато здогадок. Посилання на інші сайти SE завжди корисні, якщо вони допомагають нам зрозуміти, звідки ви родом.
Джек каже, спробуйте topanswers.xyz

Відповіді:


3

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


Дякую за пораду. Чи може він запустити весь процес міграції за допомогою одного введення командного рядка?
Девід

1
Я пропоную вам задати це питання службі підтримки Navicat. Вони дуже корисні (ІМО). За даними веб-сайту, це повинно працювати, але мені ніколи не було необхідності тестувати / використовувати це.
pritaeas

4

Чи задумалися ви використовувати засоби ETL? Вони зовнішні, і я вважаю, що pentaho працює як на Windows, так і на Linux та безкоштовно. сайт pentaho


Привіт, і ласкаво просимо на сайт! Я знаю про Пентахо, але я не знав, що це може вирішити це. Чи може це вирішити, чи думати?
Девід

1
Я занадто замислювався над ETL, читаючи питання, але думаю, що накладні та навчальні криві досить високі. Крім того, я не думаю, що міграцію буде непросто зробити "безперервно".
DrColossos

Спасибі! Я особисто більше досвідчений з SSIS, але це стосується SQL Server, і вам доведеться платити за ліцензію SQL. Pentaho - це інструмент ETL і здатний мігрувати дані від джерела до місця призначення. Вам потрібні правильні драйвери для зв'язку з джерелом / пунктом призначення. Існує трохи кривої навчання з будь-яким із інструментів ETL, але це ще один інструмент у вашій панелі інструментів, так? Буде кілька кроків 1 для міграції даних, ще один для міграції змін DDL. Я б почав з 1 - просто перемістіть дані (простіший крок), як тільки ви опуститеся, вам буде зручніше продовжувати.
CleanFill

З огляду на це, я не впевнений, що використовувати Pentaho було б швидше, ніж писати це з нуля на Java або Python, враховуючи криву навчання та складність використання нового інструменту ETL.
Девід

@David - вивчити новий інструмент 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 (). Але це відчуває жахливо багато, як бити мертвих китів по пляжу.


Перетворення всіх стовпців у VARCHAR було б недостатньо добре. Має бути інструмент для того чи іншого правильного способу зробити це.
Девід

У наведеній вище прикладі можна створити таблицю зі стовпцем дати в PostgreSQL, але ви не могли імпортувати в неї обидва ряди. Отже, у загальному випадку я не думаю, що нічого, окрім VARCHAR (n), можливо, не може працювати.
Майк Шеррілл 'Відкликання котів'

Чому ти отримуєш "Ой, гадюка". значення від SQLite?
Девід

2
@David: Оскільки SQLite дозволяє зберігати "О, баггер" у стовпці типу "дата". SQLite дозволяє зберігати майже будь-що у будь-якому стовпці. Це одна з головних проблем міграції SQLite до будь-яких dbms, яка наближає стандарти SQL.
Майк Шеррілл 'Відкликання котів'

1

Можна використовувати

Інструментарій з міграції даних ESF .

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

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.