【发布时间】:2014-03-20 03:07:59
【问题描述】:
有没有办法从plpgsql 编写的函数中运行批处理文件?
【问题讨论】:
标签: postgresql batch-file postgresql-9.1 plpgsql
有没有办法从plpgsql 编写的函数中运行批处理文件?
【问题讨论】:
标签: postgresql batch-file postgresql-9.1 plpgsql
直接从 PL/PgSQL 是不可能的。
您只能通过在 PL/Perlu 或 PL/Pythonu 等不受信任的 PL 中提供辅助函数来执行此操作,然后依次运行批处理文件。
在 Python 中你会使用类似的东西:
CREATE FUNCTION exec_system_cmd (command text)
RETURNS return-type
AS $$
import os
import sys
os.system(command)
$$ LANGUAGE plpythonu;
或者你可以更复杂一点,使用subprocess模块来传递参数数组,这样你就不必担心在命令中转义%、>和其他特殊字符-字符串。
显然exec_system_cmd 应该只能由超级用户执行,如果可能,您应该编写一个更专业的函数,不允许用户运行他们喜欢的任何命令。
虽然这是可能,但这并不是一个好主意。我同意 Erwin 的观点,最好有一个外部帮助程序使用 LISTEN 和 NOTIFY 在需要时运行命令。
【讨论】:
出于安全原因,没有直接的方式。
查看LISTEN / NOITIFY 以触发数据库外的可执行文件。
【讨论】: