Как получить дамп sql из базы данных sqlite с каплями? - PullRequest
3 голосов
/ 22 декабря 2010

Мне нужно создать дампы sql для исправления существующих файлов базы данных.Я знаю, как создавать дампы sql с помощью клиента командной строки sqlite3, но он не работает должным образом с BLOB-объектами.

как создавать дампы SQL с соответствующими BLOB-объектами?есть ли какая-либо опция в команде sqlite3 .dump для кодирования больших двоичных объектов в виде строк?

Мне нужно решение с поддержкой сценариев, чтобы интегрировать его в сценарии сборки.

Cheers

Ответы [ 2 ]

0 голосов
/ 09 мая 2012

Если ваши данные были вставлены таким образом, что SQLite думает, что это строка (TEXT) вместо BLOB, вы можете преобразовать их, используя временную таблицу и принудительное преобразование типов.Допустим, у вас есть следующая таблица:

CREATE TABLE images ( id, name, data )

Пример решения:

CREATE TEMP TABLE images2 ( id INT, name TEXT, data BLOB );
INSERT INTO images2
    SELECT id, name, CAST ( data AS BLOB ) FROM images;
DROP TABLE images;
CREATE TABLE images ( id INT, name TEXT, data BLOB );
INSERT INTO images
    SELECT * FROM images;

Сработало для меня ...

0 голосов
/ 09 мая 2012

Должно работать из коробки.

Я создал таблицу следующим образом:

sqlite> CREATE TABLE images( id INTEGER PRIMARY KEY, name TEXT, content BLOB );

Вставлен один ряд:

sqlite> INSERT INTO images VALUES ( 1, 'test 1', X'00ff00ffaabbcc' );

Создан дамп:

sqlite> .dump

И все нормально:

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE images( id INTEGER PRIMARY KEY, name TEXT, content BLOB );
INSERT INTO "images" VALUES(1,'test 1',X'00FF00FFAABBCC');
COMMIT;
...