您应该能够将该转储文件直接输入psql
:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
如果你想要id
列更改为“自动增量”,然后在表创建行中将其类型从“int”更改为“serial”。然后 PostgreSQL 会将一个序列附加到该列,以便具有 NULL id 的 INSERT 将自动分配下一个可用值。 PostgreSQL 也不会识别AUTOINCREMENT
命令,因此需要删除这些命令。
您还需要检查datetime
SQLite 模式中的列并将它们更改为timestamp
对于 PostgreSQL。 (谢谢Clay指出这一点。)
如果你的 SQLite 中有布尔值,那么你可以转换1
and 0
to 1::boolean
and 0::boolean
(分别)或者您可以在转储的模式部分中将布尔列更改为整数,然后在导入后在 PostgreSQL 中手动修复它们。
如果 SQLite 中有 BLOB,那么您需要调整要使用的架构bytea
。你可能需要混合一些decode也打电话。如果您需要处理大量 BLOB,那么用您最喜欢的语言编写一个快速的复制程序可能比修改 SQL 更容易。
像往常一样,如果您有外键,那么您可能需要查看set constraints all deferred为了避免插入顺序问题,请将命令放置在 BEGIN/COMMIT 对内。
谢谢尼古拉斯·赖利对于布尔值、blob 和约束注释。
如果你有`
在您的代码中,如某些 SQLite3 客户端生成的,您需要删除它们。
PostGRESQL 也无法识别unsigned
列,因此您可能需要删除该列或添加自定义约束,如下所示:
CREATE TABLE tablename (
...
unsigned_column_name integer CHECK (unsigned_column_name > 0)
);
虽然 SQLite 默认为 null 值''
, PostgreSQL 要求将它们设置为NULL
.
SQLite 转储文件中的语法似乎与 PostgreSQL 大部分兼容,因此您可以修补一些内容并将其提供给psql
。通过 SQL INSERT 导入大量数据可能需要一段时间,但它会起作用。