postgresql - 如何从 PostgreSql 中的存储过程执行 python 脚本?

标签 postgresql

我想从 PostgreSql 中的存储过程执行 python 脚本

我想要这样的东西:

 CREATE TRIGGER executePython
  AFTER INSERT ON mytable
  FOR EACH ROW
  BEGIN
  SYSTEM('python MyApp');
  END;

谁能帮帮我,好吗?

最佳答案

你能安装扩展吗?如果是这样,您可以使用 the PL/Python extension

CREATE FUNCTION callMyApp()
RETURNS VOID
AS $$
import subprocess
subprocess.call(['/usr/bin/python', '/path/to/MyApp'])
$$ LANGUAGE plpythonu;

CREATE TRIGGER executePython 
AFTER INSERT ON messages 
FOR EACH ROW EXECUTE PROCEDURE callMyApp();

请注意,这将以 postgres 用户身份运行,因此可能存在权限问题。

还有一个名为 PL/SH 的扩展名,可能有用,但似乎不是官方软件包。

CREATE FUNCTION executePython()
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;

This blog post您可能也会感兴趣。

此外,这几乎是标题为 Run a shell script when a database record is written to postgres 的帖子的重复.

(注意:我还没有测试任何这段代码。)

关于postgresql - 如何从 PostgreSql 中的存储过程执行 python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34339547/

相关文章:

sql - postgresql - 排除任何带有空值的结果

node.js - NodeJS + PostgreSQL 集成测试

java - 在 PostgreSQL 上一起更新和删除

SQL: "Reverse"转置一个表

sql-server - 像 SQL Server 一样的 Postgres dllimport

ruby-on-rails - 如何使用 Postgres 在 Rails 中按天对记录进行分组

postgresql - 是否可以停止 AWS Postgres Aurora 全局数据库?

sql - 在同一表中使用父 ID 选择父名称

postgresql - 将rails应用程序部署到heroku时经常看到PG::InFailedSqlTransaction错误

sql - 如何将名称作为变量存储在同一脚本中的表中插入?