首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不使用PostgreSQL的情况下写入PostgreSQL数据库格式

在不使用PostgreSQL的情况下写入PostgreSQL数据库格式
EN

Stack Overflow用户
提问于 2011-06-09 20:11:43
回答 3查看 692关注 0票数 2

我从很多机器上收集了很多数据。这些计算机无法运行PostgreSQL,并且无法连接到PostgreSQL数据库。现在,我将来自这些机器的数据保存在CSV文件中,并使用COPY from命令将数据导入PostgreSQL数据库。即使在高端硬件上,这个过程也需要几个小时。因此,我在考虑将数据直接写入PostgreSQL数据库的格式。然后,我将简单地将这些文件复制到/data目录中,启动PostgreSQL服务器。然后,服务器将找到数据库文件,并将其作为数据库接受。

这样的解决方案可行吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-10 10:34:35

是的,你不能以任何合理的方式把文件写出来。除了数据页格式之外,您还需要复制提交日志、部分预写日志、一些事务可见性部分、所使用类型的任何转换代码以及可能的TOAST和varlena代码。哦,还有系统目录数据,如前所述。粗略估计,您可能只需要从服务器借用200K行代码即可。PostgreSQL是从可扩展的角度构建的;如果不先在系统目录中查找整数类型的类型信息,您甚至无法解释整数的含义。

Bulk Loading and Restores上有一些加快复制过程的技巧。特别是关闭synchronous_commit可能会有所帮助。另一个可能有用的技巧是:如果启动一个事务,截断一个表,然后复制到其中,则复制速度会快得多。它不会为通常的预写日志保护而烦恼。然而,很容易发现复制实际上对CPU性能造成了瓶颈,您对此无能为力。有些人将传入的文件拆分成多个片段,并同时运行多个复制操作来解决此问题。

实际上,pg_bulkload可能是您最好的选择,除非它也受到CPU的限制--在这种情况下,数据库外部的拆分器和多个并行加载确实是您需要的。

票数 1
EN

Stack Overflow用户

发布于 2011-06-09 20:18:14

从理论上讲,如果您非常仔细地研究了PostgreSQL的源代码,这是可能的。

但从本质上讲,您最终(重新)编写了PostgreSQL的核心,这在我看来是“不可行的”。

编辑:

你可能想看看pg_bulkload,它号称比COPY快(虽然还没用过)

票数 4
EN

Stack Overflow用户

发布于 2011-06-09 20:15:37

为什么他们不能连接到数据库服务器?如果是因为库依赖,我建议您建立某种客户端-服务器解决方案(可能是web服务),它可以在整个过程中对数据进行排队和提交。

在处理大量数据时,依赖批处理操作总是让你头疼,如果COPY FROM对你来说不够快,我想也不会。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6292578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档