加入一个范围的最佳方式?

Pat*_*len 2 sql postgresql range-types amazon-redshift

我认为这可能是一个常见的问题,可能无法解决每个工具.现在我们正在尝试使用amazons Redshift.我们现在唯一的问题是我们正在尝试查找IP地址的邮政编码.我们将IP连接到城市的表是IP转换为整数的范围.

例:

Start IP | End IP  | City

| 123123 | 123129 | Rancho Cucamonga|
Run Code Online (Sandbox Code Playgroud)

我在intip> = startip和intip <endip上尝试了明显的内连接.

有谁知道这样做的好方法?

Erw*_*ter 5

从PostgreSQL 9.2开始,您可以使用其中一种新的范围类型,int4range或者int8range.

CREATE TABLE city (
  city_id serial PRIMARY KEY 
 ,ip_range int4range
 ,city text
 ,zip  text
);
Run Code Online (Sandbox Code Playgroud)

然后您的查询可能只是:

SELECT c.zip
FROM   city_ip 
WHERE  $intip <@ i.ip_range;
Run Code Online (Sandbox Code Playgroud)

<@.. "元素包含在"

要使大表快速使用GiST索引:

CREATE INDEX city_ip_range_idx ON city USING gist (ip_range);
Run Code Online (Sandbox Code Playgroud)

但我怀疑亚马逊Redshift是最新的.我们最近有其他人有问题:
在redshift中使用sql函数generate_series()

  • Redshift实际上不是PostgreSQL,它是ParAccel,Pg 8.1的一个分支,具有各种列存储功能等. (2认同)