【问题标题】:Stored Procedures in Python for PostgreSQLPostgreSQL 中的 Python 存储过程
【发布时间】:2010-01-26 18:19:45
【问题描述】:

我们对 Postgres 还是很陌生,并且来自 Microsoft Sql Server。

我们现在想写一些存储过程。好吧,在努力让比hello world 更复杂的东西在 pl/pgsql 中工作之后,我们决定如果我们要学习一门新语言,我们不妨学习 Python,因为我们在其中使用相同的查询大约 15 分钟(注意,我们中没有人真正了解 python)。

因此,与 pl/psql 相比,我对它有一些疑问。

  1. pl/Pythonu 是否比 pl/pgsql 慢?
  2. 对于如何使用它编写好的存储过程,是否有任何“好的”参考? Postgres 文档中的五个短页并不能真正告诉我们足够的信息。
  3. 查询准备如何?应该一直使用吗?
  4. 如果我们将 SD 和 GD 阵列用于大量查询计划,它是否会变得太满或对服务器产生负面影响?如果太满,它会自动删除旧值吗?
  5. 它有希望成为一种受信任的语言吗?

此外,我们的存储过程使用非常少。目前我们只有 4 个,但我们仍在尝试从 Sql Server 特定语法转换少量代码(例如变量,不能在存储过程之外的 Postgres 中使用)

【问题讨论】:

  • 你为什么要这么努力地写存储过程?为什么不用 Python 编写普通的应用程序,将数据库用作普通的数据存储?
  • 因为我们已经编写了超过 10,000 行 C# 代码。还有一些事情,如果我们完全在应用程序中完成,则需要 3 次或更多次往返 DB 服务器,所以我们宁愿只进行 1 次往返,而 DB 服务器会做一点额外的处理
  • @earlz:请用其他事实更新您的问题。请不要评论您自己的问题。这是你的问题。请完成它,以便其他人也可以从中学习。
  • @earlz:与其使用存储过程来减少往返次数,不如获取更多行并在数据库外进行更多处理。您会发现它通常比存储过程快得多。存储过程不是一种美德——它们通常是维护的噩梦。为什么要这么努力?
  • 你有任何确凿的证据表明我不应该使用存储过程吗?这一切都无关紧要。我不是在问我是否应该使用存储过程。而且您不知道我们的应用程序是如何工作的,那么您如何判断存储过程是否对它不利?

标签: python postgresql stored-procedures plpgsql


【解决方案1】:
  1. 取决于您正在执行的操作。
  2. 好吧,将它与通用 Python 文档结合起来,这就是你所拥有的。
  3. 没有。再次,取决于你在做什么。如果您只打算运行一次查询,那么单独准备是没有意义的。
  4. 如果您使用持久连接,它可能会。但只要连接关闭,它们就会被清除。
  5. 不太可能。沙盒在 Python 中被破坏了,AFAIK 没有人真正有兴趣修复它。我听说有人说 python-on-parrot 可能是最可行的方法,一旦我们有了 pl/parrot(我们还没有)。

底线 - 如果您的存储过程要执行数据库工作,请使用 pl/pgsql。仅当您要做非数据库的事情时才使用 pl/python,例如与外部库通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2012-08-24
    • 2021-12-08
    相关资源
    最近更新 更多