1

设想:

  1. 我在某个地方的磁盘上有一个 python 函数。
  2. 我在 pg 服务器中编译了一个 plpythonu 函数,它引用了磁盘上第 1 步中的那个 python 函数。
  3. 我更改了 python 函数中的某些内容(从步骤 1 开始)。
  4. 如果我编译 plpythonu 函数(从步骤 2 开始),从 pg 服务器调用时,步骤 3 中所做的更改不会生效。

此类函数的示例可以在我的另一个问题中看到: Python function hangs when called from within sql function

我的假设(这在我看来是什么):

  • PG 服务器在第一次编译时将 python 函数(步骤 1)代码和 plpythonu 代码存储在某个地方,在哪里?
  • 重新编译(步骤 4)plpythonu 函数时,它不会再次检查链接函数(步骤 1)。这种行为可以以某种方式改变或影响吗?

如果这些假设是错误的,还请纠正我并解释。或者甚至指向我可以找到它的文档,我还没有成功找到它。

4

1 回答 1

1

PG 服务器在第一次编译时将 python 函数(步骤 1)代码和 plpythonu 代码存储在某个地方,在哪里?

pl/python 函数自身(但不是任何模块、库等)的 Python 代码存储在pg_proc数据库的表中。

编译后的 Python 字节码在给定后端首次运行时存储在内存中的 syscache 中。如果磁盘上的文件发生更改,则此后不会更新。新连接将看到新代码,旧连接将看到现有代码。

于 2015-12-02T02:52:05.133 回答