sql - 如何检索postgres功能索引列名
问题描述
我想检索 postgres 数据库中的所有功能索引及其列名。但是在捆绑了很多之后,我无法获得功能索引列名。
从下面的查询中,我可以获得单一的普通索引类型。
select t.relname as tableName,
i.relname as indexName,
STRING_AGG(pga.attname||'', ','order by i.relname,pga.attnum) as columnName
from pg_class t
inner join pg_index ix on t.oid = ix.indrelid
inner join pg_class i on i.oid = ix.indexrelid
inner join pg_attribute pga on pga.attrelid = i.oid
inner join pg_indexes pgidx on pgidx.indexname=i.relname
where t.relkind = 'r'
and pgidx.schemaname = ?
group by t.relname, i.relname
having count(*) = 1
order by i.relname
解决方案
在这里阅读文档时,我创建了一个(小)测试:
luuk=# create table test1 (col1 varchar(20));
luuk=# insert into test1 values('test'),('Test'),('TEST');
luuk=# select * from test1 where lower(col1)='test';
col1
------
test
Test
TEST
(3 rows)
luuk=# CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
luuk=# select indexdef from pg_indexes where indexname='test1_lower_col1_idx';
indexdef
-------------------------------------------------------------------------------------
CREATE INDEX test1_lower_col1_idx ON public.test1 USING btree (lower((col1)::text))
(1 row)
luuk=#
我确实看到了创建的功能索引的完整定义。现在只需解析此字符串即可找到所有列名。
推荐阅读
- angular - 共享服务无法从组件访问变量
- vb6 - 为什么更新现有安装时 PDW 不复制某些文件?
- javascript - 在使用 JQuery 或 JavaScript 单击按钮时将 CSS 动画添加到 h1
- c# - 为每个插入创建 EF 数据库实例?
- flutter - 参数类型“对象?” 不能分配给参数类型“num”
- c# - 获取摄像机 IP 地址
- excel - 两列之间的Excel MAX条件
- python - 如何在python dash中单击按钮时添加下拉列表的值?
- python - 试图在 SQLITE3 中为股票价格建立数据库但收到此错误
- docker - 在 docker-compose 卷中提供 GitHub 文件作为默认 conf 文件