Atomic Habits

[Postgre] 테이블의 인덱스 불일치 판단 본문

IT/SQL

[Postgre] 테이블의 인덱스 불일치 판단

체계성 2021. 11. 20. 17:29
-- 운영/배포 테이블 PK/INDEX 비교 
  ( 테이블명, _new or _bak)만 변경해주면 운영, 배포 테이블의 인덱스와 제약조건을 비교한다. )
select tablename, 
       string_agg(CASE WHEN indexdef ~ '(UNIQUE)' THEN 'UNIQUE' ELSE '' END||substring(indexdef from '\(.*\)') , ', ' ORDER BY indexdef) 
from pg_indexes 
where tablename like 'fil%' 
	and tablename not like '%new' -- 운영 데이터
group by tablename
except -- union all 
select replace(tablename, '_new',''), 
string_agg(CASE WHEN indexdef ~ '(UNIQUE)' THEN 'UNIQUE' ELSE '' END||substring(indexdef from '\(.*\)') , ', ' ORDER BY indexdef) 
from pg_indexes 
where tablename like 'films%new'  -- 배포 데이터
group by tablename;

 

 

-- 통과 (테이블명, _new or _bak)만 변경해주면 운영, 배포 테이블의 인덱스와 제약조건을 비교한다.
select tablename, 
       string_agg(CASE WHEN indexdef ~ '(UNIQUE)' THEN 'UNIQUE' ELSE '' END||substring(indexdef from '\(.*\)') , ', ' ORDER BY indexdef) 
from pg_indexes 
where tablename like 'fil%' 
and tablename not like '%new' -- 운영 데이터
group by tablename
except -- union all 
select replace(tablename, '_new',''), 
string_agg(CASE WHEN indexdef ~ '(UNIQUE)' THEN 'UNIQUE' ELSE '' END||substring(indexdef from '\(.*\)') , ', ' ORDER BY indexdef) 
from pg_indexes 
where tablename like 'films%new'  -- 배포 데이터
group by tablename;



-- 통과
SELECT * FROM pg_indexes WHERE TABLENAME like '테이블명%';



-- 정규식 에러

SELECT indexdef, substring(indexdef from '(?<=\().*(?=\))')as P FROM pg_indexes WHERE TABLENAME like 'tl_legalzone_emd_apt_rent%';

--CREATE INDEX t_gid ON public.tl_bak USING btree (gid)
--CREATE UNIQUE INDEX tl_pkey ON public.tl_bak USING btree (gid)

 

 

---------------------

~ 표시는 Like + 정규식 역할을 한다.

text ~ text  boolean

String matches regular expression, case sensitively

'thomas' ~ 't.*ma'  t

Comments