c函数 postgres_PostgreSql扩展Sql-动态加载共享库(C函数)

本文介绍了如何在PostgreSQL中创建C语言和PL/pgSQL实现的用户自定义函数。通过pg_language和pg_proc表管理函数语言和定义,并展示了C函数的编译和动态加载过程,以及使用PG_MODULE_MAGIC宏确保兼容性。
摘要由CSDN通过智能技术生成

基于 psql (PostgreSQL) 10.4

pg_language表定义了函数实现所使用的语言。主要支持了C语言和SQL语句。一些可选的语言包括pl/pgsql、tcl和perl。

ligang=# select lanname, lanispl, lanpltrusted, lanplcallfoid, laninline, lanvalidator from pg_language;

lanname | lanispl | lanpltrusted | lanplcallfoid | laninline | lanvalidator

----------+---------+--------------+---------------+-----------+--------------

internal | f | f | 0 | 0 | 2246

c | f | f | 0 | 0 | 2247

sql | f | t | 0 | 0 | 2248

plpgsql | t | t | 13198 | 13199 | 13200

pg_proc表对函数进行了定义。每一个函数在该表中都对应一个元组,包含函数名。输入参数类型,返回类型以及对函数的定义(可能是文本,可能是一段编译型语句,也可能是对可执行代码的引用)。编译过的函数可以静态地链接到服务器上,或者在存储在共享库内,当第一次使用该库时动态的载入。

ligang=# select proname,prolang, prorettype,proargtypes, prosrc,probin from pg_proc where proname like '%square%';

proname | prolang | prorettype | proargtypes | prosrc | probin

---------+---------+------------+-------------+----------------------------+--------------------

square | 13201 | 23 | 23 | begin return $1 * $1; end; |

squares | 13 | 23 | 23 | squares_return_int | $libdir/squares.so

查看其数据类型

ligang=# select oid , typname from pg_type where oid = 23;

oid | typname

-----+---------

23 | int4

(1 row)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值