2026. 3. 12. 14:29ㆍ카테고리 없음
개요
PosgreSQL 컬럼 데이터 타입중에서 고정 소수점 타입에 해당하는 Numeric과 Decimal의 차이점을 분석합니다.
Storage and syntax
Postgres는 DECIMAL 또는 NUMERIC 데이터 타입을 제공하고 있습니다. 해당 데이터 타입은 사용자 정의 정밀도(precision)을 제공하여 특정 자릿수까지 숫자를 정확하게 표현할 수 있습니다.
Decimal 컬럼 정의 문법
DECIMAL(precision, scale)- 가변 길이
- 정수 부분 최대 131072자리, 소수점 최대 16383자리까지
NUMERIC(precision, scale)- 가변 길이
- 정수 부분 최대 131072자리, 소수점 최대 16383자리까지
precision
정밀도(precision)은 소수점을 기준으로 왼쪽과 오른쪽을 모두 포함한 숫자의 총개수입니다. 예를 들어 precision이 10이라면 소수점 숫자를 포함한 숫자의 개수가 총 10개여야 합니다.
scale
스케일(scale)는 소수점의 숫자 개수입니다. 예를 들어 scale이 2라면 0.00과 같이 소수점의 개수가 2개로 제한됩니다.
정확도(precision)와 스케일(scale)을 설정하지 않고, 컬럼을 NUMERIC으로 선언하면 시스템이 허용하는 최대 자릿수(구현 한계치)까지 값을 그대로 저장합니다.
NUMERIC의 예시
SELECT 1234.56::NUMERIC(10, 4) AS num_A,
1234.56::NUMERIC(10, 1) AS num_B,
1234.56789::NUMERIC AS num_C;
결과
num_a | num_b | num_c
----------+--------+------------
1234.5600 | 1234.6 | 1234.56789
부동 소수점(floating-point)과의 차이점
부동 소수점(REAL, DOUBLE PRECISION)과 고정 소수점(NUMERIC, DECIMAL)의 차이점은 중요합니다.
- 정밀도(Precision) :
DECIMAL/NUMERIC타입은 정확한 정밀도를 유지합니다. 반면에 부동 소수점 타입은 근사적(approximate)이며, 반올림 오류를 일으킬수 있습니다. - 성능(Performance) :
DECIMAL/NUMERIC연산은 정밀도와 계산의 복잡성때문에 일반적으로 부동 소수점 타입보다 느립니다.
DECIMAL 데이터 타입은 무엇인가?
PostgreSQL에서 DECIMAL 데이터 타입은 고정된 정밀도와 스케일로된 숫자를 저장하는데 사용됩니다.
DECIMAL 데이터 타입 문법
column_name DECIMAL(precision, scale)
- precision : 소수점을 포함한 전체 숫자 개수
- scale : 소수점 개수
NUMERIC 데이터 타입은 무엇인가?
NUMERIC 데이터타입은 기능적으로는 DECIMAL 타입과 동일합니다. 고정된 정밀도와 스케일로된 숫자를 저장하는데 사용됩니다.
NUMERIC 데이터 타입 문법
column_name NUMERIC(precision, scale)
DECIMAL vs NUMERIC Datatype in PostgreSQL
| 기능/관점 | DECIMAL | NUMERIC |
|---|---|---|
| 기능 | NUMERIC과 기능적으로 동일 |
DECIMAL과 기능적으로 동일 |
| 정밀도(precision)와 스케일(scale) | 숫자에 정밀도와 스케일 설정 허용 | 숫자에 정밀도와 스케일 설정 허용 |
| 성능 | DECIMAL과 NUMERIC의 성능 차이 없음 |
DECIMAL과 NUMERIC의 성능 차이 없음 |
| 차이점 | PostgreSQL에서 DECIMAL은 사실상 NUMERIC의 별칭입니다. |
PostgreSQL에서 NUMERIC은 사실상 DECIMAL의 별칭입니다. |
결론
DECIMAL과 NUMERIC은 기능적으로 동일하고, DECIMAL은 사실상 NUMERIC의 별칭입니다. 두 타입간에는 성능 차이도 없습니다. 그래서 두 타입 중 하나를 선택하는 것은 주로 조직 내에서 선호도나 관습 차이입니다.