我有一个在我的 Mac 上本地运行的 Ruby on Rails 4 应用程序。我在本地运行 Postgres。
我想将数据库(并且只是数据库,而不是整个应用程序)移动到 Amazon RDS Postgres。
在新数据库上设置所有表并将数据迁移到其中的最简单方法是什么?
Cra*_*ger 17
@joni 正确地指出这pg_dump
就是你想要的。但是,我建议不要进行简单的 SQL 转储。相反,使用可以输入pg_restore
. 如果您使用目录格式,这允许并行转储/恢复(更快),但它最有用,因为它提供了对恢复细节的控制,而无需进行新的转储。
例如,假设您已经CREATE DATABASE
在目标上执行了 a ,因此有一个名为mydb
那里的空数据库:
# dump the local db
pg_dump -Fc -o mydb.dump mydb
# restore to Amazon RDS
pg_restore -h my.amazon.host -U rds_superuser -d mydb --no-owner --no-privileges --no-tablespaces
Run Code Online (Sandbox Code Playgroud)
GRANT
s 等请注意,转储中不包含角色(用户和组)。外部数据包装服务器或其他一些全局对象也不是。因此,依赖于它们的事物将无法恢复。由于这个原因,我在上面省略了所有者和权限的恢复 - 这意味着如果您在数据库中具有非默认权限,则需要重做GRANT
s 和REVOKE
s 。
同样,所有对象都恢复到默认表空间,因为您可能在本地拥有的任何表空间都不会在 RDS 上。
rds_superuser
?如果您不允许rds_superuser
远程登录,但已经GRANT rds_superuser TO myusername
为其他角色完成了登录,那么-U rds_superuser
您可以使用:
-U myusername --role=rds_superuser
Run Code Online (Sandbox Code Playgroud)
获得pg_restore
进行身份验证的myusername
则SET ROLE rds_superuser;
。
大多数生产 PostgreSQL 数据库迁移是使用复制和故障转移执行的。Amazon RDS 目前无法做到这一点。RDS 在内部进行 WAL 存档和流式复制,但无法访问 WAL 存档或为RDS外部的客户端创建复制replication
条目pg_hba.conf
。
因此,在撰写本文时,您必须转储和重新加载才能将数据移入或移出 RDS。没有低停机时间选项。
小智 2
使用pg_dump
CLI 实用程序。它的用法在各个 页面上都有描述(只需谷歌),但简而言之:
# dump
pg_dump --clean --no-privileges --no-owner --no-reconnect <db_name> > dump.sql
# load
psql -d <db_name> -f dump.sql
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了这些--clean --no-privileges --no-owner
选项,因为 postgres 用户在您的 macbook 和亚马逊服务器上可能有所不同。
归档时间: |
|
查看次数: |
16366 次 |
最近记录: |