Bạn có thể cung cấ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 thành "tự động tăng" sau đó thay đổi kiểu của nó từ "int" thành "nối tiếp" trong dòng tạo bảng. Sau đó, PostgreSQL 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 ra 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
thành 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
. Có thể bạn sẽ cần kết hợp một số decode
cuộc gọi cũng vậy. 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 đề về chèn lệnh, hãy đặ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 bạn, do một số ứng dụng khách SQLite3 tạo ra, bạn cần xóa chúng.
PostGRESQL cũng không nhận dạng được unsigned
, vì vậy bạn có thể muốn loại bỏ hoặc thêm một ràng buộc tùy chỉnh, chẳng hạn như sau:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
Trong khi SQLite mặc định 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, vì vậy bạn có thể vá một số thứ và đưa nó vào psql
. Việc nhập một đống dữ liệu lớn thông qua SQL INSERT có thể mất một chút thời gian nhưng nó sẽ hoạt động.