Các công cụ để di chuyển từ SQLite sang PostgreSQL


11

Tôi cần liên tục di chuyển từ SQLite sang PostgreSQL. Bằng cách liên tục, tôi có nghĩa là tôi sẽ nhập lại cơ sở dữ liệu SQLite vào PostgreSQL mỗi ngày. Sẽ thật tuyệt nếu tôi có thể thay đổi các bảng trong SQLite như tôi muốn mà không cần phải thực hiện bất kỳ thay đổi nào đối với cơ sở dữ liệu PostgreQuery. Tôi sẽ chạy di chuyển từ Python, nhưng nó có thể là bất kỳ công cụ bên ngoài nào, có thể được điều khiển từ dòng lệnh. Công cụ này cần có sẵn cho Linux và thật tuyệt nếu nó cũng chạy trên Windows.


1
Chỉ cần làm rõ, bạn có cần di chuyển cả dữ liệu và lược đồ không?
h0tw1r3

1
Đã kiểm tra trong PG wiki ?
Denis de Bernardy

Bạn có thể giải thích lý do tại sao bạn cần phải làm điều này? Có lẽ có nhiều cách tốt hơn để tiếp cận vấn đề gốc của bạn hơn là đối phó và chuyển đổi cơ sở dữ liệu. Ví dụ, CleanFill đề xuất phát triển một ETL.
Nick Chammas

@Nick Tôi xin lỗi, nhưng đây là một trường hợp rất đặc biệt, sẽ mất quá nhiều giải thích / thảo luận để mô tả.
David

@David - Nếu bạn muốn có nhiều câu trả lời hơn, thực sự có thể giúp tóm tắt trường hợp sử dụng của bạn trong một đoạn khác tốt nhất có thể mà không cần giải thích / thảo luận quá nhiều. Vì nó đứng bạn đang yêu cầu chúng tôi làm quá nhiều phỏng đoán. Liên kết đến các trang SE khác luôn hữu ích nếu chúng giúp chúng tôi hiểu bạn đến từ đâu.
Jack nói hãy thử topanswers.xyz

Câu trả lời:


3

Tôi đang sử dụng Navicat để di chuyển giữa các cơ sở dữ liệu (chủ yếu là MSSQL / MySQL). Nó chạy trên Linux và Windows, nhưng chủ yếu là một công cụ GUI. Nếu bạn tạo một hồ sơ, nó có thể được bắt đầu từ dòng lệnh. Bạn có thể tải về bản dùng thử 30 ngày.


Cảm ơn vì tiền boa. Nó có thể chạy toàn bộ quá trình di chuyển bằng một đầu vào dòng lệnh không?
David

1
Tôi đề nghị bạn đặt câu hỏi này để hỗ trợ Navicat. Họ rất hữu ích (IMO). Theo trang web nó nên hoạt động, nhưng tôi không bao giờ có nhu cầu kiểm tra / sử dụng cái này.
pritaeas

4

Bạn đã xem xét việc sử dụng các công cụ ETL? Chúng là bên ngoài và tôi tin rằng pentaho chạy trên cả windows và linux và nó miễn phí. trang web của pentaho


Xin chào, và chào mừng đến với trang web! Tôi biết về Pentaho, nhưng tôi không biết rằng nó có thể giải quyết điều này. Nó có thể giải quyết nó làm gì?
David

1
Tôi đã suy nghĩ về ETL trong khi đọc câu hỏi nhưng tôi nghĩ rằng chi phí học tập và học tập khá cao. Hơn nữa, tôi không nghĩ việc di chuyển "liên tục" sẽ dễ dàng.
DrColossos

Cảm ơn! Cá nhân tôi có nhiều kinh nghiệm hơn với SSIS, nhưng điều đó đi kèm với SQL Server và bạn phải trả tiền cho giấy phép SQL. Pentaho là một công cụ ETL và có khả năng di chuyển dữ liệu từ nguồn đến đích. Bạn sẽ cần các trình điều khiển chính xác để giao tiếp với nguồn / đích. Có một chút về đường cong học tập với bất kỳ công cụ ETL nào, nhưng đó là một công cụ khác trong hộp công cụ của bạn, eh? Sẽ có một vài bước 1 để di chuyển dữ liệu, một bước khác để di chuyển các thay đổi DDL. Tôi sẽ bắt đầu với 1 - chỉ cần di chuyển dữ liệu (bước dễ dàng hơn), khi bạn nhận được điều đó, bạn sẽ thoải mái hơn để tiếp tục.
CleanFill

Từ âm thanh của điều này, tôi không chắc rằng việc sử dụng Pentaho sẽ nhanh hơn việc viết nó từ đầu bằng Java hoặc Python, do đường cong học tập và sự phức tạp của việc sử dụng một công cụ ETL mới.
David

@David - học một công cụ ETL mới có thể dễ dàng hơn đáng kể so với phát minh lại bánh xe IMO
Jack nói hãy thử topanswers.xyz

2

Tôi nghĩ điều đó là có thể, nhưng tôi không nghĩ nhiều người sẽ hài lòng với nó. Trong trường hợp chung, PosgreSQL và SQLite xử lý các định nghĩa bảng rất khác nhau.

CREATE TABLE test (trans_date date primary key);

Nếu tôi kết xuất nội dung của bảng đó từ SQLite, đây là những gì tôi nhận được.

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;

Tôi nghĩ rằng mỗi cột sẽ phải là VARCHAR () ở phía PostgreSQL. Có thể không quá khó để viết một tập lệnh để thay đổi tất cả các kiểu dữ liệu SQLite thành VARCHAR (). Nhưng nó cảm thấy rất nhiều như đá cá voi chết trên bãi biển.


Chuyển đổi tất cả các cột thành VARCHAR sẽ không đủ tốt. Cần có một công cụ cho việc này hoặc một số cách thích hợp để làm điều đó.
David

Trong bảng ví dụ ở trên, bạn có thể tạo một bảng có cột ngày trong PostgreSQL, nhưng bạn không thể nhập cả hai hàng vào đó. Vì vậy, trong trường hợp chung, tôi không nghĩ gì ngoài VARCHAR (n) có thể hoạt động.
Mike Sherrill 'Nhớ lại mèo'

Tại sao bạn nhận được "Oh, bugger." Giá trị từ SQLite?
David

2
@David: Bởi vì SQLite cho phép bạn lưu trữ "Oh, bugger" trong một cột loại "ngày". SQLite cho phép bạn lưu trữ mọi thứ chỉ trong bất kỳ cột nào. Đó là một trong những vấn đề chính trong việc di chuyển SQLite sang bất kỳ dbms nào gần đúng với các tiêu chuẩn SQL.
Mike Sherrill 'Nhớ lại mèo'

1

Bạn có thể dùng

Bộ công cụ di chuyển dữ liệu ESF .

Tôi đã thử nó, nó hoạt động tốt và cung cấp cho bạn các tùy chọn để chuyển đổi từ nhiều loại cơ sở dữ liệu sang nhiều loại cơ sở dữ liệu: như sqlite, mysql, mssql, oracle, postgresql và nhiều loại khác!

Bạn cũng chỉ cần nhìn vào phiên bản dùng thử / đánh giá của nó, kết quả thực sự khả quan!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.