有没有办法从plpgsql
中编写的函数运行批处理文件?
答案 0 :(得分:3)
直接来自PL / PgSQL是不可能的。
您只能通过在PL / Perlu或PL / Pythonu之类的不受信任的PL中提供辅助函数来执行此操作,PL / Peru或PL / Pythonu依次运行批处理文件。
在Python中,您可以使用以下内容:
CREATE FUNCTION exec_system_cmd (command text)
RETURNS return-type
AS $$
import os
import sys
os.system(command)
$$ LANGUAGE plpythonu;
或者你可能会更复杂并使用subprocess
模块来传递一组参数,因此你不必担心转义%
,{{1} }和命令字符串中的其他特殊字符。
显然>
只能由超级用户执行,如果可能的话,你应该编写一个更专业的函数,让用户不要运行他们喜欢的任何命令。
虽然可能,但这并不是一个好主意。我同意Erwin的意见,如果需要使用exec_system_cmd
和LISTEN
来运行命令,那么最好有一个外部帮助程序。
答案 1 :(得分:2)
出于安全原因,没有直接的方式
查看LISTEN
/ NOITIFY
以触发数据库外的可执行文件。