PostgreSQL中網路地址型別
阿新 • • 發佈:2019-01-29
在其他資料庫中,資料型別varchar或bigint可用於儲存IP地址。在PostgreSQL中,我們建議使用一個PG資料庫內建型別來儲存網路地址。
inet:這個資料型別可以用來儲存一個IPv4或IPv6地址和它們的子網。資料插入數
據庫的格式是Address/y,其中y是子網掩碼的位數。cidr:這個資料型別也可以用來儲存網路和網路地址。一旦我們指定cidr資料型別的子網掩碼,如果設定的位數超出了掩碼,PG就會丟擲一個從錯誤。
- macaddr:儲存不同格式的MAC地址。
下面進行測試
mydb=# create table nettb(id serial,intclmn inet,cidclmn cidr);
CREATE TABLE
mydb=# insert into nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.64.2/32');
INSERT 0 1
mydb=# insert into nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.64.2/24');
ERROR: 22P02: invalid cidr value: "192.168.64.2/24"
LINE 1: ...nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.6...
^
DETAIL: Value has bits set to right of mask.
mydb=# insert into nettb (intclmn,cidclmn) values ('192.168.64.2/32','192.168.64.0/24');
INSERT 0 1
mydb=# select * from nettb;
id | intclmn | cidclmn
----+--------------+-----------------
1 | 192.168.64.2 | 192.168.64.2/32
2 | 192.168.64.2 | 192.168.64.0/24
(2 rows)
插入幾條測試資料後:
mydb=# select id,intclmn from nettb;
id | intclmn
----+--------------
1 | 192.168.64.2
2 | 192.168.64.2
3 | 192.168.64.5
4 | 192.168.64.7
5 | 192.168.64.6
6 | 192.168.64.3
7 | 192.168.10.3
(7 rows)
mydb=# select id,intclmn from nettb where intclmn <<= inet'192.168.64.5/32';
id | intclmn
----+--------------
3 | 192.168.64.5
(1 row)
mydb=# select id,intclmn from nettb where intclmn <<= inet'192.168.64.5/24';
id | intclmn
----+--------------
1 | 192.168.64.2
2 | 192.168.64.2
3 | 192.168.64.5
4 | 192.168.64.7
5 | 192.168.64.6
6 | 192.168.64.3
(6 rows)
By 天蠍座