回答

收藏

检查PostgreSQL中是否存在索引

技术问答 技术问答 276 人阅读 | 0 人回复 | 2023-09-14

我知道如何创建索引7 Z# Q8 ^) `' J' @
CREATE INDEX ix_dsvtable
, N" {! f# F2 Y7 y. ^3 T4 |  ON public."DsVTable"* ^9 ?. f6 ^, S* [0 B2 `7 ]6 C
  USING btree! }! y8 `4 |$ f. I" h0 _0 O
  (dind, sec, regind, datind);
% B, b: N3 U8 v4 D以及如何检查索引是否已存在?& F7 N8 `$ X# W4 r, s3 K
我需要检查它们的存在并创建它们(如果还不存在)。
  j$ s& L/ e9 j- ~8 d                8 h3 p/ g+ \7 j$ u( ~; E) \: a
解决方案:
( O2 S& n7 q( J4 t+ h: d# e; n  h6 F3 c               
* S9 m: ]4 t- C5 y0 q8 ]- G+ _. O4 J% n/ o- V

7 K' H$ z, |$ {1 I+ g4 g5 R* ?; M9 j                您可以使用以下查询获取索引列表,它们的表和列:" G! K& h. y  M" k
select% [& v( g% E' ^: u, a
    t.relname as table_name,
8 ?( z! X' E8 }% j! R1 @) @% h    i.relname as index_name,
1 u; {$ [0 B- c. L, [6 ~6 O    a.attname as column_name% d" q5 y+ j; h7 t" W5 v8 }6 g
from
9 h6 |" }& q8 F9 Z    pg_class t,+ a  Z  }& w+ \# o4 ^2 J
    pg_class i,
6 U) A! u6 x3 g" r0 Q# n    pg_index ix,
5 o; z- g4 |: V/ G. |5 z; r    pg_attribute a0 C# H( ?1 E* a7 P% `: T" b' G
where
5 {/ K3 G. d' w! d0 P    t.oid = ix.indrelid* |- b$ @6 r) w( d
    and i.oid = ix.indexrelid
" O& K: d4 ]2 x5 ~6 E/ J; i    and a.attrelid = t.oid
; [. T' {  U8 E3 w& e7 ^$ e* P; Z    and a.attnum = ANY(ix.indkey)
3 c# x7 J" ]/ _5 m: s( z" k    and t.relkind = 'r'
' y  `: A% c# j4 M) b  Q   -- and t.relname like 'mytable'
; i& N/ U+ T, Z9 d& uorder by* B% I3 b2 c, s
    t.relname,
2 p- w4 a8 h+ Q4 o: ?    i.relname;
7 ^$ ]# v; n/ i6 P/ k从那里,您可以按索引名称或所涉及的列检查是否存在,并决定创建/跳过索引。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则