pricing premium postgres create addon sql postgresql heroku

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.