Файл дампа из Sqlite3 в PostgreSQL: почему я всегда получаю ошибки при импорте? - PullRequest
1 голос
/ 27 января 2012

У меня есть много таблиц в Sqlite3 db, и теперь я хочу экспортировать их в PostgreSQL, но все время получаю ошибки. Я использовал разные методы для дампа из sqlite:

.mode csv

.header on

.out ddd.sql

выберите * из my_table

и

. Режим вставки

.out ddd.sql

выберите * из my_table

И когда я пытаюсь импортировать его через phppgadmin, я получаю такие ошибки:

ОШИБКА: столбец "1" отношения "my_table" не существует

ЛИНИЯ 1: ВСТАВИТЬ В "public". "My_table" ("1", "1", "Vitas", "a@i.ua", "..

Как избежать этой ошибки?

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 27 января 2012

Рант

Вы получаете этот "столбец ... не существует" ошибка с INSERT INTO "public"."my_table" ("1", ... - потому что кавычки вокруг "1" означают, что это идентификатор , а не буквальный .

Даже если вы это исправите, запрос все равно выдаст ошибку из-за отсутствия ключевого слова VAULES, как заметил Ян в другом ответе.

Правильная форма будет:

INSERT INTO "public"."my_table" VALUES ('1', ...

Если этот SQL был автоматически сгенерирован sqlite, плохо для sqlite.

В этой замечательной главе о синтаксисе SQL напечатано всего около 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;

См. http://wiki.postgresql.org/wiki/COPY.

2 голосов
/ 27 января 2012

Кажется, отсутствует ключевое слово "VALUES":

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

Но! - Вы должны вставить значения с соответствующими кавычками - одинарные кавычки для текста и без кавычек для чисел.

...