2017-10-16 18 views
2

PostgreSQL에 저장된유형의 MAC 주소를 비트 단위로 비교해야 할 필요가 있지만 허용 할 수있는 항목이없는 것으로 나타납니다. 나 (MAC 스트링을 16 진수로 파싱하는 것의 부족, 이는 성능이 좋지 않을 것 같다).PostgreSQL의 MAC 주소에 대한 비트 연산

PostgreSQL은 이러한 종류의 비교를 효율적으로 수행하거나 MAC 주소를 비교할 수있는 숫자 또는 비트 세트 표현으로 효율적으로 변환하는 방법이 있습니까?

다음 작품,하지만 그렇게 할 문자열 조작의 공정한 조금 필요합니다

select ('x'||replace(macaddr_field::varchar,':',''))::bit(48);

답변

1

https://www.postgresql.org/docs/current/static/functions-net.html

가 MACADDR 유형도> (표준 관계 연산자를 지원 < = 등) 및 NOT, AND 및 OR에 대한 비트 단위 산술 연산자 (~, & 및 |)가 있습니다.

이 예 MACADDR와 비트 연산에 대한 제한은 다음과 같습니다 promissed로

t=# with mac(a,b) as 
(values('01:00:00:ff:aa:78'::macaddr,'0e:7e:e9:f0:fa:80'::macaddr)) 
select a|b, ~ a, a&b, a <= b from mac; 
    ?column?  |  ?column?  |  ?column?  | ?column? 
-------------------+-------------------+-------------------+---------- 
0f:7e:e9:ff:fa:f8 | fe:ff:ff:00:55:87 | 00:00:00:f0:aa:00 | t 
(1 row) 

작품과 당신이 bitmacaddr 캐스팅하지 않아도, 나머지는 당신이 원하는 비교의 종류에 따라 달라집니다 수행 할