문서번호 : 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 | |