

# 从 Amazon EC2 实例导入 PostgreSQL 数据库
<a name="PostgreSQL.Procedural.Importing.EC2"></a>

如果您在 Amazon EC2 实例上的 PostgreSQL 服务器中有数据，并要将其移至 PostgreSQL 数据库实例，则可以按照此过程迁移数据。

1. 使用 pg\$1dump 创建一个文件，其中包含要加载的数据

1. 创建目标数据库实例

1. 使用 *psql* 在数据库实例上创建数据库，然后加载数据

1. 创建该数据库实例的数据库快照

以下各节提供了上述每个步骤的更多详细信息。

## 步骤 1：使用包含要加载的数据的 pg\$1dump 创建文件
<a name="PostgreSQL.Procedural.Importing.EC2.Step1"></a>

`pg_dump` 实用程序使用 COPY 命令创建 PostgreSQL 数据库的架构和数据转储。`pg_dump` 生成的转储脚本将数据加载到一个同名的数据库中，然后重新创建表、索引和外键。您可以使用 `pg_restore` 命令和 `-d` 参数将数据恢复到具有不同的名称的数据库。

在创建数据转储之前，应查询要转储的表以获取行数，以使您可确认目标数据库实例上的数量。

 以下命令为一个名为 mydb2 的数据库创建一个名为 mydb2dump.sql 的转储文件。

```
prompt>pg_dump dbname=mydb2 -f mydb2dump.sql 
```

## 步骤 2：创建目标数据库实例
<a name="PostgreSQL.Procedural.Importing.EC2.Step2"></a>

使用 Amazon RDS 控制台、AWS CLI 或 API 创建目标 PostgreSQL 数据库实例。在备份保留设置为 0 的情况下创建该实例，然后禁用多可用区。这样做可更快地导入数据。您必须先在该实例上创建一个数据库，然后才能转储数据。数据库可以与包含转储数据的数据库具有相同名称。或者，您可以使用其他名称创建数据库。在这种情况下，您使用 `pg_restore` 命令和 `-d` 参数将数据还原到新命名的数据库中。

例如，以下命令可用于转储、还原和重命名数据库。

```
pg_dump -Fc -v -h [endpoint of instance] -U [master username] [database] > [database].dump
createdb [new database name]
pg_restore -v -h [endpoint of instance] -U [master username] -d [new database name] [database].dump
```

## 步骤 3：使用 psql 在数据库实例上创建数据库，然后加载数据
<a name="PostgreSQL.Procedural.Importing.EC2.Step3"></a>

可使用用于运行 pg\$1dump 命令的同一连接，连接到目标数据库实例并重新创建数据库。使用 *psql* 时，可使用主用户名和主密码在数据库实例上创建数据库

以下示例使用 *psql* 和一个名为 mydb2dump.sql 的转储文件，在一个名为 mypginstance 的 PostgreSQL 数据库实例上创建一个名为 mydb2 的数据库：

对于 Linux、macOS 或 Unix：

```
psql \
   -f mydb2dump.sql \
   --host mypginstance.555555555555.aws-region.rds.amazonaws.com \
   --port 8199 \
   --username myawsuser \
   --password password \
   --dbname mydb2
```

对于：Windows

```
psql ^
   -f mydb2dump.sql ^
   --host mypginstance.555555555555.aws-region.rds.amazonaws.com ^
   --port 8199 ^
   --username myawsuser ^
   --password password ^
   --dbname mydb2
```

**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

## 步骤 4：创建数据库实例的数据库快照
<a name="PostgreSQL.Procedural.Importing.EC2.Step4"></a>

确认已将数据加载到数据库实例中后，建议创建目标 PostgreSQL 数据库实例的数据库快照。数据库快照是数据库实例的完整备份，可用于将数据库实例还原到已知状态。通过使用在加载后立即创建的数据库快照，您可以在遇到问题时不必再次加载数据。您也可以使用此类快照创建新的数据库实例。有关创建数据库快照的更多信息，请参阅[为 Amazon RDS 的单可用区数据库实例创建数据库快照](USER_CreateSnapshot.md)。