pg_bigm 설치
다음 환경에서 테스트를 완료했다.
- Ubuntu 19.04
- Ubuntu 20.04.6 LTS
pg_trgm 은 3글자 이상이고, pg_bigm 은 2글자 이상이다.
영어권은 3글자 미만인 단어가 거의 없지만, 한국어는 2글자 단어도 많아서 pg_trgm 은 불편함이 있다.
한국어나 일본어는 소리글자이기는 하지만, 한자의 영향 때문에 짧은 길이의 단어가 많다.
pg_bigm 이나 pg_trgm 는 오직 like 검색을 위한 것이다.
1. Ubuntu 버전 확인
cat /etc/os-release NAME="Ubuntu" VERSION="19.04 (Disco Dingo)"
2. 사전준비
sudo apt install gcc sudo apt install make sudo apt-get install libpq-dev sudo apt-get install postgresql-server-dev-all sudo apt-get install postgresql-common sudo apt install libicu-dev
3. pg_config 찾기
whereis pg_config
4. 컴파일 및 설치
tar xvfz pg_bigm-1.2-20200228.tar.gz cd pg_bigm-1.2-20200228 make USE_PGXS=1 PG_CONFIG=/usr/bin/pg_config sudo make USE_PGXS=1 PG_CONFIG=/usr/bin/pg_config install
make install 실행결과의 마지막 부분은 다음과 같다.
/bin/mkdir -p '/usr/lib/postgresql/11/lib' /bin/mkdir -p '/usr/share/postgresql/11/extension' /bin/mkdir -p '/usr/share/postgresql/11/extension' /usr/bin/install -c -m 755 pg_bigm.so '/usr/lib/postgresql/11/lib/pg_bigm.so' /usr/bin/install -c -m 644 .//pg_bigm.control '/usr/share/postgresql/11/extension/' /usr/bin/install -c -m 644 .//pg_bigm--1.2.sql .//pg_bigm--1.1--1.2.sql .//pg_bigm--1.0--1.1.sql '/usr/share/postgresql/11/extension/' /bin/mkdir -p '/usr/lib/postgresql/11/lib/bitcode/pg_bigm' /bin/mkdir -p '/usr/lib/postgresql/11/lib/bitcode'/pg_bigm/ /usr/bin/install -c -m 644 bigm_op.bc '/usr/lib/postgresql/11/lib/bitcode'/pg_bigm/./ /usr/bin/install -c -m 644 bigm_gin.bc '/usr/lib/postgresql/11/lib/bitcode'/pg_bigm/./ cd '/usr/lib/postgresql/11/lib/bitcode' && /usr/lib/llvm-7/bin/llvm-lto -thinlto -thinlto-action=thinlink -o pg_bigm.index.bc pg_bigm/bigm_op.bc pg_bigm/bigm_gin.bc
5. PostgreSQL 재기동
sudo service postgresql restart
6. pg_bigm extension 생성 및 확인
postgresql 에 관리자로 접속한다.
sudo -i -u postgres psql ${데이타베이스이름}
설치한 pg_bigm 확장기능을 추가한다.
CREATE EXTENSION IF NOT EXISTS pg_bigm;
결합인덱스를 위해 btree_gin 확장도 추가한다.
CREATE EXTENSION IF NOT EXISTS btree_gin;
\dx pg_bigm
CREATE INDEX "memo$parent_id$title$contents$insert_date" ON memo.memo USING gin ( parent_id, (coalesce(title, '') || ' ' || coalesce(contents, '')) gin_bigm_ops, insert_date );