1.node表格
ip | labels
----------------+-------------------------------------------------------
1.1.1.1 | x_build rv_build
1.1.1.2 | x_build rv_build
1.1.1.3 | x_build rv_build
1.1.1.4 | x_build aa_rv_build
1.1.1.5 | x_build rv_build
1.1.1.6 | x_build aa_rv_build
1.1.1.7 | x_build rv_build
1.1.1.8 | x_build rv_build s_build
1.1.1.9 | n_build
1.1.2.1 | s_build
1.1.2.2 | s_build
2.需要查询标签
使用like问题
-- 会把aa_rv_build和rv_build都查出来
select * from node where labels like '%rv_build%';
使用字符串转数组进行查询
这个表达式是一个 PostgreSQL 的查询条件。它使用了
string_to_array()
函数将字符串labels
按空格拆分为数组,然后使用any()
函数将数组与字符串'rv_build'
进行比较。具体来说,这个查询条件的含义是:如果
labels
字符串中的任何一个元素与'rv_build'
相等,则条件成立。换句话说,如果labels
字符串中包含'rv_build'
这个标签,那么查询条件就会返回 true。
-- 只会查出带有rv_build标签的机器
SELECT * FROM node WHERE 'rv_build' = ANY(string_to_array(labels, ' '))
标签:rv,1.1,标签,labels,查询,build,字符串
From: https://www.cnblogs.com/lxd670/p/17969190