PostgreSQL 教程: 复制数据库

九月 15, 2023

摘要:在本教程中,您将学习如何在同一台服务器上复制 PostgreSQL 数据库,或从一台服务器复制数据库到另一台服务器。

img

在同一台服务器内复制数据库

有时,您想要在 PostgreSQL 数据库服务器中复制数据库以进行测试。

在 PostgreSQL 中,通过 CREATE DATABASE 语句可以很容易地做到这一点,如下:

CREATE DATABASE targetdb 
WITH TEMPLATE sourcedb;

该语句将sourcedb复制到targetdb. 例如,要将dvdrental示例数据库复制到dvdrental_test数据库,请使用以下语句:

CREATE DATABASE dvdrental_test 
WITH TEMPLATE dvdrental;

根据源数据库的大小,可能需要一段时间才能完成复制。

如果dvdrental数据库有活跃的连接,您将收到以下错误:

ERROR:  source database "dvdrental" is being accessed by other users
DETAIL:  There is 1 other session using the database.

以下查询返回活跃连接:

SELECT pid, usename, client_addr 
FROM pg_stat_activity 
WHERE datname ='dvdrental';

要终止与dvdrental数据库的活跃连接,请使用以下查询:

SELECT pg_terminate_backend (pid)
FROM pg_stat_activity
WHERE datname = 'dvdrental';

之后,您可以再次执行CREATE TABLE WITH TEMPLATE语句,将 dvdrental 数据库复制到 dvdrental_test 数据库。

从一台服务器复制数据库到另一台服务器

有多种方法可以在 PostgreSQL 数据库服务器之间复制数据库。

如果源数据库较大,数据库服务器之间的连接速度较慢,可以将源数据库转储到文件中,然后将文件复制到远程服务器上,然后进行恢复:

首先,将源数据库转储到文件中。

pg_dump -U postgres -d sourcedb -f sourcedb.sql

其次,将转储文件复制到远程服务器。

第三步,在远程服务器中创建一个新数据库:

CREATE DATABASE targetdb;

最后,在远程服务器上恢复转储文件:

psql -U postgres -d targetdb -f sourcedb.sql

复制 dvdrental 数据库的示例

以下步骤说明如何将dvdrental数据库从本地服务器复制到远程服务器。

首先,将dvdrental数据库转储到转储文件中,例如dvdrental.sql

pg_dump -U postgres -O dvdrental -f dvdrental.sql

其次,将转储文件复制到远程服务器。

第三步,在远程服务器上创建dvdrental数据库:

CREATE DATABASE dvdrental;

第四步,在远程服务器恢复转储文件dvdrental.sql

psql -U postgres -d dvdrental -f dvdrental.sql

如果服务器之间的连接速度很快且数据库的大小不大,可以使用以下命令:

pg_dump -C -h local -U localuser sourcedb | psql -h remote -U remoteuser targetdb

例如,要将dvdrental数据库从localhost本地服务器复制到remote远程服务器,请执行以下操作:

pg_dump -C -h localhost -U postgres dvdrental | psql -h remote -U postgres dvdrental

在本教程中,您学习了如何在 PostgreSQL 数据库服务器内复制数据库,或从一个数据库服务器复制到另一个数据库服务器。