我有一个生产pgsql服务器,它具有以下存储过程语言支持:
我找不到内部和c的示例,只是pl / pgsql或者在极少数情况下是sql。我会尝试让提供商安装其他语言,但提供商通常不会提供,所以我认为这不会发生......所以我被这些语言所困扰......
我应该选择哪一个?为什么? (如果你有一个很好的教程,那么请在你的答案或评论中写下来)
select * from pg_language
顺便说一句,我没有教程就测试c和内部,所以也许有一个简单的解决方案:我不能使用它们,因为它们不受信任。
编辑 - 解决方案后
create language
对我有用的东西。之后,我通过以下查询检查了可用的语言:
select * from pg_pltemplate
您可以阅读有关创建语言here的更多信息。
我将使用plpgsql,我在这里找到了一本关于postgresql的好书:The PostgreSQL Programmer's Guide , Edited by Thomas Lockhart
答案 0 :(得分:3)
通常,您可以使用四种,五种PL语言 - SQL,PL / pgSQL,PL / Python或PL / Perl,C。
您可以在
中找到的C代码示例C语言可用于实现自己的数据类型,必要的操作和索引支持。你可以找到很多PostgreSQL扩展 - 非常有名的是PostGIS。
答案 1 :(得分:2)
查看您的pg_language
列表,显示默认值:如果我使用createdb
,PostgreSql 8.4 / Debian创建新数据库,则输出相同。列表可能已包含PL / pgSQL的另一行,具体取决于版本和/或数据中心(由a_horse_with_no_name指出)。
所以你有
如果你跑
CREATE LANGUAGE plpgsql;
PL / pgSQL将会出现另一行(如果你有privilege)。
例如,如果您安装了PL / Java,那么您将获得
也出现在列表中。
选择语言的一些指导原则
如果您需要更高级别的语言,请考虑 Scala (分别需要支持基于PL / Java或JVM的存储过程)。因此,您不仅可以在SQL中使用功能范例,还可以在存储的函数/过程中使用功能范例。当然,像Java一样,你也有OOP。
如果您使用的是 Java ,请查看Java存储过程(需要PL / Java)。举个例子,看看here。与PL / pgSQL相比,您有完整的OOP。
PL / Java往往难以安装,因此数据中心并不十分欣赏它。这是值得的,因为您可以为客户端/应用程序服务器和存储过程/函数使用相同的语言:不需要学习另一种语言。例如,您可以以相同的方式访问结果集。唯一不同的是JDBC URL。与PL / pgSQL相比,如果其他数据库也支持基于JVM的存储过程,则这些存储过程是可移植的。
如果您必须从已有语言中选择一种,请考虑 PL / pgSQL 。它通常始终安装,您不必处理内存分配。
如果必须与操作系统/库接口,则 C 。要获得展示,请查看here。这并不是很困难,它只是围绕着功能的更多功能。
如果你想要 C ++ ,它会变得更难,因为PostgreSql和C / C ++模块之间的接口使用C调用约定,所以你应该有一个位于PostgreSql之间的C文件和你的C ++模块。要获得展示,请查看here。
如果您不使用PL / pgSQL,最困难的部分是安装(PL / Java)和接口代码(PL / Java,PL / C,PL / C ++)。如果您最初进行了设置,那么在存储过程/函数中使用您真正想要的语言真的很愉快。值得这么麻烦。
答案 2 :(得分:1)
如果您从某些软件工具(例如,从Java到JDBC)访问数据库,那么您也可以更好地简化查询,在客户端执行更多工作并避免使用数据库端脚本。
理由是这些服务器端脚本更难以测试(单元测试需要数据库),调试(通常比调试器下的代码更复杂)和维护(升级等)。服务器端脚本中的错误经常被忽略,因为它们是分开的, 这些脚本很少被客户端开发人员看到。
但是,无论如何,我们过去都使用过PL / PSQL,因为可以使用自动脚本通过JDBC连接自动在服务器上安装所有代码。