【问题标题】:Move table from server1 to server2将表从 server1 移动到 server2
【发布时间】:2014-06-28 07:46:31
【问题描述】:

我有两个 Postgresql 服务器 (Windows),我正在尝试将表从 server1 传输到 server2。该表大小约为 200 MB,因为它包含二进制数据。 我想将桌子放入 USB 记忆棒中,然后将其移至第二台服务器。 (假设两台服务器没有通过局域网连接)。 最简单的方法是什么?你能描述一下命令的方式吗?

【问题讨论】:

  • 先导出再导入?你有什么问题?
  • 是的,导入时会显示错误消息,因为大小很大,我导出到 sql 文件。
  • 错误信息是什么?请发布更多详细信息
  • postgresql 版本是多少?
  • @Aan COPY 到 CSV 文件呢??

标签: sql postgresql binary-data


【解决方案1】:

最简单的方法可能是使用 pg_dump。

我没有在 Windows 上使用过它,所以我不知道它的实际路径,但它应该在 Postgres\bin 目录中,您需要在 shell 窗口(如 PowerShell 或 CMD)中执行它。

假设您对每个服务器都有控制台访问权限,并且该表已经存在于第二个数据库中:

pg_dump -a -b -Fc -t <tablename> <databasename> > <path to dump file>

然后当您将其移至新服务器时。

pg_restore -a -Fc -d <databasename> <path to dump file>

如果你不能直接访问每个服务器,那么你需要在每个命令中添加连接参数:

-h <server> -U <username>

参数简要说明:

  • -a :仅转储数据而不转储架构定义。如果表尚未在新服务器上就位,则应将其删除
  • -b :转储 blob。您提到表中有二进制数据,如果存储为大对象,则需要包含此参数,否则可以跳过。
  • -Fc :转储数据的格式。 c 代表 Postgres 自定义格式,它更适合移动二进制数据。您可以将其更改为 d 以使用目录格式,因为您使用的是 9.2,但我仍然更喜欢自定义格式。但是,d 在转储大型数据库时很有用,因为它将每个表存储在指定目录中的一个文件中。
  • -t :指定要转储一个表而不是整个数据库。
  • -d :要恢复到的数据库(pg_dump中也可以使用此参数,但如上指定则不需要)

您可能还需要将-t 参数添加到还原中,但据我记得,这不是必需的,因为您在转储中只有该表(但是,如果您有转储中的几个表,例如,如果它是数据库的完整转储,则可用于仅恢复部分数据库)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多