database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 5840 게시물 읽기
No. 5840
데이터 크기 제 설정하는 방법 없나요?
작성자
채종대
작성일
2005-01-27 13:01
조회수
2,681

int2 형이 프로그램 상에서는 -32768 ~ 32767 까지 지원 되는데요.

포스트 그레스에서는 -32768 값이 들어가면 에러가 발생합니다.

확인 해보니 -32767 ~ 32767 까지만 적용되는것 같더라구요. 전체적으로 1의 보수를 쓰는것 같은데요.

 

프로그램과 같은 데이터 영역을 지원할수 있겠끔 할수는 없나요?

이 글에 대한 댓글이 총 7건 있습니다.

RDBMS 쪽에서는 이부분이 그리 중요한 부분이 아닙니다.

다루고자 하는 내용을 흡수 하지 못하는 자료형을 사용했다면, 흡수 할 수 있는 자료형으로 바꾸면 될 일을.

 

그냥 속 편하게 int4 자료형을 사용하시든지, 아니면, 숫자형의 최대값을 고민하기 싫으시면 numeric 형 사용하시면 될 듯싶습니다.

 

그리고, -32768 보다 작은 값이 입력되면 오류를 만들어야한다면, check 제약조건을 지정해 두면 되겠지요.

 

늘 이야기하는 것이지만, 이런 부분에 고민하기 보다는 자료구조를 얼마나 실세계를 잘 흡수 할 수 있는가?에 대해서 고민을 하는 것이 낫습니다.

 

김상기(ioseph)님이 2005-01-27 13:42에 작성한 댓글입니다.

문제점은 이런 상황인거 같습니다.

 

먼저 int2, int4, int8 의 하한값

예를 들어 int2의 경우 -32768이 문서에서 하한값으로 정의되어있습니다.

 

KOEI~# CREATE TABLE test ( id int2 );

 

KOEI~# INSERT INTO test VALUES ( -32768::int2 ) ;

ERROR: integer out of range

 

KOEI~# INSERT INTO test VALUES ( -32768 );

INSERT 1 3327

 

이런 상황이 생기네요.

 

SELECT -32768::int2

ERROR: integer out of range

 

문서의 정의된 하한값이 해당 타입으로 캐스팅이 되지 않고

에러를 내는 상황 같습니다.

김광영(koeikim)님이 2005-01-28 00:09에 작성한 댓글입니다.

sql 형변환자 구문분석 버그네요.

::int2 뿐만 아니라, ::int4, ::int8 모두 그런현상이.

7.4.x 버전에서도 그대로 있는 버그군요.

근데, 왜 아직 이걸 몰랐던 건지...

 

버그보고를 해야겠네요.

 

김상기(ioseph)님이 2005-01-28 09:25에 작성한 댓글입니다.

어제 현상을 보고 버그 보고 했습니다 :)

 

^^:

김광영(koeikim)님이 2005-01-28 13:07에 작성한 댓글입니다.

감사합니다.~

어쩔수없이 음수 마지막 값이 들어왔나 비교하는 inline함수를 만들어 쓰고 있어요. 에혀..

얼른 고쳐졌으면 좋겠네요~

 

채종대님이 2005-01-29 09:57에 작성한 댓글입니다. Edit

-32768::int2

-2147483648::int4

-9223372036854775808::int8

 

에서만 발생하는 버그입니다.

피할 수 있는 방법은 ::int4 문자열이 들어가는 부분에서 그 앞의 숫자값을 작은 따옴표로 묶어주면 피할 수 있습니다.

 

'-32768'::int2

'-2147483648'::int4

'-9223372036854775808'::int8

김상기(ioseph)님이 2005-01-29 10:10에 작성한 댓글입니다.
이 댓글은 2005-01-29 12:28에 마지막으로 수정되었습니다.

오늘 tom lane 아자씨의 편지가 왔는데,

너무도 간단하게 답을 했네요.

 

> select -32768::int2;
> ERROR:  integer out of range

This is not a bug, because the interpretation is -(32768::int2)
which indeed is out of range.

regards, tom lane

 

---------------

버그가 아니랍니다. 연산자 우선순위가

형변환자가 - 연산보다 우선되기 때문에 그렀다는군요.

 

select -32768::int2 연산은

select -(32768::int2) 연산과 같기 때문에 발생하는 형변환자 우선 "정책" 때문이랍니다.

 

기억해 두어야할 부분이군요.

 

김상기(ioseph)님이 2005-01-31 05:05에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5844pgAdmin III ID,PW 저장은 안되나요? [1]
타이거
2005-01-28
2397
5842두개의 테이블에 동시에 값을 넣는 방법? [3]
마법사
2005-01-27
2596
5841vacuumdb 실행시 Password를 안 물어보게 할 수 있을까요? [1]
김이수
2005-01-27
2846
5840데이터 크기 제 설정하는 방법 없나요? [7]
채종대
2005-01-27
2681
5839PostgreSQL 선택에 대해서 여쭤봅니다.. [1]
하수경
2005-01-27
2191
5838PostgreSQL 한국 사용자 그룹 첫 모임(27일) 공지 최종 [7]
김상기
2005-01-26
2915
5837pgpool을이용한 FailOver기능좀 자세히... [2]
장석
2005-01-26
2056
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다