【问题标题】:Call a Windows shell command from pl/pgsql从 pl/pgsql 调用 Windows shell 命令
【发布时间】:2015-02-14 15:40:33
【问题描述】:

psql 中,可以使用 '\!调用 windows shell [windows shell 命令]',但我找不到 pl/pgsql 的等效功能。

唯一的可能是编写和编译一个访问 windows shell 的 C 函数。

当然,这只对本地数据库安装有意义; pl/pgsql 代码在服务器而不是客户端上执行,但在这种情况下两者都在同一台电脑上运行。

我需要执行一个 Python 函数,但我宁愿不为这个 .py 脚本加载 postgres python 语言扩展。

【问题讨论】:

  • 我很困惑。 PL/pgSQL 只是一种语言,psql 是用于将用该语言编写的命令发送到数据库的实用程序。您可以将所有 PL/pgSQL 命令包装在 python 脚本中并执行(使用 pg 模块或其他一些 python postgres 模块)。
  • Petesh,我在 PL/pgSQL 中工作,并且在将 PLPythonu 链接到 PL/pgSQL 之后,确实可以将系统调用包装在 python 脚本中。这就是 Pavel Stehule 所建议的。很抱歉让您感到困惑。
  • 嗯,不,我的意思是! 语法是psql 工具的一个功能。像这样的大多数工具都有一个 bang 命令来拖放到 shell 确实在本地命令行上做一些事情并返回到你所在的位置。它与 pl/SQL 无关。您已声明希望该命令在客户端上运行。您还没有说应该在管道中的哪个位置运行系统级代码(并且“都在同一台电脑上运行”的语句似乎暗示您最好将 pl/SQL 调用包装在 python 中,而不是反过来。

标签: postgresql shell plpgsql


【解决方案1】:

你不能在 plpgsql 中做到这一点。这种语言是“安全”的语言——也就是说,没有人可以访问任何系统资源——IO、系统功能……

当您需要使用系统源时,您应该使用一些“不受信任”的语言,例如 PLPerlu 或 PLPythonu。这些语言不安全 - 对系统的访问不受限制。

【讨论】:

  • Pavel,这很有道理。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2010-09-05
相关资源
最近更新 更多