在PostgreSQL中执行C函数失败,该函数使用系统调用来运行Python脚本

时间:2017-10-14 01:48:10

标签: python c postgresql system-calls

我有以下内容:

/* execute_py.c */
#include <stdio.h>
#include <stdlib.h>
#include "postgres.h"
#include "fmgr.h"

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

int
call_py()
{
        printf("Executing your Python script...");
        return system("python36 absolute/path/to/example.py");
}

# example.py
with open("absolute/path/to/test.txt", "w") as f:
    f.write("hello world")

我将c脚本编译成execute_py.oexecute_py.so,然后在PostgreSQL服务器中创建了一个函数:

CREATE OR REPLACE FUNCTION call_py() RETURNS integer
     AS 'absolute/path/to/execute_py', 'call_py'
     LANGUAGE C STRICT;

并尝试运行这样的函数:

SELECT call_py();

该函数返回0.但是当我检查文件夹时,没有生成test.txt

我是C的新手并不确定发生了什么。寻求帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

抱歉,我很蠢,忘了向example.py添加执行权限。