Python中针对PostgreSQL的存储过程

11

我们对Postgres还比较陌生,并且之前使用的是Microsoft Sql Server。

我们现在想写一些存储过程。但是,在尝试编写一些比“hello world”更复杂的pl/pgsql代码时遇到了很多困难,因此我们决定如果要学习一门新语言,那么最好学习Python,因为我们用Python实现同样的查询只花费了大约15分钟(请注意,我们中没有人真正懂Python)。

所以我有一些关于Python与pl/psql的比较的问题。

  1. pl/Pythonu比pl/pgsql慢吗?
  2. 是否有“好”的参考资料可以告诉我们如何编写良好的存储过程?Postgres文档中的五页内容并不足够。
  3. 查询准备方面呢?应该总是使用它吗?
  4. 如果我们经常使用SD和GD数组来存储查询计划,它会变得过满或对服务器产生负面影响吗?如果它变得过满,它会自动删除旧值吗?
  5. 它有成为可信语言的希望吗?

此外,我们的存储过程使用非常轻量级。目前我们只有4个,但我们仍然在尝试将一些从Sql Server特定语法(例如变量,在Postgres中除了存储过程外无法使用)转换为Postgres。


3
因为我们已经编写了超过10,000行的C#代码。有些事情如果我们完全在应用程序中完成则需要3次或更多次往返于DB服务器,因此我们更愿意只进行1次往返并让DB服务器进行少量额外的处理。 - Earlz
@earlz:请更新您的问题并提供更多事实。请不要在自己的问题上发表评论。这是您的问题。请让它完整,以便其他人也可以从中学习。 - S.Lott
@earlz:与其使用存储过程来减少往返次数,不如在数据库外获取更多行并进行更多处理。你会发现这通常比存储过程快得多。存储过程并不是一种美德——它们经常是维护的噩梦。为什么要那么辛苦呢? - S.Lott
2
你有任何确凿的证据表明我不应该使用存储过程吗?这些都是无关紧要的。我不是在问我是否应该使用存储过程。而且你也不知道我们的应用程序是如何工作的,所以你怎么能判断存储过程对它是否有害呢? - Earlz
@earlz:是的,实际上,我确实有很多确凿证据表明存储过程已经成为了维护的噩梦,并且通常表现得非常糟糕。这就是为什么我在询问你为什么要如此努力地在Python中使用它们。如果你只是坚持使用它们,那就继续吧。我没有答案。我只是询问为什么这么重要。 - S.Lott
显示剩余3条评论
1个回答

9
  1. 取决于您正在执行的操作。
  2. 好吧,再加上一般的Python文档,这就是您拥有的内容。
  3. 不需要。同样,取决于您要做什么。如果您只打算运行一次查询,那么单独准备查询就没有意义。
  4. 如果您正在使用持久连接,则可能会受到影响。但是它们在每次关闭连接时都会清除。
  5. 不太可能。在Python中,沙箱功能已经被破坏了,据我所知,没有人真正有兴趣修复它。我听说过有人说python-on-parrot可能是最可行的方法,一旦我们拥有了pl/parrot(但我们还没有)。

总之 - 如果您的存储过程将要执行数据库工作,请使用pl/pgsql。只有在进行非数据库操作(例如与外部库通信)时才使用pl/python。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接