2015-12-01 33 views
0

場景:如何在PostgreSQL中編譯和存儲python函數?

  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)。這種行爲可以被改變或以某種方式受到影響?

如果這些假設是錯誤的,也請糾正我並解釋。或者甚至指向我可以找到這個的文檔,我還沒有成功找到它。

回答

0

PG服務器在第一次編譯時在某處存儲了python函數(第1步)代碼和plpythonu代碼,其中?

pl/python函數的自身Python代碼(但不是任何模塊,庫等)存儲在數據庫的pg_proc表中。

編譯的Python字節碼在第一次運行給定的後端時,會存儲在內存中的syscache中。之後,如果磁盤上的文件發生更改,則不會進行更新。新的連接將看到新的代碼,舊的連接現有的代碼。

+0

謝謝。現在你已經說過了,這很有道理。習慣於使用經典函數(plpgsql),即時重新編譯的可視化,在同一連接中,我直觀地在我的測試中沒有想到任何不同的方法(嘗試對新連接進行更改)。 –

相關問題