2

我想在 PostgreSQL 中创建一个新的数据类型和新的运算符。我在文档中看到,可以在 C 中合并新的源文件(例如)并创建新的数据类型和运算符。PostgreSQL 在这个方向上是可扩展的。更多信息请参见:文档

而且 PostgreSQL 也是开源的,我可以修改源代码并添加新的数据类型,编译一个新版本。

有了这个,我想知道在 PostgreSQL 中包含新数据类型的每种方法的区别、优点和缺点。我非常关心查询处理的性能。谢谢你。

4

3 回答 3

8

如果您修改 PostgreSQL,则必须维护整个代码库,并且每次要升级时都必须进行修补,即使在次要版本之间也是如此。如果你做一个扩展,你只需要维护你的小扩展。如果您想这样做,分发小型扩展程序也容易得多。

于 2012-11-22T02:51:50.463 回答
0

我完全同意 Jachim 的回答。另一件事是:

在 PostgreSQL 中开发自己的 C 语言扩展(相当)有据可查 - 只需编译一个代码函数并编写相应的函数即可完成简单的程序。添加自定义数据类型有点复杂,但仍然可行。我开发的扩展甚至是用 C++ 编写的,在 PostgreSQL 的普通 C 之间只有一点包装胶水——这使得开发更加灵活。

然而,就如何开始和做什么而言,更改 PostgreSQL 核心更为复杂。最后,您将其归档。

总结一下:C 语言函数为您提供了所有优势:

  • 利用 PostgreSQL 内部数据类型实现高性能
  • 简单的编程接口
  • 只需一小段代码,带有文档化且可能非常稳定的功能接口

我看不出改变 PostgreSQL 核心的任何优点,但有很多缺点:

  • 编译时间长
  • 维护自己的代码分支并定期将补丁重新应用到当前版本
  • 更高的错误风险。

如果您需要使用 C-Language 接口的多种不同方式的示例,请查看 PostGis 源代码 - 它们使用几乎所有函数类型,并且在代码中包含许多花哨的技巧。

于 2012-11-22T06:53:49.673 回答
0

内部运算符和数据类型与自定义运算符和数据类型之间没有区别 - 然后它具有相同的性能。外部和内部实现尊重相同的规则和模式。因此,没有理由为此破解 Postgres。

我们已经在 GoodData 中修补了 PostgreSQL - 我们也有自己的扩展 - 在任何可能和实用的地方,我们都使用自定义扩展 - 在不可能的地方,我们使用自己的 hack - 从 9.2、9.3 向后移植,一些增强pg_dump 和 psql,统计数据——但我们身边有一个活跃的 PostgreSQL 黑客。这不常见。对于没有 PostgreSQL 黑客经验的用户,他们正在创建安全且性能良好的扩展解决方案。

于 2012-11-22T07:39:04.097 回答