如何将public
架构完整的表结构,数据,函数,fk,pk等复制到同一数据库中。
我的Postgres版本是8.4
PS,我需要复制架构 NOT数据库
如何将public
架构完整的表结构,数据,函数,fk,pk等复制到同一数据库中。
我的Postgres版本是8.4
PS,我需要复制架构 NOT数据库
Answers:
在pg_dump / pg_restore本身没有简单的方法可以做到这一点。如果您能够临时删除数据库,则可以尝试以下操作。
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
。在中,postgres
通过无密码peer
授权作为超级用户()最容易pg_haba.conf
。重命名原始架构后还原psql my_db -f '/path/to/file.pgsql'
。如果你有一个简单的SQL转储,你就不会需要pg_restore
。
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
如果您对php感到困惑,则可以使用任一back tic
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
或exec()命令。对于更改,您可以以相同的方式使用sed。
这里还有6个字符
public
)的情况下。
使用pgAdmin,您可以执行以下操作。这是相当手工的,但可能只是您所需要的。基于脚本的方法将更为可取。不知道如果没有管理员访问权限并且数据库很大,但是在本地计算机上拥有的开发数据库上也可以正常工作,这种方法的效果如何。
右键单击要复制的架构名称,然后单击“备份”。(您可以比这更深入,选择只备份结构而不是同时备份两者)。
为备份文件命名,然后选择一种格式。(我通常使用Tar。)
单击备份。
右键单击从中备份的架构,然后单击属性,然后将其临时重命名为其他名称。(例如temprename)
单击架构根,然后在对象浏览器中右键单击它,然后单击“ 创建新架构”,并将该架构命名为public。这将是您要从备份复制到的架构。
右键单击第5步中的新架构公共。然后单击“还原”。在步骤3中从备份文件还原。
将新的架构public重命名为其他名称(例如newschema)。
将模式temprename的更改从步骤4 重命名回原始名称。
你可以用
CREATE DATABASE new_db TEMPLATE = old_db;
然后删除所有不需要的架构:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
唯一的缺点是在创建副本之前必须终止所有到old_db的连接(因此运行该CREATE DATABASE
语句的进程必须连接到例如template1)
如果这不是一个选择,那么pg_dump / pg_restore是唯一的方法。
扩展到user1113185 answer,这是使用psql / pg_dump的完整工作流程。
下面的出口中的所有对象old_schema
,然后导入到新new_schema
的模式,如user
在dbname
数据库:
psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
public
?