как скопировать данные из базы postgres heroku в django cookie cutter docker postgres DB [duplicate]

Python обрабатывает переменные в функциях по-разному в зависимости от того, присваиваете ли вы им значения из функции или нет. Если функция содержит любые присваивания переменной, она обрабатывается по умолчанию как локальная переменная. Поэтому, когда вы раскомментируете строку, вы пытаетесь ссылаться на локальную переменную до того, как ей присвоено какое-либо значение.

Если вы хотите, чтобы переменная c ссылалась на глобальный c put

global c

в качестве первой строки функции.

Что касается python 3, теперь есть

nonlocal c

, который вы можете использовать для ссылки на ближайшая область действия приложения, имеющая переменную c.

404
задан A-B-B 19 June 2015 в 17:07
поделиться

9 ответов

Вам не нужно создавать промежуточный файл. Вы можете сделать

pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

или

pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname

с помощью psql или pg_dump для подключения к удаленному хосту.

С большой базой данных или медленное соединение, сброс файла и передача сжатого файла могут быть более быстрыми.

Поскольку Корнель сказал, что нет необходимости выгружать промежуточный файл, если вы хотите работать сжатым, вы можете использовать сжатый туннель

pg_dump -C dbname | bzip2 | ssh  remoteuser@remotehost "bunzip2 | psql dbname"

или

pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"

, но это решение также требует, чтобы сеанс был в обоих концах.

524
ответ дан the Tin Man 20 August 2018 в 15:52
поделиться
  • 1
    Нет необходимости в промежуточных файлах - вы можете использовать сжатый SSH-туннель или просто pipe: pg_dump | bzip2 | ssh "bunzip2 | pg_restore & Quot; – Kornel 6 August 2009 в 13:46
  • 2
    Если вы используете bzip2, отключите сжатие ssh, чтобы ускорить передачу! – lzap 19 June 2012 в 10:34
  • 3
    Как я могу работать сжатым, если я вытягиваю данные из производства в разработку? Я создал SSH-соединение от разработки до производства. Так будет ли это ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname? – Jeromy French 26 February 2013 в 04:51
  • 4
    – Darin Peterson 4 March 2014 в 18:28
  • 5
    Это то, что я сделал: (1) pg_dump -C -h remotehost -U remoteuser x | psql -h localhost -U localuser (2) dropdb y (3) psql -U postgres -c 'ALTER DATABASE & quot; x & quot; RENAME TO & quot; y & quot; – Darin Peterson 4 March 2014 в 19:22
  • 6
    Я использовал команду в ответе, чтобы скопировать базу данных с локального хоста на remotehost, но всегда пытается создать базу данных с именем базы данных на стороне localhost, независимо от того, какое имя я даю во второй части команды. Мне пришлось переименовать его, прежде чем копировать его на удаленный хост. Любая идея, как это сделать в одной команде? – Dark Light 8 July 2014 в 19:35

pg_basebackup кажется лучшим способом сделать это сейчас, особенно для больших баз данных.

12
ответ дан A-B-B 20 August 2018 в 15:52
поделиться
  • 1
    Не могли бы вы предоставить более подробную информацию в своем ответе, например, пример? – Magnilex 4 February 2015 в 22:46
  • 2
    Это работает только тогда, когда обе машины имеют одинаковые версии PG. – s.m. 3 March 2016 в 15:00
  • 3
    Скорее всего, вы можете использовать другую версию базы данных для разработки и производства. В прошлый раз у меня была неприятная беседа с одним из моих товарищей по команде, поскольку она пыталась представить вопрос о том, что какой-то код не работает с PG 9.6, в то время как мы использовали 9,5 в производстве в то время. Базовая резервная копия выполняется намного быстрее. Тогда pg_upgrade - это способ пойти, если необходимо. – Zorg 18 January 2018 в 05:25
  • 4

Позвольте мне использовать сценарий оболочки Linux для копирования данных таблицы с одного сервера на другой сервер PostgreSQL.

Ссылка, взятая из этого блога:

