我查看了create_vlabel
函数的内部,注意到要获取graph_name
和label_name
,需要使用graph_name = PG_GETARG_NAME(0)
和label_name = PG_GETARG_NAME(1)
。由于这两个变量也作为参数传递,所以我想,如果我想在此函数中再添加一个参数,那么我需要使用PG_GETARG_NAME(2)
来获取这个参数,并在函数的逻辑中使用它。我的假设正确吗?或者我需要做更多的调整来做到这一点?
我查看了create_vlabel
函数的内部,注意到要获取graph_name
和label_name
,需要使用graph_name = PG_GETARG_NAME(0)
和label_name = PG_GETARG_NAME(1)
。由于这两个变量也作为参数传递,所以我想,如果我想在此函数中再添加一个参数,那么我需要使用PG_GETARG_NAME(2)
来获取这个参数,并在函数的逻辑中使用它。我的假设正确吗?或者我需要做更多的调整来做到这一点?
3条答案
按热度按时间u1ehiz5o1#
您是正确的,但是您还需要更改“age--1.2.0.sql”文件中的函数签名,更新参数:
请注意,所有参数都以“Datum”结构的形式出现,
PG_GETARG_NAME
会自动将其转换为“Name”结构。例如,如果需要参数int 32,则应使用PG_GETARG_INT32(index_of_the_argument)
表示字符串,使用PG_GETARG_CSTRING(n)
,依此类推。enyaitl32#
是的,你的假设是正确的。如果你想在PostgreSQL的
create_vlabel
函数中添加一个额外的参数,你可以使用PG_GETARG_NAME(2)
来获取第三个参数的值。请记住,你可能需要对函数的逻辑进行额外的修改来正确处理新参数。luaexgnf3#
Fahad Zaheer和Marco Souza给出的答案是正确的,但是你也可以创建一个Variadic函数,用它你可以有n个参数,但是一个缺点是你必须自己检查类型。你可以找到更多的信息here。你也可以检查许多Apache Age函数,例如agtype_to_int2。