Python обрабатывает переменные в функциях по-разному в зависимости от того, присваиваете ли вы им значения из функции или нет. Если функция содержит любые присваивания переменной, она обрабатывается по умолчанию как локальная переменная. Поэтому, когда вы раскомментируете строку, вы пытаетесь ссылаться на локальную переменную до того, как ей присвоено какое-либо значение.
Если вы хотите, чтобы переменная c
ссылалась на глобальный c
put
global c
в качестве первой строки функции.
Что касается python 3, теперь есть
nonlocal c
, который вы можете использовать для ссылки на ближайшая область действия приложения, имеющая переменную c
.
Вам не нужно создавать промежуточный файл. Вы можете сделать
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"
, но это решение также требует, чтобы сеанс был в обоих концах.
pg_basebackup
кажется лучшим способом сделать это сейчас, особенно для больших баз данных.
Позвольте мне использовать сценарий оболочки 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 и других
Если вы хотите выполнить миграцию между версиями (например, вы обновили postgres и выполнили 9.1 на локальном хосте: 5432 и 9.3, запущенные на localhost: 5434), вы можете запустить:
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
Проверьте docs .
Дамп вашей базы данных: pg_dump database_name_name > backup.sql
Импортировать свою базу данных назад: psql db_name < backup.sql
Я много боролся, и в конечном итоге метод, который позволил мне заставить его работать с 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 использовал в обеих базе данных, я должен был найти - заменить все имя владельца в дампе.
pg_dump the_db_name > the_backup.sql
Затем скопируйте резервную копию на сервер разработки, восстановите с помощью:
psql the_new_dev_db < the_backup.sql
Используйте 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
Запустите эту команду с именем базы данных, вы хотите сделать резервную копию, чтобы взять дамп БД.
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
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
? – Jeromy French 26 February 2013 в 04:51