PostgreSQL 与 PostGIS

PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产品开发项目之一, 有着非常广泛的用户。
PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。
可以说PostGIS是对象-关系型数据库系统PostgreSQL的一个扩展,具有管理空间数据库的能力。

postgis安装:

(1)将postgis-bundle-pg96-2.3.1x64.zip解压

解压postgis-bundle-pg96-2.3.1x64.zip到没有中文或者空格的目录。

(2)修改makepostgisdb_using_extensions.bat文件:set PGINSTALL=C:Program FilesPostgreSQL9.6(PostgreSQL的安装路径)

 修改完成后执行脚本文件(bat),开始安装 

OK,到这里为止。PostgreSQL数据库和PostGIS扩展就已经安装完成了。然而我们还是发现了一件事,既然我们的插件已经安装成功了,为何数据库还是不支持geometry 这样的类型。不要着急,并不是我们安装失败了,而且我们没有给这个数据库开启PostGIS扩展。执行如下命名就可以搞定了:
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- Enable PostGIS Advanced 3D 
-- and other geoprocessing algorithms
-- sfcgal not available with all distributions
CREATE EXTENSION postgis_sfcgal;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- rule based standardizer
CREATE EXTENSION address_standardizer;
-- example rule data set
CREATE EXTENSION address_standardizer_data_us;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
 
上面的就是PostGIS的扩展列表,当然我们也根据自己的需要只加载部分的扩展。
 
我们现在试着向创建一张内含地理信息几何类型列的表吧:
create table t_demo_info (
   id                   int4                 not null,
   name           int2                 not null default 0,
   type            int2                 not null default 0,
   begin_time           timestamp without time zone null,
   end_time             timestamp without time zone null,
   lng                  numeric              null,
   lat                  numeric              null,
   lnglat               geometry             null,
   constraint pk_t_demo_info primary key (id)
);
 
创建成功。
 
4、查看版本
查询PostGIS版本:select postgis_full_version();
查询PostgreSQL版本:select version();
查看PostgreSQL客户端版本:psql –version
查看PostgreSQL版本信息:show server_version;
查看PostgreSQL版本信息(包括小版本号):show server_version_num;
查看PostgreSQL版本信息(包括小版本号):select current_setting(‘server_version_num’);
在这里需要注意的是,select current_setting(‘server_version_num’);返回的是text,如果需要将它转换为Integer,则需要这样写:SELECT current_setting(‘server_version_num’)::integer;
原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/10611425.html