ArcSDE For PostgreSQL中的st_geometry.so...

1
分享 2015-12-18
从ArcGIS9.3开始,ArcSDE开始支持PostgreSQL(支持所有的模型)。其安装步骤总结为:
  1. 将ESRI所提供的st_geometry.so(dll)拷贝到PostgreSQL相应的某个目录下 windows:拷贝到PostgreSQL的lib的目录中。 linux:拷贝到PKGLIBDIR变量所指向的目录中(执行pg_config命令获取)
  2. 执行SDE的post操作

这个动态库是不是只有在post过程中会使用,post完后就不使用了可以删除掉吗,答案当然是否了,为什么? st_geometry.so(dll)存储着已经封装好的公用函数,在PostgreSQL的函数中被调用,在windows下可以通过depends工具查看,如下图:

linux可以通过nm命令查看其内部的函数,如下图。

以常用的ST_AsText函数为例子,在PostgreSQL的st_astext(st_geometry)被调用,定义如下:
CREATE OR REPLACE FUNCTION st_astext(st_geometry) 
RETURNS cstring AS
*’st_geometry’, ‘ST_AsText’
LANGUAGE c* IMMUTABLE STRICT
COST 1;
ALTER FUNCTION st_astext(st_geometry)
OWNER TO sde;
GRANT EXECUTE ON FUNCTION st_astext(st_geometry) TO sde;
GRANT EXECUTE ON FUNCTION st_astext(st_geometry) TO public;

调用原理: PostgreSQL采用的是动态加载动态库的方法进行动态库加载,只有前端调用使用到了st_geometry动态库中的函数,postgres进程才会加载st_geometry动态库。可以通过以下测试方法验证。
  1. 使用psql连接到数据库上 查找PostgreSQL所对应的pid,
    sde=# select pid,client_addr,client_port,application_name from pg_stat_activity; pid | client_addr | client_port | application_name ——+—————–+————-+————————- 4283 | 192.168.100.138 | 26625 | pgAdmin III -  4284 | 192.168.100.138 | 26628 | pgAdmin III -  5402 | 192.168.100.231 | 45058 | psql.bin


5402进程代表postgresql的后台进程,使用lsof查看其所加载的动态库,如下图
从输出结果中可以看到建立的本地连接端口号是45058,与上面查询结果一致。
我们执行sde.st_astext()函数后,继续查看该进行

可以看到执行完st_astext函数后,5402进程已经加载上了st_geometry.so(绿色部分),同时还访问了红色部分的文件(后台表所在的文件)。
从上面测试结果可以看出来,删除之后无法调用Postgresql的函数了,就各种不正常了。


文章来源:http://blog.csdn.net/liufeng1980423/article/details/50393536

1 个评论

写的很实用,清晰。

要回复文章请先登录注册