Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何从plpgsql函数运行bat文件_Postgresql_Batch File_Postgresql 9.1_Plpgsql - Fatal编程技术网

Postgresql 如何从plpgsql函数运行bat文件

Postgresql 如何从plpgsql函数运行bat文件,postgresql,batch-file,postgresql-9.1,plpgsql,Postgresql,Batch File,Postgresql 9.1,Plpgsql,是否有任何方法可以从plpgsql中编写的函数运行批处理文件?出于安全原因,没有直接的方法。 查看以在数据库外部触发可执行文件。出于安全原因,没有直接的方法。 查看以在数据库外部触发可执行文件。直接从PL/PgSQL是不可能的 您只能通过在不受信任的PL(如PL/Perlu或PL/Pythonu)中提供一个helper函数来实现这一点,该PL/Perlu或PL/Pythonu反过来运行批处理文件 在Python中,您可以使用如下内容: CREATE FUNCTION exec_system_cm

是否有任何方法可以从
plpgsql
中编写的函数运行批处理文件?

出于安全原因,没有直接的方法。

查看以在数据库外部触发可执行文件。

出于安全原因,没有直接的方法。

查看以在数据库外部触发可执行文件。

直接从PL/PgSQL是不可能的

您只能通过在不受信任的PL(如PL/Perlu或PL/Pythonu)中提供一个helper函数来实现这一点,该PL/Perlu或PL/Pythonu反过来运行批处理文件

在Python中,您可以使用如下内容:

CREATE FUNCTION exec_system_cmd (command text)
  RETURNS return-type
AS $$
  import os
  import sys
  os.system(command)
$$ LANGUAGE plpythonu;
或者您可以更复杂一点,使用
子流程
模块来传递参数数组,这样就不必担心转义
%
和命令字符串中的其他特殊字符

显然,
exec\u system\u cmd
只能由超级用户执行,如果可能的话,您应该编写一个更专门的函数,不让用户运行任何他们喜欢的命令


虽然这是可能的,但这并不是一个好主意。我同意Erwin的观点,最好有一个外部帮助程序,在需要时使用
LISTEN
NOTIFY
来运行命令。

直接从PL/PgSQL是不可能的

您只能通过在不受信任的PL(如PL/Perlu或PL/Pythonu)中提供一个helper函数来实现这一点,该PL/Perlu或PL/Pythonu反过来运行批处理文件

在Python中,您可以使用如下内容:

CREATE FUNCTION exec_system_cmd (command text)
  RETURNS return-type
AS $$
  import os
  import sys
  os.system(command)
$$ LANGUAGE plpythonu;
或者您可以更复杂一点,使用
子流程
模块来传递参数数组,这样就不必担心转义
%
和命令字符串中的其他特殊字符

显然,
exec\u system\u cmd
只能由超级用户执行,如果可能的话,您应该编写一个更专门的函数,不让用户运行任何他们喜欢的命令

虽然这是可能的,但这并不是一个好主意。我同意欧文的观点,最好有一个外部帮助程序,使用
LISTEN
NOTIFY
在需要时运行命令