2011-05-27 74 views
8

Estamos trabajando en un sitio web, y cuando desarrollamos localmente (uno de nosotros desde Windows), usamos sqlite3, pero en el servidor (Linux) usamos postgres. Nos gustaría poder importar la base de datos de producción en nuestro proceso de desarrollo, así que me pregunto si hay una forma de convertir un volcado de base de datos de postgres a algo que sqlite3 pueda entender (simplemente alimentarlo el SQL volcado de postgres dio muchos, muchos errores). ¿O sería más fácil simplemente instalar Postgres en Windows? Gracias.Cómo convertir una base de datos postgres a sqlite

+14

Me Sólo tiene que activar su entorno de desarrollo de PostgreSQL, que se desarrolla sobre una base de datos (especialmente una tan flexible y permisiva como SQLite) pero que se implementa en otra (especialmente una tan estricta como PostgreSQL) generalmente es una receta para agravar y maldecir. –

+8

Para hacer eco de la respuesta de mu, NO HAGA ESTO ... NO HAGA ESTO ... NO HAGA ESTO. Desarrolla y despliega en la misma cosa. Es mala práctica de ingeniería hacer lo contrario. – Kuberchaun

+0

[La misma pregunta en ServerFault.] (Https://stackoverflow.com/questions/6148421/how-to-convert-a-postgres-database-to-sqlite) – Zaz

Respuesta

7

Hay algunas herramientas de conversión en torno a:

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

sería más fácil simplemente para instalar postgres en las ventanas?

Probablemente, y hacerlo es muy sencillo.

+3

No estoy seguro de usar las palabras "muy sencillo" que tuve que pasar [mucho dolor] (http://stackoverflow.com/questions/7086654/installing-postgres-on-windows-for- use-with-ruby-on-rails/7133391 # 7133391) para hacerlo. Sin embargo, valió la pena, ya que le permite detectar los errores de consulta SQL que se producen con Postgres más estricto antes de que lleguen a su servidor de producción. – AJP

+1

El enlace lleva a una página que está en desuso desde 2009. – TKAB

-1

que era muy fácil para mí hacer uso de la gema grifos como se describe aquí: http://railscasts.com/episodes/342-migrating-to-postgresql

Y yo he empezado a utilizar el Postgres.app en mi Mac (sin necesidad de instalación, suelta la aplicación en sus aplicaciones directorio, aunque podría tener que agregar una línea a su variable de entorno PATH como se describe en la documentación), con Induction.app como una herramienta GUI para ver/consultar la base de datos.

+0

Pero esta pregunta es acerca de ir al revés: de postgres a sqlite, no a postgres, como sugieren su comentario y referencia. – nealmcb

+6

Tienes razón, no lo leí cuidadosamente (ya que nunca se me ocurriría en cien años que alguien quisiera ir en la otra dirección cuando veo 'convert' + 'postgres' + 'sqlite' en el mismo título) – jpwynn

9

He encontrado this blog entry que le guía a hacer estos pasos:

  1. Crear un volcado de la base de datos PostgreSQL.

    ssh -C [email protected] pg_dump --data-only --inserts YOUR_DB_NAME > dump.sql 
    
  2. Eliminar/modificar el volcado.

    1. Eliminar las líneas que comienzan con SET
    2. Retire las líneas que comienzan con SELECT pg_catalog.setval
    3. Reemplazar cierto para 't'
    4. Reemplazar falsa para 'f'
  3. Añadir BEGIN; como primera línea y END; como última línea

  4. Recrear una base de datos de desarrollo vacía. bundle exec rake db:migrate

  5. Importe el volcado.

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

Por supuesto conexión a través de ssh y la creación de una nueva base de datos usando el rastrillo son opcionales

+3

Para mí, 't' y' f' no funcionaron, tuve que usar '1' y' 0' como se describe en estas publicaciones: http://stackoverflow.com/questions/5768364/activerecordstatementinvalid-sqlite3sqlexception-no- such-column-true – neRok

+1

blobs guardados en diferentes formatos. sqlite usa x'010101 ', mientras que postgres' \ x0101 ' –

1

Paso 1: hacer un vuelco de la estructura de su base de datos y los datos

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

PASO 2: borrar todo excepto CREATE TABLES e INSERT declaraciones de myPgDump.SQL (usando editor de texto)

PASO 3: inicializar su estructura de base de datos SQLite y pasa los datos de sus Postgres vierten

sqlite3 myNewSQLiteDB.db -init -myPgDump.sql 

PASO 4: utilizar su base de datos;)

Cuestiones relacionadas