본문 바로가기

Database/Postgresql

[Postgresql/Greenplum] 테이블명 길이 63Byte 제한

728x90
반응형

Postgresql 테이블명 길이는 UTF-8 DB인 경우 63Byte 까지로 제한되어 있다.(영문/숫자 1Byte, 한글 3Byte)

확인버전

  • Postgreql 13.1
  • Greenplum 6.11(Postgresql 9.4)

 

테이블명만 제한되어 있는줄 알았으나 모든 오브젝트의 이름이 제한되어 있는 것을 공식사이트에서 확인할 수 있다.

Postgresql 제한관련 정보 - https://www.postgresql.org/docs/13/limits.html

PostgreSQL Limitations

재미있는 사실은 재컴파일을 하면 길이제한 설정값을 조정할 수가 있는 것 같다.

 

DB 캐릭터셋 확인

-- DB 캐릭터셋 확인
select datname
     , datctype
  from pg_database
 where datname = 'postgres'

 

문제는 테이블명이 63Byte가 넘어가면 에러가 발생되면서 테이블을 생성을 하지 말아야 하는데 자동으로 길이를 제한하고 생성을 진행한다는 것이다.

DBeaver에서 테이블을 생성하면 NOTICE 문구를 확인하여 길이제한을 확인할 수 있으나 JDBC 를 이용한 자바프로그램을 이용하여 테이블을 생성하면 SQLWarnings을 구현하지 않는 이상 확인할 수가 없다.

-- 한글 한글자는 3Byte, 영문/숫자는 1Byte
-- ~123까지만 테이블이 생성된다.
create table public.가가가가가가가가가가나나나나나나나나나나1234 (
   no         serial       primary key
  , title     varchar(300)
  , memo      text
  , create_dt timestamp    default current_timestamp
)

SQL경고메세지 : identifier "가가가가가가가가가가나나나나나나나나나나1234" will be truncated to "가가가가가가가가가가나나나나나나나나나나123"

 

테이블을 조회할때에도 자동으로 길이를 제한하고 테이블을 조회한다. 그래서 ~1234 테이블이 존재하지 않으나 ~1234 테이블이 조회되는 것처럼 SQL Tool에서 표시된다.

 

현재 구동중인 Postgresql/Greenplum 의 오브젝트 길이제한 설정값을 확인할 수 있다.

-- 오브젝트 길이제한 설정값 확인
show max_identifier_length

 

728x90
반응형