我现在的代码看起来像这样:
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
;
这不起作用,因为:ERROR: operator does not exist: int2vector = smallint[]
。
我尝试了各种组合:
- 将
indkey
转换为类似idx.indkey::smallint[]
的数组 - 将
ARRAY[col.attnum]
转换为int2vector
- 使用
ALL
运算符 - 使用
@>
运算符
如何检查indkey
是否只包含一个col.attnum
条目?
2条答案
按热度按时间r8xiu3jd1#
您可以强制转换为
text
并转换为integer
数组:实际上,由于
pg_attribute.attnum
是smallint
(int2
),因此使用int2[]
。由于您只对***单个***列感兴趣,因此可以简化:
SQL Fiddle。
在索引中处理多列时要小心。考虑这个相关的答案:
hvvq6cgz2#
看起来你可以解开它。
完整演示: