PostgreSQL 新增自定义内建函数
PG新增自定义函数
举例。添加完自定义系统函数之后需要initdb才生效。
1. 添加proc脚本
vim src/include/catalog/pg_proc.dat
新增UDF set_new_transaction_id
#function to set new transaction ID
{ oid => '29490', descr => 'set current transaction ID',
proname => 'set_new_transaction_id', provolatile => 's', proparallel => 'u',
prorettype => 'int8', proargtypes => 'int8', prosrc => 'set_new_transaction_id' },
需要注意的是oid中的数字务必是有效数字,执行下面命令,从中选择一个合适的oid。
./src/include/catalog/unused_oids
2.添加函数定义
vim src/backend/utils/adt/txid.c
只需要新增函数定义,与citus的UDF区别在citus需要函数声明,pg的函数不需要。
Datum
set_new_transaction_id(PG_FUNCTION_ARGS)
{
txid val = PG_GETARG_INT64(0);
SetNewTransactionId(val);
PG_RETURN_INT64(val);
}