Bạn sẽ có thể nạp thẳng tệp kết xuất đó vào psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
Nếu bạn muốn id
cột "tự động tăng" thì hãy thay đổi kiểu của nó từ "int" thành "serial" trong dòng tạo bảng. PostgreSQL sau đó sẽ đính kèm một chuỗi vào cột đó để các INSERT có id NULL sẽ được tự động gán giá trị có sẵn tiếp theo. PostgreSQL cũng sẽ không nhận dạng được AUTOINCREMENT
các lệnh, vì vậy chúng cần được loại bỏ.
Bạn cũng sẽ muốn kiểm tra datetime
các cột trong lược đồ SQLite và thay đổi chúng thành timestamp
cho PostgreSQL (cảm ơn Clay đã chỉ ra điều này).
Nếu bạn có boolean trong SQLite của mình thì bạn có thể chuyển đổi 1
và 0
và 1::boolean
và 0::boolean
(tương ứng) hoặc bạn có thể thay đổi cột boolean thành một số nguyên trong phần lược đồ của kết xuất và sau đó sửa chúng bằng tay bên trong PostgreSQL sau khi nhập.
Nếu bạn có BLOB trong SQLite của mình thì bạn sẽ muốn điều chỉnh lược đồ để sử dụng bytea
. Bạn cũng có thể cần phải kết hợp một số decode
cuộc gọi . Viết nhanh một máy photocopy không bẩn bằng ngôn ngữ yêu thích của bạn có thể dễ dàng hơn so với viết SQL nếu bạn phải xử lý nhiều BLOB.
Như thường lệ, nếu bạn có khóa ngoại thì có thể bạn sẽ muốn xem xét set constraints all deferred
để tránh các vấn đề chèn thứ tự, đặt lệnh bên trong cặp BEGIN / COMMIT.
Cảm ơn Nicolas Riley về các ghi chú boolean, blob và các ràng buộc.
Nếu bạn có `
trên mã của mình, như được tạo bởi một số ứng dụng khách SQLite3, bạn cần xóa chúng.
PostGRESQL cũng không nhận dạng được unsigned
các cột, bạn có thể muốn loại bỏ cột đó hoặc thêm một ràng buộc tùy chỉnh như sau:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Trong khi SQLite mặc định các giá trị null thành ''
, PostgreSQL yêu cầu chúng phải được đặt thành NULL
.
Cú pháp trong tệp kết xuất SQLite dường như hầu hết tương thích với PostgreSQL, do đó bạn có thể vá một số thứ và cung cấp cho nó psql
. Việc nhập một đống dữ liệu lớn thông qua SQL INSERT có thể mất một lúc nhưng nó sẽ hoạt động.