database – 将SQLITE SQL转储文件转换为POSTGRESQL

前端之家收集整理的这篇文章主要介绍了database – 将SQLITE SQL转储文件转换为POSTGRESQL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在做开发使用sqlITE数据库与POSTGREsql生产。我只是用大量的数据更新我的本地数据库,并需要将特定的表传输到生产数据库

基于运行sqlite数据库.dump> /the/path/to/sqlite-dumpfile.sqlsqlITE以以下格式输出表转储:

BEGIN TRANSACTION;
CREATE TABLE "courses_school" ("id" integer PRIMARY KEY,"department_count" integer NOT NULL DEFAULT 0,"the_id" integer UNIQUE,"school_name" varchar(150),"slug" varchar(50));
INSERT INTO "courses_school" VALUES(1,168,213,'TEST Name A',NULL);
INSERT INTO "courses_school" VALUES(2,656,'TEST Name B',NULL);
....
COMMIT;

如何将上述转换为POSTGREsql兼容的转储文件,我可以导入到我的生产服务器?

您应该能够将该转储文件直接馈入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的时间戳(感谢Clay指出这一点)。

如果你的sqlite中有布尔值,那么你可以转换1和0和1 :: boolean和0 :: boolean(分别)或者你可以在转储的模式部分中将布尔值更改为一个整数,然后将它们修复手里面Postgresql后导入。

如果你的sqlite中有BLOB,那么你需要调整模式以使用bytea。你可能需要在一些decode calls as well混合。用你最喜欢的语言编写一个快速的不脏的复印机可能比修整sql更容易,如果你有很多BLOB要处理。

像往常一样,如果你有外键,那么你可能想调查set constraints all deferred以避免插入顺序问题,将命令放在BEGIN / COMMIT对中。

感谢Nicolas Riley的布尔,blob和约束注释。

如果你的代码,由一些sqlite3客户端生成,你需要删除它们。

PostGREsql也不能识别未签名的列,您可能想要删除它,或添加一个自定义的约束,如:

CREATE TABLE tablename (
    ...
    unsigned_column_name integer CHECK (unsigned_column_name > 0)
);

虽然sqlite默认为null值为“,Postgresql要求将它们设置为NULL。

sqlite转储文件中的语法似乎与Postgresql大部分兼容,所以你可以补丁几个东西,并将其提供给psql。通过sql INSERT导入大量数据可能需要一段时间,但它会工作。

猜你在找的Sqlite相关文章