# 模糊搜索pg exec"SELECT name, similarity(name, 'John') FROM users
ORDER BY similarity(name, 'John') DESC LIMIT 5;"# 创建三元组索引加速模糊搜索pg exec"CREATE INDEX users_name_trgm_idx ON users USING gin (name gin_trgm_ops);"# 去除重音pg exec"SELECT unaccent('Crème Brûlée');" -- 返回 'Creme Brulee'# 组合使用实现不区分重音的模糊搜索pg exec"SELECT name FROM users WHERE name % unaccent('Creme Brulee');"
pg extension install postgis --auto-restart
# 创建包含空间数据的表pg exec"CREATE TABLE places (id serial, name text, geom geometry(Point, 4326));"pg exec"INSERT INTO places (name, geom) VALUES
('San Francisco', ST_MakePoint(-122.4, 37.8)),
('London', ST_MakePoint(-0.1276, 51.5074));"# 查找 5km 范围内的地点pg exec"SELECT name FROM places
WHERE ST_DWithin(geom, ST_MakePoint(-122.4, 37.8)::geography, 5000);"# 计算两个城市间的距离(米)pg exec"SELECT ST_Distance(
ST_MakePoint(-74.006, 40.7128)::geography,
ST_MakePoint(-0.1276, 51.5074)::geography);"
AI 与向量搜索
扩展
安装
描述
pgvector
pg extension install vector
存储和搜索嵌入向量。AI 应用标准。
pg extension install vector --auto-restart
# 创建带向量列的表pg exec"CREATE TABLE items (id serial PRIMARY KEY, embedding vector(3));"pg exec"INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'), ('[7,8,9]');"# 查找最近邻(欧几里得距离)pg exec"SELECT id FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;"# 创建 IVFFlat 索引加速近似搜索pg exec"CREATE INDEX items_embedding_idx ON items USING ivfflat (embedding vector_l2_ops);"
时序数据
扩展
安装
描述
timescaledb
pg extension install timescaledb
优化的时序存储,支持超级表。
pg extension install timescaledb --auto-restart
# 创建超级表pg exec"CREATE TABLE sensor (time timestamptz NOT NULL, value float);
SELECT create_hypertable('sensor', 'time');"# 时间桶聚合pg exec"SELECT time_bucket('1 hour', time) AS bucket, avg(value)
FROM sensor GROUP BY bucket ORDER BY bucket;"
# 创建外部服务器pg exec"CREATE SERVER remote FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '10.0.0.2', port '5432', dbname 'analytics');"# 创建用户映射pg exec"CREATE USER MAPPING FOR current_user SERVER remote
OPTIONS (user 'reader', password 'secret');"# 导入远程 schema 作为外部表pg exec"IMPORT FOREIGN SCHEMA public FROM SERVER remote INTO remote_schema;"# 像查询本地表一样查询远程数据pg exec"SELECT * FROM remote_schema.events LIMIT 10;"
pg extension install pg_duckdb --auto-restart
# 在 DuckDB 中执行 SQL —— duckdb.query 是表函数(必须在 FROM 子句中使用)pg exec"SELECT * FROM duckdb.query(\$\$ SELECT 42 AS answer, 'hello' AS msg \$\$);"# 将表导出为 Parquet 文件pg exec"COPY my_table TO '/tmp/my_table.parquet' (FORMAT 'parquet');"# 直接读取 Parquet/CSV 文件pg exec"SELECT * FROM duckdb.query(\$\$
SELECT * FROM read_parquet('/tmp/my_table.parquet') WHERE id > 2 \$\$);"# 将整个查询下推到 DuckDB 执行(OLAP 加速)pg exec"SET duckdb.force_execution = true;
SELECT category, sum(amount) FROM sales GROUP BY category;"# 纯 DuckDB SQL(完全绕过 PostgreSQL 规划器)pg exec"SELECT * FROM duckdb.raw_query(\$\$ SELECT range AS n FROM range(1, 6) \$\$);"# --- 从 S3 / MinIO 读取文件(无需复制文件) ---# 先创建 S3 secret(use_ssl 是文本类型:'true'/'false')pg exec"SELECT duckdb.create_simple_secret('S3', '<access_key>', '<secret_key>',
'', 'us-east-1', 'path', '', 'minio.example.com:9000',
's3://bucket', '', 'false');"# 直接查询 bucket 中的 CSVpg exec"SELECT * FROM duckdb.query(\$\$
SELECT category, count(*) AS cnt, sum(sales) AS total_sales
FROM read_csv('s3://bucket/products.csv', auto_detect=true)
GROUP BY category ORDER BY total_sales DESC \$\$);"