从 Java 应用程序问题调用新的 PostgreSQL 命令

标签 c postgresql

我在 PostgreSQL 中定义了一个新命令 my_command。该命令采用ANALYZE的路径,在analyze.c内部,我有一个函数可以在其my_command的情况下执行一些操作。该命令采用输入参数:表名、列名和输入字符串。

当我从命令行 psql 运行此命令时,它按预期工作。但是当我从 java 应用程序调用相同的命令时,存储输入参数的所有变量都是 NULL。

我在 gram.y 文件中打印了输入字符串的值,我在其中定义了 my_command
fprintf (stderr, "我在 gram.y %s\n 里面",n->inp_str); 并且输入的字符串被正确打印。

但是当我在 utility.c 的函数 standard_ProcessUtility() 中打印 stmt->inp_str 时,案例 T_VacuumStmt,我得到的值为 NULL。这是我从 analyze.c 可以追溯到的。

我不确定从应用程序运行命令会产生什么影响。

gram.y 内容要点:

<小时/>
MyStmt:
        my_keyword qualified_name name_list my_inp_str
            {
                VacuumStmt *n = makeNode(VacuumStmt);
                n->options = VACOPT_ANALYZE;
                n->freeze_min_age = -1;
                n->freeze_table_age = -1;
                n->relation = $2;
                n->va_cols = $3;
                n->inp_str = $4;
                fprintf (stderr, "I am inside gram.y %s\n",n->inp_str);

                $$ = (Node *)n;
            }
;

char *inp_str 添加到 parsenodes.h 中的 struct VacuumStmt

感谢任何帮助。谢谢!

最佳答案

我已将这个问题邮寄到 pgsql-hackers 邮件列表,我得到的回复是我必须添加代码以将 inp_str 复制到 _copyVacuumStmt()

完成此操作后,该命令也可以在 Java 应用程序中运行。我已经询问了为什么即使不添加上述代码它也可以从命令行工作的原因。一旦获得详细信息,我将更新详细信息。

关于从 Java 应用程序问题调用新的 PostgreSQL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24552057/

相关文章:

c - 是否必须将返回的结构从内核空间复制到用户空间?

c - libwebsockets libwebsocket_client_connect 函数参数

python - 在多个 Python worker 之间共享 Postgres 表中指定的工作

postgresql - 如何将每个学生的申请数量限制为 3 个?

performance - 帮助加速 PostgreSQL 查询

postgresql - 使用 spring boot 开发微服务

c - 隐藏命令行程序中的用户输入

c - 如何阅读格式化文本的部分内容?

c++ - 以安全的方式替换 memcpy

mysql - postgresql 中的 ids 数组与多行