2013-03-13 5 views
7

Loại dữ liệu chính xác cho địa chỉ IPv4 trong PostgreSQL là gì?Loại dữ liệu trường PostgreSQL cho địa chỉ IPv4

Tôi nghe nói về inet, nhưng chưa bao giờ sử dụng.

Tôi cần thực hiện SELECT truy vấn như SELECT ... WHERE ip = '99.88.99.88' và nó sẽ hỗ trợ đầu ra định dạng có thể đọc được của con người (bởi con người có thể đọc được tôi có nghĩa là '99 .88.99.88 ').

Thật tuyệt khi có khả năng SELECT địa chỉ IP của mạng con đó.

Cảm ơn mọi đề xuất trước!

Trả lời

15

Việc xây dựng trong cidrinet loại sẽ làm những gì bạn muốn và cung cấp nhà khai thác phù hợp:

regress=> SELECT '192.168.1.19'::inet << '192.168.1.0/24'::cidr; 
?column? 
---------- 
t 
(1 row) 

Xem tài liệu PostgreSQL trên network datatype operators and functions và trên network datatypes.

Hỗ trợ chỉ mục có giới hạn được cung cấp cho các loại cidrinet; đặc biệt, các truy vấn loại 'địa chỉ trong phạm vi' được chuyển thành các truy vấn phạm vi ít nhất là nơi địa chỉ là một hằng số. Xem this (rather old) thread.

Xem thêm điểm Chris ip4r của Chris.

4

Tôi muốn thêm rằng các kiểu dựng sẵn khá mạnh mẽ và đó là nơi bạn nên bắt đầu. Tuy nhiên nếu bạn cần lập chỉ mục GIN, hãy xem http://pgfoundry.org/projects/ip4r/

Trường hợp cho ip4r (lý do tôi bắt đầu sử dụng) có thể là nếu bạn cần lưu trữ khối CIDR và ​​đảm bảo không có khối nào chứa bất kỳ khối nào khác. Vì điều này đòi hỏi lập chỉ mục GIN, bạn phải đi với ip4r chứ không phải là các loại được tích hợp sẵn.

+0

Cảm ơn! Tôi nghĩ rằng có chỉ số GIN hoặc GiST cho dải IP nhưng không tìm thấy chúng trong một tìm kiếm nhanh. –

+0

Tôi đã phát hiện ra một cách khó khăn (cố gắng sử dụng các ràng buộc loại trừ) mà GIN không được hỗ trợ và dẫn đến ip4r bởi tác giả. –