0
点赞
收藏
分享

微信扫一扫

PostgreSQL向量数据类型SQL示例


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';


举报

相关推荐

0 条评论