Postgresql数据库只读镜像

时间:2014-11-25 20:47:50

标签: database postgresql

我需要的是基本上在本地计算机上创建远程数据库的只读镜像。如果镜子能够定期自我更新,它也会很整洁。

数据库版本为Postgresql 9.3

这样做的原因是我需要对该数据库执行选择,并且在我的互联网连接上需要很长时间。

我找到this article但它需要访问我目前没有的远程服务器。那么有没有一种方法可以直接访问服务器?我所拥有的只是数据库名称,域名,端口,用户名和密码。

1 个答案:

答案 0 :(得分: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访问权限,你可以在transfert之前gzip sql转储但是现在这是你唯一的选择。