从Java Application问题调用新的PostgreSQL命令

时间:2014-07-03 11:06:36

标签: c postgresql

我在PostgreSQL中定义了一个新命令my_command。此命令采用ANALYZEanalyze.c内部的路径,如果my_command,我有一个函数可以执行一些操作。此命令采用输入参数:表名,列名和输入字符串。

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

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

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

我不确定如何从应用程序运行命令可以起作用。

gram.y内容要点:


analyze.c

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

中的struct VacuumStmt

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我已将此问题邮寄到pgsql-hackers邮件列表,我得到了一个回复,我必须添加代码才能将inp_str复制到_copyVacuumStmt()

完成此操作后,该命令也可以从Java应用程序中运行。即使没有添加上面的代码,我已经从命令行询问了它的工作原因。我会在收到详细信息后更新详细信息。