2014-11-25 4 views
0

Мне нужно в основном создать зеркало только для чтения удаленной базы данных на моем локальном компьютере. Это было бы также аккуратно, если бы зеркало могло бы периодически обновлять себя.Postgresql база данных только для чтения

Версия базы данных Postgresql 9.3.

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

Я нашел this article, но для этого требуется доступ к этому удаленному серверу, которого у меня сейчас нет. Итак, есть ли способ сделать это без прямого доступа к серверу? У меня есть только имя, домен, порт, имя пользователя и пароль.

+0

Если у вас нет прямого доступа к серверу db, то вы действительно не можете быть уверены, что ваша копия будет точной (или даже возможной). –

+0

У вас иногда бывает доступ к базе данных? С удаленным прямым подключением или через какой-либо другой перенос на основе файлов? –

+0

К сожалению, как я писал, у меня есть имя, домен, порт, имя пользователя и пароль. Ничего другого :-(И более того, когда я пробовал подход, описанный в статье, я связался, я получил «FATAL: нет записи pg_hba.conf для соединения репликации с хоста». Однако мне действительно нужен только доступ только для чтения. Я думаю, что будет что-то еще. – Jendas

ответ

2

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

Сценарий будет выглядеть следующим образом

#!/bin/bash 
REMOTE_PSQL_OPTIONS="-h <remote_host> -p <remote_port> -U <remote_user>" 
LOCAL_PSQL_OPTIONS="-h localhost -p <local_port> -U <local_user>" 


# retrieve the database locally 
echo "Remote database fetch" 
pg_dump $REMOTE_PSQL_OPTIONS <remote_db_name> > /tmp/my_db.sql 

# install locally 
echo "Local install in temporary database" 
psql $LOCAL_PSQL_OPTIONS postgres "CREATE DATABASE my_tmp_db" 
psql $LOCAL_PSQL_OPTIONS my_tmp_db -f /tmp/my_db.sql 

# switch databases 
echo "Installing the new database version" 
psql $LOCAL_PSQL_OPTIONS postgres 
# backup the current local db 
psql $LOCAL_PSQL_OPTIONS postgres "ALTER DATABASE current_db_name RENAME TO current_db_name_backup;" 
# rename the tmp db to the expected local database name 
psql $LOCAL_PSQL_OPTIONS postgres "ALTER DATABASE my_tmp_db RENAME TO current_db_name;" 

# if you trust this script, uncomment this line that clean old backups 
# psql $LOCAL_PSQL_OPTIONS postgres "DROP DATABASE current_db_name_backup;" 

Надежда, что помогает.

Если бы у вас был доступ к ssh, вы могли бы gzip сбрасывать sql перед передачей, но пока это ваш единственный выбор.

Смежные вопросы