Search
Duplicate

테이블명 대소문자 구분 없애기

문서번호 : 11-762452

Document Information

최초 작성일 : 2022.06.07
최종 수정일 : 2022.06.07
이 문서는 아래 버전을 기준으로 작성되었습니다.
SinglestoreDB : 7.8

Goal

SingleStore DB의 초기 설정은 테이블(또는, 이에 준하는)명 대소문자를 구분한다. 이 설정을 OFF시키는 방법을 알아본다.

Solution

1. 개요

변경하려면, 클러스터내 사용자 생성 데이터베이스가 없어야 함. 그러므로, 클러스터 배포 초기에 설정할 것을 권장함.
SingleStore DB는 table_name_case_sensitivity 엔진변수에 의해 Object(개체)명 대소문자 구분을 정의할수 있음.
최초 기본(default) 설정은 ON(대소문자 구분) 임.
설정에 따라, 대소문자를 구분 하는 Object들
테이블 (Table)
뷰 (View)
테이블 별칭 (Table Alias)
사용자 정의 테이블 반환 함수 (User-defined Table-Valued Function (TVF))
항상, 대소문자를 구분하지 않는 Object들
저장 프로시저 (Stored Procedures (SP))
사용자 정의 스칼라 값 함수(User-Defined scalar-valued Functions (UDF))
사용자 정의 집계 함수(User-Defined Aggregate Functions (UDAF))
information_schema테이블(뷰)

2. 설정 보기

ON 일때 1, OFF 일때 0으로 표시됨
singlestore> SELECT @@table_name_case_sensitivity; +-------------------------------+ | @@table_name_case_sensitivity | +-------------------------------+ | 1 | +-------------------------------+ 1 row in set (0.04 sec)
SQL
복사

3. 설정 하기 (영구 설정)

설정 명령어 예시
$ sdb-admin update-config --key table_name_case_sensitivity --value off --set-global -y
Bash
복사
실행 결과 예시
Toolbox is about to run 'memsqlctl update-config --key table_name_case_sensitivity --value off --set-global' on the following nodes: - On host 192.168.xxx.xxx: + 826F9788C785794A917FDEA4AC4008A242E28539 Would you like to continue? [Y/n]: Automatically selected yes, non-interactive mode enabled ✓ Updated configuration on host 192.168.xxx.xxx +------------------------------------------+-----------------------------------------------+-------------+ | MemsqlID | Message | Result | +------------------------------------------+-----------------------------------------------+-------------+ | 826F9788C785794A917FDEA4AC4008A242E28539 | Updated configuration on host 192.168.xxx.xxx | not_changed | +------------------------------------------+-----------------------------------------------+-------------+
Bash
복사
실행 에러(ERROR 1231)일 경우 예시 이 경우, 사용자 데이터베이스를 drop 하고, 다시 설정을 실행한다. 아래 조치방법을 참고한다.
Toolbox is about to run 'memsqlctl update-config --key table_name_case_sensitivity --value off --set-global' on the following nodes: - On host 192.168.xxx.xxx: + 826F9788C785794A917FDEA4AC4008A242E28539 Would you like to continue? [Y/n]: Automatically selected yes, non-interactive mode enabled +----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+ | MemsqlID | Message | Result | +----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+ | | Failed to update configuration on host 192.168.xxx.xxx. Error occurred: error running memsqlctl: error running command: `/usr/bin/memsqlctl --json --yes update-config --memsql-id 826F9788C785794A917FDEA4AC4008A242E28539 --key table_name_case_sensitivity --value off --set-global --detailed-output`: exit status 1: | failed | | | stdout: (empty) | | | | stderr: Error 1231: Variable 'table_name_case_sensitivity' can only be set when there are no user databases. | | +----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+
Bash
복사

4. 또 다른 방법

세션에서 다음 명령어로 설정이 가능하다. 이 경우도 영구설정 되어지지만, 영구설정을 위해서는 sdb-admin 명령어 사용을 권장한다.
singlestore> set global table_name_case_sensitivity=off; Query OK, 0 rows affected (0.08 sec)
SQL
복사

5. ERROR 1231 에러 조치

사용자 데이터베이스가 있기 때문, 사용자 데이터베이스를 찾아 모두 drop 시켜야 한다.
singlestore> show databases; +--------------------------+ | Database | +--------------------------+ | cluster | | information_schema | | memsql | | test | +--------------------------+ 4 rows in set (0.00 sec) singlestore> drop database test; Query OK, 0 rows affected (1.16 sec) singlestore> set global table_name_case_sensitivity=off; Query OK, 0 rows affected (0.08 sec)
SQL
복사
참고 : 세션 명령어의 ERROR 1231 메시지
singlestore> set global table_name_case_sensitivity=off; ERROR 1231 (42000): Variable 'table_name_case_sensitivity' can only be set when there are no user database
SQL
복사

References

History

일자
작성자
비고
2022.06.07
kkh