PL/Python:试图理解全局字典
PL/Python: trying to understand global dictionary
我正在使用 pl/python3u in postgres
。在那个环境中,我导入了 pandas
和 networkx
。我创建了一个简单的函数,可以根据表格中的信息构建图表,并且效果很好。我现在想创建其他函数来处理我创建的图表。
似乎解决了我想做的问题的文档是 here,但我不明白他们在说什么。他们命名了两个全局词典:SD
和 GD
。我的解释是,比方说,由 function_1 创建的我的图表被另一个函数 used/modified 必须在 GD
中。我不清楚 SD
和 GD
是否对 postgres pl/python 有特殊意义以及如何使用它们。有什么好 references/links 阅读以了解这些词典是什么以及如何使用它们?
注 1:我找到了 this and this。前者展示了如何使用 GD
但没有解释任何相关内容。后者正在谈论另一个数据库 (Tanzu Greenplum),但看起来它可能是相关的。
注 2:@FrankYellin 证实了我对如何 access/use GD 的初步印象。所以此时我的观点是:在postgres环境中有一个plpython环境,后者中的每个函数都有自己的执行环境。 SD 包含在函数执行环境中,而 GD 存在于 postgres (?) 环境中,所有函数都可以访问变量。如果我将一个变量插入到 GD 中,看起来我不必将它显式声明为全局变量。当会话结束时,所有词典都会消失。看起来像这样:
GD 只是一本字典。这意味着它是从键到值的映射。值可以是任何东西。如果您没有经常使用字典,那么您只希望您的键是字符串或整数。
所以一旦你生成了你的图表,你会写:
GD['my_graph'] = my_graph
在其他函数中你可以这样写:
my_graph = GD['my_graph']
访问保存的图形值。
我的图表在 postgres 社区 slack 中得到验证是正确的。所有过程语言扩展都有类似的东西,基本上是一个保存全局变量和 function-specific 变量的特性。
此外,plpython3u函数调用是对Python中PyEval_EvalCode
的调用。缺点是没有利用 Postgres 使用一个或多个并行工作进程的能力。
最后,函数的 return 数据,例如。 'class' 对象被限制为 detailed here 但我可以将 class 信息转换为字符串或使用 iterators/generators。目前还不清楚。
我正在使用 pl/python3u in postgres
。在那个环境中,我导入了 pandas
和 networkx
。我创建了一个简单的函数,可以根据表格中的信息构建图表,并且效果很好。我现在想创建其他函数来处理我创建的图表。
似乎解决了我想做的问题的文档是 here,但我不明白他们在说什么。他们命名了两个全局词典:SD
和 GD
。我的解释是,比方说,由 function_1 创建的我的图表被另一个函数 used/modified 必须在 GD
中。我不清楚 SD
和 GD
是否对 postgres pl/python 有特殊意义以及如何使用它们。有什么好 references/links 阅读以了解这些词典是什么以及如何使用它们?
注 1:我找到了 this and this。前者展示了如何使用 GD
但没有解释任何相关内容。后者正在谈论另一个数据库 (Tanzu Greenplum),但看起来它可能是相关的。
注 2:@FrankYellin 证实了我对如何 access/use GD 的初步印象。所以此时我的观点是:在postgres环境中有一个plpython环境,后者中的每个函数都有自己的执行环境。 SD 包含在函数执行环境中,而 GD 存在于 postgres (?) 环境中,所有函数都可以访问变量。如果我将一个变量插入到 GD 中,看起来我不必将它显式声明为全局变量。当会话结束时,所有词典都会消失。看起来像这样:
GD 只是一本字典。这意味着它是从键到值的映射。值可以是任何东西。如果您没有经常使用字典,那么您只希望您的键是字符串或整数。
所以一旦你生成了你的图表,你会写:
GD['my_graph'] = my_graph
在其他函数中你可以这样写:
my_graph = GD['my_graph']
访问保存的图形值。
我的图表在 postgres 社区 slack 中得到验证是正确的。所有过程语言扩展都有类似的东西,基本上是一个保存全局变量和 function-specific 变量的特性。
此外,plpython3u函数调用是对Python中PyEval_EvalCode
的调用。缺点是没有利用 Postgres 使用一个或多个并行工作进程的能力。
最后,函数的 return 数据,例如。 'class' 对象被限制为 detailed here 但我可以将 class 信息转换为字符串或使用 iterators/generators。目前还不清楚。