Как преобразовать базу данных postgres в sqlite

Мы работаем над сайтом, и когда мы разрабатываем локально (один из нас из Windows), мы используем sqlite3, но на сервере (linux) мы используем postgres. Мы хотели бы иметь возможность импортировать производственную базу данных в наш процесс разработки, поэтому мне интересно, есть ли способ конвертировать из дампа базы данных postgres в то, что sqlite3 может понять (просто подпитывая его постгер, сбрасываемый SQL, дал много, много ошибок). Или было бы проще просто установить postgres на окна? Спасибо.

Ответ 1

Есть несколько инструментов конвертера:

http://sqlite.com/cvstrac/wiki?p=ConverterTools

Было бы проще просто установить postgres на windows?

Возможно, и это очень просто.

Ответ 2

Я нашел эту запись в блоге, которая поможет вам сделать следующие шаги:

  • Создайте дамп базы данных PostgreSQL.

    ssh -C [email protected] pg_dump --data-only --inserts YOUR_DB_NAME > dump.sql
    
  • Удалите/измените дамп.

    • Удалите строки, начинающиеся с SET
    • Удалите строки, начинающиеся с SELECT pg_catalog.setval
    • Заменить true для 't
    • Заменить false для 'f
  • Добавьте BEGIN; в качестве первой строки и END; в качестве последней строки

  • Создайте новую базу данных разработки. bundle exec rake db:migrate

  • Импортировать дамп.

    sqlite3 db/development.sqlite3
    sqlite> delete from schema_migrations;
    sqlite> .read dump.sql
    

Конечно, подключение через ssh и создание нового db с использованием rake необязательны

Ответ 3

STEP1: создать дамп структуры и данных базы данных

pg_dump --create --inserts -f myPgDump.sql -d myDatabaseName -U myUserName -W myPassword

STEP2: удалить все, кроме команд CREATE TABLES и INSERT из myPgDump.sql(с помощью текстового редактора)

STEP3: инициализируйте структуру передачи данных базы данных SQLite и данные вашего дампа Postgres

sqlite3 myNewSQLiteDB.db -init -myPgDump.sql

STEP4: используйте вашу базу данных;)

Ответ 4

В случае, если нужно более автоматизированное решение, начните с первого взгляда:

#!/bin/bash

$table_name=TABLENAMEHERE

PGPASSWORD="PASSWORD" /usr/bin/pg_dump --file "results_dump.sql" --host "yourhost.com" --username "username" --no-password --verbose --format=p --create --clean --disable-dollar-quoting --inserts --column-inserts --table "public.${table_name}" "memseq"

# Some clean ups
perl -0777 -i.original -pe "s/.+?(INSERT)/\1/is" results_dump.sql
perl -0777 -i.original -pe "s/--.+//is" results_dump.sql

# Remove public. preffix from table name
sed -i "s/public.${table_name}/${table_name}/g" results_dump.sql

# fix binary blobs
sed -i "s/'\\\\x/x'/g" results_dump.sql

# use transactions to make it faster
echo 'BEGIN;' | cat - results_dump.sql > temp && mv temp results_dump.sql
echo 'END;' >> results_dump.sql

# clean the current table 
sqlite3 results.sqlite "DELETE FROM ${table_name};"

# finally apply changes
sqlite3 results.sqlite3 < results_dump.sql && \
rm results_dump.sql && \
rm results_dump.sql.original

Ответ 5

ОЧЕНЬ было легко сделать, используя драгоценный камень кранов, как описано здесь: http://railscasts.com/episodes/342-migrating-to-postgresql

И я начал использовать Postgres.app на своем Mac (без необходимости установки, отбросьте приложение в каталоге приложений, хотя, возможно, вам нужно добавить одну строку в переменную окружения PATH, как описано в документации), с помощью Induction.app как инструмент GUI для просмотра/запроса базы данных.