6 Mart 2013 Çarşamba

PostgreSQL'de IP kayıtları için inet veri tipi

Eğer PostgreSQL kullanıyorsanız ve yazılımınızda çok fazla IP operasyonları varsa PostgreSQL'in sağladığı inet veya cidr veri tipini kullanmanızı şiddetle tavsiye ederim.

Bu sayede:

  • IP/ağ doğrulaması yapmak için ek bir kod yazmanıza gerek yok.
  • Bir IP adresinin veritabanındaki kayıtlı bir ağ bloguna ait olup olmadığını veritabanı seviyesinde kontrol edebilirsiniz.
  • IPv4, IPv6 tipleri için tek bir kayıt türü tutabilirsiniz.

Örnek:

 db=# CREATE TABLE testip (ip inet );
 db=# INSERT INTO testip VALUES('10.0.0.0/24');
 db=# INSERT INTO testip VALUES('10.0.1.0/24');
 db=# INSERT INTO testip VALUES('10.0.0.5');

 db=# INSERT INTO testip VALUES('10.0.0.555');  #Bozuk IP
ERROR:  invalid input syntax for type inet: "10.0.0.555"
LINE 1: INSERT INTO testip VALUES('10.0.0.555');
 db=# INSERT INTO testip VALUES('10.0.0.25/33');
#Bozuk Netmask
ERROR:  invalid input syntax for type inet: "10.0.0.25/33"
LINE 1: INSERT INTO testip VALUES('10.0.0.25/33');


 db=# SELECT * from testip where ip >> '10.0.0.5';
     ip     
-------------
 10.0.0.0/24
(1 row)

db=# SELECT * from testip where ip >>= '10.0.0.5';

     ip     
-------------
 10.0.0.0/24
 10.0.0.5
(2 rows)



 cidr ve inet arasındaki fark: inet, ağ maskesinin sağındaki sıfır olmayan bitleri kabul ediyor.

"The essential difference between inet and cidr data types is that inet accepts values with nonzero bits to the right of the netmask, whereas cidr does not."

Kaynaklar:

http://www.postgresql.org/docs/9.2/static/datatype-net-types.html
http://www.postgresql.org/docs/9.2/static/functions-net.html


 

Hiç yorum yok:

Yorum Gönder