Using pg_dump to take a snapshot of a database
我正在尝试设置一个脚本,将数据库的副本从一个服务器转移到另一个服务器。
感谢这篇文章将PostgreSQL数据库复制到另一台服务器,我找到了一种方法。
但我需要做的是在复制期间更改数据库的名称。
我曾考虑使用sed并进行简单的文本替换。 但我担心这会破坏数据库。
有没有人知道这样做的正确方法?
这里要求的是我正在使用的命令
1 | pg_dump -C -U remoteuser -h remoteServer dbname | psql -h localhost -U localadmin template1 |
只需还原到其他数据库。对于来自
1 2 | createdb newdbname pg_restore --dbname newdbname database.dump |
对于使用
1 2 | createdb newdbname psql -f database_dump.sql newdbname |
如果您从远程主机流式传输转储,只需省略
您无法在与还原相同的命令中轻松
1 2 | psql -h localhost -U localadmin template1 -c 'CREATE DATABASE newdb;' pg_dump -U remoteuser -h remoteServer dbname | psql -h localhost -U localadmin newdb |
请注意将
第一个命令只是编写
更新:如果您遇到使用
1 2 3 4 5 6 7 8 9 10 | -- -- Name: regress; Type: DATABASE; Schema: -; Owner: craig -- CREATE DATABASE regress WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8'; ALTER DATABASE regress OWNER TO craig; \CONNECT regress |
这可以非常安全地转换为三个(如果你想重写注释,则为四个)非常具体的
1 2 3 4 5 | sed \ -e 's/^CREATE DATABASE regress/CREATE DATABASE newdbname/' \ -e 's/^ALTER DATABASE regress/ALTER DATABASE newdbname/' \ -e 's/^\\connect regress/\\connect newdbname/' \ -e 's/^--Name: regress/--Name: newdbname/' |
这应该是最后的手段;不用