인덱스 팽창이 발생한 PostgreSQL에서 인덱스를 다시 만들어야합니다. 인덱스가 생성되는 동안 사용할 수 있어야하므로 REINDEX를 사용할 수 없습니다. 새 이름으로 색인을 다시 만든 다음 이전 이름을 삭제합니다. 인덱스를 만드는 데 사용 된 SQL 문을보고 복사 할 수있는 방법이 있습니까?
CONCURRENTLY
해야 CREATE INDEX
테이블에 배타적 잠금이 적용되지 않습니다.
인덱스 팽창이 발생한 PostgreSQL에서 인덱스를 다시 만들어야합니다. 인덱스가 생성되는 동안 사용할 수 있어야하므로 REINDEX를 사용할 수 없습니다. 새 이름으로 색인을 다시 만든 다음 이전 이름을 삭제합니다. 인덱스를 만드는 데 사용 된 SQL 문을보고 복사 할 수있는 방법이 있습니까?
CONCURRENTLY
해야 CREATE INDEX
테이블에 배타적 잠금이 적용되지 않습니다.
답변:
실제로 pg_indexes
다음과 같이 시스템 카탈로그 뷰를 쿼리하면 됩니다.
SELECT indexdef FROM pg_indexes WHERE indexname = '...'
이를 정의하는 데 사용 된 SQL 문을 다시 가져와야합니다.
AND schemaname = 'myschema'
.
indexdef
부분 인덱스의 경우에는 여전히 작성 문과 동일하지 않습니다. 예를 들어 다음 명령문으로 색인을 작성하는 경우 :
CREATE INDEX item_orgunit_idx ON items (orgunit_id) WHERE type IN ('invoice', 'purchaseorder', 'beanpayment');
postgres는 다음 indexdef를 생성합니다 :
CREATE INDEX item_orgunit_idx ON public.items USING btree (orgunit_id) WHERE ((type)::text = ANY ((ARRAY['invoice'::character varying, 'purchaseorder'::character varying, 'beanpayment'::character varying])::text[]))
postgres indexdef에는 모든 유추 된 유형이 있으며 아마도 더 낫지 만 ORM은 두 인덱스의 where 절을 비교하고 마이그레이션 스크립트를 생성 할 때 다른 것으로 생각합니다. 그것은 우리에게 문제입니다.