1

Pythonのstruct.pack関数を使用して、さまざまなデータ型をPostgreSQLの一般的な32ビット整数フィールドにパックしています。欠点は、データベースでこれらの値を操作できないことstruct.unpackです。データが何を表しているかを知るために、Pythonでデータを実行する必要があります。

このフィールドに32ビットのfloatをパックした場合、PostgreSQLに変換を実行させる方法はありますか?

私はこれを試しましたが、うまくいきませんでした:

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

整数をbit(32)に正常にキャストしますが、それをfloatに戻すことはありません。

4

2 に答える 2

4

あなたがおそらく探していない答え:そうしないでください。

これは基本違反です。データベース内の値はアトミックである必要があり、他の値に分割できないようにする必要があります。データベースのすべての操作(すべて言及しました)は、個々の値を処理するように調整されています。あなたはここで「フレームワークと戦っている」のです。

引き抜くことができたとしても、パフォーマンスの低下になります。さらに、データベースは報告できません。現在この問題が発生しているだけでなく、何らかの理由でこのデータを読み取ろうとすると、この問題が発生します。

まあ、私は暴言を吐きたくない」とヌフは言った。

于 2011-02-04T02:49:44.020 に答える
1

最も簡単な解決策は、32ビット浮動小数点データ型を使用するように定義された列に32ビット浮動小数点値を格納することです。

CAST()は、a)CAST()がC構造体、エンディアン、またはパディングバイトについて何も知らないため、およびb)ビットデータ型を浮動小数点データにキャストできないため、機能しません。タイプ。(ただし、ビットデータ型を整数にキャストできます。)

于 2011-02-03T21:15:54.557 に答える