您应该能够直接将那个转储文件输入到psql
中:
/path/to/psql -d database -U username -W < /the/path/to/sqlite-dumpfile.sql
如果您希望"id"列实现"自动递增",请在表创建行中将其类型从"int"更改为"serial"。PostgreSQL将会为该列附加一个序列,以便将NULL id的INSERT自动分配下一个可用值。PostgreSQL也不会识别"AUTOINCREMENT"命令,因此需要将其删除。
您还需要检查SQLite架构中的"datetime"列,并将其更改为PostgreSQL的"timestamp"。(感谢
Clay指出这一点。)
如果您的SQLite中有布尔值,则可以将1和0转换为1::boolean和0::boolean(分别),或者您可以在转储的模式部分中将布尔列更改为整数,然后在导入后手动修复它们。
如果您的SQLite中有BLOBs,则需要调整模式以使用"bytea"。您可能还需要混合一些
decode
calls as well。如果您要处理大量BLOBs,那么编写一个快速且简单的复制程序可能比搞乱SQL更容易。
通常来说,如果你有外键,那么你可能需要考虑使用
set constraints all deferred
来避免插入顺序问题,在 BEGIN/COMMIT 对之间放置该命令。
感谢
Nicolas Riley提供布尔、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导入大量数据可能需要一段时间,但它会起作用。