PostgreSQL 支持多种数据类型,其中包括向量类型,可以用来存储和处理几何对象,如点(points)、线(lines)、线段(line segments)、盒子(boxes)、圆(circles)、路径(paths)、多边形(polygons)等。此外,PostgreSQL 还支持数组类型,可以用来存储一维或多维数组。
向量数据类型示例
1. 几何类型
PostgreSQL 提供了多种几何类型,可以用来表示二维空间中的各种几何对象。以下是一些示例:
创建表
CREATE TABLE geom_objects (
id SERIAL PRIMARY KEY,
point POINT,
line LINESTRING,
polygon POLYGON
);
插入数据
INSERT INTO geom_objects (point, line, polygon)
VALUES
('POINT(10 20)', 'LINESTRING(10 20, 30 40)', 'POLYGON((10 20, 20 30, 30 20, 10 20))');
INSERT INTO geom_objects (point, line, polygon)
VALUES
('POINT(30 40)', 'LINESTRING(30 40, 50 60)', 'POLYGON((30 40, 40 50, 50 40, 30 40))');
查询数据
SELECT * FROM geom_objects;
几何函数
PostgreSQL 提供了许多几何函数来处理这些几何对象,例如:
-
ST_Distance
:计算两点之间的距离。 -
ST_Buffer
:创建一个围绕几何对象的缓冲区。 -
ST_Contains
:检查一个几何对象是否包含另一个几何对象。
示例:
SELECT ST_Distance(ST_GeomFromText('POINT(10 20)'), ST_GeomFromText('POINT(30 40)')) AS distance;
2. 数组类型
PostgreSQL 中的数组可以用来存储一系列相同类型的数据。数组类型可以用方括号表示,例如 int[]
表示整数数组。
创建表
CREATE TABLE numeric_data (
id SERIAL PRIMARY KEY,
int_array INT[],
float_array FLOAT[]
);
插入数据
INSERT INTO numeric_data (int_array, float_array)
VALUES
(ARRAY[1, 2, 3], ARRAY[1.1, 2.2, 3.3]),
(ARRAY[4, 5, 6], ARRAY[4.4, 5.5, 6.6]);
查询数据
SELECT * FROM numeric_data;
数组操作
PostgreSQL 提供了多种数组操作函数,例如:
-
array_length
:获取数组的长度。 -
array_append
:向数组追加元素。 -
array_cat
:连接两个数组。
示例:
SELECT array_length(int_array, 1) FROM numeric_data;
示例:使用向量数据进行地理分析
假设我们要在一个表中存储城市的地理位置,并计算两个城市之间的距离:
创建表
CREATE TABLE cities (
id SERIAL PRIMARY KEY,
name TEXT,
location GEOMETRY(Point, 4326) -- WGS 84 坐标系
);
插入数据
INSERT INTO cities (name, location)
VALUES
('New York', ST_GeomFromText('POINT(-74.0060152 40.7127281)', 4326)),
('Los Angeles', ST_GeomFromText('POINT(-118.243683 34.052234)', 4326));
计算距离
SELECT ST_Distance(cities.location, target.location) AS distance
FROM cities
JOIN cities AS target ON cities.id < target.id
WHERE cities.name = 'New York' AND target.name = 'Los Angeles';