C语言 在postgresql中执行系统命令

yhxst69z  于 2023-01-20  发布在  PostgreSQL
关注(0)|答案(2)|浏览(205)

我的要求是在触发器执行的时候执行一个系统命令比如(ls)或者C程序,有没有办法创建一个触发器函数来解决这个问题。

5vf7fwbs

5vf7fwbs1#

您可以编写触发器函数PythonPerlTcl,并且如果您使用"untrusted"版本的语言,则这些函数中的任何一个都可以用于执行任意shell命令。shell将在与Postgres服务器进程相同的用户(通常为“postgres”)下运行,因此您需要相应地设置权限。
例如,在运行CREATE EXTENSION plpythonu之后,您可以使用LANGUAGE plpythonu编写触发器函数,并通过调用os.system()等来运行命令。
注意修改系统的任何命令,因为这些更改与数据库事务无关(因此您需要找到自己的方法来处理并发写入、事务回滚等)。

6tqwzwtp

6tqwzwtp2#

下面是一个简单的例子,说明如何在Ubuntu上的PG15中实现这一点:

sudo apt-get install -y postgresql-plpython3-15

CREATE EXTENSION plpython3u

CREATE OR REPLACE FUNCTION reboot_server(version text) RETURNS text AS $BODY$
    import subprocess
    subprocess.call(f"/usr/lib/postgresql/{version}/bin/pg_ctl restart -D /var/lib/postgresql/{version}/main",shell=True)
$BODY$ LANGUAGE plpython3u;

select * from reboot_server('15')

在本例中,我将重新启动指定的postgres示例。

相关问题