九月 15, 2023
摘要:在本教程中,您将学习如何在同一台服务器上复制 PostgreSQL 数据库,或从一台服务器复制数据库到另一台服务器。
目录
在同一台服务器内复制数据库
有时,您想要在 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 数据库服务器内复制数据库,或从一个数据库服务器复制到另一个数据库服务器。