postgresql – 检索部分索引WHERE表达式

我如何运行查询(在PostgreSQL内部表上)来检索部分索引的条件表达式(在本例中为roles_user_group_role_idx).

# \d roles
                                Table "public.roles"
    Column     |            Type             |               Modifiers               
---------------+-----------------------------+---------------------------------------
 id            | character varying(15)       | not null default next_id('r'::bpchar)
 user_id       | character varying(15)       | not null
 group_id      | character varying(15)       | not null
 role          | character varying(255)      | not null
 language_code | character varying(2)        | 
 created_at    | timestamp without time zone | not null
 updated_at    | timestamp without time zone | not null
Indexes:
    "roles_pkey" PRIMARY KEY,btree (id)
    "roles_user_group_role_idx" UNIQUE,btree (user_id,group_id,role) WHERE language_code IS NULL

根据PostgreSQL pg_index doc,pg_index.indpred似乎是我需要研究的领域.运行此查询:

SELECT
    C.oid,I.indpred
FROM pg_catalog.pg_class C,pg_catalog.pg_namespace N,pg_catalog.pg_index I
WHERE C.relname = 'roles_user_group_role_idx'
  AND C.relnamespace = N.oid
  AND I.indexrelid = C.oid
  AND N.nspname = 'public';

给了我这个,这不是那里.

oid   |                                                                                  indpred                                                                                  
---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1235504 | {NULLTEST :arg {VAR :varno 1 :varattno 5 :vartype 1043 :vartypmod 6 :varcollid 100 :varlevelsup 0 :varnoold 1 :varoattno 5 :location 95} :nulltesttype 0 :argisrow false}

我正朝着正确的方向前进吗?如何获取部分索引的WHERE子句?我正在使用PG 9.2

解决方法

好了一段谷歌搜索后我找到了答案 here,正确的查询:

SELECT
    C.oid,pg_get_expr(I.indpred,I.indrelid)
FROM pg_catalog.pg_class C,pg_catalog.pg_index I
WHERE C.relname = 'roles_user_group_role_idx'
  AND C.relnamespace = N.oid
  AND I.indexrelid = C.oid
  AND N.nspname = 'public';

结果:

oid   |       pg_get_expr       
---------+-------------------------
 1235504 | (language_code IS NULL)

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...