ArcSDE For PostgreSQL中的st_geometry.so...
2015-12-24 11:54
996 查看
从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动态库。可以通过以下测试方法验证。
使用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查看其所加载的动态库,如下图
。
该进程并没有加载st_geometry.so文件。
从输出结果中可以看到建立的本地连接端口号是45058,与上面查询结果一致。
我们执行sde.st_astext()函数后,继续查看该进行
可以看到执行完st_astext函数后,5402进程已经加载上了st_geometry.so(绿色部分),同时还访问了红色部分的文件(后台表所在的文件)。
从上面测试结果可以看出来,删除之后无法调用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动态库。可以通过以下测试方法验证。
使用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查看其所加载的动态库,如下图
。
该进程并没有加载st_geometry.so文件。
从输出结果中可以看到建立的本地连接端口号是45058,与上面查询结果一致。
我们执行sde.st_astext()函数后,继续查看该进行
可以看到执行完st_astext函数后,5402进程已经加载上了st_geometry.so(绿色部分),同时还访问了红色部分的文件(后台表所在的文件)。
从上面测试结果可以看出来,删除之后无法调用Postgresql的函数了,就各种不正常了。
相关文章推荐
- MySQL数据库大小写敏感问题
- MySQL子查询
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
- redis初级入门,整合spring应用
- Mysql随机插入数字、日期、时间戳
- 数据库断电后DB状态为可疑解决方法(事例数据库为DataValidatation)
- Mybatis3源码分析(17)-Sql解析执行-缓存的实现
- Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号
- 重启mysql的命令
- PostgreSQL数据库中的数据类型转换
- ORACLE字符集基础知识(NLS)
- 关于hsql查询话语
- 再论ORACLE的全球化支持(GLOBALIZATION)
- redis3.0.5集群部署安装详细步骤
- mysql case when
- 写MySQL存储过程实现动态执行SQL
- MySql日期函数(二)
- oracle之乘法口诀
- Duplicate复制数据库并创建物理StandBy(spfile版本)
- mysql升级5.7失败,报错[Err] 1146 - Table 'performance_schema.session_status' doesn't exist