在 PostgreSQL 中使用码农很忙 IP 地址数据库
在下載到碼農(nóng)很忙 IP 地址數(shù)據(jù)庫后,我們可以將其存儲(chǔ)在 PostgreSQL 數(shù)據(jù)庫中,并在需要查詢某個(gè) IP 對(duì)應(yīng)的位置數(shù)據(jù)時(shí),通過 SQL 語句獲取正確的結(jié)果。這是一種很便捷的使用方式,并且在增加了恰當(dāng)?shù)乃饕?#xff0c;可以取得不錯(cuò)的搜索效果。
PostgreSQL 數(shù)據(jù)庫內(nèi)置了?inet?和?range?兩個(gè)數(shù)據(jù)類型,用來表示一個(gè)網(wǎng)絡(luò)地址和數(shù)值范圍。為了達(dá)到更高的查詢速度,我們可以自定義一個(gè)名為?inet_rang?的數(shù)據(jù)類型,用于表示一個(gè)網(wǎng)絡(luò)地址的范圍:
CREATE TYPE inet_range AS RANGE (subtype=inet);之后,需要在 PostgreSQL 中新建數(shù)據(jù)表:t_ip_data?,并為?ip_rang?搜索列增加?GiST?索引:
DROP TABLE IF EXISTS "public"."t_ip_data"; CREATE TABLE "public"."t_ip_data" ("id" serial4,"ip_begin" inet NOT NULL,"ip_end" inet NOT NULL,"ip_range" "public"."inet_range","cc" varchar(255) COLLATE "pg_catalog"."default","continent" varchar(255) COLLATE "pg_catalog"."default","flag" varchar(255) COLLATE "pg_catalog"."default","country" varchar(255) COLLATE "pg_catalog"."default","province" varchar(255) COLLATE "pg_catalog"."default","city" varchar(255) COLLATE "pg_catalog"."default","tag" varchar(255) COLLATE "pg_catalog"."default","isp" varchar(255) COLLATE "pg_catalog"."default"); CREATE INDEX "t_ip_data_IPRange_idx" ON "public"."t_ip_data" USING gist ("ip_range" "pg_catalog"."range_ops"); ALTER TABLE "public"."t_ip_data" ADD CONSTRAINT "t_ip_data_pkey" PRIMARY KEY ("id");之后,使用 Navicat 等工具,將碼農(nóng)很忙 IP 地址數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)表 t_ip_data 中,注意字段對(duì)應(yīng):
如果不是第一次導(dǎo)入數(shù)據(jù),注意將【導(dǎo)入模式】設(shè)置為【復(fù)制】:
數(shù)據(jù)導(dǎo)入成功后,需要使用以下 SQL 語句對(duì) ip_range 進(jìn)行修正:
UPDATE t_ip_data SET ip_range = ('[' ||ip_begin || ',' || ip_end || ']') :: inet_range之后,就可以使用以下 SQL 語句進(jìn)行數(shù)據(jù)查詢:
SELECT * FROM t_ip_data WHERE ip_range @> '要查詢的 IPv4 地址' :: inet示例查詢?nèi)缦?#xff1a;
總結(jié)
以上是生活随笔為你收集整理的在 PostgreSQL 中使用码农很忙 IP 地址数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net Core HttpClient
- 下一篇: 常哥带你认识NoSQL和Redis的强大