使用 PostGIS 扩展 - Amazon Relational Database Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 PostGIS 扩展

PostGIS 是一个 PostgreSQL 扩展,用于存储和管理空间信息。如果您不熟悉 PostGIS,请参阅 PostGIS.net

您需要执行一些设置才能使用 PostGIS 扩展。以下列表显示需要执行的操作。本节稍后将详细介绍每个步骤。

步骤 1:使用用于创建数据库实例的用户名连接到数据库实例

首先,使用用于创建数据库实例的用户名连接到数据库实例。将自动为该名称分配 rds_superuser 角色。您需要执行剩余步骤所需的 rds_superuser 角色。

以下示例使用 SELECT 向您展示当前用户。在这种情况下,当前用户应该是您在创建数据库实例时选择的用户名。

SELECT CURRENT_USER; current_user ------------- myawsuser (1 row)

步骤 2:加载 PostGIS 扩展

使用 CREATE EXTENSION 语句加载 PostGIS 扩展。还必须加载 扩展。然后就可以使用 \dn 命令列出 PostGIS 架构的所有者。

CREATE EXTENSION postgis; CREATE EXTENSION fuzzystrmatch; CREATE EXTENSION postgis_tiger_geocoder; CREATE EXTENSION postgis_topology; \dn List of schemas Name | Owner --------------+----------- public | myawsuser tiger | rdsadmin tiger_data | rdsadmin topology | rdsadmin (4 rows)

步骤 3:将扩展的所有权移交给 rds_superuser 角色

使用 ALTER SCHEMA 语句将架构的所有权移交给 rds_superuser 角色。

ALTER SCHEMA tiger OWNER TO rds_superuser; ALTER SCHEMA tiger_data OWNER TO rds_superuser; ALTER SCHEMA topology OWNER TO rds_superuser; \dn List of schemas Name | Owner --------------+--------------- public | myawsuser tiger | rds_superuser tiger_data | rds_superuser topology | rds_superuser (4 rows)

步骤 4:将对象的所有权移交给 rds_superuser 角色

使用以下函数将 PostGIS 对象的所有权移交给 rds_superuser 角色。从 psql 提示符处运行以下语句以创建此函数。

CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$;

接下来,运行此查询以运行 exec 函数,该函数进而将运行语句并更改权限。

SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO rds_superuser;') FROM ( SELECT nspname, relname FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) WHERE nspname in ('tiger','topology') AND relkind IN ('r','S','v') ORDER BY relkind = 'S') s;

步骤 5:测试扩展

使用以下命令将 tiger 添加到搜索路径中。

SET search_path=public,tiger;

使用以下 SELECT 语句测试 tiger

SELECT na.address, na.streetname, na.streettypeabbrev, na.zip FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na; address | streetname | streettypeabbrev | zip ---------+------------+------------------+------- 1 | Devonshire | Pl | 02109 (1 row)

使用以下 SELECT 语句测试 topology

SELECT topology.createtopology('my_new_topo',26986,0.5); createtopology ---------------- 1 (1 row)

PostGIS 扩展版本

下表列出了 RDS for PostgreSQL 版本随附的 PostGIS 版本。

PostgreSQL 版本 PostGIS 版本
13.2、13.1 3.0.2
12.6 3.0.2
12.5、12.4、12.3、12.2 3.0.0
11.11、11.10、11.9、11.8、11.7、11.6、11.5 2.5.2
11.4、11.2、11.1 2.5.1
10.16、10.15、10.14、10.13、10.12、10.11、10.10 2.5.2
10.9、10.7、10.6、10.5、10.4 2.4.4
10.3、10.1 2.4.2
9.6.21、9.6.20、9.6.19、9.6.18、9.6.17、9.6.16、9.6.15 2.5.2
9.6.14、9.6.12、9.6.11、9.6.10、9.6.9 2.3.7
9.6.8、9.6.6 2.3.4
9.6.5、9.6.3、9.6.2 2.3.2
9.6.1 2.3.0
9.5.25、9.5.24、9.5.23、9.5.22、9.5.21、9.5.20、9.5.19 2.5.2
9.5.18、9.5.16、9.5.15、9.5.14、9.5.13、9.5.12、9.5.10、9.5.9、9.5.7、9.5.6 2.2.5
9.5.4、9.5.2 2.2.2
注意

PostgreSQL 10.5 在 PostGIS 组件中添加了 libprotobuf 扩展 1.3.0 版支持。