首批通过分布式安全可靠测评,为关键业务系统打造
创建空间列
更新时间:2026-04-10 11:58:01
OceanBase 数据库支持使用 CREATE TABLE 或 ALTER TABLE 创建空间列。
使用 CREATE TABLE 语句创建具有空间列的二维或三维表,语法示例如下:
CREATE TABLE geom (g GEOMETRY);
使用 ALTER TABLE 语句在现有表中添加或删除空间列,语法示例如下:
ALTER TABLE geom ADD pt POINT;
ALTER TABLE geom DROP pt;
创建空间列的相关约束如下:
定义空间列的时候,可以显式指定 SRID,例如
p POINT SRID 0。如果列上没有定义 SRID,查询的时候优化器不会选择空间索引,但是插入/更新的时候,仍然会生成索引记录。空间列在指定
NOT NULL约束以及指定了 SRID 之后,可以在空间列上定义空间索引,也即只有定义了 SRID 的列才能使用空间索引,例如g GEOMETRY NOT NULL SRID 4326。在空间列上定义了 SRID 之后,插入其它 SRID 值会报错。
SRID 的相关约束如下:
空间列上显示指定了
SRID。列上所有对象的
SRID必须一样。
插入空间数据示例如下:
-- 插入二维数据
obclient> INSERT INTO geom VALUES(ST_GeomFromText('POINT (0 0)'));
-- 插入三维数据
obclient> INSERT INTO geom VALUES(ST_GeomFromText('POINT Z (0 0 0)'));
查询空间数据示例如下:
obclient> SELECT ST_Aswkt(g) FROM geom;
+-----------------+
| ST_Aswkt(g) |
+-----------------+
| POINT(0 0) |
| POINT Z (0 0 0) |
+-----------------+
2 rows in set
部分函数不支持三维数据,查询时会返回如下报错:
obclient> SELECT ST_X(g,1) FROM geom;
ERROR 3037 (22023): Invalid GIS data provided to function st_x.