我的电脑坏了,但幸运的是我备份了文件夹C:\Program Files\PostgreSQL。
现在我在一台新的计算机上工作,我想导入存储在外部磁盘中的以前的Postgres数据库。
我希望导出位于备份文件夹中的特定数据库的架构。
文件PostgreSQL\8.3\data\global\pg_database
包含有关数据库及其OID的信息;例如:
"db1" 20012
"db2" 23456
我想导出"db1"的模式。
文件夹"PostgreSQL\8.3\data\base\20012"
中有一个名为"20012"的文件夹,其中包含大量文件[500个文件]。
有什么方法可以导出该数据库的模式吗?
请注意,所有Postgresql数据库文件都位于外部硬盘中,我希望将该数据库的模式导出到SQL文件中,获取该文件,运行它并在本地创建完全相同的数据库。
9条答案
按热度按时间xmq68pz91#
您应该查看一下
pg_dump
:只将架构作为. sql转储到stdout。
对于windows,你可能会想调用
pg_dump.exe
。我没有访问Windows机器的权限,但我很确定这是命令。看看帮助是否也适用于你。6psbrbz92#
我运行的是Postgres 9.6,其中我必须导出特定的模式和数据。
我使用了以下命令:
如果只需要模式而不需要数据,请使用开关
s
而不是n
下面是pg_dump开关列表:
nnvyjq4y3#
在Linux中,您可以这样做
也许它也可以在Windows中工作,如果不尝试同样的pg_dump.exe
h9vpoimq4#
请注意,您有足够的权限访问该架构。如果要以特定用户身份进行备份,请在该命令中添加用户名,并在其前面加上
-U
drkbr07n5#
对于Linux:(不包括数据)
pg_dump -s -t tablename databasename > dump.sql
(用于数据库中的特定表)pg_dump -s databasename > dump.sql
(对于整个数据库)xmjla07d6#
如果只需要创建表,则可以执行
pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/'
w1jd8yoj7#
pg_dump -s databasename -t tablename -U user -h host -p port > tablename.sql
这将限制模式转储到“databasename”的表“tablename”
disho6za8#
您应该使用类似
pg_dump --schema=your_schema_name db1
的代码,有关详细信息,请查看herecsga3l589#
设置一个新的postgresql服务器并用你外部磁盘上的文件替换它的数据文件夹.
然后,您就可以启动postgresql服务器,并使用pg_dump(pg_dump -s用于模式,如前所述)检索数据