我需要将现有数据库(包括其架构和结构)复制到另一个新数据库。我在 shell 命令环境中需要这个,而不是在 pgadmin 中。请帮助我。
nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
Run Code Online (Sandbox Code Playgroud)
我的用户是“postgres”
nohup psql exampledbclone_01 < example-01.sql
Run Code Online (Sandbox Code Playgroud)
$ pg_dump mydb > db.sql
$ psql -d newdb -f db.sql
Run Code Online (Sandbox Code Playgroud)
Cra*_*ger 56
如果您想在同一个 PostgreSQL 安装中复制它并且您没有主动连接的用户,那么有一个方便的快捷方式:
CREATE DATABASE my_new_database TEMPLATE my_old_database;
Run Code Online (Sandbox Code Playgroud)
或从外壳
createdb -T my_old_database my_new_database;
Run Code Online (Sandbox Code Playgroud)
否则,您将需要使用pg_dump,createdb和pg_restore,例如
pg_dump -Fc -f olddb.pgdump -d olddb &&\
createdb newdb &&\
pg_restore -d newdb olddb.pgdump
Run Code Online (Sandbox Code Playgroud)
如果您正在使用,nohup因此在您丢失 ssh 会话时命令不会终止,请考虑screen改用。
小智 5
Postgres 允许在创建新数据库时使用服务器上的任何现有数据库作为模板。我不确定 pgAdmin 是否在创建数据库对话框中为您提供了选项,但如果没有,您应该能够在查询窗口中执行以下操作:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
Run Code Online (Sandbox Code Playgroud)
不过,您可能会得到:
错误:其他用户正在访问源数据库“originaldb”
要断开所有其他用户与数据库的连接,您可以使用以下查询:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42782 次 |
| 最近记录: |