基于运行sqlite数据库.dump> /the/path/to/sqlite-dumpfile.sql,SQLITE以以下格式输出表转储:
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兼容的转储文件,我可以导入到我的生产服务器?
/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导入大量数据可能需要一段时间,但它会工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。