create - heroku postgresql premium 2
¿Cómo puedo obtener un volcado de base de datos de postgres de texto simple en heroku? (3)
Debido a las incompatibilidades de versión de mi base de datos postgres en heroku (9.1) y mi instalación local (8.4) necesito un archivo de volcado de base de datos SQL de texto plano para poder poner una copia de mis datos de producción en mi entorno de prueba local.
Parece que en heroku no puedo hacer un volcado usando pg_dump, pero en cambio solo puedo hacer esto:
$ heroku pgbackups:capture
$ curl -o my_dump_file.dump `heroku pgbackups:url`
... y esto me da el "formato de volcado de base de datos personalizado" y no el "formato de texto plano", así que no puedo hacer esto:
$ psql -d my_local_database -f my_dump_file.sql
Los PGBackups de Heroku realmente usan pg_dump detrás de escena , y el "formato personalizado" es en realidad el formato personalizado de -Fc
(parámetro -Fc
) , no el formato personalizado de Heroku.
Esto significa que puede usar pg_restore
, que es parte de Postgres, para restaurar su copia de seguridad de Heroku en otra base de datos directamente:
pg_restore -d mydatabase my_dump_file.dump
Además, si llama a pg_restore
sin especificar una base de datos para restaurar, imprimirá las declaraciones de SQL a la salida estándar , por lo que puede convertir su copia de seguridad Heroku en un archivo SQL de esa manera:
pg_restore my_dump_file.dump > sql_statements.sql
Podrías crear tu propio pg_dump directamente desde tu base de datos Heroku.
Primero, obtenga su cadena de postgres usando la heroku config:get DATABASE_URL
.
Busque la URL de HEROKU_POSTGRESQL_RED_URL: postgres://user3123:[email protected]:6212/db982398
Postgres (ejemplo: HEROKU_POSTGRESQL_RED_URL: postgres://user3123:[email protected]:6212/db982398
), cuyo formato es postgres://<username>:<password>@<host_name>:<port>/<dbname>
.
Luego, ejecuta esto en tu línea de comando:
pg_dump --host=<host_name> --port=<port> --username=<username> --password --dbname=<dbname> > output.sql
El terminal le pedirá su contraseña y luego la ejecutará y la enviará a output.sql.
Luego importarlo:
psql -d my_local_database -f output.sql
Suponiendo que tiene una DATABASE_URL
configurada en su entorno, hay un método mucho más simple:
heroku run ''pg_dump $DATABASE_URL'' > my_database.sql
Esto ejecutará pg_dump
en su contenedor y canalizará el contenido a un archivo local, my_database.sql
. Las comillas simples son importantes. Si utiliza comillas dobles (o sin comillas), DATABASE_URL
se evaluará localmente en lugar de en su contenedor.
Si su objetivo es cargar los contenidos en una base de datos local de todos modos, también puede canalizarlo directamente allí:
createdb myapp_devel # start with an empty database
heroku run ''pg_dump -xO $DATABASE_URL'' | psql myapp_devel
La adición de -xO
evita el -xO
de las -xO
GRANT
, REVOKE
y ALTER OWNER
, que probablemente no se apliquen a su servidor de base de datos local. Si alguno de sus comandos COPY
falla con el error ERROR: literal carriage return found in data
(el mío sí), vea esta respuesta .
Es bastante posible que esto no haya funcionado hace dos años y medio cuando se formuló esta pregunta originalmente, pero para aquellos que buscan una forma de obtener fácilmente un volcado de su base de datos Heroku Postgres, esta parece ser la forma más simple de hacerlo. hoy.