将文件从Sqlite3转储到PostgreSQL:为什么导入时总是出错?

将文件从Sqlite3转储到PostgreSQL:为什么导入时总是出错?,postgresql,sqlite,dump,Postgresql,Sqlite,Dump,我在sqlite3db中有很多表,现在我想将其导出到PostgreSQL,但每次都会出现错误。 我使用了不同的技术从sqlite转储: .模式csv .标题已打开 .out ddd.sql 从my_表中选择* 及 .模式插入 .out ddd.sql 从my_表中选择* 当我尝试通过phppgadmin导入它时,会出现如下错误: 错误:关系my_表的第1列不存在 第1行:插入public.my_表1,1,Vitas,a@i.ua 如何避免这个错误 提前谢谢 咆哮 你得到这个专栏。。。INSERT

我在sqlite3db中有很多表,现在我想将其导出到PostgreSQL,但每次都会出现错误。 我使用了不同的技术从sqlite转储:

.模式csv

.标题已打开

.out ddd.sql

从my_表中选择*

.模式插入

.out ddd.sql

从my_表中选择*

当我尝试通过phppgadmin导入它时,会出现如下错误:

错误:关系my_表的第1列不存在

第1行:插入public.my_表1,1,Vitas,a@i.ua

如何避免这个错误

提前谢谢

咆哮 你得到这个专栏。。。INSERT INTO public.my_表1不存在错误,…-因为1周围的引号表示这是一个,而不是一个

即使您解决了这个问题,查询仍然会给出错误,因为缺少VAULES关键字,正如Jan在其他答案中所注意到的

正确的形式是:

INSERT INTO "public"."my_table" VALUES ('1', ...
如果此SQL是由sqlite自动生成的,则对sqlite不好

这本伟大的著作只有大约20页。我对生成此插入的人的建议是:阅读它:-它会有回报的

实解 现在,说到点子上。。。要将表从sqlite传输到postgres,应该使用COPY,因为它比INSERT快得多

使用双方都理解的CSV格式

在sqlite3中:

create table tbl1(one varchar(20), two smallint);
insert into tbl1 values('hello',10);
insert into tbl1 values('with,comma', 20);
insert into tbl1 values('with "quotes"', 30);
insert into tbl1 values('with
enter', 40);
.mode csv
.header on
.out tbl1.csv
select * from tbl1;
在PostgreSQL psql客户端中:

create table tbl1(one varchar(20), two smallint);
\copy tbl1 from 'tbl1.csv' with csv header delimiter ','
select * from tbl1;
请参阅。

你得到这个专栏。。。INSERT INTO public.my_表1不存在错误,…-因为1周围的引号表示这是一个,而不是一个

即使您解决了这个问题,查询仍然会给出错误,因为缺少VAULES关键字,正如Jan在其他答案中所注意到的

正确的形式是:

INSERT INTO "public"."my_table" VALUES ('1', ...
如果此SQL是由sqlite自动生成的,则对sqlite不好

这本伟大的著作只有大约20页。我对生成此插入的人的建议是:阅读它:-它会有回报的

实解 现在,说到点子上。。。要将表从sqlite传输到postgres,应该使用COPY,因为它比INSERT快得多

使用双方都理解的CSV格式

在sqlite3中:

create table tbl1(one varchar(20), two smallint);
insert into tbl1 values('hello',10);
insert into tbl1 values('with,comma', 20);
insert into tbl1 values('with "quotes"', 30);
insert into tbl1 values('with
enter', 40);
.mode csv
.header on
.out tbl1.csv
select * from tbl1;
在PostgreSQL psql客户端中:

create table tbl1(one varchar(20), two smallint);
\copy tbl1 from 'tbl1.csv' with csv header delimiter ','
select * from tbl1;

请参阅。

似乎缺少值关键字:

INSERT INTO "public"."my_table" VALUES (...)

但是您必须用适当的引号插入值-文本用单引号,数字用不带引号。

似乎缺少值关键字:

INSERT INTO "public"."my_table" VALUES (...)

但是您必须用适当的引号插入值-文本用单引号,数字用不带引号。

显然,表不存在,因此您需要先创建表my_表,然后才能插入。不,表存在-我确定请向我们展示它的create table语句。您是否尝试过.out ddd.sql、.dump、,.out stdout?显然,该表不存在,因此您需要先创建表my_表,然后才能将其插入其中。不,表在那里-我确定请向我们显示该表的create table语句。您是否尝试过.out ddd.sql、.dump、.out stdout?