Мы работаем над сайтом, и когда мы разрабатываем локально (один из нас из Windows), мы используем sqlite3, но на сервере (linux) мы используем postgres. Мы хотели бы иметь возможность импортировать производственную базу данных в наш процесс разработки, поэтому мне интересно, есть ли способ конвертировать из дампа базы данных postgres в то, что sqlite3 может понять (просто подпитывая его постгер, сбрасываемый SQL, дал много, много ошибок). Или было бы проще просто установить postgres на окна? Спасибо.
Как преобразовать базу данных postgres в sqlite
Ответ 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 для просмотра/запроса базы данных.