Postgresql 选择列与inet[]数组中的任何IP地址匹配的行

Postgresql 选择列与inet[]数组中的任何IP地址匹配的行,postgresql,postgres-9.6,Postgresql,Postgres 9.6,我试图在inet[]type列中显示至少有一个值的行 我真的不知道还有什么更好的方法,所以似乎使用这样的方法是最容易的,但是它返回带有{}的结果,根据inet[]类型,我猜它是null,但不是从不是null查询的角度 peering_manager=# select asn,name,potential_internet_exchange_peering_sessions from peering_autonomoussystem where potential_internet_exchang

我试图在
inet[]
type列中显示至少有一个值的行

我真的不知道还有什么更好的方法,所以似乎使用这样的方法是最容易的,但是它返回带有
{}
的结果,根据
inet[]
类型,我猜它是
null
,但不是从
不是null
查询的角度

peering_manager=# select asn,name,potential_internet_exchange_peering_sessions from peering_autonomoussystem where potential_internet_exchange_peering_sessions is not null order by potential_internet_exchange_peering_sessions limit 1;
 asn  |              name               | potential_internet_exchange_peering_sessions
------+---------------------------------+----------------------------------------------
 6128 | Cablevision Systems Corporation | {}
(1 row)

peering_manager=#
因此,尝试进一步深入研究一下,我认为如果我可以尝试匹配
inet[]
列中是否存在任何有效的IP地址,这将是可行的,但是我遇到了一个错误,我不知道它指的是什么,也不知道如何解决它以获得期望的结果:

peering_manager=# select asn,name,potential_internet_exchange_peering_sessions from peering_autonomoussystem where potential_internet_exchange_peering_sessions << inet '0.0.0.0/0';
ERROR:  operator does not exist: inet[] << inet
LINE 1: ...here potential_internet_exchange_peering_sessions << inet '0...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
peering_manager=#

您可以使用
array\u length()
。在空数组或空数组上,返回
NULL

...
WHERE array_length(potential_internet_exchange_peering_sessions, 1) IS NOT NULL
...

比较数组长度和整数更好

...
WHERE array_length(potential_internet_exchange_peering_sessions, 1) > 0
...
...
WHERE array_length(potential_internet_exchange_peering_sessions, 1) IS NOT NULL
...
...
WHERE array_length(potential_internet_exchange_peering_sessions, 1) > 0
...