2011-02-03 3 views
1

저는 파이썬의 struct.pack 함수를 사용하여 PostgreSQL의 공통 32 비트 정수 필드에 다양한 데이터 유형을 압축합니다. 단점은 내가 데이터베이스에서 이러한 값으로 작동 할 수 없다는 것입니다. 파이썬에서 무엇을 나타내는 지 알기 위해 struct.unpack을 수행해야합니다.PostgreSQL에서 float에 정수를 언팩하는 방법은 무엇입니까?

이 필드에 32 비트 float을 포장하면 PostgreSQL에서 변환을 수행 할 수있는 방법이 있습니까?

나는이 시도했지만 작동하지 않았다 :

select cast(cast(value as bit(32)) as float4) ... 

성공적 비트 (32)에 정수를 던져하지만이 float로 그 뒤를 변환하지 않습니다.

답변

1

가장 간단한 솔루션과 고려해야 할 사항은 32 비트 부동 소수점 데이터 형식을 사용하도록 정의 된 열에 32 비트 부동 소수점 값을 저장하는 것입니다.

CAST()는 C 구조체, 엔디안 네스 또는 패딩 바이트에 대해 알지 못하므로 CAST()가 작동하지 않습니다. b) 비트 데이터 형식을 부동 소수점 데이터 형식 (비트 데이터 형식을 정수로 변환 할 수 있습니다.)

4

아마도 원하지 않는 대답 일 수 있습니다.하지 마십시오.

이것은 기본 원칙을 위반하는 것입니다. 데이터베이스의 값은 원자 적이어야하며 다른 값으로 나눌 수 없습니다. 모든 데이터베이스 작업 (내가 언급 한 모두)은 개별 값을 처리하도록 조정됩니다. 당신은 여기서 "틀과 싸우고 있습니다".

끌 수있는 경우에도 성능에 영향을줍니다. 또한 데이터베이스는보고 할 수 없으며, 지금 당장이 문제를 겪고있는 것이 아닙니다. 어떤 이유로 든이 데이터를 읽으려는 시도가이 문제에 부딪 힐 수 있습니다.

글쎄, 나는 호언 장담하고 싶지 않다 "고 말했다.

관련 문제