sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでuuidのビッグエンドからビッグ整数を作成します

    高速で動的SQLなし

    UUIDの先頭の16桁の16進数を、テキスト表現でビット文字列bit(64) それをbigintにキャストします 。参照:

    便利なことに、右側の余分な16進数は切り捨てられます bit(64)へのキャストで 自動的に-まさに必要なもの。

    Postgresは、入力にさまざまな形式を受け入れます。指定された文字列リテラルはそのうちの1つです:

    14607158d3b14ac0b0d82a9a5a9e8f6e
    

    UUIDのデフォルトのテキスト表現(およびtext データ型uuidのPostgresでの出力 )事前定義された場所にハイフンを追加します:

    14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
    

    マニュアル:

    入力形式が異なる可能性がある場合は、最初にハイフンを削除して確認してください。

    SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
    

    実際の uuidをキャストします uuid::textで入力 。

    db <> fiddle こちら

    Postgresは署名済みを使用することに注意してください 整数なので、bigint 上半分で負の数にオーバーフローします。これは、この目的には関係ありません。

    DB設計

    可能であれば、 bigserial 基になるテーブルに列を追加し、代わりにそれを使用します。



    1. DockerPGMASTERPostgreSQLバージョンアップデート

    2. Postgres SSL SYSCALLエラー:PythonとpsycopgでEOFが検出されました

    3. postgresqlへのdictオブジェクトの追加

    4. SQL ALTER TABLE構文–DBMSによってリストされます