gpt4 book ai didi

sql - 如何测试 int2vector 是否恰好包含一个特定值?

转载 作者:行者123 更新时间:2023-11-29 11:59:52 25 4
gpt4 key购买 nike

我当前的代码如下所示:

SELECT
1
FROM pg_namespace sch
JOIN pg_class tab ON tab.relnamespace = sch.oid
JOIN pg_index idx ON idx.indrelid = tab.oid
JOIN pg_class icl ON icl.oid = idx.indexrelid
JOIN pg_attribute col ON col.attrelid = tab.oid
WHERE
sch.nspname = 'my_schema'
AND tab.relkind = 'r'
AND idx.indisprimary
AND icl.relname = 'pk_my_table'
AND col.attname = 'my_table_id'
AND idx.indkey = ARRAY[col.attnum] -- <-- The problematic comparison
;

这不起作用,因为:错误:运算符不存在:int2vector = smallint[]

我尝试了各种组合:

  • indkey 转换为类似 idx.indkey::smallint[] 的数组
  • ARRAY[col.attnum] 转换为 int2vector
  • 使用 ALL 运算符
  • 使用 @> 运算符

如何检查 indkey 是否恰好包含一个恰好为 col.attnum 的条目?

最佳答案

您可以转换为 text 并转换为 integer 数组:

AND string_to_array(idx.indkey::text, ' ')::int2[] = ARRAY[col.attnum]

实际上,自pg_attribute.attnum是一个smallint (int2),使用int2[]

而且由于您只对单个列感兴趣,因此您可以简化:

AND idx.indkey::text = col.attnum::text

SQL Fiddle.

处理索引中的多个列时要小心。考虑这个相关的答案:

关于sql - 如何测试 int2vector 是否恰好包含一个特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com