我已经将大约200 GB的人口普查数据导入到Windows 7机顶盒上的postgreSQL 9.3数据库中。导入过程涉及许多文件,并且复杂且耗时。我只是将数据库用作方便的容器。现有数据很少会发生变化,并且最多每季度更新一次外部数据(尽管我会在更频繁的基础上添加和修改中间结果列。我会调用数据库中的数据)在我的桌面上“主人”。所有查询都来自同一台机器,而不是远程终端。
我想将所有数据的副本放在其他三台机器上:两台笔记本电脑,一台Windows 7和一台Windows 8,以及Windows 7桌面上的Ubuntu虚拟机。我已经在每台机器上安装了postgreSQL 9.3的副本,目前没有数据。我需要能够对副本进行读写操作。没关系,如果子数据库中的更改不会向后传播到桌面上的主数据库,我确实更喜欢它。我想要每年1到4次更新大师的女儿。如果这在女儿数据库中消除了中间结果,这不会打扰我。
我读过的大多数复制技术似乎都担心实时和不断变化的服务器的逐个事务复制,以及查询的完美历史记录。变化。这对我来说太过分了。有没有办法通过将某些文件从一个postgreSQL实例复制到另一个来复制? (如果复制是特定复制形式的名称,我试图提出更通用的问题)。或者可能通过从主服务器的备份文件中恢复每个(空)实例?或者要求postgreSQL创建和导出(理想情况下在外部硬盘驱动器上)postgreSQL的另一个实例可以导入的某种postgreSQL二进制数据,而不必再定义所有表和数据类型等等?
这个问题的动机还在于我希望解决一个非常慢的家庭wifi /局域网设置 - 文件复制到外部硬盘的速度的十分之一或更低。因此,如果有一种直接的方法通过传输(理想压缩的)二进制文件将导入的数据从一台机器传送到另一台机器,这对我的情况最有效。
答案 0 :(得分:1)
虽然您可以像上面的评论中那样直接复制数据目录,但我建议使用pg_dump和pg_restore的组合,这将转储一个自包含的文件,然后可以分散到其他副本。
您可以在主服务器上运行 pg_dump 以获取数据库的转储。我建议使用选项-Fc -j3
来使用自定义二进制格式(而不是以SQL格式转储;这应该更小,也许更快)并且将一次转储3个表(这可以调整或down取决于计算机的磁盘吞吐量功能及其拥有的核心数。)
然后在副本 createdb 上运行 dropdb 以重新创建一个同名的空数据库,然后在该新数据库上运行 pg_restore 空DB将转储文件还原到DB。您可能希望使用选项-d <dbname> -f <dump_file> -j3
(根据机器的能力再次调整-j
的数量。)
如果要使用主数据库中的新内容刷新副本,只需重复上述步骤
即可