PostgreSQL ltree字段查询中使用psql变量的问题求助
解决psql变量在ltree类型查询中的问题
这个问题其实是类型不匹配导致的——你用\set user_id 10设置的变量是数值类型,但ltree类型的<@操作符要求右侧必须是兼容的ltree(或相关类型,比如lquery),直接把数值塞进去PostgreSQL会因为类型不兼容报错。
下面给你几种可行的解决办法:
方法1:查询时显式转换变量类型
在使用变量的时候,通过::ltree把数值转换成ltree类型,这样操作符两边的类型就匹配了:
\set user_id 10 select * from accounts where customer_id <@ :user_id::ltree;
方法2:设置变量时直接指定ltree类型
如果这个变量专门用于ltree查询,可以在设置变量的时候就把它定义成ltree类型:
\set user_id '10'::ltree select * from accounts where customer_id <@ :user_id;
这里注意要把数值用单引号包起来,再加上::ltree转换,确保psql识别它为ltree类型值。
方法3:用字符串插值后转换
如果你的变量可能是字符串形式的数字(比如从外部传入),可以用:'user_id'的方式把变量当作字符串处理,再转成ltree:
\set user_id '10' select * from accounts where customer_id <@ :'user_id'::ltree;
本质上核心就是让变量值的类型和customer_id的ltree类型匹配,PostgreSQL的类型系统很严格,只要两边类型兼容,<@操作符就能正常工作啦。
内容的提问来源于stack exchange,提问作者Аушев
相关产品推荐
相关产品推荐