Linux Bash Shell Script для переноса данных между серверами PostgreSQL:

#!/bin/bash
psql \
    -X \
    -U user_name \
    -h host_name1 \
    -d database_name \
    -c "\\copy tbl_Students to stdout" \
| \
psql \
    -X \
    -U user_name \
    -h host_name2 \
    -d database_name \
    -c "\\copy tbl_Students from stdin"

Я просто переношу данные; создайте пустую таблицу на сервере назначения / второго сервера базы данных.

Это скрипт утилиты. Кроме того, вы можете изменить сценарий для общего использования, например, путем добавления параметров для имени_мастера, имени_базы_данных, table_name и других

1
ответ дан Anvesh 20 August 2018 в 15:52
поделиться

Если вы хотите выполнить миграцию между версиями (например, вы обновили postgres и выполнили 9.1 на локальном хосте: 5432 и 9.3, запущенные на localhost: 5434), вы можете запустить:

pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434

Проверьте docs .

17
ответ дан Eric H. 20 August 2018 в 15:52
поделиться

Дамп вашей базы данных: pg_dump database_name_name > backup.sql


Импортировать свою базу данных назад: psql db_name < backup.sql

0
ответ дан MisterJoyson 20 August 2018 в 15:52
поделиться

Я много боролся, и в конечном итоге метод, который позволил мне заставить его работать с Rails 4, был:

на вашем старом сервере

sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql

Мне пришлось использовать postgres linux для создания дампа. также мне пришлось использовать -c для создания базы данных на новом сервере. --inserts сообщает ему использовать синтаксис INSERT (), который в противном случае не работал бы для меня: (

, затем на новом сервере simpy:

sudo su - postgres
psql new_database_name < dump.sql

, чтобы передать Файл dump.sql между сервером Я просто использовал «cat» для печати содержимого, а не «nano», чтобы воссоздать его, копируя содержимое.

Кроме того, ROLE i использовал в обеих базе данных, я должен был найти - заменить все имя владельца в дампе.

3
ответ дан pastullo 20 August 2018 в 15:52
поделиться
pg_dump the_db_name > the_backup.sql

Затем скопируйте резервную копию на сервер разработки, восстановите с помощью:

psql the_new_dev_db < the_backup.sql
105
ответ дан unmounted 20 August 2018 в 15:52
поделиться
  • 1
    Кто-то сказал мне, что это может быть проблематично - проблемы с разрешениями, приводящие к дампу или восстановлению, когда он нажимает на триггер? – Robin Barnes 6 August 2009 в 10:26
  • 2
    @rmbarnes: Если есть проблемы - они должны быть исправлены. Без детального знания, что этот «Кто-то» - никто не может подтвердить или отклонить это требование. – user 6 August 2009 в 11:06
  • 3
    Используйте флаг -no-owner с pg_dump. Это пропускает проблему, и первое редактирование этого сообщения использовало ее, но потом я подумал, что вам может потребоваться более точная верность исходной базе данных. – unmounted 6 August 2009 в 18:05
  • 4
    Для меня выше подход работал следующим образом: pg_dump -C -h host -U имя пользователя db_name & gt; / any_directory / dump_schema_and_data_file. И для восстановления из файла: psql -h host -U имя пользователя db_name & lt; dump_schema_and_data_file – Ali Raza Bhayani 26 March 2014 в 11:38

Используйте pg_dump , а затем psql или pg_restore - в зависимости от того, вы выбираете опции -Fp или -Fc для pg_dump.

Пример использования:

ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
36
ответ дан user 20 August 2018 в 15:52
поделиться

Запустите эту команду с именем базы данных, вы хотите сделать резервную копию, чтобы взять дамп БД.

 pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

 eg. pg_dump -U postgres mydbname -f mydbnamedump.sql

Теперь scp этот файл дампа на удаленную машину, где вы хотите скопировать DB.

eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/

На удаленном компьютере выполните следующую команду в ~ / some / folder, чтобы восстановить БД.

 psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}

 eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
4
ответ дан user01 20 August 2018 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: