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 Files\PostgreSQL\9.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的扩展列表,当然我们也根据自己的需要只加载部分的扩展。
windows CMD 下使用
psql.exe -U postgres -d postgres -c "CREATE EXTENSION 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;