2016-09-14 2 views
1

나는 (원래 진수) 일부 해시를 저장하려고하지만를 pgsql에 저장하지만, 얻을 int로 그들을 캐스팅에 사용할 데이터 형식 범위 오류에서 BIGINT포스트 그레스는 - 매우 많은 수의

select 12347933502038296527::bigint 

ERROR: bigint out of range 
********** Error ********** 
ERROR: bigint out of range 
SQL state: 22003 

숫자가 int8 유형에 비해 너무 큽니다. int8 대신 어떤 데이터 유형을 사용해야합니까? 내 경우에 decimal이 효과가 있습니까? 그런 큰 숫자를 구하기 위해 노력할 다른 전략은 없습니까?

+3

예,'decimal' /'numeric'을 사용할 수 있습니다. 이 값들에 대해 산술 연산을 할 필요가 없다면,'bytea'를 사용할 수도 있습니다. – redneb

답변

3

Bigint는 꽤 큽니다. 그것보다 큰 것을 필요로하는 것은 드물다. 대부분의 데이터베이스에서 네이티브 바이너리 표현으로 갈 수 있습니다. Decimal/numeric은 종종 약간 더 큰 정밀도를 허용합니다.

대조적으로 Postgres는 documentation에서 설명한대로 기본적으로 무제한의 정밀도로 numeric/decimal을 지원합니다. 직접

다음 작품 :

select 12347933502038296527::decimal 

좀 더 구체적으로 할 경우 :

말했다
select 12347933502038296527::decimal(20, 0) 

, 종종 많은 수의 식별자로 사용된다. 이 경우 숫자 표현 대신 문자열을 사용할 수 있습니다. 문자열에는 예를 들어 앞에 오는 0을 유지하는 이점이 있습니다.

관련 문제