【问题标题】:Calling external program from PostgreSQL trigger从 PostgreSQL 触发器调用外部程序
【发布时间】:2014-03-05 06:48:53
【问题描述】:

我想在触发 PostgreSQL 触发器时执行外部程序(例如 .net c# 控制台)。我怎样才能实现它?

【问题讨论】:

  • 为什么我的问题被否决了?有什么原因吗?
  • 当然,我一直在寻找解决方案。我仍然找不到更好更快的解决方案。任何替代解决方案都可以。

标签: postgresql notifications listener


【解决方案1】:

出于安全原因,Postgres 无法正常运行外部程序。

典型的解决方案是使用NOTIFY 并为其设置一个守护进程LISTEN。每种主要的脚本语言都有解决方案...

【讨论】:

【解决方案2】:

自 Postgres 9.3 起,就有了调用外部程序的解决方案。出于安全原因,它仅限于超级用户和恕我直言,用于导出数据,而不是执行“触发通知”:

COPY (SELECT 1) TO PROGRAM '/bin/touch /tmp/created_by_postgres'

如果您想实际将数据导出到调用的程序,您可以提供任何 SELECT 或表名来代替 SELECT 1。然后查询结果将通过其标准输入传递给调用的程序。

您可以在 Postgres 文档中找到该功能的文档: http://www.postgresql.org/docs/9.3/static/sql-copy.html

【讨论】:

  • 您好,您能否解释一下为什么您的论点中有两条路径/bin/touch/tmp/created_by_postgres?你认为这可以执行外部 python 或 shell 脚本吗?
  • 好吧,我知道PROGRAM实际上可以运行任何shell命令...你会不会碰巧知道执行COPY方法的postgres函数和执行的shell命令之间是否有握手由PROGRAM?这意味着 postgres 函数将等待 shell 命令完成,然后再进行下一个任务。
猜你喜欢
  • 2022-08-11
  • 2010-09-23
  • 2019-12-16
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2015-07-08
  • 2020-11-28
相关资源
最近更新 更多